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

@plumix/admin

v0.1.1

Published

Plumix admin application (prebuilt SPA assets)

Readme

@plumix/admin

Pre-built React SPA published as its own package and depended on by plumix. The admin compiles once into dist/, and the plumix Vite plugin resolves this package from node_modules and stages it into the consumer's .plumix/public/_plumix/admin/ directory so the active runtime adapter serves it at /_plumix/admin/* with no per-consumer rebuild.

Dev workflows

Two supported loops, pick whichever matches what you're iterating on.

Consumer-style: plumix dev only (single origin)

Once the consumer has wired static-asset serving for their chosen runtime (the example app's config shows the right binding for that runtime), running the backend serves admin too — no second process:

cd examples/minimal
pnpm dev                              # :5173
# open http://localhost:5173/_plumix/admin/

This mode exercises the same serving path production uses (the runtime's asset layer in front of the request handler). Best for "does my feature work end-to-end?" checks.

Admin-authoring: pnpm dev in both workspaces (two ports, HMR)

When iterating on admin source, Vite's HMR against admin source files is faster than rebuilding + restaging. Two terminals:

# terminal 1 — backend
cd examples/minimal && pnpm dev       # :5173

# terminal 2 — admin with HMR
cd packages/admin && pnpm dev         # :5174
# open http://localhost:5174/_plumix/admin/

Admin's Vite dev server proxies /_plumix/rpc and /_plumix/auth to :5173, so RPC and auth still hit the real backend. Best for "I'm tweaking a component, want hot reload."

Override the proxy target for a remote/non-default backend:

PLUMIX_BACKEND_URL=http://192.168.1.10:5173 pnpm dev

Turbo shortcut: pnpm dev from repo root

Runs both workspaces in parallel via turbo watch dev --continue. Same two-port layout as the two-terminal variant but in one shell.

First-time setup

Before RPC endpoints work, the dev database needs migrations applied — the specifics depend on the database adapter the example app uses. From your example app (e.g. examples/minimal):

cd examples/minimal
pnpm plumix migrate apply

End-to-end tests (Playwright + axe-core)

pnpm test:e2e launches a dedicated Vite server on :5180 and runs the Playwright suite against it. First-time setup needs Chromium installed:

pnpm exec playwright install --with-deps chromium    # once
pnpm test:e2e                                         # each run

The default suite is an accessibility baseline — axe-core with WCAG 2.1 AA tags run against the landing page. Every new route or feature should add a spec under e2e/.

Workspace-local scripts

From packages/admin/:

pnpm dev          # Vite dev server on http://localhost:5174/_plumix/admin/
pnpm build        # emits static assets to dist/
pnpm test         # vitest (jsdom + React Testing Library)
pnpm test:e2e     # playwright + axe-core (needs chromium installed once)
pnpm typecheck
pnpm lint

Stack

  • React 19 + TypeScript
  • TanStack Router (file-based, with @tanstack/router-plugin in Vite)
  • TanStack Query + @orpc/tanstack-query for RPC against the plumix backend
  • Tailwind CSS v4 (@tailwindcss/vite) + shadcn/ui (new-york style, neutral base)
  • Geist Variable + Geist Mono Variable via @fontsource-variable/*
  • Vitest + React Testing Library for component tests
  • Playwright + @axe-core/playwright for e2e and accessibility baseline

Directory layout

src/
  App.tsx              root component
  main.tsx             Vite entry
  routeTree.gen.ts     generated by @tanstack/router-plugin
  types.d.ts           ambient declarations (fontsource, etc.)

  lib/                 non-React utilities
    constants.ts       ADMIN_BASE_PATH and similar
    orpc.ts            typed oRPC client singleton
    utils.ts           cn() helper for shadcn components

  providers/           React provider wiring
    query-client.ts    createQueryClient factory
    router.ts          createRouter factory
    theme.tsx          ThemeProvider (light/dark/system)
    index.ts           barrel re-export for App.tsx

  components/
    ui/                shadcn-vendored primitives (do not hand-edit — re-add
                       via `pnpm dlx shadcn@latest add <name>` to refresh)

  routes/              file-based routes (see @tanstack/react-router docs)

Adding a shadcn component

pnpm dlx shadcn@latest add <name>

Components land in src/components/ui/. Knip is configured to treat that directory as a vendored component library — unused primitives don't surface as noise, so add the full set you expect to use.

How the admin is shipped

Admin build output (dist/) is published as the @plumix/admin package, which plumix declares as a dependency. At consumer build time, the plumix Vite plugin resolves @plumix/admin from node_modules and copies its dist/ into the consumer's dist/_plumix/admin/, and the active runtime adapter serves them (see packages/core/src/runtime/dispatcher.ts for the runtime-agnostic request pipeline). Plugin-contributed admin chunks + the manifest that wires them are planned for a later phase — see docs/reference/architecture/09-packages/05-admin.md for the full design.