Developer Guide
Welcome to the JodNote developer documentation. This guide will help you understand the architecture, build from source, and contribute to the project.
Project Overview
JodNote is a keyboard-first, local-first desktop note-taking application built with:
- Frontend: Vue 3 + TypeScript + Vite
- Backend: Tauri v2 (Rust)
- Database: SQLite (via Tauri SQL plugin)
- UI: Nuxt UI + Tailwind CSS
Technology Stack
- Frontend: Vue 3 + TypeScript + Vite
- Backend: Tauri v2 (Rust)
- Database: SQLite (via Tauri SQL plugin)
- UI: Nuxt UI + Tailwind CSS
Repository
- GitHub: github.com/techformist/jodnote
- License: MIT
- Language: TypeScript (frontend), Rust (backend)
Project Structure
jodnote/
├── src/ # Vue frontend
│ ├── components/ # Vue components
│ ├── composables/ # Vue composables
│ ├── stores/ # Pinia stores
│ ├── views/ # Route views
│ ├── router/ # Vue router
│ └── utils/ # Utilities
├── src-tauri/ # Tauri backend (Rust)
│ ├── src/ # Rust source
│ └── Cargo.toml # Rust dependencies
├── docs/ # VitePress documentation
└── package.json # Node dependenciesPrerequisites
To develop JodNote, you need:
Required
- Node.js 18+ and pnpm
- Rust 1.70+ (via rustup)
- System dependencies (varies by OS)
Recommended
- VS Code with extensions:
- Vue - Official
- rust-analyzer
- Tauri
- ESLint
- Prettier
Quick Start
bash
# Clone the repository
git clone https://github.com/techformist/jodnote.git
cd jodnote
# Install dependencies
pnpm install
# Run in development mode
pnpm tauri devArchitecture Highlights
Local-First Design
All data stored in SQLite:
%APPDATA%\com.jodnote.app\jodnote.dbNo network requests, no telemetry, complete privacy.
Two-Window System
- Quick Input - Lightweight, always-on-top, global hotkey
- Main Window - Full note browser, editing, management
Communication Flow
Vue Frontend ←→ Tauri Bridge ←→ Rust Backend ←→ SQLiteKey Technologies
Frontend
- Vue 3 - Composition API
- TypeScript - Type safety
- Pinia - State management
- Vue Router - Routing
- Nuxt UI - Component library
Backend
- Tauri v2 - Desktop framework
- Rust - Systems language
- SQLx - Database access
- Tokio - Async runtime
Development
- Vite - Fast HMR
- pnpm - Package management
- Cargo - Rust build tool
Development Workflow
1. Feature Development
bash
# Create feature branch
git checkout -b feature/my-feature
# Make changes and test locally
pnpm tauri dev
# Commit
git commit -m "feat: add my feature"
# Push and create PR
git push origin feature/my-feature2. Testing
bash
# Test the application
pnpm tauri dev
pnpm test
# Rust tests
cd src-tauri
cargo test3. Building
bash
# Development build
pnpm tauri dev
# Production build
pnpm tauri buildCode Style
TypeScript/Vue
- ESLint + Prettier
- Vue 3 Composition API (not Options API)
- TypeScript strict mode
- Composables for reusable logic
Rust
rustfmtfor formattingclippyfor linting- Follow Rust API guidelines
Contributing
We welcome contributions! See Contributing Guide for:
- Code of conduct
- How to submit PRs
- Coding standards
- Issue templates
Common Tasks
Add a New Route
- Create view in
src/views/ - Add route in
src/router/index.ts - Update navigation if needed
Add a New Component
- Create in
src/components/ - Export from component index
- Use in views/components
Modify Database Schema
- Update schema in
src-tauri/src/lib.rs - Add migration logic
- Test with existing data
- Update docs
Add a Global Shortcut
- Register in Tauri config
- Handle in
src-tauri/src/main.rs - Update settings UI
- Document in shortcuts guide
Debugging
Frontend
- Vue DevTools (browser extension)
console.logdebugging- Vite HMR for instant feedback
Backend (Rust)
bash
# Run with debug output
RUST_LOG=debug pnpm tauri dev
# Use debugger (VS Code)
# Install rust-analyzer and CodeLLDB extensionsDatabase
bash
# Open database with SQLite CLI
sqlite3 "%APPDATA%\com.jodnote.app\jodnote.db"
# List tables
.tables
# Query notes
SELECT * FROM notes LIMIT 10;Resources
Official Docs
Community
- GitHub Issues for bugs
- GitHub Discussions for questions
- PRs welcome!
Next Steps
Happy coding! 🚀
