spinss

MDeX v2.2.1 (macOS · Windows · Linux · Tauri v2)

MDeX · ausgesprochen „em-dex" (/ˌemˈdɛks/) — der Buchstabe M gefolgt von „dex", zwei Silben.

Ein mehrsprachiger Markdown-Reader & Editor mit Fokus auf Datenschutz und AI-Unterstützung. Jede Datei wird lokal verarbeitet — standardmäßig kein Netzwerk, keine Uploads, keine Cloud-Synchronisation, keine Werbung, keine Telemetrie; atomares (absturzsicheres) Speichern verhindert Datenverlust bei Absturz oder Stromausfall. Seit v2.0 bietet MDeX zusätzlich ein optionales, KI-gestütztes Bearbeiten an — und das kann vollständig offline bleiben: ein lokales Modell (z. B. Ollama) benötigt kein Internet; nur ein Online-AI-Dienst (OpenAI / DeepSeek / Anthropic / GLM / Gemini / Kimi usw.) führt eine Anfrage aus, und auch das nur, wenn Sie ihn konfigurieren und aktiv aufrufen.


🌐 Languages

Die Benutzeroberfläche wird in 17 Sprachen ausgeliefert: English, 简体中文, Français, Deutsch, Español, Português, Italiano, Русский, 日本語, 한국어, العربية, हिन्दी, ਪੰਜਾਬੀ, Tiếng Việt, Bahasa Indonesia, اردو, Монгол (Кирилл).


✨ Funktionen


⌨️ Tastenkürzel

Auf macOS , auf Windows / Linux Ctrl verwenden.

Kürzel Aktion
⌘/Ctrl + N Neu
⌘/Ctrl + O Datei öffnen
⌘/Ctrl + S Speichern
⌘/Ctrl + Shift + S Speichern unter
⌘/Ctrl + W Tab schließen
⌘/Ctrl + Shift + W Fenster schließen
⌘/Ctrl + F Suchen
⌘/Ctrl + H Ersetzen
⌘/Ctrl + B / I / R Fett / Kursiv / Inline-Code
⌘/Ctrl + K Link einfügen
Tab 2 Leerzeichen einrücken
Alt/Option + Ziehen Rechteckige (Spalten-) Auswahl
Alt/Option + Shift + ←↑↓→ Spaltenauswahl erweitern
Esc Spaltenauswahl abbrechen
⌘/Ctrl + =/−/0 Den zuletzt geklickten Bereich (Editor oder Vorschau) zoomen: vergrößern / verkleinern / zurücksetzen
⌘/Ctrl + J KI-gestütztes Bearbeiten

Bei mehreren offenen Fenstern wirken sich Tastenkürzel nur auf das fokussierte Fenster aus. Wenn das Bildanzeige-Fenster geöffnet ist, zoomt ⌘/Ctrl + =/−/0 stattdessen das Bild.


📝 Spickzettel

Markdown: Überschriften # / ## / ###, fett **text**, kursiv *text*, durchgestrichen ~~text~~, Inline-Code `code`, Codeblöcke (dreifache Backticks, optional mit Sprache), Zitat > text, Listen - / 1., Aufgabenliste - [ ] / - [x], Link [text](url), Bild ![alt](url), Trennlinie ---, Tabellen | A | B |.

Formelsatz: inline $E = mc^2$; block $$\int_0^1 x\,dx$$ (darf mehrere Zeilen umfassen). Verwendet LaTeX-Syntax, gerendert durch KaTeX; $ innerhalb von Codeblöcken wird nicht als Formel-Trenner behandelt. Unterstützt align / aligned, Matrizen, cases und weitere gängige Umgebungen.

