░ ░░░░ ░░ ░░ ░░░ ░░░░ ░░░ ░░░ ░░░░░░░░░ ░░░░ ░░
▒ ▒▒ ▒▒▒▒▒ ▒▒▒▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒▒▒▒
▓ ▓▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓ ▓▓▓ ▓
█ █ █ █████ █████ ███ ███ ███ ███ ████ ██ ███ ███ ████████ ████ ██ ████ █
█ ████ ██ ██ ████ ██ ████ ███ ███ ████ ██ ███ ████ ██
█ ████ ██ ██ ████ ██ ████ ███ ███ ████ ██ ███ ████ ██
█ █ █ █████ █████ ███ ███ ███ ███ ████ ██ ███ ███ ████████ ████ ██ ████ █
▓ ▓▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓ ▓▓▓ ▓
▒ ▒▒ ▒▒▒▒▒ ▒▒▒▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒▒▒▒
░ ░░░░ ░░ ░░ ░░░ ░░░░ ░░░ ░░░ ░░░░░░░░░ ░░░░ ░░
An append-only event log for capturing thoughts, notes, and data you do not want to lose.
mirror-log is local-first, SQLite-backed, and designed to be boring in the best way: easy to inspect, easy to script, and hard to accidentally lose context.
The default build is intentionally lean: SQLite is the source of truth, direct SQL stays first-class, and optional embedding work lives behind a feature flag instead of in the core path.
Quick Start
# Add one event
# Add from file
# Bulk import from stdin (one line = one event)
|
# Show recent
# Search full events
# Search chunked content
# Ingestion stats (total/unique/duplicates)
# Database summary
# Integrity verification (hash + relational checks)
# Generate embeddings for events (optional feature)
# mirror-log embed --source journal
# Search similar events using embeddings (optional feature)
# mirror-log search-similar "overhead allocation" --limit 5
Installation
# Clone and build
# Binary location: target/release/mirror-log
# Optional embedding commands
# Or install locally
Documentation
- User Guide - Comprehensive documentation with examples, advanced features, and best practices
- Canonical Pipeline - Formal order of operations and governance layers
- API Documentation - Library usage for programmatic access
Core Principles
- Append-only: Events are never updated or deleted
- SQLite is source of truth: Your data stays local and inspectable
- No hidden layers: Direct SQL remains first-class
- Source-aware logging: Every event tracks where it came from
- Optional enrichment: Embeddings stay outside the default build
Canonical Pipeline
Mirror-Log ingestion follows one sequence:
capturepersiststructureenrich(human-level, via explicit structure)
The nested design structure is:
law -> principle -> right -> rule -> guideline
Data Model
Main Tables
Events Table
id TEXT PRIMARY KEY(UUID)timestamp INTEGER NOT NULL(event timestamp)source TEXT NOT NULLcontent TEXT NOT NULLmeta TEXT NULLingested_at INTEGER NOT NULLcontent_hash TEXT NULL(SHA256 for dedupe analytics)
Chunks Table
- Stores chunked slices of event content
- Used by
search --chunksand large-content workflows
Direct SQLite Access
# Query events
)
;
# Count by source
)
) ;
# Get stats
)
)
;
# View embeddings (optional feature)
# SELECT e.id, e.content, emb.embedding
# FROM events e
# JOIN event_embeddings emb ON e.id = emb.event_id
# LIMIT 10;
Development
Dependency Audit
# Compare declared, active direct, and full transitive dependency surfaces
# Audit an optional feature path
# Emit a compact line for mirror-log indexing
MIRROR_LOG_INDEX=1
# Only append a new audit event when the surface changes
# Log both the default surface and optional feature paths
License
AGPL-3.0-or-later. See LICENSE.