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

Bookmarks

demo of bookmarks

Bookmarks is a single-user link saver. Add links via the admin panel or JSON API, organize them into categories, and view them on a public index page grouped by category.

  • Single Go binary with embedded assets
  • Local SQLite storage
  • Password-protected admin panel for managing categories and links
  • JSON read API (open) and write API (key-guarded)
  • Dark themed UI with Commit Mono font

Configure

Environment Variables

VariableDescriptionDefault
BOOKMARKS_PASSWORDPassword for the admin panel--
BOOKMARKS_API_KEYAPI key for POST /api/links (omit to disable write API)--
BOOKMARKS_DB_PATHSQLite database pathbookmarks.sqlite
HOSTBind address127.0.0.1
PORTBind port3000
COOKIE_SECUREEnable HTTPS-only cookiesfalse

BOOKMARKS_PASSWORD is required to access the admin panel. BOOKMARKS_API_KEY is only needed if you want to create links from outside the browser.

Deploy

Railway

The easiest way to deploy Bookmarks is with the one-click Railway template. See the Deploying with Railway guide for a walkthrough of the process. Bookmarks requires BOOKMARKS_PASSWORD during the configure step.

Deploy on Railway

Docker

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

Binary

cd apps/bookmarks && 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

Admin Panel

Set BOOKMARKS_PASSWORD and visit /login. From the admin panel you can:

  • Create and remove categories
  • Add links with title, URL, and category
  • Remove links

The public index at / shows all links grouped by category.

JSON API

Read endpoints are open. Write endpoints require x-api-key: <BOOKMARKS_API_KEY>.

MethodPathAuthPurpose
GET/api/categoriesopenList categories
GET/api/linksopenList links grouped by category. Query: category to filter by name
POST/api/linksapi keyCreate link. Body: {category, title, url}

Example:

curl -X POST http://localhost:3000/api/links \
  -H "x-api-key: $BOOKMARKS_API_KEY" \
  -H "content-type: application/json" \
  -d '{"category":"Reading","title":"Example","url":"https://example.com"}'