Import a repository with its full history. GitHub can stay the main copy until you switch.
A repository takes pushes in one place at a time, GitHub or Upstream.
GitHub
acme/api
Main copyUpstream
acme/api
SyncedGitHub stays the main copy. Your team keeps pushing there, and Upstream syncs the repository and its activity.
- 1
Connect GitHub
Open Repositories, choose Import repository and sign in to GitHub. Any other Git host works by URL.
- 2
Pick a repository
Choose the source and the organization it goes to. Every commit, branch and tag comes with it.
- 3
Switch when you're ready
Make Upstream the main copy. Upstream keeps GitHub updated as a read-only mirror from then on.
Create the repository with the Upstream CLI and push every branch and tag with Git. Nothing about your clone changes except a new remote.
Install the CLI from the CLI page.
$upstream repo create api --workspace acme --waitan empty repository in acme$git remote add upstream https://git.coline.app/acme/api.git$git push upstream --all$git push upstream --tagsevery branch and tag, full historyTurn a repository into an Onset project in place, and agents land on main without waiting on each other. Git keeps working: each land reaches main as a commit within seconds.
Install it from the Onset page.
$on import upstream.codes/acme/api --to upstream.codes/acme/apimain's history and tags, git history unchanged$on get upstream.codes/acme/api$on land -m "Fix the login redirect"merged on the server, then pushed to git mainYour Git tools
Clone and push over HTTPS or SSH from any Git client, editor or CI. There's nothing to install.Code that calls the GitHub API
Point Octokit at api.upstream.codes/api/v3. Responses use GitHub's field names, pagination and errors. What's supportedGitHub Actions
A synced or mirrored repository can keep running its workflows on GitHub Actions. Upstream records the runs and shows them as checks on Change Requests.Your editor
One command sets up VS Code, Zed, Cursor or Windsurf with Upstream's Git login and MCP server. Editors and Git clients
- Pull requests are Change Requests
- Each push to a Change Request is saved as a version. Approvals and checks belong to the version they were given on.
- gh pr and gh issue don't work yet
- They use GitHub's GraphQL API, which Upstream doesn't serve yet. gh api works, and so does the Upstream CLI.
- One number sequence
- Issues and Change Requests share one sequence of numbers in each repository.
- Native CI is in early access
- Until it opens up, run workflows that need GitHub's runners through GitHub Actions on a synced or mirrored repository.
- Bigger limits
- Files can be up to 1 GB, one push up to 5 GB, and a repository has no size limit. GitHub blocks files over 100 MiB.
- Spam triage is included
- Outside contributions get checked for effort and quality on every plan, for free.
- Do I have to leave GitHub?
- No. Import a repository and keep GitHub as the main copy while you try Upstream. When you switch, GitHub keeps a read-only mirror, so anything that clones from it keeps working.
- What comes over in an import?
- The full Git history, every branch and every tag. You choose which organization or personal namespace the repository goes to.
- Can both GitHub and Upstream take pushes?
- No. A repository has one main copy at a time, either GitHub or Upstream. The other side follows it. That rules out conflicting pushes and unclear merge state.
- What happens to my GitHub Actions?
- They keep running on GitHub while the repository is synced or mirrored. Before you turn sync off, Upstream checks whether any required workflow would be left with nowhere to run.
- How big a repository can I move?
- Repositories have no size limit. One push can be up to 5 GB, so push a bigger history in parts, older tags first. Clones and fetches have no size limit.
- Can I go back?
- Yes. Upstream repositories are plain Git. Push one back to GitHub, or anywhere else, whenever you want.
Import it, leave GitHub in charge, and see how your team likes Change Requests.