Security: - Add path traversal protection (safe_vault_path) for all file operations - Sanitize markdown preview with DOMPurify to prevent XSS - Fix encryption: decrypted content no longer written back to disk - Harden CSP for Tauri v2 production mode Code quality: - Remove dead code (cache.rs, NoteView, unused tabs/activeTab state) - Fix stale closure in debounced save using refs - Fix image paste to use domToMarkdown instead of innerText - Single-pass widget rendering (was 3 sequential innerHTML clobbers) - Move snapshot logic into save callback - Remove no-op updateWikilinks in drag-and-drop - Wire CSS editor to Cmd+U shortcut - Replace hardcoded vault path with portable fallback Performance: - LazyLock static regexes for WIKILINK_RE and TAG_RE - Fix duplicate dirs_config_path, update CSS commands Release: - Bump version to 1.0.0 - Rewrite README with project documentation - Update CHANGELOG with 1.0.0 entry - Update .gitignore for build artifacts and vault data - Update canvas dependency path - Fix canvas API compatibility (onSelectionChange, removed props)
86 lines
2.7 KiB
Markdown
86 lines
2.7 KiB
Markdown
# Graph Notes
|
|
|
|
A local-first, graph-based note-taking app built with Tauri, React, and Rust. Think Obsidian meets Roam — your notes live as plain Markdown files on disk, connected by `[[wikilinks]]` and visualized as an interactive knowledge graph.
|
|
|
|
## Features
|
|
|
|
**Core Editing**
|
|
- Rich contenteditable editor with inline Markdown styling
|
|
- `[[Wikilink]]` autocomplete with note creation on the fly
|
|
- Slash commands, heading folding, split-pane editing
|
|
- Tabbed editor with drag-reorder
|
|
|
|
**Knowledge Graph**
|
|
- Force-directed graph visualization with semantic zoom
|
|
- Graph filtering, focus mode, orphan detection
|
|
- Local backlink graph and analytics dashboard
|
|
|
|
**Organization**
|
|
- Sidebar file tree with drag-and-drop, folders, favorites, pinning
|
|
- Full-text search, command palette (`⌘K`), tags
|
|
- Calendar view, timeline view, kanban board
|
|
|
|
**Advanced**
|
|
- Frontmatter properties panel and database views (table/gallery/list)
|
|
- Dataview queries — inline `TABLE ... SORT ...` blocks
|
|
- Canvas whiteboard for freeform visual thinking
|
|
- Spaced repetition flashcards (SM-2 scheduling)
|
|
- Note encryption (AES-256-GCM with Argon2 key derivation)
|
|
- Git sync (commit/push/pull panel)
|
|
- Version history with inline diff viewer
|
|
|
|
**Customization**
|
|
- 5 built-in themes with live preview
|
|
- Custom CSS snippets editor
|
|
- Configurable keyboard shortcuts
|
|
- Workspace layouts (save/restore window arrangements)
|
|
|
|
**Import / Export**
|
|
- Export vault as ZIP, individual notes as HTML or PDF
|
|
- Import Markdown folders from Obsidian, Notion, etc.
|
|
|
|
## Tech Stack
|
|
|
|
| Layer | Technology |
|
|
|---|---|
|
|
| Desktop shell | [Tauri v2](https://tauri.app) |
|
|
| Frontend | React 19, TypeScript, Vite |
|
|
| Backend | Rust (filesystem, search, encryption, graph) |
|
|
| Styling | Tailwind CSS 4 + custom design tokens |
|
|
| Graph engine | [@blinksgg/canvas](https://github.com/blinksgg), d3-force, graphology |
|
|
|
|
## Development
|
|
|
|
```bash
|
|
# Install dependencies
|
|
npm install
|
|
|
|
# Run in development mode (starts both Vite dev server and Tauri)
|
|
npm run tauri dev
|
|
|
|
# Build for production
|
|
npm run tauri build
|
|
```
|
|
|
|
### Prerequisites
|
|
|
|
- [Node.js](https://nodejs.org) ≥ 18
|
|
- [Rust](https://rustup.rs) toolchain
|
|
- [Tauri v2 prerequisites](https://v2.tauri.app/start/prerequisites/)
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
├── src/ # React frontend
|
|
│ ├── components/ # 33 UI components
|
|
│ ├── lib/ # Commands, frontmatter, wikilinks, note cache
|
|
│ └── index.css # Design system (tokens, component styles)
|
|
├── src-tauri/ # Rust backend
|
|
│ └── src/lib.rs # Tauri commands (notes, graph, search, encryption, git)
|
|
├── vault/ # Default vault directory (gitignored)
|
|
└── package.json
|
|
```
|
|
|
|
## License
|
|
|
|
MIT
|