spinss

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

MDeX · đọc là "em-dex" (/ˌemˈdɛks/) — chữ M theo sau là "dex", gồm hai âm tiết.

Một trình đọc & soạn thảo Markdown đa ngôn ngữ tập trung vào quyền riêng tư và hỗ trợ AI. Mọi tệp đều được xử lý cục bộ — mặc định không mạng, không tải lên, không đồng bộ đám mây, không quảng cáo, không đo lường từ xa; lưu nguyên tử (chống sự cố) tránh mất dữ liệu khi sập chương trình hoặc mất điện. Kể từ v2.0, MDeX cũng cung cấp tính năng chỉnh sửa có hỗ trợ AI tùy chọn — và có thể vẫn hoàn toàn ngoại tuyến: một mô hình cục bộ (ví dụ Ollama) không cần internet; chỉ dịch vụ AI trực tuyến (OpenAI / DeepSeek / Anthropic / GLM / Gemini / Kimi v.v.) mới tạo yêu cầu mạng, và chỉ khi bạn cấu hình và kích hoạt nó.


🌐 Ngôn ngữ

Giao diện được cung cấp bằng 17 ngôn ngữ: English, 简体中文, Français, Deutsch, Español, Português, Italiano, Русский, 日本語, 한국어, العربية, हिन्दी, ਪੰਜਾਬੀ, Tiếng Việt, Bahasa Indonesia, اردو, Монгол (Кирилл).


✨ Tính năng


📦 Cài đặt

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


⌨️ Phím tắt

Dùng trên macOS, Ctrl trên Windows / Linux.

Phím tắt Hành động
⌘/Ctrl + N Mới
⌘/Ctrl + O Mở tệp
⌘/Ctrl + S Lưu
⌘/Ctrl + Shift + S Lưu thành
⌘/Ctrl + W Đóng thẻ
⌘/Ctrl + Shift + W Đóng cửa sổ
⌘/Ctrl + F Tìm
⌘/Ctrl + H Thay thế
⌘/Ctrl + B / I / R Đậm / Nghiêng / Mã inline
⌘/Ctrl + K Chèn liên kết
Tab Thụt lề 2 khoảng trắng
Alt/Option + kéo Chọn hình chữ nhật (cột)
Alt/Option + Shift + ←↑↓→ Mở rộng chọn cột
Esc Hủy chọn cột
⌘/Ctrl + =/−/0 Thu phóng khung cuối cùng được nhấp (trình soạn thảo hoặc xem trước): phóng to / thu nhỏ / đặt lại
⌘/Ctrl + J Chỉnh sửa có hỗ trợ của AI

Khi có nhiều cửa sổ đang mở, phím tắt chỉ tác động lên cửa sổ đang được tiêu điểm. Khi cửa sổ trình xem hình ảnh đang mở, ⌘/Ctrl + =/−/0 thu phóng hình ảnh.


📝 Bảng tham chiếu nhanh

Markdown: tiêu đề # / ## / ###, đậm **text**, nghiêng *text*, gạch ngang ~~text~~, mã inline `code`, khối mã (ba dấu backtick, kèm ngôn ngữ tùy chọn), trích dẫn > text, danh sách - / 1., danh sách công việc - [ ] / - [x], liên kết [text](url), hình ảnh ![alt](url), vạch phân cách ---, bảng | A | B |.

Toán học: inline $E = mc^2$; khối $$\int_0^1 x\,dx$$ (có thể trải dài nhiều dòng). Sử dụng cú pháp LaTeX, render bởi KaTeX; $ bên trong khối mã không được xử lý như dấu phân cách toán. Hỗ trợ các môi trường phổ biến như align / aligned, ma trận, cases, v.v.

Trích dẫn: viết [@key] hoặc [@a; @b] trong văn bản (tương thích \cite{key} của LaTeX), nhúng thư viện qua khối ```bibtex hoặc tải tệp .bib bằng nút "Refs". Danh sách Tài liệu tham khảo được tạo ở cuối; [n] trong văn bản có thể nhấp được.


📤 Xuất (Lưu thành)

Nhấp "Lưu thành" và chọn định dạng:


🔒 Ngoại tuyến & bảo mật


🛠️ Build từ mã nguồn

Mã nguồn: https://github.com/fwzheng/mdex. Làm theo hướng dẫn build trong kho mã nguồn (thiết lập, phụ thuộc và lệnh được ghi trong đó).


📁 Cấu trúc dự án

markdown/
├── app-shell.html          # vỏ giao diện (HTML+CSS); logic ứng dụng nằm trong src/app.js
├── src/
│   ├── app.js              # logic ứng dụng (// @ts-check; được nhúng vào dist bởi 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        # khai báo kiểu vendor / Window cho kiểm tra kiểu
├── tsconfig.json           # cấu hình kiểm tra kiểu (tsc --noEmit; không bundler)
├── tools/
│   ├── fetch-vendor.mjs    # một lần: tải deps vào vendor/ + khóa toàn vẹn (chỉ bước này cần mạng)
│   ├── build-html.mjs      # nhúng vendor + src/app.js + i18n.js + help.js vào dist/index.html (font KaTeX → base64)
│   └── test-pure.mjs       # kiểm thử hàm thuần giao diện (npm test)
├── dist/index.html         # đầu ra build: tệp đơn độc lập (Tauri frontendDist)
├── vendor/                 # bộ nhớ đệm tải về + 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     # cửa sổ 1200×750, CSP nghiêm ngặt, biểu tượng, liên kết .md, móc menu
    ├── capabilities/default.json
    ├── icons/              # bộ biểu tượng đầy đủ từ `cargo tauri icon`
    └── src/{main.rs, lib.rs}   # menu + IO tệp + định tuyến đa cửa sổ + ghi nguyên tử / sở hữu tệp

🎨 Tùy biến

Để thay đổi Vị trí
Tên ứng dụng / Bundle ID src-tauri/tauri.conf.jsonproductName / identifier
Kích thước cửa sổ tauri.conf.jsonapp.windows[0] (mặc định 1200×750)
Biểu tượng thay ảnh nguồn, rồi npm run icon
Màu giao diện / font biến CSS :root ở đầu app-shell.html
Mục menu build_menu() trong src-tauri/src/lib.rs
Chuỗi UI / tài liệu trợ giúp I18N / HELP_STRINGS trong src/app.js
Phiên bản dependency VERSIONS ở đầu tools/fetch-vendor.mjs (rồi npm run fetch -- --force)

📄 Giấy phép

Mã nguồn riêng của dự án này là mã nguồn mở theo Apache License 2.0.

Thành phần bên thứ ba: dự án sử dụng một số thành phần bên thứ ba (bao gồm nhưng không giới hạn marked, KaTeX, highlight.js, DOMPurify, jsPDF, html2canvas-pro, turndown, mermaid, @retorquere/bibtex-parser và Tauri, v.v.); thông báo bản quyền và giấy phép chi tiết nằm trong các tệp nguồn tương ứng. Các thành phần này tương ứng dưới các giấy phép MIT, BSD-3-Clause, Apache-2.0, MPL-2.0 và các giấy phép nguồn mở khác.

Yêu cầu phân phối: theo giấy phép Apache-2.0, khi phân phối lại dự án này phải giữ lại các tệp LICENSE và NOTICE; nếu bạn sửa đổi tệp nguồn, phải ghi rõ thay đổi trong tệp tương ứng.


📬 Liên hệ

Về vấn đề hoặc góp ý: fw@spinss.cn