Skip to content
Documentation GitHub
Platform

Bookmark System

Status: Implemented Crate: crates/application/src/bookmark/ Repository: crates/infrastructure/sqlite/src/workspace/event_log_repository.rs


The Bookmark System provides named anchors into the event log timeline. A bookmark is a lightweight record that associates a user-visible name with a specific timestamp in the event log. Bookmarks are not database snapshots — they mark a point in time that can be used to reconstruct workspace state by replaying the event log up to that timestamp.

Bookmarks replace the former git-backed checkpoint system. Named markers are more intuitive for users (“Chapter 3 Draft”) than opaque database snapshots, and they survive history collapse — the event log background task that summarizes old events never prunes bookmarks.



A bookmark’s timestamp field contains an ISO 8601 timestamp that corresponds to a point in the event log. Reconstruction works by identifying the bookmark’s timestamp and replaying:

  1. The structural event log up to that timestamp (for page/block/tag mutations)
  2. CRDT snapshots at that timestamp (for block content)

This makes bookmarks resilient to history collapse — even when old fine-grained events are summarized, the bookmark timestamp remains valid as a boundary marker.

The HistoryCollapseTask background task summarizes events older than the retention window (default 90 days). Bookmarks are explicitly excluded from this process. A bookmark created months ago remains valid indefinitely.


The bookmarks table is part of the V001 baseline migration alongside event_log and event_log_summaries:

CREATE TABLE bookmarks (
id TEXT PRIMARY KEY, -- UUID
name TEXT NOT NULL, -- User-visible name ("Chapter 3 Draft")
description TEXT, -- Optional context or notes
timestamp TEXT NOT NULL, -- ISO 8601 point in the event log this bookmark marks
created_by TEXT, -- User ID or agent ID
created_at TEXT NOT NULL
);

Four CRUD use cases in crates/application/src/bookmark/:

Use CaseDescription
CreateBookmarkUseCaseCreate a named bookmark at a given timestamp
GetBookmarkUseCaseRetrieve a single bookmark by ID
ListBookmarksUseCaseList all bookmarks in the workspace
DeleteBookmarkUseCaseRemove a bookmark (does not affect the event log)

  • create_bookmark — Create a named bookmark
  • get_bookmark — Retrieve a bookmark by ID
  • list_bookmarks — List all workspace bookmarks
  • delete_bookmark — Delete a bookmark

  • Event Log System — The timeline that bookmarks anchor into
  • crates/application/src/bookmark/ — Use case implementations
  • docs/solutions/architecture/crdt-blob-passthrough-pipeline.md — CRDT content reconstruction (developer docs)

Was this page helpful?