# v0.12.0

## Highlights

Templates can now load from the store. `.mj --topic "page.html"` renders a template stored in an xs topic, and `{% extends %}` / `{% include %}` references resolve as topic names from the same store. Previously you could load template content via `--inline`, but if that template referenced other templates they'd resolve from the filesystem -- there was no way for stream-sourced templates to reference each other.

`.mj` and `.mj compile` now take exactly one of three mutually exclusive modes:

- **File** -- `{% extends %}` / `{% include %}` resolve from the template's directory on disk
- **Inline** (`--inline`) -- self-contained, no resolution
- **Topic** (`--topic`, requires `--store`) -- resolves template names as store topics

`examples/templates/` demonstrates all three modes with visually distinct template variants so you can tell which source served the page.

Scripts can use `path self` for relative paths. Handler scripts no longer need to hardcode paths relative to the working directory:

```nushell
const script_dir = path self | path dirname
let slides = open ($script_dir | path join data.json)
let page = .mj compile ($script_dir | path join page.html)
```

`http-nu eval` works the same way, so you can unit test handler endpoints from anywhere:

```nushell
# test.nu
use std/assert

const script_dir = path self | path dirname
let handler = source ($script_dir | path join serve.nu)
let response = do $handler {method: GET, path: "/", headers: {}}
assert ($response | str contains "<h1>State in the Right Place</h1>")
```

```bash
http-nu eval test.nu
```

The Nushell standard library (`std/assert`, `std/log`, etc.) is now available in scripts and eval.

## Breaking changes

- feat!: inline mode no longer attaches a filesystem loader -- `{% include "local.html" %}` in an `--inline` template previously resolved from the working directory; use file mode instead

## Changelog

* feat!: .mj --topic for store-backed templates (#40) (2026-02-18)
* feat: support path self in file-based scripts (2026-02-18)
* feat: load nushell stdlib into engine (2026-02-19)
* examples: add unit test for tao handler (2026-02-19)
* examples: use path self for relative paths in tao (2026-02-18)
* examples: The Tao of Datastar (#39) (2026-02-18)
* docs: document unit testing endpoints with eval (2026-02-19)
