spinss

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

MDeX · pronuncia-se "em-dex" (/ˌemˈdɛks/) — a letra M seguida de "dex", duas sílabas.

Um leitor e editor Markdown multilíngue focado em privacidade e assistência de AI. Cada arquivo é processado localmente — sem rede, sem uploads, sem sincronização na nuvem, sem anúncios, sem telemetria por padrão; as gravações atómicas (à prova de falhas) evitam perda de dados em caso de falha ou corte de energia. A partir da v2.0, o MDeX também oferece edição auxiliada por IA opcional — e pode continuar totalmente offline: um modelo local (ex.: Ollama) não exige internet; apenas um serviço de AI online (OpenAI / DeepSeek / Anthropic / GLM / Gemini / Kimi, etc.) faz um pedido, e somente quando o configura e o aciona.


🌐 Idiomas

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


✨ Recursos


📦 Instalação

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


⌨️ Atalhos

Use no macOS, Ctrl no Windows / Linux.

Atalho Ação
⌘/Ctrl + N Novo
⌘/Ctrl + O Abrir arquivo
⌘/Ctrl + S Salvar
⌘/Ctrl + Shift + S Salvar como
⌘/Ctrl + W Fechar aba
⌘/Ctrl + Shift + W Fechar janela
⌘/Ctrl + F Localizar
⌘/Ctrl + H Substituir
⌘/Ctrl + B / I / R Negrito / Itálico / Código em linha
⌘/Ctrl + K Inserir link
Tab Recuar 2 espaços
Alt/Option + arrastar Seleção retangular (coluna)
Alt/Option + Shift + ←↑↓→ Estender seleção em coluna
Esc Cancelar seleção em coluna
⌘/Ctrl + =/−/0 Zoom no último painel clicado (editor ou pré-visualização): aumentar / diminuir / redefinir
⌘/Ctrl + J Edição auxiliada por IA

Com várias janelas abertas, os atalhos afetam apenas a janela em foco. Quando a janela do visualizador de imagens está aberta, ⌘/Ctrl + =/−/0 amplia a imagem em vez disso.


📝 Guia rápido

Markdown: títulos # / ## / ###, negrito **texto**, itálico *texto*, tachado ~~texto~~, código em linha `código`, blocos de código (três crases, com linguagem opcional), citação > texto, listas - / 1., lista de tarefas - [ ] / - [x], link [texto](url), imagem ![alt](url), divisor ---, tabelas | A | B |.

Matemática: em linha $E = mc^2$; em bloco $$\int_0^1 x\,dx$$ (pode ocupar várias linhas). Usa sintaxe LaTeX, renderizada pelo KaTeX; o $ dentro de blocos de código não é tratado como delimitador matemático. Suporta align / aligned, matrizes, cases e outros ambientes comuns.

Citações: escreva [@key] ou [@a; @b] no texto (compatível com LaTeX via \cite{key}), embuta a biblioteca por meio de um bloco ```bibtex ou carregue um .bib com o botão "Refs". Uma lista de Referências é gerada ao final; [n] no texto é clicável.


📤 Exportação (Salvar como)

Clique em "Salvar como" e escolha um formato:


🔒 Offline e segurança


🛠️ Compilar a partir do código-fonte

Código-fonte: https://github.com/fwzheng/mdex. Siga as instruções de build no repositório (setup, dependências e comandos estão documentados lá).


📁 Estrutura do projeto

markdown/
├── app-shell.html          # shell do frontend (HTML+CSS); a lógica do app está em src/app.js
├── src/
│   ├── app.js              # lógica da aplicação (// @ts-check; embutida em dist pelo 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        # declarações de tipos vendor / Window para verificação de tipos
├── tsconfig.json           # config de verificação de tipos (tsc --noEmit; sem bundler)
├── tools/
│   ├── fetch-vendor.mjs    # uma vez: baixa deps para vendor/ + bloqueio de integridade (online apenas aqui)
│   ├── build-html.mjs      # embute vendor + src/app.js + i18n.js + help.js em dist/index.html (fontes KaTeX → base64)
│   └── test-pure.mjs       # testes de funções puras do frontend (npm test)
├── dist/index.html         # saída do build: arquivo único autossuficiente (Tauri frontendDist)
├── vendor/                 # cache de downloads + 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     # janela 1200×750, CSP estrito, ícones, associação .md, hooks de menu
    ├── capabilities/default.json
    ├── icons/              # conjunto completo de ícones de `cargo tauri icon`
    └── src/{main.rs, lib.rs}   # menus + IO de arquivo + roteamento multi-janela + escrita atômica / propriedade de arquivos

🎨 Personalização

Para alterar Onde
Nome do app / Bundle ID src-tauri/tauri.conf.jsonproductName / identifier
Tamanho da janela tauri.conf.jsonapp.windows[0] (padrão 1200×750)
Ícones troque a imagem de origem, depois npm run icon
Cores / fontes do tema variáveis CSS :root no topo de app-shell.html
Itens de menu build_menu() em src-tauri/src/lib.rs
Textos da UI / documento de ajuda I18N / HELP_STRINGS em src/app.js
Versões de dependências VERSIONS no topo de tools/fetch-vendor.mjs (depois npm run fetch -- --force)

📄 Licença

O código próprio deste projeto é de código aberto sob a Apache License 2.0.

Componentes de terceiros: o projeto utiliza alguns componentes de terceiros (incluindo, mas não se limitando a marked, KaTeX, highlight.js, DOMPurify, jsPDF, html2canvas-pro, turndown, mermaid, @retorquere/bibtex-parser e Tauri, etc.); seus avisos de direitos autorais e licença estão detalhados nos respectivos arquivos-fonte. Esses componentes são distribuídos sob as licenças MIT, BSD-3-Clause, Apache-2.0, MPL-2.0 e outras de código aberto.

Requisitos de distribuição: segundo a licença Apache-2.0, redistribuir este projeto exige manter os arquivos LICENSE e NOTICE; se você modificar algum arquivo-fonte, deve indicar claramente as alterações no arquivo correspondente.


📬 Contato

Para problemas ou sugestões: fw@spinss.cn