spinss

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

MDeX · diucapkan "em-dex" (/ˌemˈdɛks/) — huruf M diikuti "dex", dua suku kata.

Pembaca & editor Markdown multibahasa yang berfokus pada privasi dan bantuan AI. Setiap file diproses secara lokal — secara default tanpa jaringan, tanpa unggahan, tanpa sinkronisasi cloud, tanpa iklan, tanpa telemetri; penyimpanan atomik (tahan crash) mencegah kehilangan data saat crash atau mati listrik. Sejak v2.0, MDeX juga menawarkan penyuntingan berbantuan AI opsional — dan dapat tetap sepenuhnya offline: model lokal (mis., Ollama) tidak memerlukan internet; hanya layanan AI daring (OpenAI / DeepSeek / Anthropic / GLM / Gemini / Kimi dll.) yang membuat permintaan, dan hanya saat Anda mengonfigurasinya serta memicunya.


🌐 Bahasa

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


✨ Fitur


⌨️ Pintasan

Gunakan di macOS, Ctrl di Windows / Linux.

Pintasan Aksi
⌘/Ctrl + N Baru
⌘/Ctrl + O Buka file
⌘/Ctrl + S Simpan
⌘/Ctrl + Shift + S Simpan Sebagai
⌘/Ctrl + W Tutup tab
⌘/Ctrl + Shift + W Tutup jendela
⌘/Ctrl + F Cari
⌘/Ctrl + H Ganti
⌘/Ctrl + B / I / E Tebal / Miring / Kode inline
⌘/Ctrl + K Sisipkan tautan
Tab Indentasi 2 spasi
Alt/Option + drag Pilihan persegi (kolom)
Alt/Option + Shift + ←↑↓→ Perluas pilihan kolom
Esc Batalkan pilihan kolom
⌘/Ctrl + =/−/0 Zoom panel terakhir yang diklik (editor atau pratinjau): perbesar / perkecil / reset
⌘/Ctrl + J Penyuntingan berbantuan AI

Dengan beberapa jendela terbuka, pintasan hanya memengaruhi jendela yang difokuskan. Ketika jendela penampil gambar terbuka, ⌘/Ctrl + =/−/0 memperbesar gambar.


📝 Lembar contekan

Markdown: heading # / ## / ###, tebal **text**, miring *text*, coret ~~text~~, kode inline `code`, blok kode (triple backticks, dengan bahasa opsional), kutipan > text, daftar - / 1., daftar tugas - [ ] / - [x], tautan [text](url), gambar ![alt](url), pembatas ---, tabel | A | B |.

Matematika: inline $E = mc^2$; blok $$\int_0^1 x\,dx$$ (dapat mencakup beberapa baris). Menggunakan sintaks LaTeX, dirender oleh KaTeX; $ di dalam blok kode tidak diperlakukan sebagai pembatas matematika. Mendukung align / aligned, matriks, cases dan environment umum lainnya.

Kutipan: tulis [@key] atau [@a; @b] dalam teks (kompatibel LaTeX \cite{key}), sematkan pustaka melalui blok ```bibtex atau muat .bib dengan tombol "Refs". Daftar Referensi dibuat di akhir; [n] dalam teks dapat diklik.


📤 Ekspor (Simpan Sebagai)

Klik "Save As" dan pilih format:


🔒 Luring & keamanan


📦 Instalasi

Unduhan prebuilt

Unduh installer untuk platform Anda dari salah satu sumber:

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

Membuka aplikasi yang tidak ditandatangani di macOS (lewati Gatekeeper)

Aplikasi ini tidak ditandatangani pengembang / dinotarisasi (skenario luring biasanya tidak dapat menotarisasi secara online). Di macOS 12+, terutama macOS 26 (Tahoe), meluncurkannya langsung dari .dmg — atau build yang baru disalin — gagal dengan "MDeX.app is damaged and can't be opened." Itu Gatekeeper, bukan kerusakan nyata. Perbaiki di Terminal:

  1. Seret MDeX.app dari .dmg ke /Applications terlebih dahulu — jangan pernah menjalankannya langsung dari dmg (itu memicu App Translocation dan atribut com.apple.provenance, penyebab nyata "damaged" di macOS 26).
  2. Hapus atribut dan tanda tangani ulang:
    xattr -cr /Applications/MDeX.app
    codesign --force --deep --sign - /Applications/MDeX.app

    com.apple.provenance dilindungi SIP dan tidak dapat dihapus bahkan dengan sudo; penandatanganan ulang mengatur ulang tanda tangan sehingga Gatekeeper membiarkannya berjalan. spctl masih melaporkan rejected untuk penandatanganan ad-hoc — diharapkan, dan itu tidak memblokir open.

  3. Luncurkan dengan open /Applications/MDeX.app (atau klik ganda). Peluncuran pertama mungkin masih meminta sekali — konfirmasi melalui System Settings → Privacy & Security → Open Anyway, atau klik kanan aplikasi → Open.

🛠️ Build dari sumber

Kode sumber: https://github.com/fwzheng/mdex. Ikuti instruksi build di repositori (setup, dependensi, dan perintah didokumentasikan di sana).


📁 Struktur proyek

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

🎨 Kustomisasi

Untuk mengubah Di mana
Nama aplikasi / Bundle ID src-tauri/tauri.conf.jsonproductName / identifier
Ukuran jendela tauri.conf.jsonapp.windows[0] (default 1200×750)
Ikon ganti gambar sumber, lalu npm run icon
Warna tema / font variabel CSS :root di bagian atas app-shell.html
Item menu build_menu() di src-tauri/src/lib.rs
String UI / dokumen bantuan I18N / HELP_STRINGS di src/app.js
Versi dependensi VERSIONS di bagian atas tools/fetch-vendor.mjs (lalu npm run fetch -- --force)

📄 Lisensi

Kode milik proyek ini bersifat open-source di bawah Apache License 2.0.

Komponen pihak ketiga: proyek ini menggunakan sejumlah komponen pihak ketiga (termasuk namun tidak terbatas pada marked, KaTeX, highlight.js, DOMPurify, jsPDF, html2canvas-pro, turndown, mermaid, @retorquere/bibtex-parser, dan Tauri, dll.); peringatan hak cipta dan lisensi masing-masing dijabarkan dalam berkas sumber terkait. Komponen-komponen tersebut masing-masing berlisensi MIT, BSD-3-Clause, Apache-2.0, MPL-2.0, dan lisensi sumber terbuka lainnya.

Persyaratan distribusi: berdasarkan lisensi Apache-2.0, mendistribusikan ulang proyek ini wajib menyertakan berkas LICENSE dan NOTICE; jika Anda memodifikasi berkas sumber, Anda harus menandai perubahan secara jelas pada berkas yang bersangkutan.


📬 Kontak

Untuk masalah atau saran: 郑法伟 (Fawei Zheng) fwzheng@bit.edu.cn