No description
Find a file
enzotar d639d40612 harden: atomic writes, path validation, and save pipeline integrity
Backend (lib.rs):
- Add atomic_write/atomic_write_bytes helpers (write→fsync→rename→fsync parent)
- Apply safe_vault_path() to all 20 file-access commands (was 3)
- Apply safe_name() to workspace/canvas/attachment filename params
- Fix 2 silent error swallowing sites (let _ = fs::write)
- Fix git_status/git_commit/git_init error handling (check exit codes)
- Migrate all Regex::new() to LazyLock statics (10 total)
- Use ~tmp suffix for atomic writes (not extension replacement)
- Replace 2 unwrap() panic sites with unwrap_or_default()
- Skip ~tmp files in export_vault_zip

Frontend (Editor.tsx):
- Fix critical note-switch race: capture note path at call time,
  not when debounced timer fires (prevented old content → new note)
- Clear pending save timeout on note switch (defense-in-depth)
- Fix handleSlashSelect: route through debounced saveContent pipeline
  with domToMarkdown() instead of direct writeNote() with innerText
- Fix handlePaste stale closure (add saveContent to deps)
2026-03-11 11:00:58 -07:00
.changeset chore: add changesets and CHANGELOG for versioning 2026-03-07 00:22:54 -08:00
.vscode feat: Graph Notes app with semantic zoom graph, wikilink tokens, and shadcn-inspired UI 2026-03-07 00:21:49 -08:00
public feat: Graph Notes app with semantic zoom graph, wikilink tokens, and shadcn-inspired UI 2026-03-07 00:21:49 -08:00
src harden: atomic writes, path validation, and save pipeline integrity 2026-03-11 11:00:58 -07:00
src-tauri harden: atomic writes, path validation, and save pipeline integrity 2026-03-11 11:00:58 -07:00
vault feat: Graph Notes app with semantic zoom graph, wikilink tokens, and shadcn-inspired UI 2026-03-07 00:21:49 -08:00
.gitignore v1.0.0: security fixes, code review cleanup, release prep 2026-03-09 18:15:39 -07:00
CHANGELOG.md v1.0.0: security fixes, code review cleanup, release prep 2026-03-09 18:15:39 -07:00
index.html fix: resolve white screen and black screen on daily notes 2026-03-10 16:51:29 -07:00
package-lock.json v1.0.0: security fixes, code review cleanup, release prep 2026-03-09 18:15:39 -07:00
package.json v1.0.0: security fixes, code review cleanup, release prep 2026-03-09 18:15:39 -07:00
README.md v1.0.0: security fixes, code review cleanup, release prep 2026-03-09 18:15:39 -07:00
tsconfig.json feat: Graph Notes app with semantic zoom graph, wikilink tokens, and shadcn-inspired UI 2026-03-07 00:21:49 -08:00
tsconfig.node.json feat: Graph Notes app with semantic zoom graph, wikilink tokens, and shadcn-inspired UI 2026-03-07 00:21:49 -08:00
vite.config.ts feat: Graph Notes app with semantic zoom graph, wikilink tokens, and shadcn-inspired UI 2026-03-07 00:21:49 -08:00

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
Frontend React 19, TypeScript, Vite
Backend Rust (filesystem, search, encryption, graph)
Styling Tailwind CSS 4 + custom design tokens
Graph engine @blinksgg/canvas, d3-force, graphology

Development

# 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

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