Save every link.
Read it on time.

bkmk keeps every link you save in one index: tags, priorities, stars and a screenshot on each, filters you can share as a URL, and alarms that bring a link back when it is time to read it.

query>rows313filter ⌥f
pristarstitle / urladded ▾
★★★★★Keeping a tidy index: a field guidedocs.example/guides/keeping-a-tidy-index2026-09-08
★★★★★A monospace interface, explainedgallery.example/design/a-monospace-interface2026-09-08
★★★★★Getting started with prepared statementsforge.example/code/prepared-statements2026-09-07
★★★★★Marginalia, explainedpaper.example/reading/marginalia-explained2026-09-06
★★★★★A field guide to sourdough timingkitchen.example/recipes/sourdough-timing2026-09-05
★★★★★What I learned about a reading logpaper.example/reading/a-reading-log2026-09-04
★★★★★Why a tiling window manager matterstoolbox.example/tools/tiling-window-managers2026-09-03
★★★★★A short history of translated essayspaper.example/reading/translated-essays2026-09-02
★★★★★Keeping a tidy index: a field guidedocs.example/guides/keeping-a-tidy-indexcodereading2026-09-08
‹ index/record 7998alarmopen url ↗

Keeping a tidy index: a field guide

priorityhighest
stars★★★★★
tagscodereading
alarmoff
shotcaptured
preview
Keeping a tidy index: a field guide
alarms/clock 2026-09-08 22:44snooze
Keeping a tidy index: a field guidedocs.example/guides/keeping-a-tidy-indexT-00d2026-09-08
A short history of a status bargallery.example/design/a-status-barT-00d2026-09-08
A field guide to sourdough timingkitchen.example/recipes/sourdough-timingT-01d2026-09-09
Notes on a home weather stationlab.example/lab/home-weather-stationT-02d2026-09-10
import/session buddy .txt · .csvsend ⌘↵
staged · bookmarks-still.csv
A reading log for the autumn, part twoinbox.examplenew
Tide tables for the harbour towninbox.examplenew
Field recordings from the canalinbox.examplenew
Keeping a tidy index: a field guidedocs.exampledup
Brown butter, one more timeinbox.examplenew
Marginalia, explainedpaper.exampledup

7 entries parsed · 5 new · 2 duplicate · 0 malformed

next 14 days · load17 armed
sep 08sep 21
The library

One index. Every link.

Every saved link lands in one index you can sort, filter and share as a URL. Each card plays a real piece of the app, with a demo library.

