
Pain. Your vault fills up with quick capture notes. A week later, you've lost the thread. A month later, you can't reconstruct the story — and you don't see the themes, the slow stretches, or the bursts of activity.
Solution. Epochgram turns your notes into a scalable timeline retrospective. Browse day by day to scan changes in order, spot bigger patterns across unsorted notes, and edit directly on the timeline — so you can focus on what really matters.
Epochgram Pro adds even more overview:
- On-device AI summaries via Google Chrome.
- Epochs: a zoomable time map, from daily detail to a year overview.
- Find related notes through links, tags, titles, and semantic similarity.
- Topic clustering and marked related groups.
- Tracked content edits.
- Recurring events.
Install from Obsidian Community plugins
BRAT
Manual install
.obsidian/plugins/epochgram.[!TIP] Click the
ribbon icon or run ⌘ Epochgram: Open timeline to show the timeline in the right panel.
To open it automatically on launch, enable ⛭ Open timeline on startup.
| Shortcut | Description |
|---|---|
| Click record | Open the file |
| Click date | Open the daily note |
| Ctrl/Cmd+Click record | Open the file in a new tab |
| Right-Click or Long-Tap record or date | Open the context menu |
| Right-Click or Long-Tap empty space | Toggle Epochs view (Pro) |
| Double-Click empty space | Scroll to Today |
| Double-Click date | Create a new daily note |
| Wheel or Pan | Scroll |
| Ctrl/Cmd+Wheel or Pinch | Zoom |
| Alt/Option+Wheel/Up/Down or Two-Finger-Tap | Jump to the next/previous similar record |
| Shift+Wheel | Zoom around the current record |
| Alt/Option+Hover record | Show the file preview |
| Drag-N-Drop record | Change its date |
The timeline is a scrollable, zoomable surface that collects records from all files in the vault, excluding paths ignored in Obsidian settings. It detects dates and date ranges in different formats and renders one record per file per day, in the following priority order:
| Source | Description |
|---|---|
| Per-block edit history excluding YAML. Requires ⛭ Track changes (Pro). | |
| Parsed content date (ranges), including |
|
| -- Anchors -- | |
| Filename dates | Parsed filename date. |
| Frontmatter dates | YAML date property (configurable via ⛭ Date property name). |
| Created dates | File creation time. |
[!TIP] Enable ⛭ Parse dates in properties to extract dates from YAML frontmatter. The
dateproperty is always parsed.
Each file has one anchor record that represents its canonical date. All other record types are optional. Drag and drop works only for anchor records, it updates the YAML date property, and the filename for daily notes.
# EXAMPLE OF SOURCES # FROM FILE PROPS: `my_note.md` ⚓︎ cdate `daily-01.01.2026.md` ⚓︎ filename # FROM CONTENT: --- date: 2026-02-02 ⚓︎ frontmatter --- May 1, 2026 diary 🗓 parsed content Added new line... ✐ tracked change
Each record appears as file ⸱ summary. You can control the length of each part using ⛭ Filename length and ⛭ Summary length. The summary is either the first N words extracted from Markdown or an AI-generated summary when ⛭ Auto summarize is enabled (Pro). You can also set a manual summary using the YAML property ⛭ Description property name or via context menu Summary…; manual summaries are always preferred over AI-generated ones.
Timeline draws today as , weekdays as
and weekends as
. Entries are shown stacked or side by side when space allows, long entries are truncated with
…. If space runs out, the day collapses to a few records and shows the rest as (+n). When zoomed out, records collapse into placeholder bars , with height based on record count.
[!TIP] A top label shows the current date, and a vertical red line marks the distance from Today — at the default zoom, each day of redshift represents one month.
There are collapsible filters under the button.
| Filter | Description |
|---|---|
| Show drafts only. | |
| Show tracked changes (Pro). | |
| Show content dates, ranges, and recurring. | |
| Show non-text files. | |
| Toggle Epochs view (Pro). |
A search bar at the bottom lets you search timeline records and shows the number of matches. Click it or run ⌘ Epochgram: Search timeline. Search covers file names, content, AI summaries, Epochs, with support for fuzzy search.
| Search shortcut | Description |
|---|---|
| Enter | Open the matched file. |
| Ctrl/Cmd+Enter | Open the matched file in a new tab. |
| Alt/Option+Enter | Filter timeline records by the current query. |
| $marked | Show only marked records. |
| $hidden | Show only hidden records. |
| $similar | Show only similar records to currently opened file. |
| "exact" | Find exact string. |
Files in the vault are never modified unless you run an explicit file action. All attributes except the date and manual summary are stored in Epochgram data files, not in vault files.
| Record menu | Description |
|---|---|
| Update the file manual summary. | |
| Open the topics assignment popup; to remove topics, clear the input (Pro). | |
| Pin the file at the Today position; or ⌘ Epochgram: Toggle pin for current file. | |
| Mark similar records with a color; or ⌘ Epochgram: Toggle mark for current file. | |
| Change the file review state. | |
| Rename the file in the vault. | |
| Move the file to another folder. | |
| Permanently delete the file, or move it to trash, depending on Obsidian settings. |
[!TIP] ⌘ Epochgram: Clear tracked changes for current file → clear all file history at once.
| Date menu | Description |
|---|---|
| Uses ⛭ Daily notes core plugin settings for that date: date format, location, and template. Also available by Double-click. |
Epochgram is designed around the C.O.D.E. process (Capture → Organize → Distill → Express). New or indexed files appear as Draft. After organizing the file and extracting the key points, the record can be set as Reviewed. If the file changes later, the record returns to Draft, indicating it may need review again.
Not every record deserves space on the timeline. Some, such as minor tracked changes, can be set Hidden. Hidden records disappear from the timeline by default. Use !hidden in search to show only hidden records — they are rendered muted.
[!TIP] ⌘ Epochgram: Review all → set all records across the vault as reviewed.
⌘ Epochgram: Toggle visibility for current file → hide or show all records from the current file.

