Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Development Setup

Audience: new contributors getting their first PR ready.

This page is the short version. The fuller treatment of the repo’s conventions, CI gates, and Update Demand lives in the Internals section and in CLAUDE.md at the repository root.

Clone

git clone https://github.com/frankbardon/pulse.git
cd pulse

Tooling

Pulse needs only the Go toolchain — there is no Node, Python, or container build. Install Go 1.24+ (see go.mod for the canonical version).

The repo also uses staticcheck for make lint; it is auto-installed on first run via go run.

Common targets

CommandWhat it does
make buildBuilds the CLI binary to bin/pulse (default goal)
make testRuns go test ./...
make fmtRuns go fmt ./...
make vetRuns go vet ./...
make lintRuns go vet then staticcheck ./...
make coverRuns tests with coverage; outputs coverage.out
make cleanRemoves bin/ and coverage.out

A .env file at the repo root is auto-loaded and exported, so PULSE_DATA_DIR and any other PULSE_* env vars can live there for local development.

Run the binary you just built

make build
./bin/pulse --version
./bin/pulse --json | head -20

The CLI tree itself is mapped in the CLI Tour.

Where things live

The package layout is documented at Internals → Package Layout. Two pointers worth knowing on day one:

  • Public facade: pulse.go — every Go embedder API lives here.
  • CLI internals: internal/cli/ — one file per command group; never put processing logic here.

Read this before writing code