Skip to content

Releases: inkeep/open-knowledge

v0.11.0-beta.7

10 Jun 09:28
8dc0774

Choose a tag to compare

v0.11.0-beta.7 Pre-release
Pre-release

Delta since previous beta (v0.11.0-beta.6) — 1 new changeset.

Patch Changes

  • Fix the sync status dialog and recovery when a GitHub credential is missing. Previously a credential-less fetch/push was misclassified as a retryable network error, so the popover showed "Offline" with a raw could not read Username … Device not configured stderr blob and "Sync now" / "Retry" buttons that could never succeed — and the one useful action, reconnecting GitHub, was never offered. Now this is classified as an auth error (auth-no-credential): the dialog reads "Reconnect required" with a clear one-line message ("GitHub sign-in is missing or expired. Reconnect to resume syncing.") and a single "Connect GitHub" button. Reconnecting resumes sync without an app restart, and the auth-error state no longer persists across restarts. The server also sets GIT_TERMINAL_PROMPT=0 so git fails fast instead of attempting a no-TTY prompt.

v0.11.0-beta.6

10 Jun 08:59
e77d21d

Choose a tag to compare

v0.11.0-beta.6 Pre-release
Pre-release

Delta since previous beta (v0.11.0-beta.5) — 1 new changeset.

Patch Changes

  • The git credential helper (ok auth git-credential get, invoked by git on every sync) now records a diagnostic line to ~/.ok/logs/cli.*.log on every credential lookup: the host, the active storage backend, and the outcome — found, absent (no credential stored), or read-error (the keychain read failed, e.g. locked keychain or access denied). Hits log at debug (silent at the default level); misses log at warn. Previously these only went to stderr, which git swallows, so a vanished credential left no trace. The log is flushed before the helper exits so the record reliably lands. Token values are never logged.

v0.11.0-beta.5

10 Jun 08:08
2f8cfe1

Choose a tag to compare

v0.11.0-beta.5 Pre-release
Pre-release

Delta since previous beta (v0.11.0-beta.4) — 1 new changeset.

Patch Changes

  • Parse-error fallback blocks now preserve the source bytes they replace. When a block degrades to a fallback and its position carries only line/column information (no character offsets), the editor now resolves those against the document and shows the block's real content. When the position is genuinely unresolvable (missing, out of bounds, or inverted), the fallback degrades to empty content instead of substituting the mdast node-type name for the block's content — fabricated text that could previously be persisted back over the user's document on interaction (users observed this on an earlier build as a block collapsing to a literal word such as table or list).

v0.11.0-beta.4

10 Jun 07:40
2f4fb39

Choose a tag to compare

v0.11.0-beta.4 Pre-release
Pre-release

Delta since previous beta (v0.11.0-beta.3) — 1 new changeset.

Patch Changes

  • Fixed a document-corruption bug where reopening a doc the server had unloaded and re-read from disk (an external delete + recreate — e.g. a git pull or checkout rewriting files — a rename, or any other server-side unload) could merge the browser's cached copy into the fresh document as a second materialization: every block appeared twice, and content deleted on disk resurrected. The server now stamps each loaded document with a lineage epoch; browsers record the epoch they synced and present it when rejoining, and a stale rejoin is rejected up front — the client clears its cached copy and reloads the document cleanly instead of corrupting it. The same fence covers the deferred cache-attach window during boot, so a cache learned to be stale after sync is discarded rather than merged. Also fixes a separate, pre-existing cleanup gap the fence depends on: clearing the browser cache of a renamed or deleted doc was silently skipped in tabs that had not yet observed a branch, leaving stale rows that could re-merge on a later open.

v0.11.0-beta.3

10 Jun 07:37
1fff151

Choose a tag to compare

v0.11.0-beta.3 Pre-release
Pre-release

Delta since previous beta (v0.11.0-beta.2) — 1 new changeset.

