-
Notifications
You must be signed in to change notification settings - Fork 83
Configuration
This page details the configuration variables, local storage structures, container files, and desktop configuration parameters for Markdown Viewer (v3.7.4).
- Client-Side LocalStorage Keys
- CDN Library Integrations
- Nginx Container Configuration
- Docker Compose Service Schema
- NeutralinoJS Desktop Configuration
- Desktop App Package Scripts
- GitHub Actions Workflows
The web application stores user preferences and document states directly in the browser's localStorage.
| LocalStorage Key | Type | Default Value | Description |
|---|---|---|---|
theme |
"light" | "dark"
|
System preference | Renders light or dark colors. |
syncScroll |
"true" | "false"
|
"true" |
Controls editor-preview scroll sync. |
viewMode |
"split" | "editor" | "preview"
|
"split" |
Sets the default editing layout. |
markdown_tabs |
JSON string |
Sample tab schema | Array of document objects (ID, title, content, scroll position, view mode). |
Markdown Viewer loads large dependencies from CDNs. To update a library or pin it to a specific version, modify the script or link tag in the head of index.html:
| Library Name | Version | CDN Service Provider | Core URL |
|---|---|---|---|
| Marked.js | 9.1.6 |
jsDelivr | https://cdn.jsdelivr.net/npm/marked@9.1.6/marked.min.js |
| Highlight.js | 11.9.0 |
cdnjs | https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js |
| DOMPurify | 3.0.9 |
jsDelivr | https://cdn.jsdelivr.net/npm/dompurify@3.0.9/dist/purify.min.js |
| MathJax | 3.2.2 |
jsDelivr | https://cdn.jsdelivr.net/npm/mathjax@3.2.2/es5/tex-mml-chtml.js |
| Mermaid | 11.15.0 |
jsDelivr | https://cdn.jsdelivr.net/npm/mermaid@11.15.0/dist/mermaid.min.js |
| jsPDF | 2.5.1 |
cdnjs | https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js |
| html2canvas | 1.4.1 |
cdnjs | https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js |
| Pako | 2.1.0 |
cdnjs | https://cdnjs.cloudflare.com/ajax/libs/pako/2.1.0/pako.min.js |
| js-yaml | 4.1.0 |
cdnjs | https://cdnjs.cloudflare.com/ajax/libs/js-yaml/4.1.0/js-yaml.min.js |
| FileSaver.js | 2.0.5 |
cdnjs | https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js |
| Bootstrap | 5.3.2 |
jsDelivr | https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.js |
The container image is built using nginx:alpine. Static web files are served from /usr/share/nginx/html/.
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
# SPA Routing Fallback
location / {
try_files $uri $uri/ /index.html;
}
# Static Assets Caching (1 year)
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# Security Headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
}The docker-compose.yml file defines how the container runs locally:
services:
markdown-viewer:
image: ghcr.io/thisis-developer/markdown-viewer:sha-15eafb0
container_name: markdown-viewer
ports:
- "8080:80"
restart: unless-stoppedTo build and run a local image instead of pulling the pre-built container from the registry, replace the image key with build: .:
services:
markdown-viewer:
build: .
container_name: markdown-viewer
ports:
- "8080:80"
restart: unless-stoppedThe desktop application uses the NeutralinoJS framework, which is configured in desktop-app/neutralino.config.json.
{
"applicationId": "js.neutralino.markdownviewer",
"version": "1.2.0",
"defaultMode": "window",
"enableServer": true,
"enableNativeAPI": true,
"tokenSecurity": "one-time",
"logging": {
"enabled": true,
"writeToLogFile": true
},
"nativeAllowList": [
"app.*",
"os.*",
"debug.*",
"filesystem.*"
],
"window": {
"title": "Markdown Viewer",
"width": 1000,
"minWidth": 800,
"height": 700,
"minHeight": 500,
"resizable": true,
"maximize": false,
"center": true
},
"modes": {
"window": {
"index": "/index.html",
"icon": "/resources/assets/icon.jpg"
}
},
"cli": {
"binaryName": "markdown-viewer",
"resourcesPath": "/resources/",
"extensionsPath": "/extensions/",
"clientLibrary": "/resources/js/neutralino.js",
"binaryVersion": "6.5.0",
"clientVersion": "11.7.0"
}
}-
width/height: The default launch window size in pixels ($1000 \times 700$ ). -
minWidth/minHeight: Restricts window scaling below$800 \times 500$ to prevent UI layout issues. -
nativeAllowList: Grants the application permission to access OS and filesystem APIs (e.g.filesystem.*is required for loading and saving local files).
The desktop-app/package.json file contains scripts for development, packaging, and dependency updates:
| Script Name | Command | Description |
|---|---|---|
setup |
node setup-binaries.js |
Downloads Neutralino platform-specific runtimes. |
dev |
npx @neutralinojs/neu run |
Starts the desktop app in hot-reload development mode. |
prepare |
node prepare.js |
Copies core files from the project root into the desktop build directory. |
build |
node build-windows.js |
Compiles a single-file executable for Windows. |
build:portable |
npx @neutralinojs/neu build --release |
Packages the application into zip files for Windows, Linux, and macOS. |
The repository uses two GitHub Actions workflows:
-
Triggers: Pushes to the
mainbranch, or pull requests. -
Registry: GitHub Container Registry (
ghcr.io). -
Target Architectures:
linux/amd64andlinux/arm64(multi-arch build). -
Tags:
latestfor main branch releases, and commit-sha tags for development runs.
-
Triggers: Pushing Git tags that match the pattern
desktop-v*(e.g.desktop-v1.2.0). -
Action: Runs on Node LTS, runs the
setup,prepare, andbuild:portablescripts, and generates checksums. - Release: Automatically creates a draft release on GitHub and uploads the compiled binaries as assets.
Markdown Viewer Repository · Apache-2.0 License
Developed and maintained by ThisIs-Developer
📖 Overview & Reference
🚀 Getting Started & Usage
🐳 Deployment & Wrappers
🛠️ Development & Journey