ORDdashboard

approvedunreviewed

by Ordnung

Shows note analytics and lists the notes that are ready to refresh.

↓ 73 downloadsUpdated 14d agoMIT

ORDdashboard

Tracks how you work with your notes and tells you which ones are ready to refresh.

ORDdashboard cover

The dashboard lives in the sidebar: it keeps its state while you work, and notes open in a new tab without closing it. The scrollable part holds search, statistics and note lists; the link graph is pinned to the bottom of the panel, so it stays visible while you scroll. Panel actions (refresh, clear data) sit in the panel header — the top-right corner of the panel itself.

Panel header actions are not visible if a theme or snippet hides the panel header. In that case use the ribbon icon or the command.

Features

CapabilityWhat it does
AnalyticsTotals for notes, views, edits and notes active in the last 30 days; large totals are shortened (241,3 тыс.) with the exact number on hover
Most activeNotes with the most views and edits in the current month
Ready to refreshNotes you opened but have not revisited, with 5 progressive stages and deadlines
Recently activeNotes opened in the last week, or opened more than once this month
All notesYour notes sorted by creation date, with activity details
Link graphGraph pinned to the bottom of the panel: the neighbourhood of the open note, or the whole vault most-connected view. Folded away it is a single header row. The open note keeps its name; other names are hidden while the graph is only fitted and appear as you zoom in
ZoomWheel zooms, dragging pans, hover lights up a note's links, click opens it; double-click fits the graph again
Collapsible sectionsSelect a section header to fold it away; the number of items stays visible
SearchQuick search by note name or path
I18nInterface adapts to the Obsidian language (EN / RU)
Compact dataAggregates instead of long timestamp lists: the data file stays in the kilobyte range

Installation

Settings → Community plugins → Browse → ORDdashboard → Install & Enable

Manual: copy main.js, manifest.json, styles.css to .obsidian/plugins/ord-dashboard/

Usage

ActionWhat happens
Ribbon iconOpens the dashboard in the right sidebar
Panel header: refreshRebuilds the panel from the current data
Panel header: clear dataAsks for confirmation, then deletes all recorded activity
Command: Open dashboardSame as the ribbon icon
Command: Clear analytics dataAsks for confirmation, then deletes all recorded activity
Command: Seed activity from file datesFills activity for notes edited in the last 30 days
Select a note in the panelOpens it in a new tab; notes from "Ready to refresh" advance one stage

Link graph

The graph is a bounded overview of the whole vault, drawn and laid out with the same formulas as the core Graph view:

ElementRule (same as the core graph)
ForcesforceX/forceY(centerStrength), forceLink(linkDistance, strength = linkStrength / min(degree)), forceManyBody(-repelStrength, distanceMin 30), forceCollide(radius 60, strength 0.5)
Integrationv *= 0.6, alpha decays from 1 to 0.001 over ~300 ticks, forces re-heat to 0.3 when data or settings change
Node sizenodeSizeMultiplier * clamp(3 * sqrt(degree + 1), 8, 30), scaled by sqrt(scale) on screen
LinkslineSizeMultiplier px thick, drawn between the circles, --graph-line, highlighted with --interactive-accent while hovering
Labelsfade with clamp(log2(scale) + 1 - textFadeMultiplier, 0, 1); the hovered note keeps its size and sits lower
Hovereverything unrelated to the hovered note fades to 20%
Zoom1.5^(-deltaY / 120), range 1/128 … 8, zoom centre under the cursor when zooming in
Open noteBy default the graph shows the neighbourhood of the note you are reading; it rebuilds whenever you open another note. Links in both directions are followed, and a note reached only through shared section indexes is dropped: "close" is measured with a random walk from the open note, not assumed from the number of hops. Switch "What to show" for a whole-vault overview instead
Nearest means measuredEvery note links to the sections it lives in, so two hops can mean the whole vault. Candidates are scored by a focused random walk divided by the same walk started over the whole vault (a link count for undirected links): a note that is only two hops away through an index scores below 1 and is left out. Index notes never pass the walk on, so "registered in the same table of contents" is not closeness. Measured on a 3 225-note vault: opening a deep work note gives 10 notes — its own files, a template and the nearest module notes
Place counts tooNotes filed next to the open one are neighbours even when nothing links them, so a checklist shows the checklists next to it. A real link always weighs more than sharing a folder
Index notesA note linked to at least 2% of the vault (and at least 25 links) is a table of contents, not a connection: dimmed and drawn without lines by default. On the vault above that removed 95% of the lines, which all led to seven index notes
Node typesTags, attachments, unresolved links and orphans — each with its own colour, exactly as the vault's graph settings say (showTags, showAttachments, hideUnresolved, showOrphans)
Colour groupsGroups from the vault's graph settings are applied (the last matching group wins). Queries using tag:, path:, file:, plain text, quotes and - negation are supported; a group with anything else (Obsidian's internal search operators) is skipped rather than guessed

