Skip to content

Releases: silverbulletmd/silverbullet

2.10.0

Choose a tag to compare

@github-actions github-actions released this 28 Jul 12:44

2.9.0

Choose a tag to compare

@github-actions github-actions released this 11 Jun 07:03

Release announcement: https://no.silverbullet.plus/2-9

2.8.1

Choose a tag to compare

@github-actions github-actions released this 20 May 17:58
  • Fix: cursor and clicks no longer drift by a line or two when working below a tall widget (e.g. arrow-up from a list under a ${query[[…]]} now advances exactly one line). Some other cursor preservation issues addressed as well.
  • Fix: arrow keys now reliably enter multi-line block widgets (queries, tables) line by line.
  • Fix: Some finetuning of the markdown renderer.
  • Fix: PWA boot no longer crashes silently when the server is unreachable and a boot-time file (e.g. CONFIG.md) was previously 404 — the 404 result is now cached so subsequent offline boots succeed instead of throwing a raw TypeError: Failed to fetch that the boot code swallowed.
  • New index.* query-collection helpers: index.objects (the new alias for index.tag), plus index.pages, index.subPages, index.contentPages, index.metaPages, index.aspiringPages, index.tasks, index.headers, index.items, index.paragraphs, index.tables, index.documents, index.links, and index.tags. Each type-specific helper takes an optional extra tag for filtering (except index.subPages, which takes the parent page name, and index.documents/index.links/index.tags, which take no arguments).

2.8.0

Choose a tag to compare

@github-actions github-actions released this 15 May 14:10

SilverBullet 2.8.0 is here. The headliners this release are X-Ray, a new editor lens that lets you inspect indexed objects inline as you write (just run Editor: Toggle X-Ray), and a brand new built-in Journal library for journaling workflows. As usual, there's also a healthy pile of fixes as well.

