description: Reusable content with placeholder expressions, used for page creation, slash commands, and more. tags: glossary references:

  • libraries/Library/Std/APIs/Template.md
  • client/space_lua/stdlib.ts

A template in SilverBullet is a string that contains ${expression} placeholders, which get evaluated using [Space Lua](Space Lua). Templates are a mechanism for dynamically rendering content in your pages.

They are often used in [Slash Templates](Slash Templates) and [Page Template](Page Template).

Creating templates

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"}}

Rendering collections

The preferred pattern is to apply a template to each row directly in your query’s select clause:

query[
  from p = index.pages()
  order by p.lastModified desc
  limit 5
  select templates.pageItem(p)
](
  from p = index.pages()
  order by p.lastModified desc
  limit 5
  select templates.pageItem(p)
)

The older template.each(collection, template) API still works (see [API/template#template.each(collection, template)](API/template#template.each(collection, template))), but the select-based form is more compact and composes naturally with the rest of [Space Lua/Integrated Query](Space Lua/Integrated Query).

Pre-built templates

The standard library provides several commonly used templates in the templates table:

TemplateDescription
templates.pageItemRenders a page as * [pageName](pageName)
templates.fullPageItemSimilar to pageItem but rendering the full page name (including folders)
templates.taskItemRenders a task as a togglable checkbox item with a link to its source so that it can update
templates.itemItemRenders a list item with a link to its source
templates.paragraphItemRenders a paragraph with a link to its source
templates.tagItemRenders a tag as a linked hashtag

Page templates

[Page Template|Page templates](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

[Slash Templates](Slash Templates) are pages tagged with #meta/template/slash. They define [Slash Command|slash commands](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](Page Template), [Slash Templates](Slash Templates), [Space Lua](Space Lua)