Copied to clipboard

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 is tapes local up.
  • Ollama — optional, for embeddings when running tapes serve
Nix Users

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.

Last updated: