spinss

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

MDeX · si pronuncia "em-dex" (/ˌemˈdɛks/) — la lettera M seguita da "dex", due sillabe.

Un lettore ed editor Markdown multilingue focalizzato su privacy e assistenza AI. Ogni file viene elaborato localmente — nessuna rete, nessun caricamento, nessuna sincronizzazione cloud, nessuna pubblicità, nessuna telemetria per impostazione predefinita; i salvataggi atomici (a prova di crash) evitano la perdita di dati in caso di crash o interruzione di corrente. A partire dalla v2.0, MDeX offre anche la modifica assistita dall'IA opzionale — e può rimanere completamente offline: un modello locale (es. Ollama) non necessita di internet; solo un servizio AI online (OpenAI / DeepSeek / Anthropic / GLM / Gemini / Kimi, ecc.) effettua una richiesta, e solo quando lo configuri e lo attivi.


🌐 Lingue

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


✨ Funzionalità


⌨️ Scorciatoie

Usa su macOS, Ctrl su Windows / Linux.

Scorciatoia Azione
⌘/Ctrl + N Nuovo
⌘/Ctrl + O Apri file
⌘/Ctrl + S Salva
⌘/Ctrl + Shift + S Salva come
⌘/Ctrl + W Chiudi scheda
⌘/Ctrl + Shift + W Chiudi finestra
⌘/Ctrl + F Trova
⌘/Ctrl + H Sostituisci
⌘/Ctrl + B / I / R Grassetto / Corsivo / Codice inline
⌘/Ctrl + K Inserisci collegamento
Tab Rientro di 2 spazi
Alt/Option + trascina Selezione rettangolare (colonna)
Alt/Option + Shift + ←↑↓→ Estendi selezione colonna
Esc Annulla selezione colonna
⌘/Ctrl + =/−/0 Zoom sull'ultimo riquadro cliccato (editor o anteprima): ingrandisci / riduci / ripristina
⌘/Ctrl + J Modifica assistita dall'IA

Con più finestre aperte, le scorciatoie interessano solo la finestra in primo piano. Quando la finestra del visualizzatore di immagini è aperta, ⌘/Ctrl + =/−/0 ingrandisce l'immagine.


📝 Sintassi rapida

Markdown: intestazioni # / ## / ###, grassetto **testo**, corsivo *testo*, barrato ~~testo~~, codice inline `codice`, blocchi di codice (tre backtick, con linguaggio opzionale), citazione > testo, liste - / 1., lista attività - [ ] / - [x], collegamento [testo](url), immagine ![alt](url), divisore ---, tabelle | A | B |.

Matematica: inline $E = mc^2$; blocco $$\int_0^1 x\,dx$$ (può occupare più righe). Usa la sintassi LaTeX, resa da KaTeX; il $ all'interno dei blocchi di codice non è trattato come delimitatore matematico. Supporta align / aligned, matrici, cases e altri ambienti comuni.

Citazioni: scrivi [@key] o [@a; @b] nel testo (compatibile con LaTeX \cite{key}), incorpora la libreria tramite un blocco ```bibtex o carica un .bib con il pulsante "Refs". In fondo viene generato un elenco Riferimenti; [n] nel testo è cliccabile.


📤 Esportazione (Salva come)

Fai clic su "Salva come" e scegli un formato:


🔒 Offline e sicurezza


📦 Installazione

Download precompilati

Scarica l'installatore per la tua piattaforma da una qualunque delle due fonti:

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

Aprire l'app non firmata su macOS (aggirare Gatekeeper)

Questa app non è firmata dallo sviluppatore / notarizzata (gli scenari offline di solito non possono notarizzare online). Su macOS 12+, in particolare macOS 26 (Tahoe), avviarla direttamente dal .dmg — o da una build appena copiata — fallisce con "MDeX.app is damaged and can't be opened." È Gatekeeper, non un danno reale. Risolvi in Terminal:

  1. Prima trascina MDeX.app dal .dmg in /Applications — non eseguirla mai direttamente dal dmg (questo attiva App Translocation e l'attributo com.apple.provenance, la vera causa di "danneggiata" su macOS 26).
  2. Cancella gli attributi e firma nuovamente:
    xattr -cr /Applications/MDeX.app
    codesign --force --deep --sign - /Applications/MDeX.app

    com.apple.provenance è protetto da SIP e non può essere rimosso nemmeno con sudo; rifirmare ripristina la firma in modo che Gatekeeper ne permetta l'esecuzione. spctl segnala ancora rejected per la firma ad hoc — previsto, e non blocca open.

  3. Avvia con open /Applications/MDeX.app (o doppio clic). Il primo avvio potrebbe comunque mostrare un prompt — conferma in Impostazioni di sistema → Privacy e Sicurezza → Apri comunque, o clic destro sull'app → Apri.

🛠️ Compila dai sorgenti

Codice sorgente: https://github.com/fwzheng/mdex. Segui le istruzioni di build nel repository (setup, dipendenze e comandi sono documentati lì).


📁 Struttura del progetto

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

🎨 Personalizzazione

Da modificare Dove
Nome app / Bundle ID src-tauri/tauri.conf.jsonproductName / identifier
Dimensioni finestra tauri.conf.jsonapp.windows[0] (predefinito 1200×750)
Icone sostituisci l'immagine sorgente, poi npm run icon
Colori tema / font variabili CSS :root in cima a app-shell.html
Voci di menu build_menu() in src-tauri/src/lib.rs
Stringhe interfaccia / documento di aiuto I18N / HELP_STRINGS in src/app.js
Versioni delle dipendenze VERSIONS in cima a tools/fetch-vendor.mjs (poi npm run fetch -- --force)

📄 Licenza

Il codice proprio del progetto è open source sotto Apache License 2.0.

Componenti di terze parti: il progetto utilizza alcuni componenti di terze parti (tra cui, ma non solo, marked, KaTeX, highlight.js, DOMPurify, jsPDF, html2canvas-pro, turndown, mermaid, @retorquere/bibtex-parser e Tauri, ecc.); i rispettivi avvisi su copyright e licenza sono dettagliati nei file sorgente. Tali componenti sono distribuiti rispettivamente sotto MIT, BSD-3-Clause, Apache-2.0, MPL-2.0 e altre licenze open source.

Requisiti di distribuzione: secondo la licenza Apache-2.0, ridistribuire questo progetto richiede di mantenere i file LICENSE e NOTICE; se modifichi un file sorgente, devi indicare chiaramente le modifiche nel file corrispondente.


📬 Contatti

Per problemi o suggerimenti: 郑法伟 (Fawei Zheng) fwzheng@bit.edu.cn