Compared
Keeping a changed fork current, side by side
You changed an open-source project, and upstream keeps shipping releases. There are several ways to keep up. Each one fits some cases. This page says what each does today, from its own documentation, and when it is the better choice than Graft.
Eight ways, side by side
Checked against each tool's docs on 2026-10-28. If something here is out of date, write to support@graftfork.com and the page will be corrected.
| Works on your existing fork | Follows releases, not just main | Automatic | Runs your tests before proposing | Handles conflicts | Never proposes a copy that fails your tests | Hosted or self-run | Cost | |
|---|---|---|---|---|---|---|---|---|
| Graft | Yes. Your commits as they are, merges included. | Yes. It watches upstream's releases. | Yes, on every release. | Yes, on the carried copy and on the release as shipped. | Changes that still apply are carried exactly, with no agent. A conflict goes to an agent. | Yes. Graft enforces it, not the agent. | Hosted. | Free plan, by invite. Premium is $12 a month for conflicts. Your first conflict is free. |
| By hand (rebase or cherry-pick) | Yes. | If you rebase onto each tag. | No. | If you run them. | You resolve them. | Up to you. | Self-run. | Your time, each release. |
| GitHub's Sync fork button | Yes. | No. It syncs a branch with upstream's branch. | No. You click it, or script it with the API or gh repo sync. | No. | No. GitHub asks you to open a pull request and resolve them. | No check. | Hosted. | Free. |
| Fork-sync bots, like the Pull app | Yes. Its basic setup hard-resets your branch to upstream, so it says to back up your changes first. | No. It follows an upstream branch. | Yes. It checks periodically. | No. It can wait for your own CI and branch protection before merging. | No. It labels the pull request and can assign a reviewer. | No. It opens the pull request either way. | Hosted. | Free, open source, runs on sponsorship. |
| Dependabot, Renovate | No. They bump the version you depend on. Your commits aren't carried. | Yes, new versions. | Yes, on a schedule. | Your CI runs on their pull request. | Not their job: there are no changes of yours to carry. | No. The pull request opens; your CI reports. | Dependabot is hosted by GitHub. Renovate is hosted by Mend, or self-run. | Free. Renovate has a paid tier. |
| patch-package, pnpm patch | No fork. A patch file for an installed package. | Yes. The patch is applied again when you install a new version. | Yes, on every install. | No. | No. A patch that doesn't apply fails (pnpm fails the install; patch-package fails in CI). | No check. A patch that applies isn't tested. | Self-run, in your install. | Free. |
| A coding agent, on request (Claude Code, Copilot, Cursor) | Yes. | When you ask it to. | No. Only when asked, or on a schedule you build and keep running. | If you ask it to. | Yes. | Only as far as the agent follows your instructions. No rule outside it, and no record of each decision. | Either. | Your plan or API usage. |
| Intent-based fork tools | No. You describe each change again as an intent with a verify script. | Yes. | When you run it. | It runs your verify scripts. | An agent writes every change again, each release. | As far as your verify scripts check. | Self-run. | Free tool, plus your agent usage. |
"Proposes" means a pull request or a moved branch. Graft never writes to your branch; a move is a new graft/ branch and a pull request you choose whether to take.
How Graft differs
Your commits, carried, then checked
- No rewrite into specs. Graft reads the commits you already have. Changes that still apply are carried exactly, with no agent and no cost.
- Only conflicts go to an agent. Your first conflict is free. After that, Premium resolves them, or an agent on your own key.
- A rule outside the agent. Graft moves a copy only when every change lands and no new test fails. No partial copies. A final check confirms every change is present before anything moves.
- Every result is public. The results page lists every sync, the stays included. A launch-day bug and its fix are on the changelog.
- Agents can drive it. An MCP server and a Claude Code plugin, and an HTTP API.
Fair to say
When something else is the better choice
- Renovate or Dependabot, for plain version bumps. If you haven't changed the project, you don't need a fork carried. They're free and they cover many package managers.
- patch-package or pnpm patch, for edited installed packages. If you changed a file in
node_moduleswith no repository behind it, they work today. Graft doesn't support that yet. - By hand, for a one-off fork. If you'll move to one new release and stop, a rebase is quicker than setting anything up.
- A coding agent on request, when you want to steer it. If you want to watch each step and decide as you go, ask your agent directly.
- GitHub's Sync fork, to follow main with no changes of your own. If your fork has no commits of its own, one click is enough.
Limits
What Graft doesn't do yet
- Only git, only GitHub. No GitLab or Bitbucket yet.
- No edited packages. A change made in place in
node_modulesorsite-packages, with no repository behind it, can't be carried yet. - Tests are found for Python and Node. Anything else needs a
.graft.ymlthat says how to run them. - A merge with its own edits is refused. If a merge in your branch resolved a conflict by hand, Graft stays rather than guess.
- One conflict at a time. A release with two conflicting changes takes two rounds.
- Many syncs stay. Under half of the benchmark syncs moved by themselves. A stay changes nothing and tells you why. The numbers are on the results page.
- Limits per plan. 10 syncs a month on the free plan and 40 on Premium, and 5 copies per person. See pricing.
See it on your own fork
Paste a public fork. It runs a real sync on a short-lived machine, never pushes and runs no agent. About 90 seconds, no account.