flow is deliberately small. Read the Philosophy:
Does this help someone understand their network in under one second? If no — cut it.
PRs adding CPU panels, ping, packet counts, multi-pane layouts, or tabs will be declined regardless of code quality. Open an issue first.
UI changes should preserve the current split between data collection, state updates, and rendering. Keep motion spring-driven, pulses brief, and drawing cheap. Avoid border-heavy layouts or anything that reintroduces dashboard clutter.
Requires Go 1.24+ and git.
git clone https://github.com/programmersd21/flow
cd flow
make build
./bin/flow --version
Install golangci-lint (https://golangci-lint.run/):
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh \
| sh -s -- -b $(go env GOPATH)/bin v2.1.6
Run before every PR:
make check
Runs fmt-check, vet, lint, test, race, and build in sequence. CI runs make check.
| Command | What it does |
|---|---|
| make build | go build with ldflags from VERSION |
| make fmt | go fmt ./... |
| make vet | go vet ./... |
| make lint | golangci-lint run ./... (pinned v2.1.6) |
| make test | go test ./... |
| make race | go test -race ./... |
| make check | strict quality gate (fmt, vet, lint, test, race, build) |
| make dev-check | fast local check skipping lint |
| make bench | run cpu/alloc benchmarks |
| make cross | CGO-free cross builds |
| make smoke | run binary smoke tests |
| make clean | removes bin/ and dist/ |
Conventional Commits recommended, not enforced. Subject under 72 chars. Use "Closes #N" in the body when applicable.
feat: add --no-header flag
fix: prevent sparkline crash on width < 10
docs: clarify tmux integration
refactor: extract formatBytes helper
main requires the CI status check before merge. Enable in
Settings > Branches > Branch protection rules and add the check named
check (the quality gate job in ci.yml).
The VERSION file is the single source of truth. Never hardcode a version
string elsewhere. The build injects it via -ldflags "-X main.version=$(cat VERSION)".
Releases are cut via the Release workflow (workflow_dispatch):
- Update CHANGELOG.md with the new version section.
- Bump VERSION.
- Merge the PR.
- Run the Release workflow from GitHub Actions.
This project follows the Contributor Covenant v2.1. See CODE_OF_CONDUCT.md.