You can create recurring records, which will appear on the timeline. To add one, set the repeat or recur property in YAML. Supported formats (see RRULE):
---
repeat: every day
repeat: every N days
repeat: every week on mon,tue
repeat: every N weeks on mon,tue
repeat: every month on D
repeat: every month on -D # D days from end of month; -1 = last day
repeat: every year on MM-DD
repeat: FREQ=DAILY;COUNT=5 # RRULE
---
Similarity helps find related records. When you open a note, similar records on the timeline are marked using the current theme color. Epochgram includes multiple similarity settings that work across all platforms, including iOS and Android:
| Settings | Description |
|---|---|
| ⛭ Links | Treat notes as related through inbound and outbound links. |
| ⛭ Tags | Treat notes as related when they share tags. |
| ⛭ Title threshold | Use Jaro–Winkler matching to group notes with similar names or paths. Higher values match more; 0 disables it. |
| ⛭ Semantic threshold | Use an embedding default model to find notes with similar meaning across the vault. Useful for notes that describe the same idea in different words. |
| ⛭ Topic threshold | Use a zero-shot default model for similarity grouping. When you assign a topic to a note, Epochgram finds related records across the vault. Useful for broad themes like travel, projects, health, or photography, where notes may share meaning without direct links or tags. |
[!TIP] Use ⛭ to open the model picker, or
to browse Hugging Face models.
Use only trusted models; third-party models, downloads, and licenses are your responsibility.
Building semantic vectors and running topic classification can take a long time on slower machines. Long-running jobs show their progress in the status bar — hover over the progress item to see all jobs, or click it to cancel.
Similarity also groups related records automatically: when you mark one record, related records inherit the same color. These records behave as one group, so changing or removing the color updates the whole group, and inherited marks are recalculated automatically if the relation later disappears.
In addition to the standard red-to-violet palette, an extended palette is available in the submenu. This makes it easy to choose colors by activity. For example, I use glacier for ski trip reports.
[!TIP] Alt/Option+Wheel/Up/Down or Two-Finger-Tap → move through related records.
⌘ Epochgram: Toggle mark for current file → assign the next unique color from the palette.

Epochgram Pro includes an AI Bridge that uses Google Chrome's on-device AI APIs for local summarization. When started, it runs a small local server on an available port at http://127.0.0.1. The bridge page can be opened from ⌘ Epochgram: Open AI bridge, from the ⌀ AI status bar button (button absent = server not started, button red = client disconnected), or automatically on startup if ⛭ Open AI Bridge on startup is enabled. This page processes summary jobs in Chrome and returns the results to the plugin. All summarization data stays only on your device and is not sent to external services.
On first use, Chrome may need a user gesture to download the built-in Gemini Nano model, and the drive with your Chrome profile should have at least 22 GB of free space. The bridge page also serves as a control panel, showing connection and model status, queue progress, the current text preview, the latest result, and a chart with progress in gray and processing speed in blue. Keep it open while summaries are running. You can also adjust API settings and prompt/context texts in the YAML settings editor. For larger notes, Epochgram can split input into chunks, summarize them separately, then merge the results.
sharedContext: | # Shared instructions across all summarization jobs
Ignore dates and empty content.
Group by topics, compress, remove duplicates and metaphrases.
Order by frequency.
format: plain-text # Output format: markdown | plain-text
preference: capability # Model preference: auto | speed | capability
expectedInputLanguages: [en] # Accepted input languages: en | es | ja
outputLanguage: en # Output language: en | ja | es
expectedContextLanguages: [en] # Accepted context languages: en | ja | es
maxRelatedChars: 300 # Related-context size limit
reduce:
context: | # Recursive reduction instructions
Recursive summary reduction.
Preserve dominant topics and recurring entities.
type: tldr # Reduction summary type: key-points | tldr | teaser | headline
length: long # Summary length: short | medium | long
maxChunkChars: 3000 # Split threshold before recursive reduction
maxDepth: 3 # Maximum recursive reduction depth
records:
context: | # Per-record summarization instructions
File:
{{filePath}}
Preserve facts, entities, terminology, and concrete topics.
Remove repetition, filler, boilerplate, and metaphrases.
type: tldr # Summary type: key-points | tldr | teaser | headline
length: short # Summary length: short | medium | long
maxInputChars: 3000 # Max source chars per record
maxOutputWords: 30 # Max generated words (optional)
epochs:
- period: day-2weeks # Supported periods/ranges: day | 2days | 4days | week | 2weeks | month | 3months | 6months | year | day-year
context: | # Epoch summarization instructions
Short-term activity summary.
Recent events, actions, tasks, places, people, projects.
Output max 12 words, nouns only.
type: tldr # Summary type: key-points | tldr | teaser | headline
length: short # Summary length: short | medium | long
maxFileChars: 300 # Max chars taken per file
maxOutputWords: 30 # Max generated words (optional)
- period: month-year
context: |
Broad period summary.
Long-term themes, domains, projects, interests, recurring topics.
Output max 12 words, nouns only.
type: tldr
length: medium
maxFileChars: 300
maxOutputWords: 30
[!TIP] Chrome's built-in Gemini Nano currently officially supports English, Spanish, and Japanese for input and output text. You can still try forcing another output language in the prompt context; for example, I used this context for Ukrainian:
OUTPUT ONLY IN UKRAINIAN!.
⛭ Auto summarize → when enabled, Epochgram automatically summarizes timeline records through the AI Bridge whenever the file changes. It does not modify the file content.
⛭ Generate Epochs → when enabled, Epochgram creates a zoomable time map that groups many days into larger period summaries, helping you see the bigger picture without reading the timeline day by day. Epochs are generated hierarchically from day up to year, in essence, summaries of summaries. If marked records are present, Epochs are colored by the most common mark color in that range. You can regenerate a specific Epoch from the context menu.
[!TIP] ⌘ Epochgram: Summarize current file → generate AI summaries for all timeline records from the current file.
⌘ Epochgram: Summarize missing → generate all missing AI summaries and Epochs across the entire vault.
Epochgram supports the following custom YAML properties:
---
date: 2026-01-01 # override the anchor date
description: my summary # override the summary
noindex: # exclude this file from all indexing
notracked: # don't track changes for this file
noparsed: # don't parse dates from this file's content
nosimilar: # don't match this file by similarity
similar: [links, tags, title, semantics, topics] # match similarity only by these relations
repeat: every day # create recurring records
recur: every day # same as repeat
---

Plugin data is mostly stored in the vault config directory, usually .obsidian/.
| File | Description |
|---|---|
epochgram-index.json |
Timeline/index data. |
epochgram-search.json |
Search cache. |
epochgram-summaries.json |
AI summaries and Epochs. |
epochgram-semantics.json |
Embeddings store. |
epochgram-topics.json |
Topic similarity store. |
plugins/epochgram/data.json |
Settings and view state. |
If Obsidian Sync is enabled, this data should synchronize between devices as long as ⛭ Sync → Vault configuration sync → Other file types is turned on. License data is stored separately in localStorage and is not synced through the vault config.
[!TIP] Double-Click a setting name/description → reset it to default.
Epochgram also provides Rebuild and Reset popups for rebuilding or clearing stored data:
[!TIP] ⛭ Version X.X.X shows the current version, build timestamp, and a link to the CHANGELOG.
How do I get support?
Check the docs first. If you still cannot find what you need, feel free to open an issue on GitHub. You can also join the Reddit community for discussions, feedback, and updates. If you have any other questions, just contact me at [email protected].
What should I do if Epochgram feels slow?
On huge vaults or slower machines, performance may degrade. Try setting ⛭ Semantic threshold and ⛭ Topic threshold to0, disable ⛭ Auto summarize and ⛭ Generate Epochs. You can also uncheck ⛭ Enable animation or reset plugin data.
What should I do if some records are missing?
Try rebuilding the index or reload Obsidian.
http://127.0.0.1 and opens a local bridge page in Google Chrome to use Chrome's on-device Summarizer API. The bridge communication stays on your device. Chrome may download its built-in model(s) (Gemini Nano) the first time you use these APIs.@huggingface/transformers (for example from Hugging Face) and ONNX Runtime Web WASM from jsDelivr.ort-wasm.wasmort-wasm-simd.wasmort-wasm-threaded.wasmort-wasm-simd-threaded.wasmort-wasm-simd-threaded.asyncify.wasmort-wasm-simd-threaded.jsep.wasmonnxruntime-web package and are used only for local ONNX inference for similarity embeddings/topic classification.