fhtml

Releases

Changelog

Notable changes to fhtml, newest first. The canonical source is CHANGELOG.md; releases follow Keep a Changelog and semantic versioning.

0.4.0

2026-07-26

Script and style bodies without the pipes.

Added

  • Bare raw-text bodies — every line indented under script or style is the body, verbatim — no | prefix, blank lines and relative indentation preserved.

  • Embedded highlighting — the VS Code extension highlights those bodies as real JavaScript and CSS, and JSON islands as JSON.

Deprecated

  • The | form of script/style bodies still parses; fhtml fmt migrates it.

0.3.0

2026-07-19

Conditional classes without a helper, and the batch build path as a library call.

Added

  • compileFilesToDir in @fhtml/core/node — compiles views into a directory of ES modules plus an index registry, race-safe for dev loops: atomic writes, index swapped last, manifest-tracked pruning, no up-front wipe.

Changed

  • Class-position falsiness — booleans and falsy interpolation results emit no classes, so {active && 'ring-2'} adds the class or nothing, clsx-style, with no helper.

0.2.0

2026-07-19

Framework adapters for the JavaScript package. Both are subpaths of @fhtml/core and neither imports its framework — the package stays dependency-free.

Added

  • @fhtml/core/express — an Express view engine: register with app.engine('fhtml', engine()), render with res.render. With view caching on, each view's include closure is read from disk once.

  • @fhtml/core/hono — a Hono renderer middleware: c.render(name, data) over a bundled file map, so it works on edge runtimes with no filesystem; Workers pass their native wasm import.

0.1.0

initial release2026-07-18

The first public release. The compiler, the template layer, components, the tooling, and the JavaScript build are all in place; the core stays zero-dependency.

Added

  • Markup layer — the whitespace language that compiles 1:1 to HTML: nesting by indentation, bare tokens as classes, attributes in parens, text and raw passthrough, comments, and doctype.

  • Template layer — interpolation over a small closed expression language, if/ for/ empty, rendered against JSON data.

  • Compositiondef components with a children slot, +call instantiation, and include.

  • --target=js backend — a self-contained (data, ctx) => string ES module per file, byte-identical to the native renderer.

  • Toolingfhtml fmt(canonical formatter), html2fhtml(reverse converter with round-trip --check), and opt-in class shorthand.

  • @fhtml/core — the compiler as WebAssembly with dependency-free ESM glue, plus vite-plugin-fhtml, a language server, and a VS Code extension.

  • Tailwind v4 — verified @source scanning of .fhtml directly, and a 48-component benchmark harness.

Benchmarks

−14%
tokens vs pretty HTML
48/48
round-trip DOM fidelity
90.6%
model completions compile

Full benchmark results →