# Changelog

> Every DocGraph release, newest first.

Source: https://docs.docgraph.app/changelog/

Every DocGraph release is listed here, newest first.

The notes for the version you are running also ship inside the app, so you
can read them offline. They open in a **What’s new** tab once after each
feature release, and you can reopen them from **Help → Release Notes**,
<kbd>⌘K</kbd> → **Show Release Notes**, or **Settings → General → Updates**.
Inside the app, the tab can load the pictures for these notes from this site;
that request sends nothing about you, and while automatic update checks are off
it happens only when you click to load them. This page is the full history.

DocGraph checks for updates once a day. The check fetches one file from GitHub
and sends nothing about you or your notes. Turn it off in
**Settings → General → Updates**. Either way, nothing installs without your
click.

## v0.1.0 — 2026-10-21

The first DocGraph release. This is a **beta**: things may still change and you
may hit bugs, so keep a backup of your notes. Tell us what goes wrong with
**Help → Report a Problem…**.

DocGraph runs on Macs with Apple Silicon (M1 and later), macOS 13.3 or later.
Macs with an Intel chip are not supported yet.

### Writing

- Edit HTML and Markdown notes directly on the page, with Markdown shortcuts,
  slash commands, callouts, task lists, tables, and code blocks.
- Whiteboards for diagrams, entity-relationship tables, and freeform layout.
- Tables and charts that read from your notes and update as they change.
- Sort any table by clicking a column header: data tables and saved queries keep
  the sort as a view, and plain tables reorder their rows with undo.
- Templates, daily notes, and Quick Capture from anywhere with a global hotkey.
- Add images by pasting, dragging, or typing `/image` to pick a file. Images
  are stored in your vault, fit the page width, and resize from any corner.
