w6w gives you a small, sandbox-first runtime for automation. Publishers ship Apps as code; hosts run a lightweight Registry + Server; end users compose Workflows in the studio. All layers are decoupled and open source.
An App is a directory with a package.json manifest, action
files, and auth methods. No SDK to install — the runtime types are all
you consume.
Every hook runs in a Deno worker with import: false and a
per-invocation network allowlist. Credentials never leave the host.
Registered apps carry a SHA-256 digest of their canonicalized description. Same source, same digest — re-registering is a no-op.
A single w6w-pack.json installs many apps at once. Ship a
first-party bundle or a hand-picked internal set from any Git repo.
The reference server ships full authorization_code + refresh flows, per-installation client-credential storage, and a studio popup handshake.
@w6w/types is pure TypeScript with no runtime. Publish an
App, embed the runtime, or write your own — the shapes stay portable.
import { createRegistry, InMemoryAppDataStore } from "@w6w/registry";
const registry = createRegistry({ store: new InMemoryAppDataStore() });
// Single app
await registry.register("github:w6w-io/w6w-apps@main#apps/slack");
// Or the whole first-party pack — 25 apps in one shot
await registry.registerPack("github:w6w-io/w6w-apps@main");
The first-party pack at w6w-io/w6w-apps ships 25 integrations
(Slack, Notion, Google Sheets, Airtable, Stripe-adjacent, and more) as one w6w-pack.json.