baseRouteWhen you set a baseRoute in smm.config.json (e.g. /docs), any internal markdown link ([text](/some-page)) automatically has that base prepended during navigation. You never need to manually prefix links with the base route — change it in one place and all links adapt.
Pages, directories, and groupers are sorted automatically when sortRoutes: true:
index.md always comes first.(Name) come last, after all regular items.Numeric prefixes on filenames (1. intro.md, 2. setup.md) control ordering within each tier. The prefix is stripped from the emitted URL when trimIndexFromPath: true.
Grouper indexes only affect order among other groupers — they never collide with file/directory indexes since groupers always sort after regular items.
Every page is a standalone .html file with pre-rendered markdown content baked into the DOM. Search engines see the full content immediately. After the page loads, the React SPA hydrates and takes over for seamless client-side navigation.
Directories named (Name) act as groupers:
index.md.(1. Guide), (2. Reference).Internal markdown links ([text](/path)) are intercepted by the SPA router — navigating them does not cause a full page reload. External links (https://...) open normally.
When you hover over or touch a link, its content is preloaded in the background. Navigation feels instant because the data is ready before you click.
Route path segments are automatically normalized:
-.,;"'\\:<>?!`) is removed(Group) are excluded entirelyNo need to manually craft URL-safe filenames.
index.md as landing pageindex.md represents the landing page for its directory."".index.md and no other files, it collapses to a leaf node (no collapsible).publicPath auto-copy and auto-excludeIf publicPath is set in config, that directory is:
.smmignore.smm.config.json is merged over built-in defaults. You only need to specify what you want to override. Missing options fall back to the CLI's internal defaults — the config file is entirely optional.
.smmignore glob patternsCreate .smmignore at your docs root to exclude paths during markdown traversal:
# are comments.! to un-ignore.