Skip to content

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

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 dependencies

Prerequisites

To develop JodNote, you need:

Required

  • Node.js 18+ and pnpm
  • Rust 1.70+ (via rustup)
  • System dependencies (varies by OS)
  • 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 dev

Architecture Highlights

Local-First Design

All data stored in SQLite:

%APPDATA%\com.jodnote.app\jodnote.db

No network requests, no telemetry, complete privacy.

Two-Window System

  1. Quick Input - Lightweight, always-on-top, global hotkey
  2. Main Window - Full note browser, editing, management

Communication Flow

Vue Frontend ←→ Tauri Bridge ←→ Rust Backend ←→ SQLite

Key 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-feature

2. Testing

bash
# Test the application
pnpm tauri dev
pnpm test

# Rust tests
cd src-tauri
cargo test

3. Building

bash
# Development build
pnpm tauri dev

# Production build
pnpm tauri build

Code Style

TypeScript/Vue

  • ESLint + Prettier
  • Vue 3 Composition API (not Options API)
  • TypeScript strict mode
  • Composables for reusable logic

Rust

  • rustfmt for formatting
  • clippy for 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

  1. Create view in src/views/
  2. Add route in src/router/index.ts
  3. Update navigation if needed

Add a New Component

  1. Create in src/components/
  2. Export from component index
  3. Use in views/components

Modify Database Schema

  1. Update schema in src-tauri/src/lib.rs
  2. Add migration logic
  3. Test with existing data
  4. Update docs

Add a Global Shortcut

  1. Register in Tauri config
  2. Handle in src-tauri/src/main.rs
  3. Update settings UI
  4. Document in shortcuts guide

Debugging

Frontend

  • Vue DevTools (browser extension)
  • console.log debugging
  • 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 extensions

Database

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! 🚀

Released under the MIT License.