Patch Changes

  • Fix stale-editor content resurrection (PRD-6955b). An editor whose Y→PM apply path had stopped (a "wedged" collaboration binding) could silently re-publish its frozen, minutes-old copy of a document wholesale over newer collaborative state on the next click or keystroke — erasing remote fixes. A new client-side binding staleness guard now detects the wedge the moment an external update goes unapplied, refuses to publish the stale replica (both the transaction channel and the binding's write-back seam are gated), and transparently recycles the editor so it remounts from current document state. Healthy editors are unaffected; recovery is rate-capped per document to prevent recycle loops under a persistent fault.

v0.11.0-beta.2

09 Jun 22:52
6e75dc0

Choose a tag to compare

v0.11.0-beta.2 Pre-release
Pre-release

Delta since previous beta (v0.11.0-beta.1) — 1 new changeset.

Patch Changes

  • The html preview code block now surfaces a friendly, dismissible notice when its security policy blocks a network request, instead of silently rendering a broken embed. The preview iframe reports blocked requests (for example plain http:// resources, or code that uses eval) back to the editor, which lists what was blocked and why. This is especially helpful inside the desktop preview, where the browser console is out of reach. The preview's Content Security Policy is unchanged.
    • @inkeep/open-knowledge-core@0.10.1-beta.0
    • @inkeep/open-knowledge-server@0.10.1-beta.0

v0.11.0-beta.1

09 Jun 22:02
6dad324

Choose a tag to compare

v0.11.0-beta.1 Pre-release
Pre-release

Delta since previous beta (v0.11.0-beta.0) — 1 new changeset.

Patch Changes

  • The document Properties panel now reflows to a vertical layout when the editor pane is narrow. Each property's value drops below its name and spans the full width of the pane, instead of being squeezed into a thin column beside a fixed-width label.

    Previously the panel always used a two-column layout with a fixed label column, so on a narrow pane (side panels open, split view, or a small window) long values like a title or description wrapped into a tall sliver with most of the row left empty. The panel now switches to the stacked layout based on its own width, so it adapts whether the whole window is small or just the editor column is narrow. Wide panes keep the original side-by-side layout.

v0.11.0-beta.0

09 Jun 21:26
db023d8

Choose a tag to compare

v0.11.0-beta.0 Pre-release
Pre-release

Delta since previous beta (v0.10.1-beta.0) — 1 new changeset.

Minor Changes

  • ok start now has a clean, legible terminal. Diagnostic INFO logs are routed to the on-disk log file (still captured for bug reports) instead of flooding stdout, so the startup banner — Editor + API URLs plus a "Next steps" hint — is front and center. The skill/MCP/launch-json reclaim sweeps no longer print routine JSON to the terminal (only genuine failures surface), and invalid frontmatter tags entries (e.g. comma-joined Obsidian-style values) are dropped silently instead of warning once per file. To restore the full log stream, set LOG_LEVEL=info or pass --log-level <level> (which now takes effect — previously it was parsed but ignored).

    Two reliability fixes ride along: the HEAD watcher falls back to chokidar when @parcel/watcher is unavailable (packaged builds ship without the native addon), so git branch-switch detection keeps working instead of silently degrading; and pressing Ctrl+C now prints an immediate "stopping…" notice explaining that pending changes are being saved and the server lock released.

v0.10.1-beta.0

09 Jun 20:07
4d4ef2d

Choose a tag to compare

v0.10.1-beta.0 Pre-release
Pre-release

Delta since previous beta (v0.10.0-beta.14) — 1 new changeset.

Patch Changes

  • ok auth status --json now includes a backend field naming where credentials are stored — keyring (the OS keychain) or file (~/.ok/auth.yml). The field appears in every JSON status shape, including when you are not logged in, so you can confirm which storage backend is active without a stored token. Human-readable (non---json) output is unchanged.

v0.10.0

09 Jun 17:50
16646a5

Choose a tag to compare

0.10.0

Stable promotion of beta v0.10.0-beta.14.

Aggregated changes since previous stable:

0.10.0-beta.0

Minor Changes

  • Adopt GPL-3.0-or-later. Open Knowledge is now licensed under the GNU General Public License v3.0 or later: every package declares the license field, the GPLv3 LICENSE text ships in the npm tarball and the desktop app bundle, ok --version prints the standard GPL notice (copyright, free software, no warranty), and the desktop About panel carries the same notice.

0.10.0-beta.1

Patch Changes

  • fix(markdown): stop over-escaping phrasing-boundary whitespace character references

    A space or tab at a phrasing boundary (the edge of a paragraph, list item, or blockquote's inline content) was serializing to a backslash-escaped character reference (\&#x20; / \&#x9;) instead of a bare &#x20; / &#x9;. Per CommonMark the escaped form renders as the literal visible text &#x20; in GitHub, the docs site, and Open Knowledge's own re-parsed editor. escapeEntityAmpersands now leaves character references that mdast-util-to-markdown synthesizes for boundary-whitespace preservation un-escaped, while continuing to escape user-authored entities.

0.10.0-beta.2

Patch Changes

  • fix(sync): track push and pull errors separately so a sync error stops flashing in the popover

    The sync status popover would show a sync error (e.g. a failed push) for only a split second before it vanished. The engine stored the last failure in a single shared error field, so a successful fetch on the pull leg cleared a still-unresolved push error — and trigger('sync') runs push then pull, so the push error was wiped by the immediately-following fetch within the same "Sync now". The same alternation happened continuously under auto-sync.

    Push and pull errors are now tracked independently (pushError/pushErrorCode and pullError/pullErrorCode). A success on one leg only clears that leg's error, so a real push failure stays visible until a push actually succeeds (or sync is toggled).

    When both legs fail with the same root cause (e.g. an auth failure that blocks fetch and push alike) the popover collapses them into a single neutral line instead of repeating two near-identical messages. When the two legs fail for different reasons, each line is labeled "Push:" / "Pull:" so it's clear which direction failed. A lone failure renders unlabeled, with pull-specific copy for read-side auth failures.

0.10.0-beta.3

Patch Changes

  • Fix the log and telemetry file-sinks writing into a second .ok/ when content.dir is a sub-folder. Both per-machine sinks (.ok/local/logs/server-current.jsonl, .ok/local/telemetry/spans-current.jsonl) now anchor on the project root like server.lock / principal.json / state.json, so a project with e.g. content.dir: docs keeps a single .ok/ at the root instead of growing a second one buried inside the content sub-folder where backups, git, sync, and visual inspection wouldn't expect it. ok diagnose bundle reads the sinks and server.lock from the same project-root-anchored .ok/local/ so it keeps harvesting them after the move.

0.10.0-beta.4

Patch Changes

  • Fix exec MCP results overflowing the client's per-result token limit on mid-size reads. The visible body was serialized up to 3× per result — content[].text, structuredContent.text (the load-bearing cross-client mirror that Claude-class clients read when they drop content[].text), and a redundant structuredContent.stdout raw copy — while the soft cap budgeted only one copy. A markdown file comfortably under the cap (so exec reported stdoutTruncated: false) could still produce a result large enough that the client rejected it and spilled to a file, silently degrading an in-budget read.

    Two changes: (1) drop the structuredContent.stdout field. It was the original Claude-Desktop content[].text-drop workaround, fully superseded by the structuredContent.text mirror it predates; its bytes are a strict subset of text and nothing consumed it. (2) Recalibrate the soft cap to budget the realized 2× body duplication (content[].text + structuredContent.text) rather than a single copy — the per-string cap is now ~25 KB (RESULT_BODY_BUDGET_BYTES / WIRE_BODY_COPIES), so the doubled payload stays well under the client ceiling. Oversized reads now truncate with the existing <truncated: … re-run with a more-specific query> marker instead of silently overflowing. The cross-client content[].text + structuredContent.text mirror is unchanged.

    • @inkeep/open-knowledge-core@0.9.2-beta.0

0.10.0-beta.5

Patch Changes

  • Open .base and .canvas files (Obsidian Bases / Canvas) directly in the read-only text viewer. Previously, clicking a [[file.base]] or [[file.canvas]] wiki-link opened a chooser pane; clicking "Open file" from the chooser then replaced the editor view with a raw 415 JSON error envelope from the API. Now both file types open immediately in the built-in text viewer (.canvas with JSON syntax highlighting) — no chooser, no broken "Open file". The "Open file" affordance for all other downloadable types (.docx, .zip, etc.) is also hardened: it now routes through the sanctioned asset-dispatch path (OS-handoff on desktop, new tab on web) instead of a same-frame navigation to the asset API.

0.10.0-beta.6

Patch Changes

  • Remove the dismiss X from the "Relaunching to install the update…" banner. That card is a terminal in-progress state shown the instant Relaunch is clicked — there is nothing to dismiss, and the card already disappears when the app restarts, so a manual close would only hide live progress. The armed "Version X ready to install" card keeps its X (the user can still close it and relaunch later); only the post-click in-progress swap is now non-dismissible, via a new dismissible flag on the update-notice shape.

0.10.0-beta.7

Minor Changes

  • Add ok <file> — open a single markdown file in the editor with zero project setup. Run ok notes.md (or ok open notes.md) on any .md / .mdx file and it opens in the WYSIWYG ↔ source editor.

    • Project-aware. When the file lives inside an existing Open Knowledge project (an ancestor .ok/), it opens that project focused on the file — the path is realpath-resolved first, so a symlink into a project routes correctly.
    • No-project mode. For a loose file, it opens an ephemeral single-file session: a throwaway server scoped to just that one file, with git, MCP, and agents off. Edits save straight back to your original file. No .ok/ or other state is written into your directory — all session state lives in a temporary directory that's removed when you close the window.
    • Opening never reformats. A file you open but don't edit is left byte-for-byte identical, even when it has an unstable markdown round-trip.
    • Desktop-first with a browser fallback. Opens in the Open Knowledge desktop app when it's installed; otherwise serves the editor in your browser (Ctrl-C to end the session). Launching from a closed app goes straight to the file in a single window — it doesn't reopen your last project alongside it.
    • Focused chrome. No-project sessions hide the file sidebar, tabs, project switcher, and Settings — just the file and the editor.

    Discoverable via ok --help.

0.10.0-beta.8

Patch Changes

  • Allow digit-leading tags (like the year 2026) in a document's frontmatter tags: field. The property panel previously rejected them with "Tags must start with a letter…", even though a year is a legitimate tag. The frontmatter tag grammar is now more permissive than the inline #tag grammar: a frontmatter tag may start with a letter or a digit, while inline #tag in prose still requires a leading letter (so #123 stays plain text and does not collide with issue-reference conventions).

0.10.0-beta.9

Minor Changes

  • Adopt GPL-3.0-or-later. Open Knowledge is now licensed under the GNU General Public License v3.0 or later: every package declares the license field, the GPLv3 LICENSE text ships in the npm tarball and the desktop app bundle, ok --version prints the standard GPL notice (copyright, free software, no warranty), and the desktop About panel carries the same notice.

  • Add ok <file> — open a single markdown file in the editor with zero project setup. Run ok notes.md (or ok open notes.md) on any .md / .mdx file and it opens in the WYSIWYG ↔ source editor.

    • Project-aware. When the file lives inside an existing Open Knowledge project (an ancestor .ok/), it opens that project focused on the file — the path is realpath-resolved first, so a symlink into a project routes correctly.
    • No-project mode. For a loose file, it opens an ephemeral single-file session: a throwaway server scoped to just that one file, with git, MCP, and agents off. Edits save straight back to your original file. No .ok/ or other state is written into your directory — all session state lives in a temporary directory that's removed when you close the window.
    • Opening never reformats. A file you open but don't edit is left byte-for-byte identical, even when it has an unstable markdown round-trip.
    • Desktop-first with a browser fallback. Opens in the Open Knowledge desktop app when it's installed; otherwise serves the editor in your browser (Ctrl-C to end the session). Launching from a closed app goes straight to the file in a single window — it doesn't reopen your last project alongside it.
    • Focused chrome. No-project sessions hide the file sidebar, tabs, project switcher, and Settings — just the file and the editor.

    Discoverable via ok --help.

  • Preview embeds can now reach the network. The code-block html preview iframe runs with an open network CSP, so embeds that load external stylesheets, fetch live data, pull map tiles / remote images, use web f...

Read more