Production-ready TypeScript server with built-in observability
Vision is your app server — traces, logs, API playground plus BullMQ pub/sub & cron. Use it standalone or drop 2 lines into the Express, Fastify, Hono or Next.js app you already have.
> Built on Elysia & BullMQ · In-memory dev, Redis prod · Ship traces via OTLP to Grafana / Honeycomb / Datadog
Works with the stack you already run via adapters
Add a span. Watch it appear.
Every request is traced automatically. Drop span(), context and logs where you want more detail — and see exactly what ran, in order, with timings.
import { createModule } from '@getvision/server'
export const users = createModule({ prefix: '/users' })
.get('/', ({ span, addContext, logger }) => {
addContext({ 'user.plan': 'pro' })
const rows = span('db.select', { 'db.table': 'users' }, () =>
db.select().from(users).all()
)
const data = span('enrich.profiles', {}, () => enrich(rows))
logger.info('loaded users', { count: rows.length })
return data
})Everything you need to see inside your API
One dashboard for traces, logs and testing — wired into your framework, not bolted on.
Auto-generated dashboard
Vision discovers your routes and services and builds the whole dashboard for you — no setup, no config, no schema files.
Real-time tracing
A live waterfall of every request — spans, timings and parent/child relationships as they happen.
Wide-event logs
Logs auto-linked to the active trace. Add context once and see it on every log in the request.
API playground
Fire requests at your own endpoints in a multi-tab client — no Postman, no context switch.
Schema-aware
Request templates auto-generated from your Zod, Valibot or Standard Schema validators.
Type-safe pub/sub
defineEvents() + emit() — Zod/Valibot validated, BullMQ with 3 retries & exponential backoff. Failed jobs queryable/re-drivable, no hidden DLQ.
Cron & repeatable jobs
defineCrons({ schedule: '0 0 * * *' }) — BullMQ repeatable jobs with atomic claim & key dedup. No ShedLock needed.
OpenTelemetry exportnew
Ship the same traces over OTLP/HTTP to Grafana, Honeycomb, Datadog or an OTel Collector.
Observability without the tradeoff
The usual options ask you to give something up. Vision doesn't.
Without the rewrite
Some tools give you a dashboard — but only if you rebuild your app on their framework. Vision is just middleware on the app you already have.
Without the wiring
Raw OpenTelemetry means an SDK, a collector and a backend before you see a single span. Vision works the moment you add it.
Without the lock-in
Self-hosted and MIT-licensed. Develop locally, then export to whatever production backend you already run.
Ready to see what your API is doing?
Add Vision in two lines and open the dashboard. No signup, no agent, no data leaving your machine.