# Onset Version control where nobody waits and nothing gets lost. Its command is `on`. - **Nobody waits.** The server merges each change into main in the order they arrive, so a land is never refused because someone else landed first. - **Nothing is lost.** Work saves itself, `on undo` takes back what you did (a land included), and a change follows you to another machine. - **Private where you need it.** A folder can be visible to only some people, `.env` files stay yours, and likely secrets are stopped before they land. It has its own model and protocol. Git is a bridge: `on import` brings a repository's history in, and every hosted project is also a git repository that git, CI and GitHub mirrors keep using. ## Install ```sh curl -fsSL https://downloads.coline.dev/onset/install.sh | sh ``` On Windows, in PowerShell: ```powershell irm https://downloads.coline.dev/onset/install.ps1 | iex ``` Or with Homebrew, from Coline's tap on Upstream: ```sh brew tap coline/tap https://git.coline.app/coline/homebrew-tap.git brew install coline/tap/onset ``` Or with npm (Node 18 or later; every run goes through Node, so the others start a little faster): ```sh npm install -g @colineapp/onset ``` macOS (Apple silicon and Intel), Linux (x64 and arm64) and Windows (x64 and arm64). On Windows, files keep being executable or links in Onset when edited there, as in git; links Windows won't make (without Developer Mode) are files holding their target. Or build it: `cargo build --release -p onset-cli` in this folder (Rust 1.90 or later). Shell completions: `on completions zsh > ~/.zfunc/_on` (or bash, fish, powershell, elvish). Onset was called vcs before it had its name. Installing it replaces the `vcs` command, and `on` picks up where it left off: sign-ins, projects, workspaces (their `.vcs` folders become `.onset`), `vcs.toml` files and `VCS_*` settings all keep working. ## Start ```sh on login # signs in to upstream.codes in your browser on get upstream.codes/acme/shop # a workspace on a new change # ...edit files... on land -m "Fix the login redirect" # merged into main on the server ``` A project of your own, with no server: `on init`, then `on publish upstream.codes/you/name` when you want to share it. A git repository: `on import --to upstream.codes/you/name`. `on guide` prints [GUIDE.md](GUIDE.md), the instructions for coding agents. [docs/git-teams.md](docs/git-teams.md) is for teams on git: trying Onset, using both, moving over. [docs/safety.md](docs/safety.md) covers what keeps code safe. [SPEC.md](SPEC.md) describes every command, how landing works, access, the git bridge and the protocol. ## Hosting - **Upstream** hosts projects at upstream.codes (the service is in `apps/onset` of the Coline repository). Agents without a workspace can use its HTTP API or MCP at `https://onset.coline.dev/mcp`. - **Your own server:** `onset-server` is one binary with SQLite and a folder of objects. ```sh onset-server user add alice --name Alice --email alice@example.com --data ./data # prints a token onset-server serve --data ./data --listen 0.0.0.0:8790 on login your.host:8790 --token ``` Put it behind HTTPS (`on` talks plain HTTP only to localhost, or with `ONSET_INSECURE=1`). For a git copy (GitHub, GitLab, your own git server), run `on git mirror ` next to it. - **GitHub stays where it is:** `on git mirror https://github.com/acme/shop` keeps GitHub's `main` as the project's main, both ways: versions go out as commits, and pull requests merged there come in as versions. ## Layout | Folder | What | License | |---|---|---| | `core` | The model: objects, trees, merges, private paths, secrets. No I/O. | Apache-2.0 | | `cli` | The `on` command. | Apache-2.0 | | `server` | `onset-server`, for self-hosting. | AGPL-3.0 | | `wasm` | The core for Upstream's host (Cloudflare Workers). | Apache-2.0 | | `tests` | End-to-end suites: `local.sh`, `hosted.sh` (`ONSET_TARGET=worker` for Upstream's host), `git.sh`, `perf.sh`, and the agent run in `tests/agent`. | | | `install` | The installers, the release manifest and Homebrew formula scripts, and `tap.sh` (puts a release in the Homebrew tap). | | | `npm` | The `@colineapp/onset` npm package and `pack.sh`, which packs it for a release. | | Licenses: [LICENSE-APACHE](LICENSE-APACHE), and [server/LICENSE](server/LICENSE) for the server.