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

@porkytheblack/garage-dashboard

v0.1.0

Published

Garage dashboard — a clean console for the Glorp orchestration layer (namespaces, workspaces, sessions, credentials, profiles, agents, messages, provisioning).

Readme

Garage Dashboard

A clean, professional console for the Glorp Garage orchestration layer. It talks directly to a running Garage server's REST + WebSocket API and gives you live observability and control over the core primitives:

  • Sessions — list, create, destroy, and watch a session's live event stream; send messages and abort runs.
  • Agents — inspect and manage a session's multi-agent roster.
  • Messages — the agent's latest answer and task list per session.
  • Namespaces — create/delete tenant partitions and mint namespace-bound keys.
  • Workspaces — manage the host directories sessions run against.
  • Provisioning — launch sessions from declarative setup templates.
  • Credentials — model providers and the profiles sessions inherit.
  • API Keys — mint/revoke keys for the REST API and the MCP server.

Auth

The dashboard signs in with the admin identity provisioned on the Garage server:

export GARAGE_ADMIN_USER=admin
export GARAGE_ADMIN_PASSWORD=change-me
export GARAGE_JWT_SECRET=$(openssl rand -hex 32)   # optional; derived from the password if unset

Login exchanges these for a short-lived JWT, which the browser then sends as a Bearer token on every API request (and as ?api_key= on the WebSocket).

Run

cd dashboard
cp .env.example .env.local         # point NEXT_PUBLIC_GARAGE_URL at your Garage
bun install
bun run dev                        # http://localhost:3270

# in another terminal, with admin env vars set:
glorp garage                       # the Garage API on http://127.0.0.1:4271

For a non-loopback Garage bind, API-key auth is enforced automatically — the admin JWT satisfies it (admin scope). On loopback, the API is open but the dashboard still requires login when admin credentials are configured.

Build

bun run build && bun run start

The dashboard holds no server-side secrets: it is a pure client of the Garage API, configured via NEXT_PUBLIC_GARAGE_URL (baked into the bundle at build).

Design system

Built on Tailwind CSS + shadcn/ui (Radix primitives) with a graphite monochrome theme — tokens live in app/globals.css, primitives in components/ui/, and the Garage brand mark in components/brand.tsx. The app is session-centric: the session view (/sessions/[id]) hosts the live chat with Chat · Tasks · Agents · Details tabs, so agents and messages aren't separate pages.