keelstack

keelstack

Tools for bootstrapping projects.

Start a monorepo from a template, keep it current as the template moves, and cache its CI.

All three are pre-release: no tagged versions yet.

Get startedkeelstackhq on GitHub

The tools

Monorepo template

hull

An opinionated, AI-native monorepo template. Pick the pieces you need; hull owns the structure, stack, tool versions and config, and keeps them current. Your app code stays yours.

  • pnpm, Turborepo, TypeScript 7, Vite+, Preact, Astro, Rust, Tauri, Hono on Cloudflare
  • One-job CI plus a ci-ok check; Turbo runs only affected tasks
  • Built for Claude Code: a lean CLAUDE.md, subagents, skills and a /loop default

Status: Pre-0.1, no release tag yet

hull on GitHub

Bootstrap and update

splice

Start a repo from versioned template pieces and keep it up to date. A Copier alternative in one static binary: no Python, no Rust toolchain.

  • splice new, add, update, check, diff and explain
  • On update, owned files are replaced, shared files are 3-way merged, seed files stay yours
  • Every command takes --json and --yes; an update bot opens one pull request

Status: Under construction

splice on GitHub

Cached CI

hoard

A Turborepo (and Vite+) remote cache for GitHub Actions, in one line of YAML. No account, no server to host.

  • Artifacts go to the GitHub Actions cache (default, zero config) or your own Cloudflare R2 bucket
  • Serves the Turborepo remote-cache API and exports TURBO_API, TURBO_TOKEN and TURBO_TEAM
  • The cache never fails your build: a storage error is a miss or a skipped upload

Status: Not released yet

hoard on GitHub

How they fit together

A template defines the repo, a tool renders it and keeps it current, and a cache keeps its CI fast.

  1. Template with hull

    hull defines the structure, stack, tool versions and config as pieces: base, preact-app, ui-storybook, astro-site, hono-worker, rust-tool, tauri-app, docs.

    gh:keelstackhq/hull//template
  2. Bootstrap and update with splice

    splice will render the pieces you pick into a new repo, then move it to newer template versions. Your edits are merged, never lost. Until it ships, hull's dev renderer does the first step.

    splice new · splice update · splice check
  3. Cached CI with hoard

    hoard will give the generated repo's CI a shared Turborepo cache (planned; hoard is not released yet). Later runs replay every unchanged task.

    uses: keelstackhq/hoard@v1

Get started

splice is not released yet, so today you render with hull's dev renderer. It needs Node 24 and pnpm 12; run pnpm install once in a hull checkout.

In a hull checkout
node scripts/render.mjs new --template template --out ../my-repo \
  --piece base --piece preact-app:web --piece hono-worker:api --data scope=acme
cd ../my-repo && git init && pnpm install && pnpm run ci

When splice 0.1 is out, the equivalent is pnpm dlx @keelstackhq/splice new gh:keelstackhq/hull//template my-repo --piece ... (flags unconfirmed).