# API
```rust
pub struct KmapSize {
pub node_count: u64,
pub full_node_characters: u64,
pub full_node_words: u64,
pub full_node_tokens: u64,
pub long_description_characters: u64,
pub long_description_words: u64,
pub long_description_tokens: u64,
}
pub fn measure(
path: &std::path::Path,
config: kcode_kweb_db::Config,
) -> anyhow::Result<KmapSize>;
pub fn render(size: &KmapSize) -> String;
```
`measure` opens the supplied Kweb root and reads every current node. The caller
owns process exclusion and any offline-maintenance lock. Opening Kweb may run
the database's normal recovery behavior. A missing root is rejected instead of
being created.
`render` produces the human-readable report used by Kennedy's `kmap-size`
command.
The estimate is deliberately rough: one token per four Unicode characters.
Node history, provenance, connections, objects, and non-node data are excluded.