Zitate: im Text [@key] oder [@a; @b] schreiben (LaTeX-kompatibles \cite{key}), die Bibliothek über einen ```bibtex-Block einbetten oder eine .bib per „Refs"-Schaltfläche laden. Am Ende wird ein Literaturverzeichnis erstellt; das textinterne [n] ist klickbar.


📤 Export (Speichern unter)

Auf „Speichern unter" klicken und ein Format wählen:


🔒 Offline & Sicherheit


📦 Installation

Vorgefertigte Downloads

Laden Sie den Installer für Ihre Plattform von einer der beiden Quellen herunter:

macOS (.dmg, universal arm64 + x86_64), Windows (.exe, NSIS installer), Linux (.deb / .rpm / .AppImage).

Öffnen der unsignierten App unter macOS (Gatekeeper umgehen)

Diese App ist nicht entwickler-signiert / notarisiert (Offline-Szenarien können üblicherweise nicht online notarisieren). Unter macOS 12+, insbesondere macOS 26 (Tahoe), schlägt das Starten direkt aus der .dmg — oder einem frisch kopierten Build — mit "MDeX.app is damaged and can't be opened." fehl. Das ist Gatekeeper, kein echter Schaden. Beheben im Terminal:

  1. Zuerst MDeX.app aus der .dmg in /Applications ziehen — niemals direkt aus dem dmg ausführen (das löst App Translocation und das Attribut com.apple.provenance aus, die eigentliche Ursache für „beschädigt" unter macOS 26).
  2. Attribute löschen und neu signieren:
    xattr -cr /Applications/MDeX.app
    codesign --force --deep --sign - /Applications/MDeX.app

    com.apple.provenance ist SIP-geschützt und kann nicht entfernt werden, auch nicht mit sudo; erneutes Signieren setzt die Signatur zurück, sodass Gatekeeper die Ausführung erlaubt. spctl meldet bei Ad-hoc-Signatur weiterhin rejected — erwartet, und es blockiert open nicht.

  3. Starten mit open /Applications/MDeX.app (oder Doppelklick). Der erste Start kann trotzdem einmal nachfragen — bestätigen über Systemeinstellungen → Datenschutz & Sicherheit → Trotzdem öffnen, oder Rechtsklick auf die App → Öffnen.

🛠️ Aus dem Quellcode bauen

Quellcode: https://github.com/fwzheng/mdex. Bitte folgen Sie den Build-Anweisungen im Repository (Setup, Abhängigkeiten und Befehle sind dort dokumentiert).


📁 Projektstruktur

markdown/
├── app-shell.html          # frontend shell (HTML+CSS); app logic lives in src/app.js
├── src/
│   ├── app.js              # application logic (// @ts-check; inlined into dist by build-html.mjs)
│   ├── i18n.js            # 17-language UI strings (pure data; window.I18N, split from app.js)
│   ├── help.js            # help-document data (HELP_STRINGS + SK/sc/CITE_HELP_*, window.HELP_DATA)
│   └── globals.d.ts        # vendor / Window type declarations for type-checking
├── tsconfig.json           # type-check config (tsc --noEmit; no bundler)
├── tools/
│   ├── fetch-vendor.mjs    # one-time: download deps into vendor/ + integrity lock (online only here)
│   ├── build-html.mjs      # inline vendor + src/app.js + i18n.js + help.js into dist/index.html (KaTeX fonts → base64)
│   └── test-pure.mjs       # frontend pure-function tests (npm test)
├── dist/index.html         # build output: self-contained single file (Tauri frontendDist)
├── vendor/                 # download cache + integrity.json (.gitignore)
├── package.json            # @tauri-apps/cli + typescript(dev) + scripts
└── src-tauri/
    ├── Cargo.toml          # tauri 2 + dialog / single-instance + encoding_rs
    ├── build.rs            # tauri_build::build()
    ├── tauri.conf.json     # 1200×750 window, strict CSP, icons, .md association, menu hooks
    ├── capabilities/default.json
    ├── icons/              # full icon set from `cargo tauri icon`
    └── src/{main.rs, lib.rs}   # menus + file IO + multi-window routing + atomic write / file ownership

🎨 Anpassung

Zu ändern Wo
App-Name / Bundle-ID src-tauri/tauri.conf.jsonproductName / identifier
Fenstergröße tauri.conf.jsonapp.windows[0] (Standard 1200×750)
Icons das Quell-Bild ersetzen, dann npm run icon
Design-Farben / Fonts :root-CSS-Variablen oben in app-shell.html
Menüeinträge build_menu() in src-tauri/src/lib.rs
UI-Strings / Hilfedokument I18N / HELP_STRINGS in src/app.js
Abhängigkeits-Versionen VERSIONS oben in tools/fetch-vendor.mjs (dann npm run fetch -- --force)

📄 Lizenz

Der eigene Code dieses Projekts ist Open Source unter Apache License 2.0.

Drittanbieter-Komponenten: Das Projekt verwendet einige Drittanbieter-Komponenten (unter anderem marked, KaTeX, highlight.js, DOMPurify, jsPDF, html2canvas-pro, turndown, mermaid, @retorquere/bibtex-parser und Tauri usw.); deren Urheber- und Lizenzhinweise finden sich in den jeweiligen Quelldateien. Diese Komponenten stehen jeweils unter MIT, BSD-3-Clause, Apache-2.0, MPL-2.0 und weiteren Open-Source-Lizenzen.

Weitergabeanforderungen: Gemäß der Apache-2.0-Lizenz muss bei Weitergabe dieses Projekts die Dateien LICENSE und NOTICE beibehalten werden; wenn Sie eine Quelldatei ändern, müssen Sie die Änderungen in der entsprechenden Datei deutlich kennzeichnen.


📬 Kontakt

Bei Problemen oder Vorschlägen: 郑法伟 (Fawei Zheng) fwzheng@bit.edu.cn