Docs: configuration manager + CHANGELOG

Documents the Configuration Manager and Libraries tab, removes Library Manager page, rewrites the plug-installation section of the v1 migration guide, tighten the Plugs manifest reference, and updates in the Edge changelog.
This commit is contained in:
Zef Hemel
2026-04-21 17:00:06 +02:00
parent 5a9f9ed101
commit 8ccd6b2add
6 changed files with 62 additions and 32 deletions
+24 -5
View File
@@ -3,7 +3,26 @@ An attempt at documenting the changes/new features introduced in each release.
## Edge
Whenever a commit is pushed to the `main` branch, within ~5 minutes, it will be released as a docker image with the `:v2` tag, and a binary in the [edge release](https://github.com/silverbulletmd/silverbullet/releases/tag/edge). If you want to live on the bleeding edge of SilverBullet goodness (or regression) this is where to do it.
* Fix: page rename failed when the page contains external URL links
* [[Configuration Manager]]: new UI for editing configuration, accessed via the `Configuration: Open` command (`Ctrl/Cmd-,`) and `Configuration: Key Bindings` command. 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)
* The legacy `plug-manager` has now been replace (superseded by the Library manager part of the Configuration Manager UI)
* 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.
* Server no longer generates a default `CONFIG.md` in empty spaces, this page is now auto created by the configuration manager when required.
* Rebindable built-in keyboard shortcuts: almost all built-in keyboard shortcuts are now proper SilverBullet commands and can be rebound.
* [[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`.
* [[Runtime API|CLI]] iteration: renamed `lua` → `eval` and `luascript` → `script`, and added a new `describe` command that describes LIQ and lists tags with defined schemas.
* HTTP: content type is now also exposed via the `X-Content-Type` header.
* 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: page rename failed when the page contains external URL links.
* Fix: too-tall mini editor in various pickers on Safari.
## 2.6.1
* **Technical: Deno → Node.js migration**: The TypeScript/client codebase has been migrated from Deno to Node.js, now using vitest for tests.
@@ -67,7 +86,7 @@ Whenever a commit is pushed to the `main` branch, within ~5 minutes, it will be
* 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](https://github.com/silverbulletmd/silverbullet/pull/1924) (by [Felix Riedel](https://github.com/felixr)).
* [[Vim]] mode: [allow passing arguments to vim ex commands](https://github.com/silverbulletmd/silverbullet/pull/1924) (by [Felix Riedel](https://github.com/felixr)).
* 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.
@@ -134,7 +153,7 @@ Whenever a commit is pushed to the `main` branch, within ~5 minutes, it will be
* 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](https://github.com/silverbulletmd/silverbullet/pull/1796)) via [[Install/Configuration]] and more reliably persisted.
* [[Library Manager]]: SilverBullet now navigates to library page after installing one.
* Library Manager: SilverBullet now navigates to library page after installing one.
* Now excluding `.plug.js` and `.js.map` files from the document list.
* Fix: bring back [[Virtual Pages]].
@@ -182,12 +201,12 @@ Whenever a commit is pushed to the `main` branch, within ~5 minutes, it will be
* Lua widgets “flapping” should now be less
## 2.3.0
This release (re)introduces [[Share]], formalizes [[Library]], and introduces in initial version of the [[Library Manager]], a type of package manager for SilverBullet. It also progresses on Lua 5.4 compatibility.
This release (re)introduces [[Share]], formalizes [[Library]], and introduces in initial version of the Library Manager, a type of package manager for SilverBullet. It also progresses on Lua 5.4 compatibility.
Here’s what’s new:
* [[Share]]: a new mechanism to push content to external places and pull external content in (also used as the foundation of [[Library]]). This partially replaces many [[Export]] use cases. Export will be more for one-off use cases.
* [[Library]]: are now a more “real” thing, and can be distributed via the [[Library Manager]] and curated with [[Repository]]. For instructions on how to build your own libraries, see [[Library/Development]]. Eventually, this mechanism will succeed the `plugs` configuration and `Plugs: Update` mechanism. Plug authors can already start to update their plugs to get ready, usually all that needs to be done is to add a `PLUG.md` file to their repository: [example](https://github.com/silverbulletmd/silverbullet-mermaid/blob/main/PLUG.md).
* [[Library]]: are now a more “real” thing, and can be distributed via the Library Manager and curated with [[Repository]]. For instructions on how to build your own libraries, see [[Library/Development]]. Eventually, this mechanism will succeed the `plugs` configuration and `Plugs: Update` mechanism. Plug authors can already start to update their plugs to get ready, usually all that needs to be done is to add a `PLUG.md` file to their repository: [example](https://github.com/silverbulletmd/silverbullet-mermaid/blob/main/PLUG.md).
* [[Service]]: a new mechanism used behind the scenes to power [[Share]], but also [[Export]] and likely other features in the future. Built on top of [[Event]].
* [[URI]] are now a more formalized and centralized mechanism, used by [[Share]] and likely other features in the future.
* Removed “Import” support, succeeded by [[Share]].
+7
View File
@@ -93,4 +93,11 @@ tag.define {
return o
end
}
```
```space-lua
-- managed-by: configuration-manager
config.set("shortWikiLinks", false)
config.set("smartQuotes.enabled", false)
config.set("std.widgets.linkedMentions.enabled", false)
```
+23
View File
@@ -0,0 +1,23 @@
---
description: Manage your space configuration
tags: maturity/beta glossary
---
A built-in UI for editing your space's configuration without having to hand-edit [[Space Lua]] blocks in [[CONFIG]].
# Sections
## Configuration
Lists all configuration options registered via [[API/config#config.define(spec)]], grouped by category. For each option you can edit its value according to its schema — scalars (string, number, boolean), enums (drop-downs), passwords (masked input), and structured objects all have appropriate editors. Defaults come from the schema, so leaving a field untouched means "use the default".
## Keyboard Shortcuts
Lists every [[Command]] in the system and lets you rebind its shortcut. Features:
* A **chord recorder**: click the record button, then press the key combination you want — including multi-stroke chords like `Ctrl-q q`.
* Multiple **alternate bindings** per command.
* Works together with the [[#510]] rework that made almost all built-in editor shortcuts rebindable.
## Libraries
Manages installed [[Library|Libraries]].
# How configuration is store
The Configuration Manager writes your edits into a managed `space-lua` block inside your [[CONFIG]] page, clearly marked. Simple hand edits to the managed block generally survive a round-trip through the UI, but the authoritative format is whatever the Configuration Manager writes.
Anything you add _outside_ that block — in the regular user-configuration block — is left alone.
-8
View File
@@ -1,8 +0,0 @@
---
description: The UI for browsing and importing libraries.
tags: maturity/beta glossary
---
The library manager makes it easy to manage (install, update, remove) [[Library]].
The library is accessed via the ${widgets.commandButton "Library: Manager"} command.
+1 -10
View File
@@ -38,16 +38,7 @@ _Snippets_ can be implemented as follows: [[Library/Std/Infrastructure/Slash Tem
_Page templates_ now work slightly differently: [[^Library/Std/Infrastructure/Page Templates]].
# Plugs
Many existing plugs _should_ keep working, but some may need updating.
However, since Space Config is removed. You now specify the plugs you like to use with Space Lua + the [[API/config]] API:
```lua
config.set("plugs", {
"github:joekrill/silverbullet-treeview/treeview.plug.js"
})
```
After which you run the `Plugs: Update` to download and/or update them. `Plugs: Add` has not been (re)implemented, so you have to do this in code.
Many existing plugs _should_ keep working, but some may need updating. Plug installation is now handled through the Configuration Manager (open with `Client: Configuration` or `Ctrl/Cmd-,`) under the **Libraries** tab. Legacy `plugs:` config entries are ignored — install plugs from the Libraries UI instead.
# Other changes
* Since no database is kept on the server, you can safely delete any `.silverbullet.db` file from your space — this isn’t used anymore.
+7 -9
View File
@@ -3,13 +3,11 @@ This page is the reference surface for plug authors: the `*.plug.yaml` manifest,
# Manifest
A plug is described by a single YAML file, conventionally named `{plugname}.plug.yaml`. Top-level keys:
| Key | Description |
|-----|-------------|
| `name` | Plug name (required, must be unique). |
| `requiredPermissions` | List of permissions this plug may use. Recognized values: `fetch`, `shell`. |
| `functions` | Map of function-name → [FunctionDef](#function-definitions) — the heart of the manifest. |
| `assets` | Glob patterns of files to bundle into the plug. Readable at runtime via the `asset` syscall. |
| `build` | Optional pre-bundle transforms (`esbuild` / `sass` / `copy`). Rarely needed. |
* `name`: Plug name (required, must be unique)
* `requiredPermissions`: List of permissions this plug may use. Recognized values: `fetch`, `shell`.
* `functions`: function-name to [[#Function definitions|function mappings]] — the heart of the manifest.
* `assets`: Glob patterns of files to bundle into the plug. Readable at runtime via [[API/asset]] calls.
* `build`: Optional pre-bundle transforms (`esbuild` / `sass` / `copy`). Rarely needed.
## Function definitions
Each entry under `functions:` is one exported plug function. Fields:
@@ -19,7 +17,7 @@ Each entry under `functions:` is one exported plug function. Fields:
| `path` | `"file.ts:exportedFunction"` — the TypeScript source to bundle. |
| `redirect` | `"otherPlug.function"` — alias to another plug’s function (no local code). |
| `syscall` | `"myplug.foo"` — expose this function as a syscall callable from other plugs and from [[Space Lua]]. |
| _hook fields_ | Zero or more of `command`, `slashCommand`, `events`, `mqSubscriptions`, `codeWidget`, `editor`, `pageNamespace` — each wires this function into an editor event. See [Hooks](#hooks) below. |
| _hook fields_ | Zero or more of `command`, `slashCommand`, `events`, `mqSubscriptions`, `codeWidget`, `editor`, `pageNamespace` — each wires this function into an editor event. See [[#Hooks]] below. |
A function with only a `syscall` field (no other hooks) is a pure library function; a function with one or more hook fields is triggered when the corresponding event fires.
@@ -217,7 +215,7 @@ All syscalls available to plugs are documented on pages tagged `#api/syscall`:
${template.each(query[[ from p = tags["api/syscall"] where p.tag == "page" order by p.name ]], templates.pageItem)}
## Declaring your own syscall
Any plug function can be exposed as a syscall by adding `syscall: yourplug.foo` to its manifest entry. Other plugs can then call it (via the `system` syscall or the function’s syscall name), and Space Lua code can call it as `yourplug.foo(...)`. See the [`syscall` hook](#syscall) above.
Any plug function can be exposed as a syscall by adding `syscall: yourplug.foo` to its manifest entry. Other plugs can then call it (via the `system` syscall or the function’s syscall name), and Space Lua code can call it as `yourplug.foo(...)`. See the [[#Syscalls]] above.
## Bundling assets
The `assets:` manifest key bundles files into the plug binary. Read them at runtime with the [[API/asset|asset]] syscall: