Official plugins, adapters, infrastructure, and developer tooling for Seyfert.
This monorepo contains the @slipher/* packages maintained alongside Seyfert. Each package is installed independently, so applications only take the runtime and integrations they need.
| Package | Purpose | Guide |
|---|---|---|
@slipher/cache-integrity |
Reuses recently written values while isolating stale persistent cache relationships. | Cache integrity |
@slipher/cooldown |
Per-command cooldowns with decorator, middleware, and manager APIs. | Cooldown |
@slipher/logger |
Request-scoped wide-event logging with pluggable output. | Logger |
@slipher/opentelemetry |
Traces, duration metrics, and gateway health telemetry. | OpenTelemetry |
@slipher/queues |
Typed background jobs backed by the current process or BullMQ/Redis. | Queues |
@slipher/scheduler |
Cron and interval scheduling backed by the current process or BullMQ/Redis. | Scheduler |
@slipher/webhooks |
Minimal HTTP listener for signed Discord webhook events. | — |
| Package | Purpose | Guide |
|---|---|---|
@slipher/voice |
Discord voice connections, Opus transport, and DAVE encryption. | Voice |
@slipher/player |
Media sources, transcoding, playback queues, and controls on top of Voice. | Player |
| Package | Purpose | Guide |
|---|---|---|
@slipher/scaler |
Explicit placement and supervision of Seyfert workers across multiple hosts. | Scaling |
@slipher/proxy |
Single-replica Discord REST egress proxy for multi-process deployments. | — |
@slipher/redis-adapter |
Redis-backed cache adapters, including resource expiration policies. | — |
@slipher/generic-adapter |
Fetch-compatible HTTP server adapter for interaction endpoints. | Cloudflare Workers |
@slipher/uws-adapter |
HTTP server adapter backed by uWebSockets.js. | — |
| Package | Purpose | Guide |
|---|---|---|
@slipher/testing |
Runner-agnostic fixtures and an in-process mock bot. | Testing |
@slipher/eslint-plugin |
Type-aware ESLint rules for Seyfert applications. | ESLint |
@slipher/watcher |
Development hot reload while keeping the gateway process alive. | Hot reload |
@slipher/chartjs |
Render Chart.js configurations to image buffers with @napi-rs/canvas. |
Chart.js |
Slipher is not installed as a single bundle. Add only the packages your application needs:
pnpm add @slipher/cooldownEvery package is versioned independently and declares its own Seyfert, runtime, and optional integration requirements.
The workspace targets Node.js 22.13 or newer and pins pnpm 11.11.0. Install pnpm through one of its supported installation methods, then:
pnpm install --frozen-lockfile
pnpm checkpnpm check runs formatting, linting, builds, tests, and Biome checks across the workspace. The Redis-backed suites expect Redis 8 to be available at 127.0.0.1:6379 unless their environment overrides the connection URL.
Useful workspace commands:
| Command | Action |
|---|---|
pnpm build |
Build every package. |
pnpm test |
Run package test suites. |
pnpm lint |
Run repository lint tasks. |
pnpm format |
Apply repository formatting. |
pnpm check |
Run the complete local verification pipeline. |
To work on one package, use pnpm filtering:
pnpm --filter @slipher/queues test
pnpm --filter @slipher/queues buildPackage READMEs provide installation, a current quick start, compatibility requirements, and important operational warnings. Exhaustive guides live in tiramisulabs/seyfert-web and are published on seyfert.dev, so contracts, examples, and architecture have one canonical home.
When a package change affects its canonical guide, open a sibling PR in seyfert-web and link the two PRs in both directions. Keep README examples small enough to verify against the current public API.