description: A named signal that plugs and Lua scripts can listen to and react to.

tags: glossary

SilverBullet has its own event bus that allows different parts of the system to communicate. Events are the foundation for much of SilverBullet's extensibility — features like Service, Virtual Pages, widgets, and custom indexing are all built on top of events.

Subscribing to events

Use event.listen to subscribe to an event:

event.listen {
  name = "editor:pageLoaded",
  run = function(e)
    print("Loaded page: " .. e.data.name)
  end
}

The run callback receives an event object with a data field containing event-specific information. To see what data an event provides, add a print call and check the Log|logs.

Dispatching events

You can dispatch your own custom events:

event.dispatch("my-custom-event", {message = "Hello!"})

Other scripts can then listen for my-custom-event.

Built-in events

Here is a list of built-in events triggered by SilverBullet's core:

Editor events

  • editor:init: Editor has initialized
  • editor:pageLoaded: A page has been loaded in the editor
  • editor:pageReloaded: A page was reloaded (e.g. after being changed on disk)
  • editor:pageSaving: A page is about to be saved
  • editor:pageSaved: A page has been saved
  • editor:pageCreating: A page is being created (can return content — used by Virtual Pages)
  • editor:pageModified: A change was made to the document (fires in real-time)
  • editor:documentSaving: A document (non-page file) is about to be saved
  • editor:documentSaved: A document was saved
  • editor:modeswitch: Toggled between Vim mode and normal mode
  • editor:fold: Code was folded in the editor
  • editor:unfold: Code was unfolded in the editor

Interaction events

  • page:click: User clicked a location on the page
  • editor:complete: Editor completion triggered — return completion results to extend Completion
  • slash:complete: Slash completion triggered — return completion results
  • editor:lint: Lint request — return errors to show in the editor

System events

  • page:index: A page has changed and needs to be indexed (used by Object indexing)
  • plugs:loaded: Plugs were loaded
  • cron:secondPassed: One second has passed (useful for implementing periodic behavior)

Widget events

  • hooks:renderTopWidgets: Top widgets requested to render — return widgets to display above the page content
  • hooks:renderBottomWidgets: Bottom widgets requested to render — return widgets to display below the page content

All subscribed events

Here’s a dynamically generated list of events that this SilverBullet instance has subscribed to, to give a sense of what’s there: ${query from event.listEvents() where not _:startsWith("service:") order by _ order by _ )}

See API/event for the full API reference.