Dayflow

approved

by caezium

Read your Dayflow activity timeline read-only and write daily + weekly notes into your vault, with inline SVG charts, Bases dashboards, and optional ActivityWatch enrichment. - This plugin has not been manually reviewed by Obsidian staff.

3 stars149 downloadsUpdated 2mo agoMIT

Dayflow for Obsidian

Obsidian Downloads

Bring Dayflow into your Obsidian vault.

This plugin reads Dayflow's chunks.sqlite read-only and writes daily + weekly notes into your vault, with inline SVG charts, Bases dashboards, optional ActivityWatch enrichment, and a side-pane Today view that refreshes after every sync.

Local-first. Zero network calls. (Except optional localhost:5600 when you opt in to ActivityWatch enrichment.)


What you get

Daily notes

A > [!info] Day at a glance callout at the top — tracked hours, top categories, focus/distraction progress, current focus streak. Then a compact 24-cell hourly strip colored by what you mostly did each hour, your standup highlights/tasks/blockers, journal intentions and reflections, the full timeline (each card with thumbs-up/down ratings inline), top apps, and goal categories. Frontmatter exposes every signal — total_minutes, focus_pct, categories, top_apps, etc. — so Bases and Dataview can slice it freely.

image

Weekly notes

Inline SVG charts that read in both light and dark themes (they all use currentColor):

  • Donut of weekly distribution with total in the hole
  • Bar chart of category totals
  • Nested treemap — categories as soft tinted blocks, apps inside colored by brand (YouTube red, GitHub charcoal, Claude orange, …)
  • Workflow grid — 30-min × 7-day cells colored by dominant category (mirrors Dayflow's "your workflow this week")
  • Focus heatmap — intensity by hour × day
  • Context shifts vs distractions — multi-series line chart over the days
  • Sankey of app-to-app transitions
  • Week-over-week comparison▲ +2h / ▼ -3h deltas vs last week's totals + focus + distraction
image image image

Year notes

Dayflow_YYYY.md written on every sync with a GitHub-style 53-week × 7-day activity heatmap plus year totals and your best day.

Side panes

Three views you can dock anywhere:

  • Today — live-rendered today's note with refresh + last-sync indicator
  • This Week — same shape, for the current weekly note
  • Dashboard — tiny start page: hero number (today's hours), one-sentence focus-goal status, three navigation buttons. Heatmap-free, deliberately minimal.
image

Bases dashboards

One click installs three .base files:

  • Recent days — card gallery of the last 30 days
  • Weekly review — sortable table of every weekly note
  • Focus performance — table grouped by goal hit / close / miss
image

ActivityWatch enrichment (opt-in)

Flip a toggle to query your local ActivityWatch and get precise per-app minutes under every Dayflow timeline card, plus a full per-day app breakdown. Web-tab noise filtered to active-browser windows only. Localhost only — auto-detects buckets via /api/0/buckets.

Schema drift detection

Every sync checks the live chunks.sqlite against the schema fingerprint the plugin actually reads. Missing required tables abort with a clear error; unknown new tables Dayflow.app added since the plugin was written surface as a Notice so you know to check for an update.

Stamp into your Obsidian Daily Note

Optional toggle: appends a small > [!info] Dayflow callout into your existing core-Daily-Notes file linking the Dayflow note for that day. Stamp block is bounded by HTML comments so re-syncs update in place instead of duplicating.

Status bar + commands + ribbon

  • Status bar: Dayflow · synced 12m ago — click to sync now
  • Commands: Sync now, Open today's note, Open this week's note, Open Today side pane, Open This Week side pane, Open Dashboard
  • Ribbon icons: sync · Today view · Dashboard

Install

Via BRAT (recommended for now)

  1. Install BRAT from Obsidian's community plugin store
  2. Cmd+P → BRAT: Add a beta plugin
  3. Paste caezium/obsidian-dayflow-plugin
  4. Enable Dayflow in Settings → Community plugins

Manual install

  1. Download main.js, manifest.json, styles.css from the latest release (the SQLite WASM is bundled into main.js — no separate asset)
  2. Place them in <vault>/.obsidian/plugins/dayflow/
  3. Reload Obsidian, then enable Dayflow in Settings → Community plugins

Requirements

  • macOS (Dayflow.app is macOS-only)
  • Dayflow installed and recording activity
  • Obsidian 1.8.0 or newer

Setup

After enabling the plugin:

  1. Open Settings → Dayflow
  2. Confirm the Output folder (default 30_resources/Dayflow)
  3. Click Install Bases dashboards to drop the three .base files
  4. (Optional) Toggle Enable ActivityWatch sync if you have ActivityWatch running
  5. Trigger your first sync: Cmd+P → Dayflow: Sync now

Your daily and weekly notes appear under the configured folder. Open the side pane via Cmd+P → Open Today side pane or by clicking the activity icon in the ribbon.


Settings

GroupSettingDefaultWhat it does
OutputoutputFolder30_resources/DayflowVault folder for all generated notes
SyncsyncDays3How many days back each sync covers
SyncskipDaysBefore(empty)YYYY-MM-DD lower bound. Days before this are never synced.
SyncsyncOnStartuptrueRun a sync 5s after Obsidian opens
SyncintervalMinutes30Background sync interval. 0 disables.
SyncdbPath(empty)Override path to chunks.sqlite
FormattingcategoryWikilinkstrueRender categories as [[wikilinks]]
FormattingincludeDeletedfalseInclude cards marked deleted in Dayflow
FormattingappendToDailyNotefalseStamp a callout into your existing Daily Notes file
ActivityWatchawEnabledfalseOff by default — flip on if you have AW running
ActivityWatchawUrlhttp://localhost:5600Your AW server URL
ActivityWatchawWebBrowserOnlytrueFilter web events to active-browser windows only

Privacy

  • Read-only SQLite — the plugin opens chunks.sqlite with wasmBinary + sql.js in read-only mode. It cannot modify Dayflow's data, even by accident.
  • Zero network calls by default. The only network code path is the optional ActivityWatch enrichment, which only ever talks to localhost:5600.
  • No telemetry. No analytics, no error reporting, no remote logging.
  • Desktop-only. isDesktopOnly: true in the manifest. Runtime guard via Platform.isMobile means even if loaded on mobile, the plugin no-ops cleanly with a one-line explainer.
  • Build provenance. Every release is built in GitHub Actions and signed with a sigstore attestation linking the binary to its exact source commit. Verify with gh attestation verify main.js --owner caezium.

You can audit the network surface with grep -RIE 'fetch\(|axios|requestUrl|XMLHttpRequest|https?://' src/. The only matches will be inside src/data/activitywatch.ts (gated behind the awEnabled toggle) and the SVG XML namespace (http://www.w3.org/2000/svg) which is not a network call.


Build

git clone https://github.com/caezium/obsidian-dayflow-plugin
cd obsidian-dayflow-plugin
npm install
npm run build   # type-check + bundle to main.js

Output: main.js (CJS bundle, ~1 MB — esbuild's binary loader inlines sql-wasm.wasm directly into the bundle so there's no separate asset). Drop that + manifest.json + styles.css into <vault>/.obsidian/plugins/dayflow/.


Architecture notes

  • src/db.tssql.js wrapper. The WASM blob is imported via esbuild's binary loader at build time (import wasmBytes from '../node_modules/sql.js/dist/sql-wasm.wasm') so it ends up inlined in main.js as a Uint8Array. We hand it to initSqlJs({ wasmBinary }) so sql.js never tries to fetch() it — that fails in Electron's renderer.
  • src/data/ — One module per Dayflow table: timeline, journal, standup, goals, ratings, observations. Each gracefully degrades when a table is missing (for older Dayflow schemas).
  • src/aggregators/ — Pure functions that turn rows into category breakdowns, per-app totals, focus heatmaps, context shifts, dominant-category grids, week-over-week deltas, focus streaks, etc.
  • src/viz/ — Pure-JS SVG generators (treemap with nested mode, heatmap, sankey, bars, donut, lines, workflow-grid, hourly-strip, year-heatmap). Text fills use currentColor for theme awareness; app tiles use brand colors via colorForApp.
  • src/exporters/ — Daily-note + weekly-note + year-note + Bases + daily-note-stamp.
  • src/ui/ — Three ItemView subclasses (today, week, dashboard). Today and Week embed their respective notes via MarkdownRenderer.render(); Dashboard is fully DOM-rendered.
  • src/data/activitywatch.ts — REST calls via Obsidian's requestUrl (fetch/axios are CORS-blocked). Auto-discovers window/web/afk buckets.
  • src/util/schema-check.ts — Compares the live SQLite schema to the fingerprint each fetcher expects. Notice for drift, abort for missing-required.

Acknowledgements

  • Dayflow by Jerry Liu — the app that captures everything

License

MIT — see LICENSE.

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.