English | 中文
A cross-platform desktop note-taking application built with Tauri, supporting rich text editing and Markdown mode.
- Rich Text Editing - WYSIWYG editor powered by TipTap with various formatting options
- Markdown Mode - Switch to Markdown editing with split-screen preview
- Find & Replace - Global find and replace within the editor
- Math Formulas - KaTeX math formula rendering
- Code Highlighting - Syntax highlighting for code blocks via lowlight
- Code Block Language Selector - Quick language selection dropdown for syntax highlighting (25+ languages)
- Table of Contents - Auto-generated document outline
- Drag & Drop - Drag handles for reordering content blocks
- Smart Paste - Context-aware paste formatting
- Lazy Image Loading - Deferred image loading for performance
- Print Support - Print notes directly via system print dialog
- Editor Font Size - Configurable editor font size (12-20px) in settings
- Notebook Management - Organize notes by notebooks with drag-and-drop sorting
- Tag System - Flexible tag management with multi-tag filtering
- Note Pinning - Pin important notes to top
- Version History - Automatic note history with source tracking (user/sync/import)
- Full-text Search - FTS5 full-text search with Chinese substring matching
- Note Templates - Template management for quick note creation
- Bidirectional Links - Cross-reference notes with linked notes panel
- Recycle Bin - Soft delete with recovery support
- Command Palette - Ctrl+P for quick operations
- Custom Shortcuts - Configurable keyboard shortcuts
- Note Sorting - Sort notes by title, creation time, or update time (ascending/descending)
- Batch Operations - Multi-select notes for batch move, delete operations
- Note Starring - Star/favorite notes for quick identification
- File Attachments - Attach files (PDF, documents, etc.) to notes with local storage
- Notebook Hierarchy - Nested notebook tree with expand/collapse
- Profile Editing - Edit existing database profile configurations
- Todos - Create, edit, complete and delete todos with priority (None/Low/Medium/High) and due dates
- Lists - Group todos into lists, including unassigned todos
- Reminders & Recurrence - Set reminder times and repeat daily/weekly/monthly/yearly with an optional end date
- Subtasks - Break a todo into subtasks
- Links & Tags - Link todos to notes and attach tags
- View Filters - All/Today/Planned/Overdue views plus a quadrant view by importance and urgency
- Batch Operations - Batch complete, move to list and delete
- Statistics & Pomodoro - Completion-rate statistics overview and a built-in 25-minute Pomodoro timer
- Todo Trash - Soft delete with restore and permanent delete
- Content Encryption - AES-256-GCM transparent note content encryption, keys stored in OS keychain
- Note Encryption - Per-note password protection
- Lock Screen - Password protection (Argon2id), timeout lock, minimize lock
- Keychain Integration - Passwords and keys stored in OS keychain (macOS Keychain / Windows Credential Store / Linux Secret Service)
- Multi-Profile Management - Multiple backend profiles with startup selection or auto-connect; switch libraries anytime via Help menu or Ctrl/Cmd+Shift+P
- Setup Wizard - First-launch guided configuration for SQLite/MySQL/PostgreSQL/Git Repository/ENote Server
- Git Repository Backend - Notes and todos stored as plain Markdown+YAML files in a Git repository — readable by any editor, with automatic commits forming a complete version history you can inspect with any Git tool
- Git Remote Sync - Optionally attach a remote (GitHub/GitLab/Gitee/self-hosted): clones on first connect, pulls (rebase) and pushes automatically on every save; HTTPS personal access token and SSH key auth supported; offline-first — sync failures never block local work and retry on the next commit
- ENote Server Backend - Connect to remote ENote-compatible API servers with multiple auth methods (Bearer/Basic/JWT/Custom Header/OAuth 2.0)
- SSL/TLS Authentication - MySQL/PostgreSQL support certificate-based login
- Data Backup - SQL/Excel/CSV export/import (database backend) with scheduled auto-backup; Git repository backend supports full-repo zip backup and restore
- Cloud Backup - Upload backups to cloud storage (Alibaba Cloud OSS, AWS S3, Tencent Cloud COS, MinIO, WebDAV) with automatic sync and retention management; available for both database and Git backends
- Import/Export - Import from Evernote, Youdao Notes, Notion; Export to PDF/HTML/Word/Markdown/JSON/XML
- PDF Export - Export notes as PDF via print dialog
- HTML Export - Export as standalone HTML files with embedded styles and dark mode support
- Data Sync - Cross-profile data synchronization with sync logs and detailed tracking (database backend)
- Local Image Storage - Images saved locally, served via Tauri asset protocol
- MCP Integration - AI tools operate notes via MCP protocol with three-layer access control (note/tag/notebook level)
- Dark Mode - Light/Dark/System theme switching
- Eye Care Screen Saver - Timed forced breaks with configurable idle trigger and duration, customizable background and text, tray countdown and quick controls
- Multilingual - Simplified Chinese and English
- System Tray - Minimize to tray
- Multi-Window - Open notes in separate windows
- Auto Update - Automatic update check on startup with one-click install via GitHub Releases
- Help System - Built-in searchable help documentation
- Application Logs - Audit logging with sensitive data sanitization
- Cross-platform - Supports Windows, macOS, and Linux
- Vue 3 - Using Composition API with
<script setup>syntax - TypeScript - Type-safe development experience
- Vite - Fast development build tool
- Tailwind CSS v4 - Utility-first CSS framework
- TipTap - Extensible rich text editor (8 custom extensions)
- Pinia - State management
- Vue I18n - Internationalization
- Lucide Icons - Icon library
- Rust (Edition 2024) - High-performance systems programming language
- Tauri 2.x - Lightweight cross-platform desktop application framework
- SeaORM - Async ORM framework
- SQLite/MySQL/PostgreSQL - Multiple database support
- reqwest - HTTP client for ENote Server backend
- System Git CLI - Version control for the Git repository backend (requires git installed)
- aes-gcm - AES-256-GCM encryption
- argon2 - Password hashing
- keyring - OS keychain integration
- opendal - Unified cloud storage abstraction (S3/OSS/COS/WebDAV)
- rmcp - MCP protocol server
enote/
├── src/ # Frontend source code
│ ├── api/ # Tauri IPC call wrappers
│ ├── components/ # Vue components (70+)
│ │ ├── toolbar/ # Editor toolbar components (17)
│ │ ├── ui/ # Common UI component library (16)
│ │ ├── NoteEditor.vue # Editor container
│ │ ├── TipTapEditor.vue # TipTap rich text editor
│ │ ├── MarkdownSplitEditor.vue # Markdown split-screen editor
│ │ ├── AppSidebar.vue # Sidebar (notebooks/tags)
│ │ ├── NoteList.vue # Note list
│ │ ├── LockScreen.vue # Lock screen
│ │ ├── SetupWizard.vue # Setup wizard
│ │ ├── ProfileSelector.vue # Profile selector
│ │ ├── CommandPalette.vue # Command palette
│ │ ├── HelpManual.vue # Help documentation
│ │ ├── LogDialog.vue # Application logs
│ │ └── UpdateChecker.vue # Auto update checker
│ ├── composables/ # Composable functions (12)
│ ├── extensions/ # Custom TipTap extensions (8)
│ ├── utils/ # Utility functions
│ │ └── import/ # Import parsers (Evernote/Youdao/Notion)
│ ├── stores/ # Pinia state management
│ ├── i18n/ # Internationalization (zh-CN/en-US)
│ ├── types/ # TypeScript type definitions
│ └── App.vue # Application root component
├── src-tauri/ # Tauri backend source code
│ └── src/
│ ├── command.rs # IPC command handlers
│ ├── service/ # Business logic layer (20 services)
│ ├── entity/ # Database entities (13)
│ ├── migration/ # Database migrations (25)
│ ├── config.rs # Configuration management
│ ├── error.rs # Error handling
│ ├── model.rs # Data transfer objects
│ └── i18n.rs # Backend internationalization
├── crates/
│ └── enote-mcp/ # MCP server (standalone binary)
└── doc/ # Documentation and config examples
The project includes a custom UI component library:
- BaseButton - Button component with multiple types and states
- BaseInput - Input field component
- BaseSelect - Dropdown select component
- BaseDialog - Dialog/modal component
- BaseDropdown - Dropdown menu component
- BasePagination - Pagination component
- BaseTooltip - Tooltip component
- BaseSkeleton - Skeleton loading component
- ColorPicker - Color picker
- IconPicker - Icon picker
- StylePicker - Style picker
- ConfirmDialog - Confirmation dialog
- ShortcutRecorder - Keyboard shortcut recorder
- Notification - Toast notifications
- Node.js 18+
- pnpm 10+
- Rust 1.85+ (Edition 2024)
- Tauri CLI
# Install frontend dependencies
pnpm install
# Install Tauri CLI (if not installed)
cargo install tauri-cli# Start development server (frontend + Tauri)
pnpm tauri dev
# Start frontend development server only (port 1420)
pnpm dev# Build production version
pnpm build
# Generate app icons
pnpm tauri:icon# Format code
pnpm format
# ESLint check
pnpm lint
# ESLint auto-fix
pnpm lint:fix
# Run tests
pnpm testSupports SQLite (default), MySQL, PostgreSQL, Git Repository, and ENote Server.
On first launch, the Setup Wizard guides you through backend configuration:
- SQLite - Local file database, ready to use out of the box
- MySQL - Supports password login and SSL certificate authentication
- PostgreSQL - Supports password login and SSL certificate authentication
- Git Repository - Notes stored as Markdown files in a Git repository with automatic version control. The directory is created and initialized automatically if it does not exist (requires git installed). Optionally configure a remote URL to sync with GitHub/GitLab/Gitee or a self-hosted server — the app clones on first connect, then pulls (rebase) and pushes automatically on every save. Supports HTTPS (personal access token) and SSH (system keys) authentication, with credentials stored in the OS keychain
- ENote Server - Connect to a remote ENote-compatible API server with multiple authentication methods:
- Bearer Token, Basic Auth, JWT (auto-refresh), Custom Header, OAuth 2.0
Configurations are managed as Profiles, supporting multiple backend setups that can be switched at any time. Database passwords, encryption keys, and server authentication credentials are securely stored in the OS keychain (macOS Keychain / Windows Credential Store / Linux Secret Service), never in configuration files.
You can also use a traditional configuration file via command-line:
enote --config /path/to/application.ymlSee doc/application.yml, doc/application-mysql.yml, doc/application-posgres.yml for examples.
ENote includes a built-in MCP (Model Context Protocol) server, allowing AI tools to operate on notes through a standardized protocol.
| Layer | Scope | Description |
|---|---|---|
| Note level | Per note | Highest priority |
| Tag level | By tag | Strictest wins when multiple tags |
| Notebook level | By notebook | Lowest priority |
- Inherit - Inherit from parent level (default)
- ReadWrite - AI can read and write
- ReadOnly - AI can only read
- Deny - AI access completely blocked
- Encrypted notes always force-deny AI access
- Fork this repository
- Create a feature branch (
git checkout -b feature/your-feature) - Commit your changes (
git commit -m 'Add some feature') - Push to the branch (
git push origin feature/your-feature) - Create a Pull Request
MIT License