- **Voice**, on your Mac: the Voice button in the page bar dictates into the
  note where your cursor is, and reads the page aloud. Turn it on in
  [Settings → Voice](docgraph://settings/voice); each part downloads its
  speech model the first time you use it.

### From the menu bar, without opening the window

- Quick Capture and Quick Todo start with the text you just copied, selected:
  Enter keeps it, typing replaces it. Each copied text is offered once, and you
  can turn this off in Settings.
- End a capture or todo with `priority:high`, `status:todo` or any property
  you've declared, and it lands as a property. "Send the deck by friday"
  also gets a due date, and your words stay as you wrote them.
- Press ⌘P in Quick Capture to add the thought to the end of any note instead
  of your inbox. The notes you used last are listed first.
- The menu-bar icon has Recent Notes: your starred files, then the notes you
  opened last. The quick switcher lists the same notes when you haven't typed
  anything yet.
- **Clipboard to Today's Note** adds whatever you copied to today's note with a
  timestamp, in one click from the menu bar, ⌘K, or a shortcut you choose. A
  notification tells you where it went.

### Getting around, and working on many notes at once

- **Links into your notes from anywhere.** Right-click a note or its tab
  (or ⌘K) for **Copy link to note**; **Copy link to block** copies the
  same kind of `docgraph://` link — paste it into Shortcuts, a browser or
  another app and it opens the note, scrolled to the block. Hold ⌥ to copy it
  as a Markdown link. A note that moved opens its closest match; a link to
  another vault asks before switching.
- **Notes reopen where you left them**, after a restart too. The chat's empty
  state offers **Continue: <your last note>**.
- **Find & Replace across the vault** (⌘⇧H): each match shows the change as a
  redline before anything is written, you tick the ones to change, and every
  note gets its own undo step. Tags, links, code and front matter are left
  alone unless you ask.
- **Select several notes** in the sidebar with ⌘-click and ⇧-click, then move,
  tag, set a property, convert, or trash them together — or drag them all.
- **Weekly and monthly notes** beside your daily one, with ISO week numbers;
  `{{daily:list}}` in a weekly template links that week's days.
- **Random note** and **On this day** in ⌘K and in the chat.
- **Drag a heading in the Outline** to move its whole section.
- **Template slots**: up to three templates on a key of your choice, each
  going into a new note, today's note or the open note. Also in the menu-bar
  icon under New from Template.
- Pages of a type with a status or priority show them as **chips in the
  header**: click one to change it.

### Markdown, the way your vault already writes it

- An Obsidian vault opens as-is. `[[wikilinks]]` — with `|label`, `#Heading`
  and `#^block` — are real links: found by name anywhere in the vault, shown in
  backlinks and the graph, kept up to date when you rename a note, and dimmed
  when no note has that name yet (following one offers to create it).
- `![[embeds]]`: an image (`|300` sets its width), a whiteboard preview, or
  another note — or just one section or block of it — shown in place.
- `==highlight==`, `^[inline footnotes]`, `$math$` and `%%comments%%`.
- Front matter: `tags:` tag the note, `aliases:` give it other names (found by
  `[[links]]`, the `[[` picker and ⌘K), and `dir: rtl` makes it right-to-left.
- Suggestions while you type `#`, `@`, `due:` and `@@` — the same vocabulary
  HTML notes use.
- Callouts, Mermaid and math in the slash menu; a Highlight button in the
  selection toolbar; click an image and Backspace to remove it.
- **Convert to HTML page** (right-click a Markdown note, or ⌘K) turns the note
  into an HTML page next to it: todos, callouts, footnotes, embeds and tags
  come along, links to it from other notes are updated, and the original goes
  to the trash.

### In both kinds of note

- Code blocks are syntax-highlighted by language.
- Math, rendered from TeX (`/math`).
- **Copy link to block** in the right-click menu, and heading and block links
  that open the note scrolled to the right place.
- Embed another note, a section of it or one block (`/embed`); embedded
  content never runs scripts, and an encrypted note stays locked.
- Paste a URL over selected words to link them.
- Strikethrough in the selection toolbar and right-click menu, or `⌘⇧X` —
  written `~~text~~` in Markdown, `<del>` in HTML.
- `⌥↑` / `⌥↓` move the block you're in; a heading takes its section with it.
- HTML notes get footnotes (`/footnote`), numbered for you when the page is shown.

### Finding things

- Full-text and semantic search across the vault, plus a graph view of how your
  notes link together.
- Saved queries that collect notes, tasks, and table rows from across the vault.

### A graph you can navigate

- **Search** the graph by name, then press Return to fly to the match.
- **Path:** Shift-click two notes and choose **Path** to light the shortest
  chain of links between them. Type `/path` to keep that path in an HTML note
  as a live list.
- **Orphans:** one button cycles notes with no links between dimmed, shown,
  hidden and **orphans only**.
- **Pins:** hold Shift as you drop a note to pin it where it is.
- **Topics:** color the graph by topic, show one topic at a time, and **Ask**
  about a topic's notes in chat. **Similar notes** draws faint edges between
  notes that read alike.
- **Filter by folder or tag**, keep a filter as a **saved view**, and
  Shift-click notes to **Ask AI about N notes**.
- Saved queries can sort notes by how central they are (**PageRank**), and
  embedded notes count as links.

### Timeline, automations, and notes that come back

- **Timeline** panel: every dated thing in your vault on one axis — dates you
  wrote, task due dates, captures and version-history commits. Filter by
  person, note type, tag or topic, select a range of columns and ask the AI
  about exactly those notes, or **Save as chart** into a note.
- **Automations** (Settings → Organize → Automations): small automations that need no AI, such as
  *when a note gets tag #archive, move it to Archive/*. **Preview** shows what
  a rule would do, every run can be undone in one step, and a rule can never
  bounce a note back and forth.
- **Link all** in the Related tab links every unlinked mention of other notes
  at once, and **Link everywhere** links this note wherever it is named. One
  Undo reverts the whole run.
- **Coming back**, under the Calendar's selected day: **On this day** from
  earlier years, busy notes nobody has touched in 90 days, and decisions whose
  review date has passed.
- **Vault health** is a query source listing orphans, broken links,
  duplicate titles, missing keys, suggested tags, out-of-date summaries,
  disagreements and rule runs.

### Person pages

- Every `@name` in your vault can have a page. Open the Mentions panel, pick a
  name, **Create page** — `Mentions/<name>.html` appears with three sections
  that fill themselves: open items assigned to them, `#feedback/…` lines
  about them, and every mention. Nothing is copied: each section is a saved
  query that asks about *the page it sits in*, so the same three queries
  serve every person. Click a note's name in any section to open it.
  ⌘-click an `@name` in a note to jump to their page.
- Saved queries can say `@page.title`, `@page.folder`, `@page.path` or
  `@page:<property>` as a filter value and resolve it against the page they render in.
- The `people` query source carries the **line** each mention sits on and
  that line's **tags**, so "every `#feedback/win` line about Omar" is one
  filter.
- Settings → Vault → Templates & daily notes has a **Mentions folder**
  setting. A `Templates/person.html` of your own replaces the built-in page
  shape.

### 1:1s

- **New 1:1** in the Mentions panel, or ⌘K → **New 1:1 with…** and a name,
  opens today's 1:1 at `Mentions/<name>/1-1/<date>.html` — created on first
  use, the same note every other time that day.
- **Carried over** lists every unchecked task from your earlier 1:1s with
  that person, live. Tick one anywhere and it leaves every later meeting;
  nothing is copied, so nothing is counted twice.
- **Recent 1:1s** links the last three meetings, newest first — in the 1:1
  and in the **1:1s** section on the person page.
- Renaming a person moves their 1:1s with their page and re-points them.
- A `Templates/one-on-one.html` of your own replaces the built-in shape;
  `{{person}}` is the person's name.

### Presenting

- Right-click a folder and choose **Present** to play its HTML pages as a slide
  deck, in the order the file tree shows them. Drag a page in the tree to move
  its slide. Arrow keys or Space move between slides, and Esc stops.
- A small bar at the bottom shows where you are and lists every slide. It fades
  away while you talk and comes back when you move the mouse.
- Press **P** while presenting to open the presenter view: a second window only
  you see, with your speaker notes, the next slide, and a clock. It opens on your
  other screen when you have one, and the arrow keys work in either window.
  A slide's notes are a section headed **Speaker notes**: the heading and
  everything under it, up to the next heading of the same level or the end of
  the slide. Choose **Speaker notes** from the `/` menu to add one. Notes never
  appear on the slide itself.
- Speaker notes are ordinary content, so they hold anything you type: bulleted
  and numbered lists, nesting, bold, italic, code and dividers, and the presenter
  view shows them that way. Keep the notes last on the slide. Beside the notes,
  the presenter view shows about how long they take to read aloud, and **A−** /
  **A+** (or `[` / `]`) change their size.
- The presenter view times your talk. Set a planned length from the Talk label,
  or with a `deck-minutes` property on the folder, and give any slide its own
  time with a `slide-minutes` property — the other
  slides share what is left. Talk and slide time show as actual / planned with
  a small bar each, turn amber near the plan and red past it, and a band on the
  talk bar shows whether you are ahead or behind. Pause stops both clocks, and
  clicking the talk clock twice restarts it.
- The Properties panel suggests names as you type a new property: the names
  DocGraph reads, such as `deck-minutes` on a folder and `slide-minutes` on an
  HTML page, each with a line saying what it does, and the names already used
  in your vault, the most used first. Any other name still works. A near miss like `slide-minute`
  asks whether you meant the real one.
- The demo vault includes a **Slide Deck** folder to try it on: right-click it
  and choose **Present**.

### Your vault's vocabulary

- **Settings → Ontology** lists the kinds of notes in your vault (`meeting`,
  `project`, `decision`, `person`, your own), the keys each should carry, what
  a property points at (`owner` → a person), and the link types the AI may
  write. **Found in your vault** offers what you already use but never
  declared. Until you change something, no file is written.
- A typed note missing a key its type expects shows a hint in the Properties
  panel. It is only a hint: nothing is blocked or filled in.
- **One person, several spellings.** `@Nady`, `@nady_ahmed` and a matching
  email address are grouped into one person in the Mentions panel, person pages,
  the graph and chat. **Split** undoes a grouping for good, and when DocGraph
  is unsure it asks **Same person?** instead. Your notes are never changed.

### Your notes stay yours

- Your notes are plain `.html` or `.md` files in a folder you choose. No
  account, no sync service, nothing to sign up for.
- Optional at-rest encryption, per note or per passage, using age with a
  passphrase only you hold. It is built into every download — there is
  nothing to enable — but nothing is encrypted until you lock it.
- Every off-machine request goes through one checkpoint: HTTPS only, and only
  to a host on the list for that purpose. Apart from the daily update check,
  the features that can reach the network are off until you turn them on.
  Requests show live in the title bar while they happen and are recorded in
  the Activity Ledger afterwards.
  That includes model downloads, the model list refresh and the Hugging Face
  file lookup, each with the bytes it transferred.
- Git backup only uses encrypted remotes: an `https://` or SSH remote, or a
  folder on this computer or a drive. `http://` and `git://` are refused.

### Opening vaults safely

- DocGraph never opens your whole home folder, the disk root, or a system folder
  as a vault — it explains why and asks for your notes folder instead. This
  holds when you open a file from Finder with "Open With" too.
- A very large vault opens without waiting on a loading screen: the window
  opens right away, the sidebar says when a scan was cut short, and **Keep
  scanning** indexes the rest.
- Hold ⌥ Option while DocGraph launches to skip your last vault and pick
  another.

### A bigger demo vault

- The demo vault has a **Features** folder: a short page for each feature
  the tour doesn't cover, with the real thing to try wherever it can. That
  includes Obsidian wikilinks, embeds, math and footnotes, live queries over
  your tasks and tags, paragraph properties, an architecture diagram and a
  database schema, right-to-left text, people and dates, templates and daily
  notes, two pages that disagree so the Problems panel has a contradiction to
  show, and a locked line on the Encryption page that you can open with a
  password. A **Templates** folder holds a meeting-notes template to try with
  ⌘N.
- It also has a **Launch Checklist** whose todos and lines carry status,
  priority, owners and blocked-by links, with heading progress and a board to
  drag them on, and pages for the Timeline, Rules, notes that come back, your
  vault's vocabulary, setting up AI, and the What's new tab.

### Extending

- An MCP server so external tools can work with your vault. Plugins are
  coming in a later release.

### AI, if you want it

- Off until you turn it on. Runs on your Mac with the built-in model runtime,
  Ollama, or Apple's on-device model, or through a cloud provider whose key
  you supply yourself.
- Chat with your vault, generate drafts, and let the agent edit files with your
  approval.

#### Local AI without installing anything else

- **Set up AI** walks you through it in four short steps. It first shows
  what your computer has — memory, free space, and any AI already on it
  (Ollama and its models, AI agents like Claude Code) — then lists the ways
  to turn AI on and lets you pick: download a model here, use Ollama, use
  Apple's on-device model (where your Mac supports it), use an AI agent you
  already have, or use an AI provider with an API key.
- **No Ollama needed.** DocGraph includes its own AI runtime. Pick a
  model — Small, Balanced or Large, with its download size and speed shown —
  and DocGraph downloads it, checks it, and runs it on your computer. The
  one that fits your computer best is marked *Suggested*, using
  [MMF](https://modelfit.docgraph.app); the choice is always yours.
- **Already use Ollama?** DocGraph finds it and lists all your models; pick
  one and nothing is downloaded. If Ollama is installed but not running, or
  has no models yet, the wizard helps with that too.
- **On a Mac with Apple Intelligence**, the wizard offers Apple's own
  on-device model: nothing to download, and it runs on your Mac. If your Mac
  can run it but Apple Intelligence is off, the wizard opens the right
  System Settings page for you. It is best for quick questions about your
  notes; for bigger jobs, pick a downloaded model.
- **Notes in Arabic, Hebrew, Chinese or other languages?** Setup asks
  what language your notes are in. *Many languages* lets the AI find the
  right notes in about 94 languages — even when you ask in English about a
  note written in Arabic. You choose; nothing is picked for you. The choice
  applies to every vault, and you can change it in Settings → AI →
  Chat & index.
- **Settings → AI → Models & providers** has a *Built-in AI* section: your
  downloaded models (use, delete, disk used), *Add a model file you have*
  for a `.gguf` you already own, and *Check for new models*.
- The wizard ends only after a real answer from the AI, and everything can
  be changed later in Settings → AI.

#### The AI finds the right notes more often

- **You choose the search language first.** The AI can't search your notes
  until you pick *English only* or *Many languages*. Setup asks; with AI on,
  DocGraph asks when it starts and the chat panel asks until you do. Until then
  nothing is downloaded and nothing is indexed for the AI; ⌘K keyword search
  works as always.
- **A second small model double-checks what search found.** It reads each
  found passage together with your question and puts the best first. It
  downloads with the search helper and runs on your computer: about 75 MB in
  total for English, about 270 MB for many languages. Turn it off with
  *Rerank results* in the AI Index section of Settings → AI → Chat & index.
- **"Nothing in your notes matched"** — with English only, when your notes have
  nothing on a question, the chat says so under the answer instead of
  handing the AI unrelated notes.
- **Follow-up questions on a new topic stay on that topic** instead of being
  mixed with the previous one.
- **Agent mode works on small models.** When a model's memory is too small
  for every tool, DocGraph offers it fewer tools instead of letting your notes
  be cut from the prompt, and says so while it answers.
- **⌘K** puts notes whose title matches above notes that only mention the
  word, and completes only the word you are still typing.

#### Chat that keeps up with you

- **An answer is never lost.** DocGraph saves each question the moment you
  send it and each answer as it finishes — including one you stopped (what it
  had written so far, marked as stopped) and one that failed. Switching to
  another sidebar tab mid-answer keeps it: come back and it is still
  arriving.
- **Retry** under a failed answer runs the same question again.
- **The first question after opening the app is faster** on Apple Silicon
  models: DocGraph warms the model the way your questions actually use it.
- **Saved chats**: search them, rename them, pin the ones you come back to,
  and see every chat in the vault (with a *This file* filter). Deleting asks
  first and can be undone for a few seconds.
- **Point a question at a note**: type **@** and a note's name, or drag a note
  from the file tree onto the chat box. Type **/** for the actions the AI can
  take (/create, /edit, /tag, /rename).
- **⌘⇧L** opens the chat and puts the cursor in it, from anywhere.
  **Esc** stops an answer; **↑** in an empty box brings back your last
  question.
- Answers show *italic*, ~~strikethrough~~, nested lists and coloured code,
  and the list keeps your place when you scroll up while an answer streams.
- Each step the AI takes shows how long it took, with its exact request and
  result one click away.

#### The AI follows how your notes connect

- **Search follows your links.** When the AI looks for an answer it also
  follows the links between notes, in both directions, so a note that cites
  the one you asked about can surface too. Questions like *"What depends on
  the billing API?"* follow your typed links (`depends-on`, `supersedes`,
  `cites`, and the others in your vault's vocabulary).
- **Narrow a question in plain words.** *"What did we decide about the cache,
  tagged #ops, last week?"* searches only those notes. Tags, `@people`,
  dates such as *last month* or *since 2026-09-01*, note types
  (*"what decisions…"*) and page properties all work. A line above the answer
  shows what the search was narrowed to, and if a filter matches nothing the
  normal search runs instead.
- **Connections under an answer.** When the notes an answer used link to each
  other, **Connections** lists those links, such as
  *invoice-service ─depends-on→ billing-api*.
- **Summaries and earlier answers are searched too.** A note you summarized
  can be found by what it is about, and answers that cited your notes help
  later questions. Your notes' own text always ranks first.

#### Ask about the whole vault

- *"What are the main themes of my vault?"* or *"What do I know about
  pricing?"* get an answer drawn from every topic, not a handful of
  passages. DocGraph groups closely connected notes into **topics**, your
  local model writes a short summary of each in the background, and a
  whole-vault question is answered from those summaries, citing the topics
  it used.
- DocGraph decides from the question's wording whether it is about the whole
  vault. A factual question always gets the normal search.
- Turn it off with **Vault topics** in the AI Index section of Settings → AI →
  Chat & index. Summaries live in the
  index only, never in your notes, and are always written by the local model.

#### When your notes disagree

- Turn on **Find contradictions** (Settings → AI → Chat & index, off by
  default, needs AI). Your local model reads facts from changed notes, and when two notes
  state the same fact differently — a soak window of 30 minutes in one, 45 in
  another — the note shows a strip: *Another note says otherwise*, with both
  values and the other note's date.
- In chat, the AI is told when a passage it uses is disputed, so it gives both
  values instead of silently picking one.
- A note that links to the other as `supersedes` or `source` is an update or a
  citation, not a disagreement, and is never flagged.
- Tested on `qwen3.5:4b-mlx`. Some smaller models find nothing.

#### The assistant remembers

- **Memory across chats.** With Agent Mode on, the assistant can propose a
  line to remember, such as a preference. Nothing is saved until you click
  **Remember**. Everything it remembers is one ordinary note,
  `Memory/agent.md`, that you can edit or delete.

#### Web search that tells you when it isn't working

- **Settings → Web search opens with a status line** saying whether search
  works right now, and what to do when it doesn't: nothing answering, the
  server's search engines refusing, JSON output turned off, or a server that
  isn't on this machine. A test that finds no results is reported as a
  problem, not a pass.
- **Set it up for me** starts a SearXNG search server in Docker, reachable
  only from this machine, with engines that answer. If one is already
  running, DocGraph finds it and offers it with one click. You can also copy
  the terminal command instead.
- **No Docker yet?** The page checks first and shows only the steps that
  apply: a download link for your system and three install steps if Docker
  is missing, an **Open Docker Desktop** button that waits for it to start if
  it's installed but not running, and a "set it up yourself" guide.
- **Setup shows its progress.** Each step (download, start, wait for it to
  answer, test search) is ticked off as it happens, with the download counted
  in parts and a running clock, so a first download of a few minutes doesn't
  look frozen. A failed step says what went wrong and offers **Try again**.
- **Choose the language, SafeSearch level, date range and number of results**
  for web searches. If your server can't filter by date, the search runs
  without that filter and Settings tells you so, instead of returning nothing.
- **Allow in this chat** on a search card sends that search and stops asking
  for the rest of that conversation. It never carries over to other chats.
  "Approve all this session" for writes does not cover web searches; they
  still ask.
- **Recent searches** lists what the assistant searched for until you quit.
  The list is never saved to disk.
- A pasted results-page link is tidied to the server's address.

#### Cloud AI providers — your own key, off by default

- Chat can use **OpenAI, Anthropic, OpenRouter, or any OpenAI-compatible
  endpoint** (LM Studio, llama.cpp) with your own API key. Set one up in the
  AI Providers section of **Settings → AI → Models & providers**: save the key (it goes into your OS
  keychain, never DocGraph's files), then **Allow** the provider in the
  system dialog. Its models then appear in the chat picker, labelled
  *off-machine*.
- **Nothing leaves until you choose it.** Local stays the default everywhere.
  A cloud model is used only by a conversation whose picker names one, or by a
  document action (/write, or Summarize this file, Check spelling or Beautify in the ✦ AI menu) whose **Run on**
  choice names one. Tags and inline suggestions always stay local.
- **You can see every call.** The title-bar badge reads **Cloud AI ·
  {provider}** while a cloud model is selected; a strip above the composer
  says where your message will go; each answer shows its tokens and cost;
  every call is logged in **Settings → Privacy → Activity & audit**.
- **Secrets are blocked by default** from prompts bound for a cloud provider
  (turn off in AI Providers).
- **Set a spending limit on your API key.** Calls are billed to your account
  by the provider. DocGraph shows each answer's cost and stops an agent turn
  on a cloud model after 6 model calls, but the limit you set with the
  provider is the only cap DocGraph cannot bypass.
