Jotit - simple note taking
A desktop app for quick note capture and browsing, built with Python and PyQt6.
Overview
One of the problems with taking notes is thinking about what file you're creating, where you're going to put it, what to name it, folder structures, etc. All these things get in the way of taking quick notes.
Jotit eliminates this friction by providing a simple app for capturing and browsing notes stored in a sqlite3 database.
Features
- Desktop GUI: Browse and manage notes in a native desktop window
- Built-in Editor: Edit notes directly in the app (no external editor needed)
- Quick Note Capture: Add notes from the GUI or command line
- Search: Find notes by keyword
- Sort: Toggle between created date and recently updated
- Right-click Context Menu: Edit, copy, delete notes
- Date Filtering: Find notes by date range (CLI)
- SQLite Storage: Reliable local storage with soft delete
- Markdown Import: Bulk import from markdown files (CLI)
- Clipboard: Copy notes to clipboard
Installation
Requires Python 3.11+ and uv.
git clone https://github.com/mkaz/jotit.git
cd jotit
uv syncUsage
Launch the desktop app
uv run jotit
# or
just runGUI Controls:
- Toolbar: New, Edit, Save, Delete, Sort, Search
- Right-click a note for context menu (Edit, Copy, New, Delete)
- Ctrl+N - New note
- Ctrl+E - Edit selected note
- Ctrl+S - Save changes
- Ctrl+D - Delete note
- Ctrl+F - Toggle search
- Ctrl+C - Copy note to clipboard
- Escape - Cancel edit / close search
Add notes (CLI)
# Simple note uv run jotit add "Had a great idea about improving user onboarding" # With a specific date uv run jotit add --date 2025-12-24 "Christmas day note" # From stdin git log --since=2025-10-31 | uv run jotit add
Find notes (CLI)
# Find notes by date uv run jotit find --date 2025-12-24 uv run jotit find --after 2025-12-01 uv run jotit find --before 2025-12-31 uv run jotit find --after 2025-12-01 --before 2025-12-31 # Find notes by keyword (case-insensitive) uv run jotit find -k meeting uv run jotit find --keyword project # Combine date and keyword uv run jotit find --after 2025-12-01 -k project # Pipe to other commands uv run jotit find --after 2025-12-01 | llm summarize
Import from markdown (CLI)
# Import a single markdown file as a note uv run jotit import ~/notes/ideas.md # Import all markdown files from a directory uv run jotit import ~/notes # Split files by date headers (## Date format) uv run jotit import --split ~/notes
When importing files, the note's created date is set to the current time, and the updated date is set to the file's modification time.
With --split, the importer looks for ## Date headers and treats the content below each header as a separate note. Supported date formats:
- January 15, 2024
- Jan 15, 2024
- 2024-01-15
- 01/15/2024
Configuration
Jotit can be configured via environment variables or a TOML configuration file located at ~/.config/jotit/jotit.toml.
Environment Variables
JOTIT_DB- Database file location (overrides config file)
Configuration File
Create ~/.config/jotit/jotit.toml:
[database] path = "~/Documents/jotit.db" [ui] default_sort = "created" # "created" or "updated" [find] separator = "---" # separator between notes, empty string for none with_date = true # prepend date to each note with_id = false # prepend ID to each note
Database Schema
CREATE TABLE notes ( id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP, is_deleted INTEGER DEFAULT 0 );
macOS App Bundle
To build Jotit as a standalone macOS app:
This creates dist/Jotit.app which you can copy to /Applications/:
cp -r dist/Jotit.app /Applications/
The app runs like any native macOS application — shows "Jotit" in the menu bar, launchable from Spotlight, etc.
Development
just install # Install dependencies just run # Run the app just fmt # Format code just lint # Lint code just test # Run tests just build # Build wheel just app # Build macOS .app bundle
License
MIT License - see LICENSE file for details.
Author
Created by Marcus Kazmierczak
Jotit - jot it down, find it later