Read-only by design
There is no fix mode in the initial release. A nonzero result means “review these diagnostics,” not “your files may have changed.”
A focused, read-only linter for Handlebars templates—built to give people and automation clear diagnostics without taking control of their source.
Precise diagnostics · source stays local
The problem
Handlebars templates can accumulate small structural and formatting mistakes that are easy to miss in review and awkward to check consistently across a repository. The useful answer was not a formatter or a broad framework. It was a narrow verification tool that understands Handlebars syntax, reports exactly where a problem occurred, and behaves predictably in local development and automated checks.
hbsguard treats linting as inspection. It reads source, resolves configuration, and returns diagnostics; it never rewrites a template. That boundary makes it safer to add to an existing codebase and easier to trust as a step used by people or coding agents.
My role
I created the package and its public experience end to end: the lint rules and configuration model, file discovery and command-line behavior, programmatic API, diagnostic formats, test suite, documentation, identity, and browser playground.
The design work was part of the engineering work. Error messages, exit codes, defaults, examples, and the Playground’s split between source, problems, and resolved configuration all shape whether the tool is understandable in practice.
Product and technical decisions
There is no fix mode in the initial release. A nonzero result means “review these diagnostics,” not “your files may have changed.”
A recommended preset works without a config file, while projects can extend it, adjust severity, set rule options, or start from an empty configuration.
The CLI offers source-oriented terminal output and structured JSON, with stable exit codes and warning thresholds for automation.
The Playground runs the linter in the tab. Templates are not uploaded or stored, so exploration does not create a new source-code boundary.
Selected implementation details
Design considerations
The Playground opens with a deliberately flawed “kitchen sink” template so the product explains itself through use. Diagnostics are navigable and tied to source positions. Presets, live overrides, available rules, and the fully resolved configuration remain visible as separate concepts, turning configuration from a hidden mechanism into something a person can understand and copy.
Responsive light and dark themes keep the dense editor-and-results layout legible, while the visual identity stays warm and restrained enough to support long technical sessions.
Current status
Version 0.3.0 is published on npm, with rule-by-rule counts in the CLI’s problem summary. The browser Playground is live, and the public repository contains the package, documentation, test suite, and Playground source.