pristarstitle / urltagsadded ▾
★★★★★Keeping a tidy index: a field guidedocs.example/guides/keeping-a-tidy-indexcodereading2026-09-08
★★★★★A monospace interface, explainedgallery.example/design/a-monospace-interfacedesign2026-09-08
★★★★★Getting started with prepared statementsforge.example/code/prepared-statementscode2026-09-07
★★★★★Marginalia, explainedpaper.example/reading/marginalia-explaineddesignreading2026-09-06
★★★★★A field guide to sourdough timingkitchen.example/recipes/sourdough-timingrecipes2026-09-05
★★★★★What I learned about a reading logpaper.example/reading/a-reading-logreading2026-09-04
pristarstitle / urladded ▾
★★★★★Keeping a tidy index: a field guidedocs.example/guides/keeping-a-tidy-index2026-09-08
★★★★★A monospace interface, explainedgallery.example/design/a-monospace-interface2026-09-08
★★★★★Getting started with prepared statementsforge.example/code/prepared-statements2026-09-07
★★★★★Marginalia, explainedpaper.example/reading/marginalia-explained2026-09-06
★★★★★A field guide to sourdough timingkitchen.example/recipes/sourdough-timing2026-09-05
★★★★★What I learned about a reading logpaper.example/reading/a-reading-log2026-09-04
The indexPriority, stars, title, tags and date on one dense row, driven from the keyboard.
filteradvanced · live313/313 match
most used
code66design62lab35music34reading71recipes43
stars
any1+2+3+4+5
priority
highesthighmedlow
>8 ms
filteradvanced · live313/313 match
most used
code66design62lab35music34
stars
any1+2+3+
priority
highesthighmedlow
>8 ms
Advanced filterCategories, stars, priority and reminders, resolved into an expression in the URL.
Keeping a tidy index: a field guide
stars★★★★★1/5
prioritylow
Stars and priorityFive stars and four priority levels, sortable in the index.
A short history of a status bargallery.example/design/a-status-barT-00d2026-09-08
A field guide to sourdough timingkitchen.example/recipes/sourdough-timingT-01d2026-09-09
Notes on a home weather stationlab.example/lab/home-weather-stationT-02d2026-09-10
The case for soft deletesforge.example/code/soft-deletesT-03d2026-09-11
AlarmsEvery 1 to 30 days, counted down, snoozed or done.
Getting started with prepared statements
shot · none1024 px wideresized on uploadre-captureremove
ScreenshotsA capture on any link, resized to 1024 px.
staged · bookmarks-still.csv
A reading log for the autumn, part twoinbox.examplenew
Tide tables for the harbour towninbox.examplenew
Field recordings from the canalinbox.examplenew
Keeping a tidy index: a field guidedocs.exampledup
Brown butter, one more timeinbox.examplenew
Marginalia, explainedpaper.exampledup
Offline maps, part twoinbox.examplenew
staged · bookmarks-still.csv
A reading log for the autumn, part twoinbox.examplenew
Tide tables for the harbour towninbox.examplenew
Field recordings from the canalinbox.examplenew
Keeping a tidy index: a field guidedocs.exampledup
Brown butter, one more timeinbox.examplenew
ImportSession Buddy or CSV, parsed and staged, duplicates skipped.
exportjson · everythingcsv · title;urlhtml · for a browser
bkmk-2026-09-08.json
[{ "title": "Keeping a tidy index…", "url": "https://docs.example/…", "stars": 5, "priority": "highest" }
exportjson · everythingcsv · title;urlhtml · for a browser
ExportThe whole library as JSON, CSV or a browser's bookmarks file.
01 — Filter

Narrow 313 links down to three

The filter combines categories, stars, priority and reminders, and counts the matches as you set it. It writes itself into the URL, so a filtered view is a link you can keep or send.

  • A live match count on every change
  • Title search and content scopes
  • Every filter shareable as a URL
bkmk.example/bookmarks313/313
pristarstitle / urltagsadded ▾
★★★★★Keeping a tidy index: a field guidedocs.example/guides/keeping-a-tidy-indexcodereading2026-09-08
★★★★★A monospace interface, explainedgallery.example/design/a-monospace-interfacedesign2026-09-08
★★★★★Getting started with prepared statementsforge.example/code/prepared-statementscode2026-09-07
★★★★★Marginalia, explainedpaper.example/reading/marginalia-explaineddesignreading2026-09-06
★★★★★A field guide to sourdough timingkitchen.example/recipes/sourdough-timingrecipes2026-09-05
★★★★★What I learned about a reading logpaper.example/reading/a-reading-logreading2026-09-04
★★★★★Why a tiling window manager matterstoolbox.example/tools/tiling-window-managerstools2026-09-03
filteradvanced · live313/313 match
categories
code66design62lab35music34reading71recipes43
stars
any1+2+3+4+5
priority
highesthighmedlow
resolved expression
>
filter — 313 resultsreset8 ms
02 — Alarms

Read what you saved, on schedule

Arm an alarm on any link, from every day to once a month. The alarms screen counts each one down, the due ones turn oxide, and a snooze stops the clock while keeping the link in view.

  • Seven intervals, from 1 to 30 days
  • Snooze one alarm, or all of them
  • The next fourteen days at a glance
editrecord 7998save ⌘↵
Keeping a tidy index: a field guidealarm · everyoff1d2d5d10d15d30d
alarms/clock 2026-09-08 22:44snoozedone
Keeping a tidy index: a field guidedocs.example/guides/keeping-a-tidy-indexT-05d2026-09-13
A field guide to sourdough timingkitchen.example/recipes/sourdough-timingT-01d2026-09-09
Notes on a home weather stationlab.example/lab/home-weather-stationT-02d2026-09-10
The case for soft deletesforge.example/code/soft-deletesT-03d2026-09-11
Empty states, explainedgallery.example/design/empty-statesT-07d2026-09-15
03 — Import

Move an existing library in one drop

Drop a Session Buddy export or a CSV of title and url pairs. Every line is parsed and staged first — new, duplicate or malformed — and nothing is written until the import is sent.

  • Duplicates detected and skipped
  • Every imported link tagged in one step
  • Files up to 10 MB
import/session buddy .txt · .csvcancelsend ⌘↵
drop a .txt or .csvmax 10 mb · utf-8
staged · bookmarks-still.csv
A reading log for the autumn, part twoinbox.examplenew
Tide tables for the harbour towninbox.examplenew
Field recordings from the canalinbox.examplenew
Keeping a tidy index: a field guidedocs.exampledup
Brown butter, one more timeinbox.examplenew
Marginalia, explainedpaper.exampledup
Offline maps, part twoinbox.examplenew
7 entries parsed · 5 new · 2 duplicate · 0 malformed
on importskip duplicatestag as imported
5 links added · 2 skipped
Preview

The whole library, one keystroke away.

Four screens of the app, playing with a demo library: the index, a record, the alarms and an import.

Demo library · sample data
And the rest

Built for a library that keeps growing.

Take the whole library with you at any time: JSON with every field, CSV in title;url pairs, or the HTML bookmarks file every browser imports.

J and K move through the index, Enter opens a record, ⌥F opens the filter and N saves a new link. The status bar always shows the keys that apply.

Starred, has an alarm, has a screenshot, high priority: the rail's scopes narrow the index in one click and combine with any category.

Set a recovery passphrase once, and use it to reset a lost password from the sign-in screen. Attempts are rate-limited.

Security

Your library is yours.
And it is kept safe.

A library of links is years of reading. bkmk guards the account that holds it, checks every request at the door, and keeps a copy of everything off-site.

Off-site backupsThe database dumped every twelve hours, screenshots copied on save, both to a separate server.
Hardened sign-inbcrypt hashes, sessions held in Redis, attempts rate-limited per account.
Checked at the doorEvery request validated against a schema, with strict security headers.
Free to leaveExport everything at any time, as JSON, CSV or a browser bookmarks file.

Save every link.
Read it on time.

One index for everything you save, read on schedule, on your own infrastructure.