Skip to content


Skribi command IDs are prefixed by obsidian-skribi.

View Indices

  • View Templates (view-templates): Opens the Template Index Modal, which displays a list of loaded templates and stylesheets.
  • View Scripts (view-scripts): Opens the Script Index Modal, which displays a list of loaded script files.

Insert Skribi

Opens a prompt to insert a template. Will prompt you for variables, as defined in the Template Metadata.

Render Template / Render Preset

Opens a modal and renders a template within. See Render Modal for details.

Reload Skribis

Causes all extant skribis to rerender themselves. Though skribis will automatically rerender themselves if any of their source assets (template, script, stylesheet) are updated, this command is provided just in case.

Reload Scripts

Reloads scripts from the script directory. Scripts should automatically reload, but this command is provided just in case.

Performance Test

This command opens a modal that can perform bulk renders and report the results. This is intended as a utility for those who are making complex skribis and want an indication of execution times.

The Text To Evaluate field is autofilled from highlighted text, or the clipboard contents, if any is found. The text in this field is treated as the text of the virtual skribi that will be evaluated.

Evaluation Iterations is the number of times to render the skribi. The result will be an averaged value of the processing times. I recommend using 10, but I've only tested on my machine. Using very high values will overload the system, causing each render to be slower, and returning values not representative of the expected processing time during normal use.

Eval As Individual Blocks toggles between placing all the skribis into one block, as would be the case with multiple inline skribis, or as individual blocks.

Notes about results

Because of how async code works in javascript, using promises introduces some time-bloat that isn't really indicative of the actual execution times. You can see that even evaluating empty text takes time (on my machine, about 2.6ms) where in reality it's nearly instant. This extra time is generated by the nature of promises. I'll look into adding a synchronous evaluation method in the future.

Generally, you don't really need to worry about the performance unless you're doing heavy operations.