Changes

  • X-Ray: an editor lens (run Editor: Toggle X-Ray) to inspect indexed objects inline.
  • New built-in Journal library.
  • Runtime API: Expose objects (with filter) /.runtime/objects/* for external integrations and the CLI, see Runtime API.
  • New SB_DISABLE_SERVICE_WORKER : server-side switch to disable the client service worker for all clients, this will disable sync (all loads and saves will go directly to the server) and disable any offline support.
  • UX: now showing spinners instead of underlying (Lua) code in states where widgets aren't ready to render yet (e.g. before an initial index hasn't completed)
  • Fix: indexed range for data blocks (and #tag data blocks) now points at the YAML content instead of the surrounding fence markers; multi-document blocks now compute per-doc ranges correctly.
  • sb CLI changed how it encrypts secrets, so if you used token or password-based auth you need to re-add your space.
  • Fix: indexed range for space-lua and space-style blocks now points at the inner code, not the ``` fences.
  • Fix: Page Templates are now fixed (required specifying of suggestedName before), now also supports objects as frontmatter
  • Removed: tapping the top bar (page name / action buttons area) no longer scrolls the editor to the top.
  • Fix: page decoration prefixes now consistently appear in query-driven lists
  • Fix: Safari/WebKit no longer renders block lua widget (queries, etc.) borders at the wrong position on first paint (previously required hovering or resizing the window to clean up).
  • Fix: page navigation should now glitch less.
  • Fix: browser back/forward now restores the scroll position you last had on each page.

Upgrading

  • For docker-based install, pull the new image, stop the container and start a new one. For binary-based installs run silverbullet --upgrade and restart.
  • After upgrading the server, make sure you reload all your SilverBullet tabs a few times, just to make sure the cache is flushed.

SilverBullet+

This release also coincides with the first "stable" release of SilverBullet+, which will follow the same release schedule.

2.7.0

Choose a tag to compare

@github-actions github-actions released this 06 May 11:21

Another month, another new SilverBullet release. This one lands with a brand-new Configuration Manager: a proper UI for editing common configuration options, managing key bindings, and installing libraries (Ctrl/Cmd-, to open). The CLI has been renamed from silverbullet-cli to sb with reworked commands. There's a new (experimental) Markdown/Anchor syntax ($name) for stable, space-globally unique names on (almost) any Object. And... “Lua Integrated Query” (LIQ) has been rebranded to Space Lua Integrated QuerySLIQ!

Changes

  • Configuration Manager: new UI for editing configuration, accessed via the Configuration: Open command (Ctrl/Cmd-,) and Configuration: Key Bindings commands. This is a work in progress, but should already be a big improvement over the old ways. It currently supports:
    • Changing (common) configuration options
    • Key binding management (oh my!)
    • A Library manager, superseding the old Library Manager UI (which now has been removed)
  • CLI renamed from silverbullet-cli to sb, in addition:
    • renamed luaeval
    • luascriptscript
    • a new describe command that describes SLIQ and lists tags with defined schemas.
  • New (experimental) Markdown/Anchor syntax ($name): a stable, space-globally unique name for (almost) any Object, referenced from links via [[$name]].
  • Rebrand: “Lua Integrated Query” (LIQ) is now called Space Lua Integrated Query (SLIQ!) (as coined by Matouš Jan Fialka)
  • API extensions for API/config: config.define now propagates schema default values. New config.defineCategory / config.getCategories APIs, plus UI annotations for the configuration manager. The ui.order schema annotation and config.defineCategory's order field have been renamed to priority and now sort descending (higher = appears earlier), matching the rest of SilverBullet's priority conventions.
  • Server no longer generates a default CONFIG.md in empty spaces, this page is now auto created by the configuration manager when required.
  • The legacy plug-manager has now been removed (superseded by the Library manager part of the Configuration Manager UI)
  • Plugs/Development (now with new docs!) gains an optional build: section in manifests, running esbuild, sass, or copy transforms before asset bundling — enables plugs to ship bundled TSX/SCSS UIs.
  • Action buttons: new command attribute for actionButton.define. When using this instead of a run callback, keyboard bindings will appear in the tooltip.
  • Docker: removed VOLUME declaration from the Dockerfile (it gave a false sense of persistence /space must be explicitly mounted, as documented). This also fixed the silverbullet-website repo.
  • Fix: Sync now falls through to local data on browser-native network errors instead of returning 503; previously synced spaces serve locally immediately after a service worker restart.
  • Fix: navigation no longer blocks while the initial index is still running.
  • Fix: rich text paste only worked on the second try
  • Fix: indexing blew up with malformed bullet list items
  • Fix: regression where aspiring pages were not deleted once the page was created.
  • Fix: auto complete of meta pages was broken
  • Fix: page rename failed when the page contains external URL links.
  • Fix: too-tall mini editor in various pickers on Safari.
  • Security fix: auth cookies now set stricter security flags (HttpOnly, Secure, SameSite); auth config file corruption no longer fails silently.
  • Potentially breaking CSS change for theme authors: .sb-notifications has moved in the DOM (notifications now portal to document.body).
  • New API/system syscalls system.loadPlug / system.unloadPlug for per-path plug (re)loading.
  • New API/editor syscall editor.focus for explicitly focusing the editor.
  • Configuration Manager: Key Bindings tab now says "Filter commands" instead of "Search commands".
  • More sensible fallback values for config options before the initial index has populated defaults.
  • Lint: the name attribute uniqueness check is now limited to #meta/library pages.
  • Runtime API: better debug output when the headless Chrome instance fails to boot.
  • Fix: more robust markdown tree traversal in the face of invalid markdown trees.
  • Fix: outline operation edge cases.
  • Fix: button text wrapping.
  • Fix: Runtime API fixed for users using PUID and PGUID users (by Luminiferous348).
  • Fix: symlinks inside the space directory are no longer accidentally removed when cleaning up empty parent directories after a file delete.
  • Fix: slash commands now resolve the syntax node ending at the cursor, so they no longer get incorrectly suppressed adjacent to comment blocks or links.
  • Fix: Service Worker is now built without import statements so it loads on Firefox versions before 147 (by Carlos Fdez. Llamas).

Upgrading

  • For docker-based install, pull the new image, stop the container and start a new one. For binary-based installs run silverbullet --upgrade and restart.
  • After upgrading the server, make sure you reload all your SilverBullet tabs a few times, just to make sure the cache is flushed.

Dedication

I've made the decision to reduce my regular day job to fewer days and spend the remainint time on SilverBullet. This allows for deeper focus and more ambitious work. If you like this, consider sponsoring to make this a little bit more financially viable for me.

2.6.1

Choose a tag to compare

@github-actions github-actions released this 11 Apr 12:33

SilverBullet 2.6 is a big one. Under the hood, the entire TypeScript/client codebase has migrated from Deno to Node.js (now using vitest for tests), with bundle size optimizations via chunked ESBuild builds and JIT loading of larger modules. On top of that, there's a brand new (experimental) Runtime API and accompanying CLI that let you programmatically drive a remote SilverBullet server, evaluating Lua expressions, running scripts, and fetching console logs against a full client running in headless Chrome. The Outlines commands have been thoroughly reworked to be more robust and now handle numbered items, headers, and paragraphs. And Space Lua gets meaningful performance improvements through interpreter hot-path optimizations.

Changes

  • Technical: Deno → Node.js migration: The TypeScript/client codebase has been migrated from Deno to Node.js, now using vitest for tests.
    • Bundle size optimization: chunked builds with ESBuild, JIT loading of larger modules (vim, syntax modes).
  • Runtime API and accompanying CLI (Experimental) programmatically interact with a (remote) SilverBullet server over via silverbullet-cli or a HTTP API: evaluate Lua expressions, run scripts, and retrieve console logs. Powered by a headless Chrome instance running the full SilverBullet client via CDP, so all results reflect live client state.
  • New query shortcuts: index.contentPages() (pages excluding meta pages) and index.metaPages() (only meta pages) for convenient querying without manual tag filtering.
  • Outlines commands have been thoroughly reworked. Should now be more robust and better tested outline move/indent operations. New features:
    • Now also works with numbered items (and renumbers them)
    • Now works with headers (moves around entire sections)
    • Now works with paragraphs
    • When ending an list item with a :, and pressing Enter, the next item will be indented one level
  • Markdown support enhancements:
    • Markdown/Footnotes: both reference-style ([^1]) and inline (^[text]) footnotes with syntax highlighting, live preview on hover, reference completion, and invalid reference linting.
    • Live Preview for HTML tags
    • Custom markdown syntax extensions (==Experimental==): define custom inline syntax via API/syntax that gets parsed, highlighted, and rendered in live preview.
  • Space Lua enhancements:
    • Performance: Lua interpreter hot-path optimizations, tree traversal and page index optimizations.
    • Performance: LuaTable internals tuned for faster Lua execution.
  • Space Lua/Lua Integrated Query improvements (courtesy of Matouš Jan Fialka):
    • Unified field list syntax for from, select, and group by clauses, enabling multi-source cross-joins
    • Implicit single group for aggregates without group by
    • offset clause support
    • Intra-aggregate order by support
    • 13 new aggregate functions (product, string_agg, yaml_agg, json_agg, bit_and, bit_or, bit_xor, bool_and, bool_or, stddev_pop, stddev_samp, var_pop, var_samp), aggregate.alias API for custom aliases, and index.aggregates queryable collection
  • Client upgrade notification: if the server is updated but the client version doesn't match, a notification will appear instructing the user to reload.
  • The Table of contents widget is now collapsible, defaults to open (by Dobli).
  • Improved Lua widget rendering (by Matouš Jan Fialka): ${...} expressions now render scalars, arrays, records, and arrays-of-tables with better HTML and markdown output.
  • Task Task: Clean Completed now handles more scenarios, and leaves a cleaner outline.
  • Panels now use Shadow DOM elements instead of iframes (by onespaceman).
  • editor.flashNotification now supports an optional third argument with timeout (use 0 for persistent notifications) and actions (buttons with callbacks).
  • Fix: table cell alignment for missing and misaligned cells
  • Fix: handle tagged floats before plain object check in renderCellContent (by Matouš Jan Fialka).
  • Fix: document file opening with URL prefix.
  • Fix: autofocus on authentication page.
  • Fix: mini editor regressions.
  • Mobile: "lock" button to toggle read-only, useful for navigating without accidentally editing.
  • Action Button enhancements:
    • standalone option: only show certain action buttons in standalone/PWA mode (e.g. forward/back navigation buttons)
    • Support for opting out action buttons from the mobile dropdown menu
  • Fix: "No such header #boot" errors in PWA mode.
  • Fix: Edit buttons now work correctly for Lua expressions and code widgets whose bodies appear multiple times in the same page.
  • Fix: attribute rendering.
  • Fix: Markdown table rendering and removal of deprecated command button remnants.
  • Task improvements (by Matouš Jan Fialka):
  • shell.run now accepts an optional stdin parameter (by Brett Anthoine).
  • Sync: further edge case fixes (timestamp/content-length mismatch, service worker activation).
  • Subtle breaking change: template.each now returns an empty string on empty results instead of nil.
  • Fix: only #meta and #meta/ prefixed tags are now considered meta tags, not e.g. #metabase.
  • Fix: TOC rendering when headers contain a numbered list item.
  • Fix: edge case where the markdown link regex could go into infinite loop (links with escaped square brackets).
  • Fix: unwrap multi-return values in PropertyAccess and method calls (by Brett Anthoine).
  • Fix: allow colons in SB_USER password (by Joshua Brunner).
  • Fix: mobile tasks caret jumping and empty widgets on navigation.
  • Mobile: home button moved outside of the dropdown menu; hamburger menu style tweaks.
  • Fix: extended task state widget click behavior and rendering in widgets.
  • Fix: safer handling of default template files in non-empty spaces.
  • Frontmatter tags: key now has autocomplete support.
  • API/tag#tag.define(spec): new tagPage attribute to customize where clicking a tag navigates to (defaults to tag:name).
  • Fix: 32-bit ARM Docker builds.
  • Fix: reduce visual bouncing when navigating between pages.
  • Fix: encode URLs with dots in path names on WebKit/Safari (fixes opening e.g. PDF files).
  • Vim mode: allow passing arguments to vim ex commands (by Felix Riedel).
  • Tweaked default index and CONFIG pages for new installations.
  • Fix: tag stripping for page templates.
  • Fix: widget glitching — widget HTML content is no longer cached (only heights), reducing storage usage and WebKit rendering issues.

Upgrading

  • For docker-based install, pull the new image, stop the container and start a new one. For binary-based installs run silverbullet --upgrade and restart.
  • After upgrading the server, make sure you reload all your SilverBullet tabs a few times, just to make sure the cache is flushed.

Dedication

I've made the decision to reduce my regular day job to fewer days and spend the remaining time on SilverBullet. This allows for deeper focus and more ambitious work. If you like this, consider sponsoring to make this a little bit more financially viable for me. ❤️

2.5.2

Choose a tag to compare

@github-actions github-actions released this 06 Mar 12:20
2.5.2

2.5.1

Choose a tag to compare

@github-actions github-actions released this 05 Mar 15:13

Quick patch release with 2.5.1: there was a latent caching bug in some environments, that resulted in built-in plugs and libraries not being updated (somehow they were stuck with an old timestamp). Should be fixed after updating to 2.5.1.

2.5.0

Choose a tag to compare

@github-actions github-actions released this 05 Mar 13:18

SilverBullet 2.5.0 brings a number of keyboard binding changes (due to CodeMirror dropping support for Alt-<letter> shortcuts, sorry about this...), significant sync reliability improvements ensuring your local state stays in sync with the server, and powerful new Lua Integrated Query features including group by and aggregator support. The Space Lua engine also saw significant improvements with a port of Lua's native pattern matching library, <close> attribute support, and various performance and compatibility improvements.

Changes

  • Changed keyboard bindings (sorry!). CodeMirror no longer directly allows Alt-<letter> and Alt-<special-character> Keyboard Shortcuts, meaning I had to remap a few key bindings. It's basically a mission impossible to pick great ones, but here are the new defaults:
    • Quick note is now bound to both Ctrl-q q (type Ctrl-q first, then hit q again) and Ctrl-q Ctrl-q (hit Ctrl-q twice)
    • Navigate: Home is now bound to Ctrl-g h
    • Text: Marker is now bound to Ctrl-Alt-m
    • Outlines commands generally now use a Mod-. (Cmd-. on mac, Ctrl-. on Linux/Windows) prefix:
      • Outline: Move Right: Mod-. l
      • Outline: Move Left: Mod-. h
      • Outline: Move Up: Alt-ArrowUp still works, but now also adds Mod-. k for consistency
      • Outline: Move Down: Alt-ArrowDow still works, but now also adds Mod-. j for consistency
      • Outline: Toggle Fold: Mod-. Mod-.
      • Outline: * Fold (other fold commands): keyboard disabled, readd yourself if you need them (see Keyboard Shortcuts)
      • Task: Cycle State: Mod-. t
    • Page: Rename keyboard shortcut removed
    • Page: Rename Linked Page keyboard shortcut removed
    • Sync: Space keyboard shortcut removed
    • As documented in Keyboard Shortcuts, it is now possible to specify multiple keyboard shortcuts to a commands.
  • Sync reliability work:
    • Better indication whether your page is synced to the server: "Dirty state" (slightly tinted color of page name) is now aligned with actual synced-to-server state unless the editor clearly indicates it is in offline mode (yellow top bar).
    • Sync snapshots are now persisted after every file sync, reducing (and hopefully eliminating) edge cases where the sync engine is killed mid-sync (for whatever reason) and the snapshot becomes of sync with "reality".
    • The index status progress indicator (blue circle) should now be more reliably reflect the actual indexing status.
    • HTTP status codes >= 500 are now treated as offline (better offline detection).
  • Lua Integrated Query improvements (courtesy of Matouš Jan Fialka):
    • group by and having clauses with aggregator support
    • filter(where <cond>) clause for per-row aggregate filtering
    • nulls first/nulls last in order by
    • Null/missing query cells now render as empty
  • Space Lua engine general improvements (most courtesey of Matouš Jan Fialka):
  • New experimental API: tag.define(spec), see linked page for docs and example uses. Brings back ability to define deadlines for tasks (see example). Another part of this is Schema support for tags. When a schema is defined for a tag, you get:
    • Frontmatter attribute completion and linting (in-editor error indicators) for attributes defined as part of the tag's schema.
    • Lua Integrated Query attribute code completion if you use the from v = index.tag("bla") style syntax (so explicitly bind your iterator variable).
    • Item-level linting (highlights the object in-line in case of validation errors).
  • Tag schema updates:
    • pos (present in link, item and some other tags) is now deprecated, use range instead
    • range is a tuple of two numbers: from and to (e.g. {0, 10}) identify where the object appears in the page
  • Editor improvements:
    • New Page: Create Under Cursor command, useful to pre-create an aspiring page link. Put your cursor in a wiki link to a non-existing page, and hit Cmd-Shift-Enter (Ctrl-Shift-Enter) to create it (empty) without navigating there.
    • Linked Mentions now list full page path rather than abbreviated version.
    • Hide vertical scrollbar overflow for long page names.
    • Upload file: prompt user before replacing files and no-clobber behavior for paste uploads (by Oliver Marriott).
    • Trim user input from prompts where appropriate (by rktjmp).
    • Consider empty string as invalid path (by rktjmp).
  • Styling changes:
    • Attribute names and values ([key: value] notation) now get different CSS classes in the editor: sb-attribute-name for names and sb-attribute-value for values.
    • The diff Fenced Code Block language now uses colors to indicate additions and removals (by Lajos Papp).
  • Configuration:
    • New shortWikiLinks config (defaulting to true) that decides whether a wiki link should be rendered in its short form (rendering just the last segment, e.g. Person/John would show as John). To always render the full name, put config.set("shortWikiLinks", false) in your CONFIG.
    • Authentication: how long "remember me" works is now configurable (by Metin Yazici) via Configuration and more reliably persisted.
  • Library Manager: SilverBullet now navigates to library page after installing one.
  • FreeBSD buids!
  • Now excluding .plug.js and .js.map files from the document list.
  • Fix: bring back Virtual Pages.

Upgrading

  • For docker-based install, pull the new image, stop the container and start a new one. For binary-based installs run silverbullet --upgrade and restart.
  • After upgrading the server, make sure you reload all your SilverBullet tabs a few times, just to make sure the cache is flushed.

Dedication

As mentioned earlier, I decided to reduce my regular day job to fewer days and spend this time on SilverBullet. This allows for deeper focus and more ambitious work. If you like this, consider sponsoring to make this a little bit more financially viable for me.

2.4.1

Choose a tag to compare

@github-actions github-actions released this 16 Jan 12:08

For 2026 I decided to go back to the basics, and revisit some of the foundational stuff that makes SilverBullet work. Making it more robust and performant.

For 2.4 this is primarily about the indexer (on top of which queries are built, among other things). I've run various experiments trying to speed this up, and for my own space (which is now approximating about 2k pages) I managed to roughly speed this up a clean index by 200%. As I did this work, I also added tests to allow to make more improvements here down the line. As usual I encountered some things along the way, and fixed those too.

I also upgraded the fuse.js library, which is used for e.g. the page picker, command picker etc. and tweaked some parameters too. These are hard to test very well, because they're more about "vibes". Let me know if the results work for you.

What's changed

  • Indexer rework (note: upgrading will start a full space reindex automatically):
    • Performance: up to 2x faster
    • Internal refactor, actually adding at least (rudimentary) unit tests now (imagine!)
    • item and task now also index (wiki) links and inherited (wiki) links (links appearing in parent nodes), as requested here under links and ilinks. Updated the "Linked Tasks" widget now to rely on ilinks.
    • Rewrote snippet text for links (used in [[Linked Mention|Linked Mentions]]) to be more contextual, now also includes child bullet items, see community discussion.
    • For consistency with items, task refs now point to the item’s position resulting in a slight positional shift, if you have code relying on this, you may have to adjust it.
    • Disabled indexing all paragraph text by default, this caused significant indexing overhead. See discussion.
      To re-enable: config.set("index.paragraph.all", true)
    • Better link support in frontmatter (by Tomasz Gorochowik)
    • The page:index event now also receives a text and meta attributes.
  • Transclusions improvements:
    • Now have an “eye” button to navigate to the transcluded location
    • Transclusions now only live preview when the cursor is outside of them (as with other pieces of markup)
    • Transclusions now properly support headers
    • Items and tasks are now transcluded with their children (based on @pos notation) (this is mostly helpful when used in queries)
  • Page/document/meta picker tweaks:
    • Upgraded the Fuse.js library and tuned the ranking parameters, hopefully leading to better results.
    • Meta picker now more consistent with page picker
    • You can now use Alt-space to complete a folder matching the first result — try it and let me know how this works for you in practice.
  • Built-in full-text search has been removed from the main distribution, this has now been moved to a separate repo (installable via the library manager). Rationale: full text indexing is expensive and the search results were quite bad. Recommendation: install Silversearch as an alternative.
  • Tasks:
    • Removed: taskstate objects are no more. Custom task states should now be defined using the [[API/taskState]] API.
    • Removed: deadline syntax (legacy syntax from v1) for tasks, please use attributes instead (e.g. [deadline: "2026-01-01"]).
  • New APIs:
    • space.readFileWithMeta(name)
    • space.readPageWithMeta(name)
    • space.readRef(ref)
    • taskState.define(def) (see “Tasks” above)
  • New commands:
    • Navigate: Copy Ref To Current Position
    • Navigate: Copy Link To Current Position
  • Lua:
  • Production builds now include sourcemaps for easier debugging in browser DevTools. If you don't want to serve sourcemaps publicly, you can block *.js.map files at your reverse proxy level (see [[TLS#Blocking sourcemaps]]).
  • Should now deal better with authentication layers (Cloudflare Zero Trust, Authelia, Pangolin)
  • Sync errors now propagate better to the UI
  • Document editors now fixed in Safari (by MrMugame)
  • % now supported in page names
  • Lua widgets “flapping” should now be less

Upgrading

  • Upgrade as usual
  • After upgrading the server, make sure you reload all your SilverBullet tabs a few times, just to make sure the cache is flushed.
  • Note that a full space reindex will automatically kick off, which — while ideally being faster, will still take some time. Caveat here (which I noticed randomly): If you have multiple tabs open with SilverBullet and some still run the old version, you end up in an infinite reindex cycle. Just close other tabs, or reload them to stop this from happening.
  • If you were using some older edge version and somehow get stuck with a never moving index progress indicator, run the Client: Clean command and then run Space: Reindex again, this should solve the issue.

Dedication

I've made the decision to reduce my regular day job to fewer days and spend this time on SilverBullet. This allows for deeper focus and more ambitious work. If you like this, consider sponsoring to make this a little bit more financially sensible for me.