Skip to content

Configuration

Baivab Sarkar edited this page Jun 10, 2026 · 2 revisions

System & Build Configuration

This page details the configuration variables, local storage structures, container files, and desktop configuration parameters for Markdown Viewer (v3.7.4).


Table of Contents


Client-Side LocalStorage Keys

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).

CDN Library Integrations

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

Nginx Container Configuration

The container image is built using nginx:alpine. Static web files are served from /usr/share/nginx/html/.

Embedded Nginx Configuration (/etc/nginx/conf.d/default.conf)

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;
}

Docker Compose Service Schema

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-stopped

To 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-stopped

NeutralinoJS Desktop Configuration

The 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"
  }
}

Key Window Settings

  • 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).

Desktop App Package Scripts

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.

GitHub Actions Workflows

The repository uses two GitHub Actions workflows:

1. Docker Build & Publish (docker-publish.yml)

  • Triggers: Pushes to the main branch, or pull requests.
  • Registry: GitHub Container Registry (ghcr.io).
  • Target Architectures: linux/amd64 and linux/arm64 (multi-arch build).
  • Tags: latest for main branch releases, and commit-sha tags for development runs.

2. Desktop Compiler (desktop-build.yml)

  • 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, and build:portable scripts, and generates checksums.
  • Release: Automatically creates a draft release on GitHub and uploads the compiled binaries as assets.

Clone this wiki locally