// Overview

Jot is a lightweight markdown note-taking application built with Tauri 2.0, combining the performance of Rust with the flexibility of React for a native desktop experience.

Your notes are stored as plain markdown files on your local filesystem - no cloud sync, no vendor lock-in, just simple files you own and control.

// Architecture

React UI
Tauri Bridge
Rust Backend
CodeMirror 6
Markdown Parser
File System
|
Zustand State
|
Search Index

Tauri's IPC bridge connects the React frontend to Rust-powered file operations. All file I/O happens in the Rust layer for native performance, while the UI remains responsive through async command invocations.

// Key Features

  • Markdown editor with CodeMirror syntax highlighting
  • Live preview with split or tab view modes
  • File tree with drag-and-drop folder organization
  • Daily notes quick-access via keyboard shortcut
  • Full-text search across all notes
  • Dark mode with system preference detection
  • Auto-save during typing
  • Keyboard shortcuts for efficient workflow

// Technical Details

Tauri 2.0: A Rust-based framework that creates lightweight, secure desktop applications with web technologies. Results in small binary sizes and low memory usage compared to Electron.

CodeMirror 6: A modern, extensible code editor component providing syntax highlighting, keyboard shortcuts, and a smooth editing experience for markdown.

Zustand: Minimal state management that keeps the app responsive and the codebase clean without boilerplate.

// Challenges & Solutions

Challenge: Implementing full-text search across thousands of markdown files without noticeable latency.

Solution: Built a Rust-based search index that tokenizes and indexes file contents on startup and incrementally updates on file changes. Search queries run against the in-memory index, delivering results in under 10ms even with large note collections.

Challenge: Auto-saving edits without interrupting the writing flow or causing visible UI freezes.

Solution: Implemented debounced saves triggered by editor idle detection (500ms after last keystroke). The save operation runs asynchronously through Tauri's IPC, and the UI only shows a save indicator on completion - never blocking input.

// What I'd Improve

  • Add optional encrypted sync between devices via cloud storage
  • Implement wiki-style linking between notes with backlink tracking
  • Add plugin system for custom markdown extensions
  • Build a graph view for visualizing note connections

// Philosophy

  • Local-first: Your data stays on your machine
  • Plain files: Standard markdown, readable anywhere
  • Fast: Native performance, instant startup
  • Simple: Does one thing well - note taking