Colours come from the core's own CSS classes (.graph-view.color-fill, …color-fill-tag, …color-fill-attachment, …color-fill-unresolved, …color-line, …), read from a probe attached to the document — the palette (--graph-node, --graph-line, …) is declared on body, so it only resolves for an element that is actually in the document. That is why the graph repaints on css-change: switching the theme, the light/dark mode or a CSS snippet recolours it immediately, and per-type opacities (unresolved links 0.5, arrows 0.5) come along.

Node size. The core sizes nodes for a full graph window (nodeSizeMultiplier * clamp(3 * sqrt(degree + 1), 8, 30), times sqrt(scale)), tuning them for thousands of nodes on a large canvas. A panel is much smaller, so the same formula scaled down looks like the original: "Node size in the panel" defaults to 50% of the core size (options: as in Obsidian / 75% / 50% / 35%), and a hub can never grow past 5% of the panel, so no dots turn into blobs. With the values from this vault (node size multiplier 1.205, forces 0.7 / 20 / 0.9 / 30) a hub is about 5 px and a leaf about 2.4 px in a 240×180 px panel.

By default the look — node and line size, text fade, arrows, which node types to show and the colour groups — is read from the vault's own graph settings (.obsidian/graph.json), so the picture matches the Graph view you configured. The forces stay at the core defaults on purpose: the panel shows a few hundred nodes, and a force configuration tuned for a full window (this vault uses center 0.7 with repel 20) squeezes them into a tight lump.

ActionWhat happens
Select the graph headerCollapses or expands the graph, freeing its part of the panel
Hover a nodeHighlights the node and its neighbours, dims the rest, shows their names
Select a nodeOpens that note; the graph then rings it as the open note
Drag a nodeMoves it and lets the layout settle again around it
Drag the backgroundPans; the mouse wheel zooms, double-click fits the graph into the panel
Header buttonsRebuild the graph, fit to panel

Review stages

StageIntervalDeadline
17 days2 days
214 days2 days
330 days7 days
460 days7 days
5120 days14 days

Settings

SettingDefaultDescription
Track opened notesONRecords when a note is opened
Track edited notesONRecords when a note is edited
Show ribbon iconONAdds the dashboard icon to the ribbon; turn it off to keep the left sidebar clean and open the panel from the command palette or a hotkey
Graph → Show link graphONPins the link graph to the bottom of the panel
Graph → What to showAround the open noteThe neighbourhood of the note you are reading (rebuilt as you navigate) or an overview of the whole vault
Graph → Depth2 hopsHow far the neighbourhood reaches (1–3 links away)
Graph → How close is close enoughClose linksNotes reached through links stay only when they are measurably closer to this note than to a random one; "Core-like" keeps everything inside the depth limit
Graph → Index notesDimmed contextA note linked to a large part of the vault is a table of contents: dimmed without lines, hidden, or drawn like the core does. Its links are never routes either: reaching a note through a table of contents does not make it close
Graph → Notes filed next to the open oneONNotes in the same folder count as neighbours even without links. Folders with more than 50 notes are ignored, since there a folder stops meaning anything
Graph → Graph nodes300Upper limit of notes; the most connected ones are kept
Graph → Animate layoutONLets the graph settle softly and then freeze
Graph → Node size in the panel50%Scales node sizes down for the panel; "As in Obsidian" reproduces the core formula exactly
Graph → Graph heightMediumShare of the panel taken by the graph (small / medium / large)
Data → Tracked notes—How many notes have recorded activity
Data → Clear analytics data—Deletes all recorded activity

Performance

The graph is a bounded overview, not a copy of the vault graph:

  • Node selection is capped (300 by default, up to 2000) and links are capped too, so drawing stays under a millisecond per frame no matter how large the vault is.
  • The link index is walked in small steps during idle time, never in one blocking pass; the panel stays responsive and the graph appears with a progress line.
  • The layout settles in about 300 ticks and freezes itself (a couple of seconds of soft animation, like the core graph); nothing runs while the graph is collapsed or the panel is hidden.
  • Rebuilds happen at most once per ten seconds after the link index changes, and only if the graph is visible.
  • Measured on synthetic data: 100 000 notes with 500 000 links are scanned in about 0.09 s of work spread over twenty idle steps — a million-note vault costs roughly a second of background work, not a freeze. 300 nodes settle in ~0.15 s of simulation time.

The graph reads only Obsidian's link index (resolvedLinks); note contents are never opened.

Data and privacy

Everything is stored locally in the plugin's data.json as aggregates per note: total views and edits, last opened and last edited timestamps, the refresh stage, and counters for the current month and the two months before it. Nothing is sent anywhere, and no note content is read or modified.

Notes that no longer exist are dropped from the data on start. Monthly counters older than three months are removed automatically.

Upgrading from 0.0.1

The first start of this version reads the old note-views.json, converts it into aggregates and renames the original file to note-views.json.bak, so nothing is lost. Records for non-Markdown files (the old version tracked every file type) are skipped.

Development

git clone https://github.com/Ordnungen/ord-dashboard
cd ord-dashboard
npm install
npm run dev      # watch build
npm run check    # typecheck + lint
npm run build    # production build

License

MIT

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.