Releases
Notable changes to fhtml, newest first. The canonical source is CHANGELOG.md; releases follow Keep a Changelog and semantic versioning.
Script and style bodies without the pipes.
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.
The
| form of script/style bodies still parses;
fhtml fmt migrates it.
Conditional classes without a helper, and the batch build path as a library call.
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.
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.
Framework adapters for the JavaScript package. Both are subpaths of
@fhtml/core and neither imports its framework — the package stays dependency-free.
@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.
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.
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.
Composition —
def 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.
Tooling —
fhtml 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.