opqnext/moji-docs
MojiDocs 是一款跨平台的 Markdown Wiki 桌面应用,基于 Electron + Vue 3 + SQLite 构建。
项目介绍Project Overview
MojiDocs 是一款基于 Electron + Vue 3 + SQLite 的离线优先 Markdown 知识库桌面应用。核心能力:以 .md 文件为唯一数据源,SQLite FTS5 提供全文搜索,Git 实现版本管理与同步,兼容 Obsidian、Hugo。适用于本地知识管理与跨平台写作。需注意:macOS 未签名安装时需通过终端执行 xattr -cr 或右键打开绕过 Gatekeeper。
MojiDocs is an offline-first Markdown wiki desktop app built with Electron, Vue 3, and SQLite. Its core capability treats .md files as the single source of truth, while SQLite FTS5 powers full-text search and Git handles versioning and scheduled sync with conflict detection. It is suited for personal knowledge management across macOS, Windows, and Linux. Caveat: the macOS build is unsigned, so users must run xattr -cr or right-click Open to bypass Gatekeeper warnings.
请帮我了解并安装插件:【moji-docs】【https://github.com/opqnext/moji-docs】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add github:opqnext/moji-docs
把 opqnext/moji-docs 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
MojiDocs
Offline-first Markdown Wiki Desktop App
Git tracks files, SQLite indexes them — your data stays yours
Features · Download · Quick Start · Tech Stack · Development · License
Overview
MojiDocs is a cross-platform Markdown Wiki desktop app built with Electron + Vue 3 + SQLite.
Core philosophy: .md files are the single source of truth, tracked and synced via Git. SQLite serves purely as a full-text search index and can be rebuilt from files at any time. Your notes are stored as standard Markdown in the local filesystem, fully compatible with Obsidian, Hugo, Hexo, and more.
Features
Document Management
- Create, edit, delete, move, and pin documents/directories
- Tree-structured browsing (Recent / All / Tree views)
- Drag-and-drop
.mdfile import
Markdown Editor
- Dual-pane live preview / single-pane / preview-only mode
- Toolbar: bold, italic, heading, quote, list, link, image, code block, table
- Paste-to-upload images (screenshot → Ctrl+V → auto-saved to
assets/) - Multiple Markdown rendering themes (GitHub, Juejin, etc.)
Search & Versioning
- SQLite FTS5 full-text search (keyword highlighting + context snippets)
- Git version history (browse, preview, rollback)
Sync & Export
- Scheduled Git sync (pull + push with conflict detection)
- PDF export / print
- Offline-first — all operations complete locally
Customization
- Custom theme colors (color picker + hex input)
- Dashboard (article/directory/version stats)
- Trash (soft delete + cascading restore)
Download
Go to GitHub Releases to download the installer for your platform:
| Platform | Format |
|---|---|
| macOS | .dmg |
| Windows | .exe |
| Linux | .AppImage / .deb |
macOS Installation Note
Since the app is not signed with an Apple Developer certificate, macOS may show "damaged file" or "unverified developer" warnings. Fix with either method:
Method 1: Run in Terminal (recommended)
xattr -cr /Applications/MojiDocs.app
Method 2: Right-click the app icon → select "Open" → click "Open" in the dialog
This is a macOS Gatekeeper restriction, not an issue with the app itself. Required once after each install or update.
Quick Start
Prerequisites
- Node.js ≥ 18
- npm ≥ 9
Development
git clone https://github.com/opqnext/moji-docs.git
cd moji-docs
npm install
npm run dev
Build
npm run build # Compile
npm run package # Package as installer (output in release/)
Tech Stack
| Technology | Version | Purpose |
|---|---|---|
| Electron | 33 | Cross-platform desktop framework |
| Vue 3 | 3.5 | Frontend UI framework |
| electron-vite | 2.3 | Build tool |
| better-sqlite3 | 11 | SQLite database (index + FTS5 full-text search) |
| marked | 17 | Markdown rendering |
| highlight.js | 11 | Code syntax highlighting |
| simple-git | 3.27 | Git sync |
| chokidar | 3.6 | File system watching |
| electron-builder | 25 | App packaging |
Project Structure
moji-docs/
├── main/ # Main process (Node.js)
│ ├── index.ts # Entry: window, protocols, IPC
│ ├── database.ts # SQLite initialization
│ ├── indexer.ts # File → index builder
│ ├── git-sync.ts # Git sync scheduler
│ ├── file-watcher.ts # File system watcher
│ └── ipc/ # IPC channels
├── preload/ # Preload scripts
├── renderer/ # Renderer process (Vue 3)
│ └── src/
│ ├── views/ # Page components
│ └── components/ # Shared components
├── assets/ # App icons
├── scripts/ # Utility scripts
└── doc/ # Project documentation
Development Guide
Hot Reload
| Change | Restart Required? |
|---|---|
renderer/ Vue/CSS files |
No (HMR hot reload) |
main/ main process code |
Yes, re-run npm run dev |
Debugging
- Renderer process: DevTools opens automatically in dev mode, or press
Cmd+Option+I - Main process:
console.log()outputs to terminal, or use--inspect=9229with Chrome DevTools
Releasing
- Update
versioninpackage.json npm run build && npm run package- Create a Release on GitHub Releases (tag:
v1.x.x) - Upload installers
Data Storage
User data is stored in a user-selected local directory:
~/MojiDocs/ # Notes root (= Git repo root)
├── .moji/ # App data (not synced)
│ ├── index.db # SQLite index (rebuildable)
│ └── config.json # Local settings
├── assets/ # Image assets (Git tracked)
├── Getting Started.md # Note files
└── Projects/ # Directories
└── Project A.md
- Uninstalling or reinstalling the app does not affect user data
.moji/is automatically excluded via.gitignoreand won't sync to remote
Star History
License
MIT License © 2018-2025 opqnext
nexu-io/open-design
ruvnet/ruflo
amruthpillai/reactive-resume
esengine/DeepSeek-Reasonix
volcengine/OpenViking
Molunerfinn/PicGo
titanwings/distilly
titanwings/colleague-skill