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

dripyard

v0.9.12

Published

Dashboard + worker supervisor for dripline projects. Reactive UI over .dripline/ workspaces, built on vex-core + dripline + flaregun.

Downloads

2,534

Readme

Dripyard

Dashboard + worker supervisor for dripline projects. Point it at a workspace (a directory with .dripline/) and get a reactive UI over its lanes, runs, workers, catalog, warehouse, and SQL query surface — plus a live control plane for scheduling and scaling workers.

Built on vex-core (reactive backend) + dripline (data sync engine) + optional flaregun (rotating proxy).

Lives at packages/dripyard/ in the dripline monorepo. Depends on packages/dripline via workspace:*, so changes there are picked up without a publish.

Architecture

┌───────────────────────────────────────────────────────────┐
│                     Dripyard Server                       │
│                                                           │
│  ┌──────────┐  ┌──────────────┐  ┌───────────────────┐    │
│  │Scheduler │→ │ Orchestrator │→ │ Dripline (sync)   │    │
│  │(vex jobs)│  │              │  │  ├─ Plugin (API)  │    │
│  └──────────┘  │              │  │  ├─ DuckDB        │    │
│                │              │→ │  └─ Remote (S3/R2)│    │
│  ┌──────────┐  │              │  └───────────────────┘    │
│  │ Vex Core │  │              │                           │
│  │ (SQLite) │  │              │  ┌───────────────────┐    │
│  │  lanes   │  │              │→ │ FlareGun (proxy)  │    │
│  │  runs    │  │              │  │  └─ CF Workers    │    │
│  │ workers  │  └──────────────┘  └───────────────────┘    │
│  └──────────┘                                             │
└───────────────────────────────────────────────────────────┘

Vex Core — reactive backend engine. Stores lane definitions, run history, and worker state in SQLite. Provides query/mutate/subscribe API over HTTP with SSE for real-time updates.

Dripline — does the actual data sync. Plugins turn APIs into SQL-queryable tables, the sync engine streams data into DuckDB, and the Remote layer publishes parquet files to S3/R2. Dripyard adopts dripline's project format (.dripline/plugins.json, .dripline/config.json) as its source of truth.

FlareGun — optional rotating proxy network on Cloudflare Workers. When a lane has proxyEnabled: true, HTTP calls route through rotating IPs.

Quickstart

npm install -g dripyard
# or
bun add -g dripyard

# Point it at an existing dripline workspace
dripyard serve /path/to/my-dripline-project

# Or default to cwd
cd /path/to/my-dripline-project
dripyard serve

The server loads the workspace's plugins, hydrates lanes from config.json, starts an embedded worker, and serves the React dashboard from the same process — no separate Vite server. UI at http://localhost:3457.

Development (from this monorepo)

bun install                                         # workspace linking
bun --filter dripyard build:ui                      # build the React bundle
bun --filter dripyard dev -- serve <workspace-dir>  # http://localhost:3457

# If you want HMR while hacking on the UI:
bun --filter dripyard dev:ui                        # Vite on :5173, proxies engine endpoints to :3457

Standalone worker

bun --filter dripyard dev -- worker /path/to/my-dripline-project \
  --socket /tmp/dripyard-3457.sock

Workers register over the dashboard's unix socket and auto-claim lanes via R2 leases. The UI's +1 worker button does this for you.

CLI

dripyard lane list                # list lanes
dripyard lane run <id>            # trigger a run now
dripyard runs <lane-id>           # show recent runs
dripyard status                   # orchestrator snapshot

Configuration

| Env var | Default | Description | |---------|---------|-------------| | DRIPYARD_PORT | 3457 | Server port (UI + engine endpoints + /health) | | DRIPYARD_DB | :memory: | SQLite path for operational state (runs, workers, progress). Set to a path on a mounted volume in production — the :memory: default wipes on every restart. | | DRIPYARD_WORKER | worker-<hostname> | Embedded worker name | | DRIPYARD_URL | http://localhost:3457 | Server URL for CLI commands | | DRIPYARD_SOCKET | <tmpdir>/dripyard-<port>.sock | Unix socket for local workers | | DRIPYARD_TOKEN | (unset) | Shared bearer token. When set, all HTTP requests require it. |

Auth

By default, dripyard runs open — correct for localhost and for dev where you're the only caller. For anything on a public URL, set DRIPYARD_TOKEN:

export DRIPYARD_TOKEN="$(openssl rand -base64 32)"
dripyard serve

With a token set:

  • Browsers get redirected to /login, a minimal form that POSTs the token and sets an HTTP-only cookie. /logout clears it.
  • CLIs and curl send Authorization: Bearer <token> on every request.
  • /health bypasses auth so platform probes work without leaking the token.
  • Failed logins are rate-limited per IP (5 / minute by default).

ServerOptions also accepts token, cors, and log directly if you're embedding startServer programmatically. Auth is one token, one gate — for multi-user or SSO, put Cloudflare Access / Tailscale / an oauth-proxy in front.

Workspace format

A dripyard workspace is literally a dripline workspace. It needs:

  • .dripline/config.json — connections, lanes, remote, rate limits
  • .dripline/plugins.json — installed dripline plugins

Both are standard dripline files; nothing dripyard-specific lives on disk. Dripyard's SQLite is a live cache + operational layer (runs, workers, live progress) that can be wiped and rebuilt from the workspace any time.

License

MIT