The reference implementations are the spec. Each repo carries an RFC folder (the platform contract) and inline JSDoc on every exported surface. Start with the App RFC, then read the runtime.
Living documents in w6w-core/rfcs.
What an App is: manifest, actions, auth, invocations.
The unit of work — params, execute, output shape.
Auth types + lifecycle hooks (test, sign, refresh, exchange).
The typed input surface shared by actions and auth methods.
Wire shape for calling into a hook. Host + runtime contract.
Per-installation credentials + display metadata.
Content-addressed store: register / get / load / lifecycle.
Fork a template and start editing. Both flavors satisfy the same app contract.
deno.json + JSR @w6w/types + deno test. Zero-install, matches the reference runtime directly.
package.json + npm @w6w/types + tsx + vitest. Node-idiomatic authoring, same code contract.
@w6w/typesType-only shared model (no runtime).
@w6w/runtimeSandboxed hook execution + describe() + loadApp().
@w6w/sourcesResolve source refs (file:, github:, storage-name) into local dirs.
@w6w/registryDatastore-agnostic Registry orchestrator + PackManifest support.
@w6w/registry-typesDataStore contract + registry error codes.
@w6w/workflowWorkflow engine — plans + runs a graph of action invocations.
# 1. Register the whole first-party pack
curl -X POST http://localhost:8787/api/apps/import \
-H "content-type: application/json" \
-d '{"source":"https://github.com/w6w-io/w6w-apps","refresh":true}'
# 2. Or just one app
curl -X POST http://localhost:8787/api/apps/import \
-H "content-type: application/json" \
-d '{"source":"https://github.com/w6w-io/w6w-apps","paths":["./apps/slack"]}'
The registry is a library — any host can wrap it. Reference server and studio implementations are in progress.