Skip to content
Keel
All docs

Updating Keel

Studio and Agency licenses come with read access to the private keelkit-dev/keel-template repo, and every update lands there on master. This page covers how to pull those updates into your own product without losing your changes. Solo is a snapshot of the code at checkout, so there's nothing to pull.

One-time setup: keep Keel as upstream

Your product should live in your own repo, with Keel's repo as a second remote you pull from. If you cloned the template directly, rename its remote and point origin at your own:

bash
git remote rename origin upstream
git remote add origin https://github.com/<you>/<your-product>.git
git push -u origin master

git remote -v should now list both. You push to origin, you only ever fetch from upstream.

Read-only on purpose

Buyer access to the template repo is read-only. Pushing to upstream will fail, which is the point: your code never ends up in anyone else's copy.

Pulling an update

  1. Read the changelog first. It lists what changed in each update.

  2. Start from a clean tree on a branch.

    bash
    git switch -c keel-update
    git fetch upstream
    git merge upstream/master
  3. Resolve conflicts (see the hotspots below), then run the checks:

    bash
    bun install
    bun run typecheck && bun run lint && bun run test
  4. Apply new migrations to your local database with bun run db:migrate, click through the app, then merge the branch and deploy. Run the same migrate step against production before or during the deploy, the same way you ship your own schema changes.

Merging (not rebasing) keeps Keel's history intact, so the next update only brings in what's new since the last one.

Where conflicts usually happen

These are the files both you and Keel are likely to touch. Expect to resolve them by hand:

  • lib/db/schema/* and lib/db/migrations/. Keep every migration from both sides. If you generated your own migrations, Drizzle's meta/_journal.json will conflict: take Keel's entries, then re-run bun run db:generate so your schema changes get a fresh migration numbered after Keel's.
  • app/globals.css. Your theme tokens versus any token Keel adds. Keep your values, add the new variables.
  • Marketing pages and components/marketing/*. If you've replaced Keel's copy with your own (you should), keep yours.
  • lib/billing/plans.ts. Your plans and prices win. Check whether Keel added a new field to the plan shape.
  • .env.example. Merge both, then copy any new variables into .env.local and your host's settings.

Smaller updates, fewer conflicts

Pulling every update as it lands is much easier than catching up on five at once. Watch the template repo on GitHub to get notified when one ships.

If a merge goes wrong

Nothing is lost until you merge the branch. git merge --abort puts you back where you started, and deleting the keel-update branch throws the attempt away.

Last updated Oct 21, 2026