spinss

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

MDeX · se prononce « em-dex » (/ˌemˈdɛks/) — la lettre M suivie de « dex », deux syllabes.

Un lecteur et éditeur Markdown multilingue centré sur la confidentialité et l'assistance AI. Chaque fichier est traité localement — par défaut pas de réseau, pas d'envoi, pas de synchronisation cloud, pas de publicité, pas de télémétrie ; les enregistrements atomiques (résistants aux plantages) évitent toute perte de données en cas de plantage ou de coupure de courant. Depuis la v2.0, MDeX propose également une édition assistée par IA en option — et elle peut rester entièrement hors ligne : un modèle local (par ex. Ollama) n'a besoin d'aucune connexion ; seul un service d'AI en ligne (OpenAI / DeepSeek / Anthropic / GLM / Gemini / Kimi, etc.) émet une requête, et uniquement lorsque vous le configurez et le déclenchez.


🌐 Langues

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


✨ Fonctionnalités


📦 Installation

Prebuilt downloads

Download the installer for your platform from either source:

Platforms: macOS (.dmg, arm64), Windows (.exe, NSIS installer), Linux (.deb / .rpm / .AppImage).


macOS

  1. Open the .dmg file, drag MDeX.app into /Applications.

  2. The app is unsigned (not notarized). On macOS 12+ - especially macOS 26 (Tahoe) - launching it fails with "MDeX.app is damaged and can't be opened." This is Gatekeeper, not real damage. Fix (choose one):

    Option A - Terminal (recommended):

    xattr -cr /Applications/MDeX.app
    codesign --force --deep --sign - /Applications/MDeX.app

    com.apple.provenance (new in macOS 26) is SIP-protected and can't be permanently removed; re-signing resets the signature so Gatekeeper lets it run.

    Option B - Finder right-click: In Finder, right-click (or Control-click) MDeX.app -> Open -> confirm "Open" in the dialog. This bypasses the double-click Gatekeeper check.

    Option C - System Settings: Double-click the app (let it be blocked), then go to System Settings -> Privacy & Security, scroll down, click "Open Anyway" next to the "MDeX.app was blocked" message.

  3. Launch with open /Applications/MDeX.app or double-click. The first launch may still prompt once - confirm via System Settings -> Privacy & Security -> Open Anyway, or right-click -> Open.

Note: Every time you update MDeX (reinstall a new version), repeat step 2. The only permanent fix is Apple Notarization ($99/year Developer certificate).


Windows

  1. Download MDeX_x.x.x_win.exe and double-click to run.
  2. SmartScreen may show "Windows protected your PC" (because the app is unsigned). Click "More info" -> "Run anyway".
  3. Follow the NSIS installer wizard to complete installation.
  4. Launch from the Start Menu or desktop shortcut.

If Windows Defender quarantines the file, restore it: Windows Security -> Virus & threat protection -> Protection history -> Allow on device.


Linux

Debian / Ubuntu (.deb):

sudo dpkg -i MDeX_x.x.x_amd64.deb
# If missing dependencies:
sudo apt-get install -f

Then launch from the application menu or run mdex in terminal.

Fedora / RHEL (.rpm):

sudo rpm -i MDeX_x.x.x_x86_64.rpm

AppImage (all distros):

chmod +x MDeX_x.x.x_amd64.AppImage
./MDeX_x.x.x_amd64.AppImage

If AppImage won't launch, install FUSE: sudo apt install libfuse2 (Debian/Ubuntu) or sudo dnf install fuse (Fedora).


⌨️ Raccourcis

Utilisez sur macOS, Ctrl sur Windows / Linux.

Raccourci Action
⌘/Ctrl + N Nouveau
⌘/Ctrl + O Ouvrir un fichier
⌘/Ctrl + S Enregistrer
⌘/Ctrl + Shift + S Enregistrer sous
⌘/Ctrl + W Fermer l'onglet
⌘/Ctrl + Shift + W Fermer la fenêtre
⌘/Ctrl + F Rechercher
⌘/Ctrl + H Remplacer
⌘/Ctrl + B / I / E Gras / Italique / Code en ligne
⌘/Ctrl + K Insérer un lien
Tab Indenter de 2 espaces
Alt/Option + glisser Sélection rectangulaire (en colonne)
Alt/Option + Shift + ←↑↓→ Étendre la sélection en colonne
Esc Annuler la sélection en colonne
⌘/Ctrl + =/−/0 Zoomer le dernier volet cliqué (éditeur ou aperçu) : agrandir / réduire / réinitialiser
⌘/Ctrl + J Édition assistée par IA

