What it does today
- Lists notes, folders, databases, boards and attachments, and finds a note's links, its backlinks and the links that lead nowhere
- Moves or renames an item and rewrites every link the move would break; folders and a trash that items can be restored from
- Reads and writes note text with a version check, so a save never overwrites a change made by another program
- Full-text search with Obsidian's query syntax, operators and regular expressions, ranked by BM25, and a quick switcher that honours Obsidian's excluded files
- Read-only SQL over documented views of the vault, and query blocks in notes, both SQL and Obsidian's own
- Obsidian's graph as data, a note's reading view as HTML, and export of the whole vault as a static website
- Sessions that keep a vault open with an index a watcher keeps in step with the files, so a backlink query takes a tenth of a millisecond and a program can follow what other programs change
- A desktop program on Windows and Linux that opens a vault, lists its folders and files, shows notes as the reading view does with pictures, sound, video and PDF files, and shows the changes other programs make as they happen
- An editor in live preview or source mode with Obsidian's syntax and keys, link suggestions and a table of typed properties, which saves as you type and merges the changes other programs make, showing each clash
- Search, the quick switcher, Backlinks and Outgoing links with unlinked mentions, the Tags view, the command palette and the settings view, as Obsidian has them
- Templates and daily notes with Obsidian's date formats and settings, as operations that scripts call too
- Undo and redo of every change the program makes to files, for people and programs alike, never over a newer change made by another program
- The graph view and the local graph with the filters, groups, display settings and forces of Obsidian's graph.json, laid out by the core, so a script gets the layout the program draws
- Math typeset with MathJax and Mermaid diagrams, as Obsidian draws them, in the reading view, live preview and the exported website, and Obsidian's hotkey editor over the vault's hotkeys.json
- Files pasted into a note or dropped on it go where Obsidian's attachment settings say, under the names Obsidian gives them, and the note embeds them; pasted HTML is sanitized and converted to Markdown as Obsidian does, its images saved as attachments
- Tables edited in place in live preview, cell by cell, with Obsidian's keys and table commands: rows and columns added, moved and removed, rows sorted by any language's collation, cells selected, moved, copied and pasted, and the table formatted
How it is verified
Scenarios run through both the operation handlers and the C API, plus tests of a C11 program and of the command-line program. Performance is measured on Windows and on Linux.
Performance
| Task | Budget | Measured |
|---|---|---|
| Backlinks of a note in a vault of 10 000 notes | 100 ms | 34 ms on Windows, 28–29 ms on Linux |
| Search for a word that is in every note, first page of 20 | 100 ms | 44–52 ms on Windows, 35–37 ms on Linux |
| Graph of the whole vault with tags and unresolved links | 400 ms | 237–324 ms on Windows, 107–115 ms on Linux |
| Export the vault as a static website | 20 s | 10.9–12.0 s on Windows, 1.35–1.38 s on Linux |
| Backlinks of a note through a session | 1 ms | 0.09–0.10 ms on Windows, 0.04–0.05 ms on Linux |
| Open the vault in the desktop program: the page's requests, the index current | 300 ms | 103–105 ms on Windows, 114–135 ms on Linux |
| Parse a 1 MiB note in the editor after a keystroke | 16 ms | 2.3–3.8 ms on Windows, 2.2–4.7 ms on Linux |
| One step of the graph layout with its frame, 10 000 notes | 33 ms | 11.3–12.1 ms on Windows, 7.4–9.9 ms on Linux |
| Paste a 64 MiB video into a note: staged, imported and embedded | 500 ms | 88–91 ms on Windows, 48–59 ms on Linux |
| Paste a 1 MiB web page as Markdown | 100 ms | 66–75 ms on Windows, 40–41 ms on Linux |
Next
Tabs and split panes, the status bar, and managing files from the file list.