An attempt at documenting the changes/new features introduced in each
release.




Edge

These features are not yet properly released, you need to use the edge builds to try them.

  • Nothing yet since 0.7.3



0.7.3


  • We had a big influx of people and contributions from the community, which is amazing. Here are the highlights:
  • There are also two very notable new plugs you may be interested in trying:
    • TreeView: a sidebar showing (and allowing you to manipulate) your space’s folder tree (at long last)
    • AI: various clever AI integrations (supporting many different LLMs, including locally hosted ones)
  • Snippets using matchRegex can now use the |^| caret to wrap text around the replacement, see the Snippets#Examples
  • Changed the signature of silverbullet.registerFunction to make the first argument an object, see Space Script#Custom functions. Old string-based scripts still work, for backwards compatibility.
  • The Functions#replace(str, match, replacement) function now supports multiple replacements
  • You can now use backticks (`) around identifiers in Expression Language, to e.g. use names with spaces or other weird characters as attribute names.
  • Link Unfurl now supports unfurling youtube videos
  • Fixed edit button on code widgets after they have shifted
  • Fixed page completion in template blocks
  • Giant code reorganization (hopefully resulting in 0 regressions)



0.7.1

  • Numerous bug fixes and significant performance improvements in template rendering (which now happen server-side), including code completion fixes.
  • New {{#each @varname in <expression>}} syntax in Template Language#each directive.
  • Experimental feature: Space Script, the ability to extend SilverBullet from within your SilverBullet space with JavaScript.
  • New Functions#readPage(name) function.
  • New query sources: Objects#command and Objects#syscall. The Keyboard Shortcuts and Commands pages now use these to list all key bindings and available commands automatically.
  • You can now create emoji aliases (implemented by Maarrk), see SETTINGS for an example 😅
  • You can now conditionally show action buttons (see SETTINGS) only on mobile devices (implemented by Maarrk)



0.7.0

I know what you’re thinking: another “major” minor release, so quickly?

Yeah... we’re swapping out some of the guts of SilverBullet here, so this warrants the version bump. Honestly, this should have been 100.0, but you know...

This is the one where the template engine SilverBullet is swapped out and no longer using Handlebars.js under the hood. We’d like to thank handlebars for its effort, but everything has to end some day. It’s time to take our destiny into our own hands.

SilverBullet now uses its own custom Template Language that is way, way, way dare I say way more powerful than Handlebars. I put in a lot of effort to ensure backwards compatibility, so unless you did some obscure things in your templates, everything should keep working as is. If not, please reach out on our community and I’ll do my best to support you in this journey that for sure will be worth it.

Trust me, I’m an engineer.

note Upgrade note While the Core library that you (probably) imported previously will keep working (I hope), I would recommend you do another import overwriting the old files. Mainly because many templates have been rebuilt to leverage the new features of our new Template Language and therefore much cleaner. So please follow the Core#Installation instructions, and hit “Ok” about 30 times.

So, what’s the fuss all about?

  • Soft breaking change: include is the new name of the old template Blocks. Previously, a template block’s primary function was to include an external template or page — that role has now been replaced with Live Templates#Include. If you used template blocks in the past, you will see a warning squiggly warning appear suggesting you turn it into an include block, which is functionally equivalent to the old template. To fix this across your space, simply replace triple-backtick template with triple-backtick include across all your files and you should be done. That said, SilverBullet will detect if you’re using a legacy syntax template blocks and automatically interpret them as include blocks instead so nothing should break. Famous last words.
  • So, funny story, we’re also instantly deprecating these new include blocks and suggest you template all the things, see Live Templates#Recommended alternative for the rationale behind this insanity. You will ask: “So what is he going to deprecate next? Live Queries? Hahaha!” Honestly, probably yes, because everything those can do, templates do better — basically. But let’s take it slow for now. One step at a time, as my mom says.
  • templates are the new hotness. The body of a template block is now interpreted as the new and shiny Template Language! This means you get syntax highlighting and (best effort) code completion for all your markdown and template directives endeavors.
  • The Template Language and Query Language have been unified. It may not have been visible to everybody, but the handlebars syntax and SB’s own query language were different before. No longer.
  • The Expression Language used as part of the new Template Language has been significantly expanded. Some notable new features:
    • It now supports some basics like a not operator, and ternary operator (bla ? true : false). I know, the level of innovation here is crazy.
    • It now supports (sub) queries as values, simply wrap any query in { and } and you’re good to go: Expression Language#Queries
    • It now supports page references as values: Expression Language#Page references
    • It now (officially) supports function calls, and while I’ve kept the set of built-in Functions deliberately small for now — this is where the big wins are going to be gained in future releases: Expression Language#Function calls. Let me know in the community what functions you’d like to see. Even the ability to expand the set of functions using JavaScript from within your space is now on the table for future iterations.
  • A CHANGELOG entry is never not going to do this justice. I recommend you simply (re)read the following pages and check out the examples to have your 🤯 and start to think what you can do with this:
  • Ah yes, you can also still take notes with SilverBullet. That still works. I think.

0.6.1

  • Tag pages: when you click on a #tag you will now be directed to a page that shows all pages, tasks, items and paragraphs tagged with that tag.
  • Action buttons (top right buttons) can now be configured; see SETTINGS for how to do this.
  • Headers are now indexed, meaning you can query them Objects#header and also reference them by name via page links using # that I just demonstrated 👈. See Links for more information on all the types of link formats that SilverBullet now supports.
  • New command to remove all completed tasks from a page
  • Read-only mode (experimental) is here; see Configuration#Run mode on how to enable it. This allows you to expose your space to the outside world in all its glory but without allowing anybody to edit anything.
    • silverbullet.md has now been redeployed to run in this mode
    • Pages in this mode are server-side rendered so their content can actually be indexed by search engines. In addition, some OpenGraph attributes are put in the HTML to enable nice embedding links, e.g. in our community.
  • New command to wipe out any locally synced data (and log you out if you use Authentication).
  • Bug fixes:
    • Improved Ctrl/Cmd-click (to open links in a new window) behavior: now actually follow @pos and $anchor links.
    • Right-clicking links now opens the browser's native context menu again
    • tags in Frontmatter are now properly indexed again when listed as an array
  • Internal changes:
    • Big refactor: of navigation and browser history, fixed some bugs along the way
    • Plugs now can no longer define their own markdown syntax, migrated all plug-specific syntax into the main parser. This should remove a bunch of editor “flashing”, especially during sync.



0.6.0


  • Templates 2.0: templates are now turbocharged (that’s a technical term) and have replaced a lot of previously built-in (slash) commands. There’s more to this than will fit this CHANGELOG, have a look at Templates: and more specifically Page Templates, Snippets, Live Template Widgets and Libraries, and read the items below.
  • Upgrade instructions: to get the best experience after upgrading to 0.6.0 as an existing user, do the following:
    • Upgrade your docker image/deno version to 0.6.0 (or latest).
    • Reload your page 2-3x to be sure you have the latest front-end code running.
    • Run the command in your space, and enter the following federation URL: !silverbullet.md/Library/ This will import both the Core and Journal libraries into your space, bringing you roughly on par with 0.5.x versions in terms of functionality (this will include the daily note, weekly note, various slash commands etc.)
  • A quick FAQ on the new template system:
    • Where did my templates go!? They have now moved to the Template Picker, run (or press Cmd-Shift-t on Mac or Ctrl-Shift-t on Windows/Linux) to get to them.
    • Where did all my slash commands go?! They are now distributed via Libraries. Yep, Libraries are here, enabling an easier way to distribute templates and pages. Read Libraries for more info.
    • But, what about slash templates etc.?! Yeah, we did some rebranding and changed how these are defined. Slash templates are now Snippets and cannot just be instantiated via Slash Commands, but through Commands and custom keybindings as well. Awesomeness.
    • And my page templates broke!? Yeah, same story as with Snippets: the format for defining these changed a bit, but it should be easy to update to the new format: check Page Templates.
  • The Getting Started page (that is embedded in the index page that is auto-generated when creating a new space) has been updated to include instructions on how to import the Core library.
  • Directives have now been removed from the code base. Please use Live Queries and Live Templates instead. If you haven’t migrated yet and want to auto-migrate, downgrade your SilverBullet version to 0.5.11 (e.g. using the zefhemel/silverbullet:0.5.11 docker image) and run the command with that version.
  • (Hopefully subtle) breaking change in how tags work (see Objects):
    • Every object now has a tag attribute, signifying the “main” tag for that object (e.g. page, item)
    • The tags attribute will now only contain explicitly assigned tags (so not the built-in tag, which moved to tag)
    • The new itags attribute (available in many objects) includes both the tag and tags as well as any tags inherited from the page the object appears in.
    • Page tags now no longer need to appear at the top of the page, but can appear anywhere as long as they are the only thing appearing in a paragraph with no additional text; see Objects#page.
  • New Code Widget: toc to manually include a Table of Contents
  • Filter list (used by Page Picker, Template Picker and Command Palette) improvements:
    • Better ranking
    • Better positioning of modal (especially on mobile)
    • Better mouse behavior
  • Templates:
    • Somewhat nicer rendering of {{templateVars}} (notice the gray background)
    • Rendering of Code Widgets (such as live queries and templates) is now disabled on template pages, which should make them less confusing to read and interpret.
  • The indexPage SETTINGS can now contain template variables, such as {{today}}
  • Backend work in preparation for supporting more “serverless” deployments (e.g. Cloudflare workers and Deno Deploy) in the future
    • Move from Oak to Hono
    • Support for in-process plug loading (without workers)



0.5.11

  • Keyboard shortcuts as well as priority (order in which they appear in the Command Palette) can now be configured for Commands in SETTINGS. The priority enables you to put frequently used commands at the top.
  • The rendering of Live Templates, Live Queries, Table of Contents and Linked Mentions has been re-implemented. Rendering should now be near-instant, and the “flappy” behavior should be largely gone, especially after an initial load (results are cached). There may still be some visual regressions. Please report them if you find them.



0.5.10

  • Breaking change: Local attachment URLs ([page](url) syntax and ![alt](url) image syntax) are now interpreted relative to the page's folder unless their URL starts with a /, then they're relative to the space root (as per this issue)
  • Breaking change: Revamped Templates, specifically changed the format of Page Templates. The “Template: Instantiate Page” has been renamed to .
  • It is now even more recommended to tag your Templates with the “template” tag because completion in Live Queries and Live Templates will now only suggest #template tagged pages.
  • New Frontmatter attributes with special meaning: displayName and aliases (allowing to specify alternative names for pages)
  • The Page Picker now also shows (and matches against) tags, aliases and display names for pages.
  • It is now possible to filter pages based on tags in the Page Picker by typing a hashtag in the filter phrase, e.g. #template to filter pages that have a template tag.
  • Added new commands to manage Outlines. Note this resulted in changing names and keyboard shortcuts for managing folds as well, to be more consistent with the other outline commands.
  • Removed built-in multi-user Authentication, SB_AUTH is no longer supported; use --user or SB_USER instead or an authentication layer such as Authelia.
  • Background and more experimental work:
    • Work on supporting multiple database and storage backends, reviving Deno Deploy support.
    • This is now documented on the brand-new Configuration page.
    • A new silverbullet sync command to Sync spaces (early days, use with caution)
    • Technical refactoring in preparation for multi-tenant deployment support (allowing you to run a single SB instance and serve multiple spaces and users at the same time)
      • Lazy everything: plugs are now lazily loaded (after a first load,  manifests are cached). On the server side, a whole lot of infrastructure is now only booted once the first HTTP request comes in



0.5.8

  • Various bugfixes, primarily related to the new way of running docker containers, which broke things for some people. Be sure to have a look at the new Configuration configuration options



0.5.7

  • New command to upload files and pictures (particularly valuable for mobile use cases). Implemented by prcrst.
  • General support for highlighting errors (underlined) in the editor. Currently implemented for:
    • All YAML fenced code blocks (and Frontmatter): will now highlight YAML parse errors
    • Live Queries: will highlight non-existing query sources and non-existing template references in render clauses
  • Basic Table of Contents support: any page with 3 headers or more now has a “Table of Contents” widget appear (see this very page). You can toggle this feature using the command.
  • Tapping/clicking the top bar (outside of the page name and action buttons) now scrolls your page to the very top.
  • Slightly more gracious error reporting on load when using the Online Client Modes and the server is offline.
  • Any page tagged with #template is no longer indexed (besides as a template)
  • Upgraded set of emoji (completed via the :thinking_face: syntax) to 15.1 (so more emoji)
  • Various bug fixes


0.5.6

  • Various optimization and bug fixes
  • Experimental idea: Libraries
  • The Alt-Shift-n key was previously bound to both and . That won’t work, so now it’s just bound to
  • The Alt-q command is now bound to the new command, refreshing all Live Queries and Live Templates on the page. This is to get y’all prepared to move away from directives.
  • It’s likely that version 0.6.0 will remove directives, so please switch over to live queries and templates, e.g. using...
    • The new command, which will (attempt) to convert all uses of directives in your space automatically (backup your space before, though, just in case)



0.5.5

  • Bugfix: on some filesystems that don't report file creation time (like some NASes), SilverBullet crash. This should now be fixed.
  • Performance improvements the loading of code widgets (e.g. Live Queries, Live Templates)


0.5.4

  • We’re on a journey to rethink Templates:
    • It is now recommended you tag all your templates with a #template tag, this will exclude them from Objects indexing and may in the future be used to do better template name completion (but not yet).
    • New feature: Introducing Snippets, allowing you to create custom Slash Commands. This deprecates snippets and page templates, because Snippets are awesomer.
  • Many styling fixes and improvements to Live Queries and Live Templates
  • Added a “source” button to Live Queries and Live Templates for better debugging (showing you the markdown code rendered by the template so you can more easily detect issues)
  • Live Queries:
    • Support for render all where the entire result set is passed to a single template allowing you to e.g. dynamically build up tables, see Live Queries$render for an example.
  • The default generated SETTINGS page now contains a link to SETTINGS on silverbullet.md for documentation purposes.
  • The syntax to reference Anchors has now changed to use $, instead of @ (e.g. Live Queries$render), the old syntax still works but is deprecated. The reason for this change is consistency: you define an anchor using the $myanchor syntax, referencing it the same way makes more sense.
  • Page Name Rules are now documented


0.5.3

  • Changes to Objects:
  • The now also converts #use and #include directives
  • Styling improvements for Linked Mentions
  • SilverBullet now fully works when added as PWA on Safari 17 (via the “Add to Dock” option).
  • Fix support for handlebars variables in Live Queries and Live Templates
  • Plug robustness improvements (SB shouldn’t fully break when loading plugs that rely on disabled syscalls)
  • Various other bug fixes



0.5.1

  • Fixes to auto-sizing of Live Queries and Live Templates widgets
  • Fixed the combination of limit and order by not working well
  • Auto complete for queries now works for queries split across multiple lines
  • Auto complete for fenced code block languages (use the /code slash command)
  • Slightly tweaked semantics for the = operator on arrays, see Live Queries for details



0.5.0

Oh boy, this is a big one. This release brings you the following:

  • Objects: a more generic system for indexing and querying content in your space, including the ability to define your own custom object “types” (dubbed Tags). See the referenced pages for examples.
  • Live Queries and Live Templates: ultimately will replace directives in future versions and directives are now deprecated. They differ from directives in that they don’t materialize their output into the page itself, but rather render them on the fly so only the query/template instantiation is kept on disk. All previous directive examples on this website how now been replaced with Live Templates and Live Queries. To ease the conversion there is command: just put your cursor inside of an existing (query) directive and run it to auto-convert.
  • The query syntax used in Live Queries (but also used in directives) has been significantly expanded, although there may still be bugs. There’s still more value to be unlocked here in future releases.
  • The previous “backlinks” plug is now built into SilverBullet as Linked Mentions and appears at the bottom of every page (if there are incoming links). You can toggle linked mentions via .
  • A whole bunch of PlugOS syscalls have been updated. I’ll do my best update known existing plugs, but if you built existing ones some things may have broken. Please report anything broken in Github issues.
  • This release effectively already removes the #eval (it’s still there, but likely not working), this directive needs some rethinking. Join us on Discord if you have a use case for it and how you use/want to use it.

Important:
  • If you have plugs such as “backlinks” or “graphview” installed, please remove them (or to be safe: all plugs) from the _plug folder in your space after the upgrade. Then, also remove them from your PLUGS page. The backlinks plug is now included by default (named Linked Mentions), and GraphView still needs to be updated (although it’s been kind of abandoned by the author).

Due to significant changes in how data is stored, likely your space will be resynced to all your clients once you upgrade. Just in case you may also want to your space. If things are really broken, try the command.



0.4.0

The big change in this release is that SilverBullet now supports two client modes: online mode and sync mode. Read more about them here: Client Modes.

Other notable changes:
  • Massive reshuffling of built-in Plugs, splitting the old “core” plug into Editor, Template and Index.
  • Directives in Live Preview now always take up a single line height.
  • Tasks now support custom states (not just [x] and [ ]), for example:
    • IN PROGRESS An in progress task
    • BLOCKED A task that’s blocked
        Read more
  • Removed Cloud Links support in favor of Federation. If you still have legacy cloud links, simply replace the 🌩️ with a ! and things should work as before.