Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Jotts

demo of jotts

A simple, self-hosted markdown note app built in Go.

  • Single Go binary with embedded assets
  • Password authentication with session cookies
  • Create, edit, and delete markdown notes
  • Markdown rendering with strikethrough, tables, and task lists
  • Interactive TUI with authenticated access for note management
  • Dark themed UI with Commit Mono font
  • SQLite for persistent storage

Install

Jotts can be installed several ways:

Homebrew

brew install stevedylandev/tap/jotts

Releases

Visit the releases page for binaries and install scripts.

Configure

Environment Variables

VariableDescriptionDefault
JOTTS_PASSWORDPassword for web login authenticationchangeme
JOTTS_API_KEYAPI key for protecting /api/* endpoints
JOTTS_DB_PATHSQLite database file pathjotts.sqlite
HOSTServer bind address127.0.0.1
PORTServer port3000
COOKIE_SECUREEnable HTTPS-only cookiesfalse

If JOTTS_API_KEY is not set, /api/* routes return 403.

Deploy

Railway

The easiest way to deploy Jotts is with the one-click Railway template. See the Deploying with Railway guide for a walkthrough of the process. Jotts requires JOTTS_PASSWORD to be set during the configure step. Set JOTTS_API_KEY too if you want to use the TUI against your remote instance.

Deploy on Railway

Docker

cd apps/jotts
cp .env.example .env
# Edit .env with your password
docker compose up -d

This will start Jotts on port 3000 with a persistent volume for the SQLite database.

Binary

cd apps/jotts && go build .

The resulting binary is self-contained with all assets embedded. Copy it to your server with a configured .env file and run it directly.

Use

CLI

jotts [OPTIONS] [FILE] [COMMAND]

Commands

CommandDescription
serverStart the web server
tuiLaunch the interactive TUI
authSave remote URL and API key to config file

Arguments

ArgumentDescription
[FILE]File path to create a note from

Options

OptionDescription
-r, --remote <URL>Remote server URL (env: JOTTS_REMOTE_URL)
-k, --api-key <KEY>API key for authenticated operations (env: JOTTS_API_KEY)

Server

Start the web server with:

jotts server --port 3000 --host localhost

Log in at /login with your configured password. From there you can create, edit, and delete markdown notes. Notes support GitHub-flavored markdown including strikethrough, tables, and task lists.

API Endpoints

MethodEndpointDescription
GET/api/notesList all notes
POST/api/notesCreate a note ({"title": "...", "content": "..."})
GET/api/notes/{short_id}Get a note by ID
PUT/api/notes/{short_id}Update a note
DELETE/api/notes/{short_id}Delete a note by ID

All /api/* endpoints require an x-api-key header matching JOTTS_API_KEY.

TUI

The Jotts TUI makes it easy to create, edit, and manage your notes either locally or remotely.

# Launch TUI (default behavior when no file argument is given)
jotts
 
# Or explicitly
jotts tui
 
# With remote options
jotts -r https://your-jotts-instance.com -k your-api-key

Local Access

If you are running jotts in the same directory as the jotts.sqlite file created by the server instance, the TUI will automatically access the database locally.

Remote Access

To access a remote instance:

  • Set JOTTS_API_KEY on your server instance
  • Run jotts auth to enter your server URL and API key, stored under $HOME/.config/jotts

Keybindings

KeyAction
j/DownMove down / Scroll down
k/UpMove up / Scroll up
EnterFocus content pane
EscBack / Quit
yCopy note content
YCopy note link
oOpen in browser
eEdit note
EEdit in $EDITOR
dDelete note
cCreate note
/Search notes
^WToggle word wrap (edit)
rRefresh notes (remote only)
qQuit
?Toggle help