description: Reusable content with placeholder expressions, used for page creation, slash commands, and more.
A template in SilverBullet is a string that contains ${expression} placeholders, which get evaluated using Space Lua. Templates are a mechanism for dynamically rendering content in your pages.
Use template.new to create a template function from a string. By convention, template strings use [==[ and ]==] as delimiters:
templates.greet = template.new[==[Hello, ${name}!]==]
Call the template with a table of values:
${templates.greet {name = "World"}}
The most common pattern is using template.each to render a list of objects:
template.each(query[
from index.tag "page"
order by lastModified desc
limit 5
](
from index.tag "page"
order by lastModified desc
limit 5
), templates.pageItem)
template.each iterates over the collection and applies the template to each item, concatenating the results.
The standard library provides several commonly used templates in the templates table:
| Template | Description |
|---|---|
templates.pageItem |
Renders a page as * [pageName](pageName) |
templates.fullPageItem |
Similar to pageItem but rendering the full page name (including folders) |
templates.taskItem |
Renders a task as a togglable checkbox item with a link to its source so that it can update |
templates.itemItem |
Renders a list item with a link to its source |
templates.paragraphItem |
Renders a paragraph with a link to its source |
templates.tagItem |
Renders a tag as a linked hashtag |
Page Template|Page templates are pages tagged with #meta/template/page. They serve as blueprints for creating new pages — you can configure them with suggested names, keyboard shortcuts, and commands.
Slash Templates are pages tagged with #meta/template/slash. They define Slash Command|slash commands that insert templated content at the cursor position. The last component of the page name becomes the slash command name.
See also: API/template, Page Template, Slash Templates, Space Lua