npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

workers-hbs

v1.0.0

Published

This is meant to be a drop-in replacement for [handlebars.js](https://github.com/handlebars-lang/handlebars.js) that does not need `eval()` or `Function.apply()`.

Downloads

30

Readme

WorkersHBS

This is meant to be a drop-in replacement for handlebars.js that does not need eval() or Function.apply().

This is nowhere near as performant as handlebars.js, but it does work in environments where dynamically generated javascript is not allowed. The intended use case of this library is that templates are rendered once (or when data changes) and the output is cached.

Installing

npm i workers-hbs

Usage

Mostly you'll only need the .render() function, but the other functions you may be familiar with when using handlebars.js are also included for drop-in-replacement-ness. When running in a worker you'll also need the --node-compat flag (or node_compat = true in wrangler.toml file) due to handlebar's assumption of needing a fs module, even though it is not used.

// main.js
import { render } from './src/index';

export default {
	fetch() {
		const template = `hello {{first}}`;
		const context = { first: 'world' };
		const resp = render(template, context);
		const headers = { 'content-type': 'text/plain' };
		return new Response(resp, { headers });
	},
};

then run with

npx wrangler dev main.js --node-compat

Testing

This passes the handlebars.js test suite (partially included, slightly modified) as well as a different set of comprehensive.test.js that is meant to be a one stop shop for functionality testing of both handlebars and workers-hbs.

npm test

TODO

While this does output an index.d.ts so that this library can be used with typescript, WorkersHBS is not written in typescript. This was because the first pass was easiest to write by mostly stealing from @handlebars/parser printer example, which is javascript. Version 2 of this library will be ported to javascript.

I'd also like to use @handlebars/parser as the only dependency which would also remove the need for --node-compat, but that would mean including quite a lot of the supporting Utils from the main handlebars library.

License

WorkersHBS is released under the MIT license.