v0.16.1
Part of the OpenKnowledge changelog.
Patch Changes
Add a committed, project-level auto-sync default (
autoSync.default). A maintainer can now ship a project that opens quietly for collaborators: set Settings → Sync → Default for everyone to "Off by default" (or "On by default") and the choice is committed to.ok/config.ymland travels with the repo via git. New clones then skip the "enable auto-sync" onboarding prompt and open with sync in the chosen state.autoSync.defaultistrue | false | null(null/absent = ask, the previous behavior) and seeds each machine'sautoSync.enabledon first open. It is a soft default — anyone can still change auto-sync for their own machine in Settings, which overrides the committed default for that machine only. The per-machineautoSync.enabledsetting stays gitignored and per-machine.Polish the create empty state and reorder the starter packs.
The starter-prompt pills below the create composer now show only when starting a fresh project — on an existing repo the composer stays focused on a free-form brief, while the embedded copy-a-prompt list (shown when Open Knowledge runs inside a coding agent) keeps its suggestions in both cases. Tightened the spacing so the "Add a starter pack" and "create a new file" links sit just under the templates list instead of floating below it. In the starter-pack picker, the Worldbuilding and Open Knowledge Format packs swapped places.
Update the markdown file icon in the file tree to a clearer document-with-"MD" glyph. The icon continues to follow the file tree's color treatment (muted gray by default, accented when its row is selected).
Fix the appearance theme toggle flickering other open project windows. With more than one project open, switching Light/Dark/System made every non-focused window flicker rapidly before settling on the right appearance. The cause was the window-chrome translucency material being re-applied to every open window on every theme change — work that scales with the number of windows and rebuilds the macOS vibrancy view each time, even though the material never needs to change on a light/dark switch. The desktop app now skips re-applying a window's translucency when it is unchanged, so theme switches are flicker-free across all open windows. Genuine "Reduce transparency" accessibility changes still apply to every window.
Add a property by pressing Enter in its value field.
When adding a frontmatter property, typing a name, pressing Tab, typing a value, and pressing Enter now commits the new property — the whole interaction is keyboard-driven. Previously Enter in the value field only settled the value and blurred the input, so the property was not added until you clicked "Add" with the mouse. This works for text, number, and date values, in both the document property panel and a folder's properties; editing an existing property's value keeps its prior Enter-to-settle behavior.
Remove the "Show all files" sidebar toggle; the file tree now always lists everything on disk except dotfiles.
The sidebar previously had two visibility toggles — "Show hidden files" (dot-prefixed entries) and "Show all files" (files excluded by
.gitignore/.okignore). "Show all files" is gone from every surface: the folder right-click menu, the sidebar empty-space menu, and the desktop View menu. The tree now always shows every file on disk — the previous "Show all files: on" default — so there is no way to scope it back to indexed/linked content. "Show hidden files" remains the single visibility toggle: off by default, revealing dot-prefixed entries when on. VCS and tooling internals (.git,.ok,node_modules) stay hidden in every mode, as before.Make the first search after an edit faster on large workspaces.
The workspace search index is rebuilt whenever the file index changes, and a rebuild previously re-read and re-parsed every markdown file on disk — so on a large workspace, the first search after any edit paid the cost of ingesting the entire corpus again. Each page's parsed search document is now reused across rebuilds when the watcher reports its file unchanged (by size, modified time, or inode), so a rebuild re-reads only the files that actually changed. Deleted and renamed pages drop out, and a failed read is retried rather than cached, so results stay current for typical edits.
Make
/api/searchreport when its index is still warming, so cold-start searches retry instead of returning false-empty results.Right after the server boots, the workspace search index is still being built from the on-disk file walk. A search arriving in that window previously either blocked or came back empty as if nothing matched. The search endpoint now answers immediately with a
ready: falsesignal while the index is warming, andready: trueonce it is built.The
searchMCP tool surfaces this: instead of reporting "no matches" during warm-up, it tells the agent the index is still building and to wait a couple of seconds before retrying (or fall back toexecgrep). The command palette shows its "Preparing search" status and polls until the index is ready, so results appear without retyping. This complements the earlier client-side cold-load fix by closing the same race at the server for every consumer.Refresh social links and resource navigation across the app and docs site:
- The editor's Resources popover drops the standalone "Website" row and adds an "Open Knowledge" entry (brand logo, desaturated to sit with the monochrome icons and regaining color on hover) as the last item.
- The docs site nav gains brand icons for GitHub and Discord, with X rendered icon-only (its label preserved as the accessible name).
- Social links now point at the Open Knowledge handle (
x.com/OpenKnowledgeAI) and the project Discord, replacing the legacy Inkeep X/LinkedIn destinations in the footer and structured-datasameAs. - The home hero and bottom call-to-action add a subtle "or CLI" link beside the macOS download button, pointing at the CLI reference.
Fix stale source-mode editor styling on backgrounded documents. Switching between light and dark mode (or toggling word wrap) previously only updated the focused document — other open documents kept the prior theme's syntax highlighting (washed-out colors) or the prior word-wrap setting until a hard refresh.
The theme, word-wrap, and placeholder CodeMirror compartments are now stored with the cached editor view instead of per React component. Because editor views are cached and reparented across tab switches while their component remounts, a per-component compartment was absent from the reused view's config, so the reconfigure on theme/setting change was a silent no-op. Reopening a backgrounded document now re-applies the current settings.
Fix starter-pack templates showing their frontmatter as raw text in the editor.
Template files stored two stacked frontmatter blocks: the template's own title and description, then the frontmatter a new document receives. Editors only recognize the first block, so the second one leaked into the document body and showed up as raw
---fences andkey: valuelines instead of editable properties.Templates now use a single frontmatter block, with the template's identity under a reserved
template:key and the new-document defaults as top-level keys. Creating a document from a template still produces the same frontmatter, with{{date}}and{{user}}substituted as before — including from an agent viawrite({ document: { template } }). Templates already on disk keep working and convert to the single-block shape the next time they are saved, so there is no migration step. This also fixes one starter template whose description contained an unquoted colon that broke YAML parsing, and adds a guard test so that class of bug cannot ship again.The template edit dialog is reworked to match: the title field is labeled Title, a dedicated Type field carries the Open Knowledge Format
type, and a Default properties editor exposes the rest of the new-document frontmatter as editable key/value rows — so the starter content is now plain markdown instead of a raw frontmatter block. Every document created from any starter template carries a semantictypeplus a one-linedescriptionsummarizing what that kind of document holds, which you then specialize per document.UI polish across the terminal dock and the empty-state onboarding:
- Terminal tabs: the new-terminal (+) button now has a "New terminal" tooltip, and each tab's close (×) button reveals on hover or keyboard focus while staying persistently visible on the active tab.
- Terminal canvas gains a small left/right gutter, and the exit notice is restyled (muted message, outlined "Restart terminal" action, transparent in dark mode).
- Empty-state onboarding replaces the trailing "or create a new file" link with a dashed "blank file" escape-hatch card in the starter-pack grid, and the starter-pack picker dialog is a touch wider.
- Small-icon buttons (
size="icon-xs") now render their glyphs at 14px, so the tab close/new icons match the rest of the icon-button set.
Fix the docked terminal resetting when you close a file or switch to a not-yet-loaded tab. Navigating to a doc whose provider was still loading transiently rendered a full-screen load skeleton outside the persistent editor column, which unmounted the terminal dock and killed the running shell. The skeleton now renders inside the persistent left column on mid-session navigation, so the terminal PTY and scrollback survive tab closes and switches (the cold-start load path is unchanged).