| Crates.io | systemprompt-templates |
| lib.rs | systemprompt-templates |
| version | 0.0.11 |
| created_at | 2026-01-21 19:24:34.632588+00 |
| updated_at | 2026-01-25 21:43:14.77901+00 |
| description | Template registry and management for systemprompt.io |
| homepage | https://systemprompt.io |
| repository | https://github.com/systempromptio/systemprompt-core |
| max_upload_size | |
| id | 2059951 |
| size | 61,119 |
Template registry and management for systemprompt.io.
Part of the Domain layer in the systemprompt.io architecture.
This crate provides the core template system for discovering, loading, and rendering HTML templates using Handlebars. It supports a plugin architecture with providers, loaders, extenders, and component renderers.
src/
├── lib.rs # Public exports and re-exports from template-provider
├── builder.rs # TemplateRegistryBuilder for fluent construction
├── core_provider.rs # CoreTemplateProvider for filesystem template discovery
├── error.rs # TemplateError enum for error handling
└── registry.rs # TemplateRegistry for managing templates and rendering
tests/
├── core_provider_tests.rs # Tests for CoreTemplateProvider
└── registry_tests.rs # Tests for TemplateRegistry
builderProvides TemplateRegistryBuilder for fluent construction of TemplateRegistry instances. Supports chaining with_provider(), with_loader(), with_extender(), with_component(), and with_page_provider() methods.
core_providerImplements CoreTemplateProvider which discovers HTML templates from a filesystem directory. Reads optional templates.yaml manifests for metadata and infers content types from template name suffixes (-post, -list).
errorDefines TemplateError with variants for common failure modes: NotFound, LoadError, CompileError, RenderError, NoLoader, and NotInitialized.
registryCore TemplateRegistry struct that coordinates template providers, loaders, extenders, and component renderers. Uses Handlebars for template compilation and rendering. Resolves template conflicts by priority (lower values win).
use std::sync::Arc;
use systemprompt_templates::{
CoreTemplateProvider, FileSystemLoader, TemplateRegistryBuilder,
};
async fn setup_templates() -> Result<(), Box<dyn std::error::Error>> {
let provider = CoreTemplateProvider::discover_from("./templates").await?;
let loader = FileSystemLoader::new(vec!["./templates".into()]);
let registry = TemplateRegistryBuilder::new()
.with_provider(Arc::new(provider))
.with_loader(Arc::new(loader))
.build_and_init()
.await?;
let html = registry.render("page", &serde_json::json!({
"title": "Hello"
}))?;
Ok(())
}
Templates are resolved by priority where lower values take precedence:
| Constant | Value | Use Case |
|---|---|---|
EXTENSION_PRIORITY |
500 | Override default templates |
DEFAULT_PRIORITY |
1000 | Standard templates |
Add to your Cargo.toml:
[dependencies]
systemprompt-templates = "0.0.1"
FSL-1.1-ALv2 - See LICENSE for details.