Config as code
Tracking configuration lives in TypeScript, reviewed in PRs, deployed through CI/CD. No opaque UIs or workspace mysteries.
Junction is a TypeScript event collection layer for scaling technical teams. Config-as-code, consent-first, isomorphic, destination-agnostic.
Config as code
Tracking configuration lives in TypeScript, reviewed in PRs, deployed through CI/CD. No opaque UIs or workspace mysteries.
Typed events
Zod schema contracts enforce event shapes at runtime, catching data quality issues at the source — not weeks later when a funnel breaks.
Consent-first
A first-class consent state machine queues events until consent resolves, with per-destination gating and DNT/GPC respected by default.
Runs anywhere
The same collector runs in browsers, Node.js, Deno, Cloudflare Workers, and Bun. One implementation, every runtime.
Technical growth-stage startups and scaling companies that are:
All events use a typed entity:action model:
import { createClient } from "@junctionjs/client";
const jct = createClient({ destinations: [ga4, amplitude, meta], consent: { default: "pending" },});
// Entity:action — not flat stringsjct.track("product", "viewed", { product_id: "SKU-123", name: "Junction T-Shirt", price: 29.99, currency: "USD",});Destinations transform and deliver events independently. Consent gates control which destinations receive data. Schema contracts validate every event before it leaves the client.