Documentation

Documentation

Initialize once, synchronize everywhere, then keep using the native tools your project already knows.

Start here

  1. Install Basecamp.
  2. Run basecamp init once in an existing project.
  3. Commit the generated basecamp.lock with the project.
  4. On another machine, CI job, or sandbox with the same host triple, run basecamp sync.
  5. Use basecamp shell when you want an interactive activated shell.
  6. Run the project's normal build/test commands.

Core commands

CommandPurpose
basecamp initDetect the project, clarify missing choices, create the first lock, and sync it.
basecamp syncReproduce the existing lock without changing it.
basecamp updateRe-resolve the project, update the lock, and sync the result.
basecamp shellEnter the synchronized environment.
basecamp statusInspect lock, project inputs, and materialized layers.
basecamp doctorDiagnose environment problems.
basecamp cleanRemove project-local environment state; --cache also removes the shared store.
basecamp bundlePack or unpack a completely offline environment.

basecamp.lock is not another package lock

Cargo.lock, pnpm-lock.yaml, go.sum, and uv.lock remain owned by their native ecosystems. Basecamp records their digests and locks the wider environment: runtime, tools, native requirements, sources, and materialization rules.

Project stacks

Where software comes from

Basecamp is direct-first: trusted upstream distributions and native registries are used when possible. Basecamp CAS is an optional path for explicitly published, content-addressed layers. The current control plane does not schedule remote builders. Air-gapped environments use bundles.

Automation

Direct integrations can resolve environment locks through OpenAPI.