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 🙏

© 2026 – Pkg Stats / Ryan Hefner

gruber

v0.9.1

Published

--- permalink: /index.html layout: home.njk ---

Readme


permalink: /index.html layout: home.njk

Gruber

An isomorphic JavaScript library for creating web apps.

Named for Hans

Contents

  • Install
  • Quick tour — a whistle-stop tour of everything
  • Core — essentials that use or build on web-standards
  • HTTP — quickly create server endpoints
  • Configuration — declaratively configure your application
  • Migrations — specify transitions between application state
  • Testing — ensure your code does what you expected

About

Gruber is a collection of modules for creating isomorphic JavaScript applications. That means using the same web standards developed for the browser in backend runtimes. Web-standards aren't going to change, so apps based on them are less likely break in the future. There's also a hope that WinterTG works some stuff out.

Gruber acknowledges that web-standards don't do everything we want (at least yet!) and that they aren't implemented properly everywhere either. For this reason, Gruber tries to be as agnostic as possible and makes building blocks on top of them. There are integrations with specific runtimes & libraries and modules that build around those common primitives.

Gruber itself is a library and can be used however you like. There are also patterns which you can apply if you like. Patterns are ways of structuring your code if you don't already have opinions on the matter. They also help to explain why Gruber is made in the way it is.

There is a lot not in Gruber too. By design it tries to be as minimal as possible.

Terms

These are a few words that pop-up in the documentation, often in bold, here is what they mean in the context of Gruber:

  • standards — well-known, non-proprietary, formal and agreed specifications
  • modules — code built around web-standards and the common core
  • integrations — a module integrating with a specific JavaScript runtime or library
  • patterns — optional but recommended best-practices you can adopt
  • isomorphic — running the same JavaScript on the front and backend

Background

I've spent several years working on JavaScript backends and nothing has really stuck with me. There have been lots of nice ideas along the way but no one solution ever felt like home. It always felt like starting from scratch for each project.

Many frameworks expect you to be making the next big platform with millions of users, I don't expect this to be true and would prefer to keep things as simple as possible for the projects I am working on.

I'm also quite wary of going all-in on a big tech company's library or framework. Having explored lots of them, the fatigue from breaking changes or deprecations is real. "Move fast and break things" sounds great but it creates a lot of maintenance, especially for small projects and teams.

I'd prefer a style of move slow and deliberate. So I use Gruber in a project and develop features within that project. Then if I find myself copy-pasting those modules between projects, I'll look into ways of contributing them back to the library.

Principles

  • Standardised & Compatible — use existing standards, migrate towards them and try not to break things
  • Agnostic — libraries, frameworks or runtimes shouldn't be forced upon you
  • Patterns — optional best-practises for how to use modules
  • Composability — logic should be composed together rather than messily intertwined
  • Minimal & Deliberate — carefully add only what's is necessary
  • Holistic — complete ownership and careful abstractions creates unique opportunities for integration
  • No magic — it's confusing when you don't know what's going on

Standards

Here is a non-exclusive list of standards that Gruber uses or is interested in.

Maybe

Direction

Here are places I want to explore next.

  • CLI — declaratively define command line interfaces
  • Frontend configuration — using the config module on the front-end
  • SQL — an abstraction over database communication
  • Open API, HTTP documentation & JS client generation
  • Dependencies — a system for defining interdependent modules and controlling their lifecycle
  • Events — ways of broadcasting and consuming them with different topologies
  • Even more →

Get Started