SilverBullet has grown into a large project over the last three years. About half a year ago I started working on Lua integration, and this make me discover a significantly more elegant way to implement a bunch of features in SilverBullet than all the custom features I had built before.
Initially, I implemented this “alternative universe” style, but lately this has become a significant burden for me to mentally handle and maintain both these universes long term. Therefore, I contemplated taking a more radical approach and introducing a “v2” where I would do some serious rapture-style removal of features to simplify the product, but also keep it more sustainable by — well — primarily me (although I do get more and more outside contributions, which is great).
This is the topic where that conversation happened:
Honestly, it was warming to hear all the positive responses to this concern and this path forward.
To be clear, this move will be somewhat disruptive to you — my valued users — since you will be the one burdened to migrate all your existing queries, templates and scripts (a migration guide is forthcoming), and to accept that certain features are simply gone. My only argument against this is that you can pin your version, and stick with the “v1” series (technically 0.x) indefinitely and migrate whenever you like (or never). However, to keep my motivation to keep working on SilverBullet high, I need to do this.
So, we’re heading towards a v2 future, and it will come soon.
So partially this will be a release that removes certain features that have Lua equivalents, but there are also a few features that I will remove to simplify the code base and architecture. And some of those may be controversial.
Let me walk through some of those features and the reasoning behind it.
- Online mode. This is likely the most controversial one. There was a long discussion already some time ago here: Who's using Online mode? about SilverBullet’s two modes. At the time I was ok keeping both Online and Sync mode, but as part of v2 have decided to cut the cord and go with Sync mode only. Likely I’ll add back a light-weight Online mode, that offers access basic access to your space without having to sync all content to your device (as Sync mode does), but likely not immediately. For me having an offline-capable mode is a must have feature, and supporting two modes is architecturally tricky. SilverBullet v2 will now be “Local First” and basically Local only. The server will just function as content delivery layer. I know some people have found issues with sync, this would be a reason to prioritize fixing those. That said, I have been using Sync mode on all my devices for essentially years with rare issues.
- Query language: this will be superseded by Space Lua/Lua Integrated Query
- Template/Expression language: this will be superseded by Lua expressions
- Command links: this will be superseded by a button Lua widget
- Space Script: this will be superseded by Space Lua
- Schemas: this was an early day feature that I think was not widely adopted, I may add something like this in a more “Lua way”
- Space Config/Settings: this will also be superseded by a simple Lua API
Code wise this has lead to being able to delete 12k lines already
Soon I’ll likely do a final “v1” (0.x) release, and then merge the current v2 branch into main, and that will be that. The releases that follow will be on the v2 code base. I don’t want to keep the v2 branch separate too long, because already I need to constantly port fixes between branches, which adds to that whole “keeping the whole thing manageable” thing.
If you want to be brave, you can try out v2 today: https://v2.silverbullet.md Website content very much in progress. The install instructions there are updated to pull the v2 docker images: Install/Docker
As to stability: I’m using v2 as my main SilverBullet instance myself, currently with all custom plugs removed and it’s been good. But no guarantees.
More updates as things develop.