Local Development
Build tapes from source and run it locally.
Prerequisites
- Go 1.25+
- Docker — required for linting, formatting, tests via Dagger, and
tapes local up - PostgreSQL with
pg_duckdb+pgvector— required at runtime. The easiest path istapes local up. - Ollama — optional, for embeddings when running
tapes serve
A Nix flake carries all development dependencies. Run nix develop or enable direnv allow for automatic environment loading.
Clone and Build
1. Clone the repo
git clone https://github.com/papercomputeco/tapes.git
cd tapes 2. Build local binaries
make build-local Outputs the tapes binary to the ./build/ directory. Sets CGO_ENABLED=0 and GOEXPERIMENT=jsonv2 automatically.
3. Run it
./build/tapes local up
./build/tapes serve --postgres "postgres://tapes:tapes@localhost:5432/tapes?sslmode=disable" 4. Install to your PATH (optional)
make install Copies binaries to your $GOBIN directory.
Demo Data
Seed demo sessions to explore the Deck UI without real data:
./build/tapes deck --demo The demo data is content-addressed, so re-running --demo is idempotent — it won't duplicate sessions. To start completely fresh, recreate the database (e.g. tapes local down && tapes local up) before seeding.
Nightly Builds
Download the latest nightly binary directly instead of building from source:
curl -O https://download.tapes.dev/nightly/darwin/arm64/tapes
chmod +x ./tapes
sudo mv ./tapes /usr/local/bin/ Available platforms:
| OS | Arch | URL |
|---|---|---|
| macOS | ARM64 | darwin/arm64/tapes |
| macOS | AMD64 | darwin/amd64/tapes |
| Linux | ARM64 | linux/arm64/tapes |
| Linux | AMD64 | linux/amd64/tapes |
Replace the path in the URL above with the row matching your platform. Base URL: https://download.tapes.dev/nightly/
Useful Commands
make build-local Build binaries with local toolchain make install Build and install to $GOBIN make test Run tests via Dagger (requires Docker) make format Auto-fix lint and formatting issues make check Run golangci-lint checks make clean Remove the build directory Troubleshooting
Postgres connection errors
Confirm tapes local up finished and the container is healthy with tapes local status. Verify the DSN passed to tapes serve matches the port reported by tapes local up.
Merkle Hashing Failures
tapes requires GOEXPERIMENT=jsonv2. The Makefile sets this for you. If building manually, include it:
CGO_ENABLED=0 GOEXPERIMENT=jsonv2 go build ./cli/tapes Dagger Commands Failing
make format, make check, and make test run through Dagger and require Docker to be running.