Avec plusieurs fenêtres ouvertes, les raccourcis n'affectent que la fenêtre ayant le focus. Lorsque la fenêtre de visualisation d'images est ouverte, ⌘/Ctrl + =/−/0 zoome l'image à la place.


📝 Aide-mémoire

Markdown : titres # / ## / ###, gras **texte**, italique *texte*, barré ~~texte~~, code en ligne `code`, blocs de code (triple accent grave, avec langue facultative), citation > texte, listes - / 1., liste de tâches - [ ] / - [x], lien [texte](url), image ![alt](url), séparateur ---, tableaux | A | B |.

Mathématiques : en ligne $E = mc^2$ ; en bloc $$\int_0^1 x\,dx$$ (peut s'étendre sur plusieurs lignes). Utilise la syntaxe LaTeX, rendue par KaTeX ; le $ à l'intérieur des blocs de code n'est pas traité comme un délimiteur mathématique. Prend en charge align / aligned, les matrices, cases et d'autres environnements courants.

Citations : écrivez [@key] ou [@a; @b] dans le texte (compatible LaTeX via \cite{key}), intégrez la bibliographie via un bloc ```bibtex ou chargez un .bib avec le bouton « Réfs ». Une liste des références est générée à la fin ; le [n] dans le texte est cliquable.


📤 Exportation (Enregistrer sous)

Cliquez sur « Enregistrer sous » et choisissez un format :


🔒 Hors ligne & sécurité


🛠️ Compiler depuis les sources

Code source: https://github.com/fwzheng/mdex. Veuillez suivre les instructions de compilation dans le dépôt (configuration, dépendances et commandes y sont documentées).


📁 Structure du projet

markdown/
├── app-shell.html          # coquille frontend (HTML+CSS) ; la logique de l'application est dans src/app.js
├── src/
│   ├── app.js              # logique de l'application (// @ts-check ; intégrée dans dist par 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        # déclarations de types vendor / Window pour la vérification de types
├── tsconfig.json           # config de vérification de types (tsc --noEmit ; pas de bundler)
├── tools/
│   ├── fetch-vendor.mjs    # une fois : télécharge les dépendances dans vendor/ + verrou d'intégrité (en ligne ici uniquement)
│   ├── build-html.mjs      # intègre vendor + src/app.js + i18n.js + help.js dans dist/index.html (polices KaTeX → base64)
│   └── test-pure.mjs       # tests des fonctions pures du frontend (npm test)
├── dist/index.html         # sortie de build : fichier unique autonome (Tauri frontendDist)
├── vendor/                 # cache de téléchargement + 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     # fenêtre 1200×750, CSP stricte, icônes, association .md, hooks de menu
    ├── capabilities/default.json
    ├── icons/              # jeu d'icônes complet issu de `cargo tauri icon`
    └── src/{main.rs, lib.rs}   # menus + E/S fichiers + routage multi-fenêtres + écriture atomique / propriété des fichiers

🎨 Personnalisation

À modifier Emplacement
Nom de l'application / Bundle ID src-tauri/tauri.conf.jsonproductName / identifier
Taille de la fenêtre tauri.conf.jsonapp.windows[0] (par défaut 1200×750)
Icônes remplacer l'image source, puis npm run icon
Couleurs du thème / polices variables CSS :root en haut de app-shell.html
Éléments de menu build_menu() dans src-tauri/src/lib.rs
Chaînes d'interface / doc d'aide I18N / HELP_STRINGS dans src/app.js
Versions des dépendances VERSIONS en haut de tools/fetch-vendor.mjs (puis npm run fetch -- --force)

📄 Licence

Le code propre de ce projet est open source sous Apache License 2.0.

Composants tiers : le projet utilise certains composants tiers (notamment marked, KaTeX, highlight.js, DOMPurify, jsPDF, html2canvas-pro, turndown, mermaid, @retorquere/bibtex-parser et Tauri, etc.) ; leurs avis de droit d'auteur et de licence sont détaillés dans les fichiers sources respectifs. Ces composants sont respectivement sous licence MIT, BSD-3-Clause, Apache-2.0, MPL-2.0 et autres licences open source.

Exigences de distribution : sous la licence Apache-2.0, toute redistribution de ce projet exige de conserver les fichiers LICENSE et NOTICE ; si vous modifiez un fichier source, vous devez indiquer clairement les changements dans le fichier correspondant.


📬 Contact

Pour tout problème ou suggestion : fw@spinss.cn