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 are named anchors into the event log timeline. 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?