extension-data-providerslisted
Install: claude install-skill systempromptio/systemprompt-template
# Extension: Data Providers
Data providers inject dynamic content into pages, enrich content items, and process frontmatter metadata. All traits live in `crates/shared/provider-contracts/src/`.
---
## 1. PageDataProvider
Injects JSON data into page templates during rendering.
### Trait
```rust
#[async_trait]
pub trait PageDataProvider: Send + Sync {
fn applies_to_pages(&self) -> Vec<String>;
async fn provide_page_data(&self, ctx: &dyn PageDataContext) -> Result<Value>;
fn priority(&self) -> u32;
}
```
### Implementation
```rust
pub struct MyPageDataProvider;
#[async_trait]
impl PageDataProvider for MyPageDataProvider {
fn applies_to_pages(&self) -> Vec<String> {
vec!["homepage".into(), "blog".into()]
}
async fn provide_page_data(&self, ctx: &dyn PageDataContext) -> Result<Value> {
let site = ctx.site_config();
Ok(serde_json::json!({
"hero_title": site.name,
"featured_count": 5
}))
}
fn priority(&self) -> u32 { 100 }
}
```
### Registration
```rust
impl Extension for MyExtension {
fn page_data_providers(&self) -> Vec<Arc<dyn PageDataProvider>> {
vec![Arc::new(MyPageDataProvider)]
}
}
```
### Priority
Lower values execute first. Multiple providers for the same page merge their data. Later providers can override earlier keys.
---
## 2. ContentDataProvider
Enriches content items with computed fields during ingestion.
### Trait
```rust
#[async_trait]
pub trait