Template Hub

Pick a source. Pick a destination. Run.

A source template describes one system once — auth, pagination, incremental cursors, and the streams it produces. A sink template describes where rows land. Any source composes with any sink at run time, so a template written for one warehouse works for every other destination here.

Try a pairing

Pick any two. Get the command.

Choose a source to see which sinks it runs on, pick one to see how each stream will be written, and copy the command that runs it.

Runs against the public hub with no checkout; the CLI caches the catalog under ~/.cache/faucet/hub. Install the CLI ↓

Catalog

Source templates

One file per system: auth, pagination, incremental cursors and the streams it produces. Written once, it runs on every sink below.

Loading the catalog…
Destinations

Sink templates

Where rows land. Each sink lists the write modes it supports natively; a source asks for a mode per stream.

Publish

Registering a template is a pull request.

The catalog is a public repository. Open a pre-filled file under your own namespace — source-templates/<your-github-login>/ — describe your system, and CI lints it, composes it against every sink, and regenerates the index on merge. The namespace is yours: only the GitHub user or org that owns it can change it, and a hundred people can publish their own netsuite without colliding (acme/netsuite, octo/netsuite, …). The hub's own templates live in faucet-hq/, owned by the org the same way. Every merged change becomes the next version — v1, v2, v3 — and a sidecar decides which one is stable. No credentials ever go in: every secret is a ${param.NAME} the person running it supplies.

1 · Open a skeleton

Rename the your-github-login folder to your GitHub user or org. GitHub forks the catalog for you and opens a pull request when you save; the first PR into a namespace also adds its OWNERS file.

2 · Check it locally

# Install the CLI first (see below)
faucet hub lint  --hub .
faucet hub check --hub . --source your-github-login/my-system --sink faucet-hq/jsonl
faucet hub check --hub . --source your-github-login/my-system --sink faucet-hq/bigquery

Every source must compose with at least two sinks. See CONTRIBUTING for the rules the lint enforces.

3 · Or keep it private

Your organisation's templates can live in any repository with the same layout:

# Install the CLI first (see below)
faucet run --hub github:acme/catalog --source acme/erp --sink acme/snowflake …

Set GITHUB_TOKEN for a private repo.

Mirror the hub into your own server

faucet serve pulls the catalog into its template registry. The web console then lists every template, offers each registered sink on a source's trigger form, and shows which sinks each registered source runs on.

version: 1
origins:
  - name: hub
    source:
      type: github
      config: { repo: faucet-hq/template-hub, paths: [source-templates, sink-templates] }
    launch: always
    interval_secs: 3600
# Install the CLI first (see below)
faucet serve --history sqlite:./faucet.db --templates-sync hub-sync.yaml
Get started

Your first pipeline runs in five minutes.

Install the CLI, scaffold a config, and move real data — nothing external to stand up.

curl -LsSf https://github.com/faucet-hq/faucet-stream/releases/latest/download/faucet-cli-installer.sh | sh
brew install faucet-hq/faucet-stream/faucet-cli