Prerequisites
You need a working Rust toolchain. The exact toolchain version is pinned inrust-toolchain.toml at the repository root — rustup will automatically download the correct version when you run any Cargo command.
Additional platform-specific dependencies (C compilers, system libraries, bundler tools) are installed by the bootstrap script described below.
Bootstrap
The./script/bootstrap script performs all platform-specific setup in one step. Run it once after cloning the repository:
- macOS —
./script/macos/bootstrap - Linux —
./script/linux/bootstrap - Windows —
./script/windows/bootstrap
./script/install_cargo_build_deps to install the Cargo build-time tooling (cargo-bundle, etc.) and ./script/install_cargo_test_deps to install testing dependencies such as cargo-nextest.
Re-running bootstrap is safe. If dependencies are already installed, the
script skips them. Run it again after pulling a major update if you see
unexpected build errors.
Building and running
Use./script/run to build and launch Warp in a single step:
Connecting to a local server
If you are also runningwarp-server locally, use the with_local_server feature flag to connect the client to it:
Bundling
To produce a bundled application (macOS.app, Linux package, etc.) use:
Running tests
Warp uses cargo-nextest for parallel test execution. The full workspace test command is:command-signatures-v2 crate is excluded because it requires a separate build step. For most development you can also run tests for a single package:
Where tests live
-
Unit tests are in separate files following the convention
${filename}_tests.rsormod_test.rs, included at the end of their corresponding module: -
Integration tests live under
crates/integration/and cover end-to-end user-facing flows. The bar for integration tests is high: if a flow is worth shipping, it is usually worth an integration test.
Linting and formatting
All of the following must pass before opening or updating a PR:Changelog entries
When your PR introduces user-visible changes, add a changelog entry at the bottom of the PR description using one of these prefixes:
Leave changelog lines blank or omit them entirely for docs-only or refactoring changes.