rustipo 0.9.0

Themeable Markdown-first static site generator for blogs, notes, docs, and personal sites
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project aims to follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.9.0]https://github.com/fcendesu/rustipo/compare/rustipo-v0.8.0...rustipo-v0.9.0 (2026-03-21)


### Features

* **config:** add configurable site menus ([43f88a7]https://github.com/fcendesu/rustipo/commit/43f88a7ba514bbc11927c87cb8d0e1f8a8c71293)
* **content:** add draft and scheduled publishing support ([94418a6]https://github.com/fcendesu/rustipo/commit/94418a673df7eec9c55b53f402754103c166f8b7)
* **output:** generate built-in not-found page ([89b1141]https://github.com/fcendesu/rustipo/commit/89b1141a0787e7c7d54fd42c25022ce748d77c86)
* **output:** generate default robots.txt ([02e3da6]https://github.com/fcendesu/rustipo/commit/02e3da6e891633d936013027cf05acc914728171)
* **theme:** add breadcrumb support ([6d57c15]https://github.com/fcendesu/rustipo/commit/6d57c15a8269b7857846c757db229be5cf1aabd8)

## [0.8.0]https://github.com/fcendesu/rustipo/compare/rustipo-v0.7.0...rustipo-v0.8.0 (2026-03-21)


### Features

* **content:** add markdown admonition support ([c75e83c]https://github.com/fcendesu/rustipo/commit/c75e83cb61abf0bf3b09dc66c828643ba572e301)
* **content:** add page table of contents support ([b2ff366]https://github.com/fcendesu/rustipo/commit/b2ff3661f23fe7877573582468c3901acb40b481, [c53c896]https://github.com/fcendesu/rustipo/commit/c53c8964c01576798f02306d8cf14385477997ec)
* **content:** add page-scoped markdown math support ([704fbcb]https://github.com/fcendesu/rustipo/commit/704fbcb7bdb2a679459d204e3f9b34251ab664ee, [d7726e8]https://github.com/fcendesu/rustipo/commit/d7726e882d9fb7ae087f9f0c860e6f14a3ca8f37)
* **content:** improve markdown image ergonomics ([54fcfc5]https://github.com/fcendesu/rustipo/commit/54fcfc5151d637c8249410b9ea3e0f80a8ecab95)
* **content:** validate internal links and deep links ([cbabbf1]https://github.com/fcendesu/rustipo/commit/cbabbf11c2203a6a9fb17eb41999fe17daac2e70)

## [0.7.0]https://github.com/fcendesu/rustipo/compare/rustipo-v0.6.0...rustipo-v0.7.0 (2026-03-21)


### Features

* **cli:** add rustipo check command ([5688b08]https://github.com/fcendesu/rustipo/commit/5688b08f81423e996428f57db35bf919d4ae1807)


### Bug Fixes

* **deploy:** generate valid github pages workflow ([620ed7b]https://github.com/fcendesu/rustipo/commit/620ed7b5e1ec7bf45b5fb1ef5514be8fa0d0202a)
* **crate:** tighten crates.io publication metadata ([58eb761]https://github.com/fcendesu/rustipo/commit/58eb7619301db766ae4778e0df26fc7dc440efe6)

## [0.6.0]https://github.com/fcendesu/rustipo/compare/rustipo-v0.5.0...rustipo-v0.6.0 (2026-03-20)


### Features

* **content:** support generic nested custom pages for arbitrary directories ([76a8ddf]https://github.com/fcendesu/rustipo/commit/76a8ddfde5db1d962a9b407f9ad81fc1946fc32c)
* **content:** add Mermaid fenced code support with page-scoped runtime injection ([efab30f]https://github.com/fcendesu/rustipo/commit/efab30ff558bf7b8620ddb5326944ad0ebf53e77)
* **palette:** add palette selection, built-in Catppuccin/Tokyo Night/Gruvbox/Dracula palettes, and richer palette tokens ([285fbe0]https://github.com/fcendesu/rustipo/commit/285fbe00913296394999f2c066d055d053aae19a)
* **cli:** add `rustipo dev` and `rustipo palette use` workflows ([d99f7a6]https://github.com/fcendesu/rustipo/commit/d99f7a621747abb4e9ec2bde6040353f7a47cc97)
* **font:** add config-driven custom font support for themes and site config ([8622df0]https://github.com/fcendesu/rustipo/commit/8622df0e1d67184d79da8da189854e29160ea5c6)
* **theme:** add markdown prose defaults, explicit theme IDs, and refined typography defaults ([0f89e75]https://github.com/fcendesu/rustipo/commit/0f89e75837366fc84a1e55319e1a1808b449e2cf)
* **tera:** add helper functions, shared page context, and starter theme authoring patterns ([298415b]https://github.com/fcendesu/rustipo/commit/298415bbea5ec9265ad2e85fd83ee4c1ef5a7242)


### Bug Fixes

* **tera:** simplify shared render context ([45cc8e2]https://github.com/fcendesu/rustipo/commit/45cc8e20c590a08169a45df2aa96733b7d4bde47)

## [0.5.0]https://github.com/fcendesu/rustipo/compare/rustipo-v0.4.0...rustipo-v0.5.0 (2026-03-18)


### Features

* **serve:** print watch rebuild durations ([19366b1]https://github.com/fcendesu/rustipo/commit/19366b17ced8b6070c9bbb345d7be02fb1c1f8f1)


### Bug Fixes

* **serve:** skip no-op rebuilds in watch mode ([b2b2c72]https://github.com/fcendesu/rustipo/commit/b2b2c72d72ffd64d873a5cce3434900ffdfc4a9d)

## [0.4.0]https://github.com/fcendesu/rustipo/compare/rustipo-v0.3.1...rustipo-v0.4.0 (2026-03-17)


### Features

* **core:** add favicon support to scaffold and build ([0767723]https://github.com/fcendesu/rustipo/commit/07677235999a9443fedd0b562dc09cc0495f02b0)

## [0.3.1]https://github.com/fcendesu/rustipo/compare/rustipo-v0.3.0...rustipo-v0.3.1 (2026-03-17)


### Bug Fixes

* **content:** avoid panic when highlight theme is missing ([26b74ab]https://github.com/fcendesu/rustipo/commit/26b74ab75e59ea058330944fae20a31bcfabe6ea)

## [0.3.0]https://github.com/fcendesu/rustipo/compare/rustipo-v0.2.0...rustipo-v0.3.0 (2026-03-17)


### Features

* **render:** expose frontmatter in page templates ([57353e3]https://github.com/fcendesu/rustipo/commit/57353e3496a4fef3b6f2852239ed5202eb7223f3)
* **serve:** add live reload in watch mode ([b071ee4]https://github.com/fcendesu/rustipo/commit/b071ee47886dbf81d39db76605b1d484c580d6ff)


### Bug Fixes

* **output:** detect duplicate output route collisions ([09bda30]https://github.com/fcendesu/rustipo/commit/09bda300a58cbb2a75c7bde2efcfc17fec81f285)

## [Unreleased]

### Added

- `rustipo serve --watch` now injects live-reload script and auto-refreshes browser after successful rebuilds.
- Content page templates now receive full `frontmatter` metadata in render context.

### Fixed

- `rustipo build` now fails with a readable error when multiple pages map to the same output path.

## [0.2.0] - 2026-03-17

### Added

- `rustipo serve` now supports custom bind options with `--host` and `--port`.
- `rustipo theme list` now lists installed themes from `themes/*/theme.toml`.
- `rustipo serve --watch` now watches `content/`, `themes/`, `static/`, and `config.toml` and triggers rebuilds on change.
- Fenced Markdown code blocks are now rendered with syntax highlighting.
- `rustipo build` now generates RSS feed output at `dist/rss.xml` from dated blog posts.
- `rustipo build` now generates sitemap output at `dist/sitemap.xml` from rendered routes.
- Tag index pages are now generated at `/tags/<tag>/` from blog post frontmatter tags.
- Blog archive page is now generated at `/blog/archive/` with month-based groups for dated posts.
- `rustipo theme install <source>` now installs themes from GitHub shorthand/URL (and local git paths for development).
- `rustipo build` now generates search index output at `dist/search-index.json` for client-side search.
- Theme inheritance is now supported via `extends` in `theme.toml`, with parent-child template and static asset overrides.
- `rustipo deploy github-pages` now generates a GitHub Pages deployment workflow under `.github/workflows/deploy-pages.yml`.
- Markdown content now supports basic shortcodes: `youtube` and `link`.

## [0.1.0] - 2026-03-17

### Added

- CLI command structure for:
  - `rustipo new <site-name>`
  - `rustipo build`
  - `rustipo serve`
  - `rustipo theme list`
- Project scaffold generation in `rustipo new` with starter content, config, default theme templates, and starter CSS.
- Config loader for `config.toml` with typed models and readable error context.
- Content pipeline:
  - Markdown discovery from `content/`
  - YAML frontmatter parsing
  - Markdown to HTML conversion
  - Internal page modeling with route and slug rules
  - Draft exclusion (`draft: true`)
- Theme system:
  - Active theme loading from `themes/<theme>/`
  - Required template and metadata validation
  - Template rendering with `tera`
- Output generation:
  - Pretty URL file writing to `dist/`
  - Section index page rendering (`/blog/`, `/projects/`)
  - Static asset copy for theme and user assets
  - Collision detection for asset path conflicts
- Local preview server (`rustipo serve`) using `axum`, serving `dist/` at `127.0.0.1:3000`.
- CI workflow (`.github/workflows/ci.yml`) for format, clippy, and tests.
- Release automation with Release Please:
  - `.github/workflows/release-please.yml`
  - `release-please-config.json`
  - `.release-please-manifest.json`
- Integration test suite in `tests/cli_flow.rs` for:
  - `new -> build` output flow
  - `serve` missing-`dist` failure
  - `theme list` output behavior
- Core project docs and guides:
  - README, CONTRIBUTING, CODE_OF_CONDUCT, LICENSE
  - CLI/content/theme/roadmap/CI/tech-debt docs

### Changed

- Migrated local preview server implementation from `tiny_http` to `axum`.
- Updated roadmap and CLI docs to reflect milestone progress and implemented behavior.
- Example project is now source-only (example `dist/` output is no longer committed).

### Fixed

- `rustipo new` now scaffolds required default theme templates so a fresh project can run `rustipo build` successfully.
- Implemented `rustipo theme list` to read installed themes from `themes/*/theme.toml`.