description: How to build, test, and contribute to go-io.
---
# Development
This guide covers everything needed to work on `go-io` locally.
## Prerequisites
- **Go 1.26.0** or later
- **No C compiler required** -- all dependencies (including SQLite) are pure Go
- The module is part of the Go workspace at `~/Code/go.work`. If you are working outside that workspace, ensure `GOPRIVATE=forge.lthn.ai/*` is set so the Go toolchain can fetch private dependencies.
## Building
`go-io` is a library with no binary output. To verify it compiles:
```bash
cd /path/to/go-io
go build ./...
```
If using the Core CLI:
```bash
core go fmt # format
core go vet # static analysis
core go lint # linter
core go test # run all tests
core go qa # fmt + vet + lint + test
core go qa full # + race detector, vulnerability scan, security audit
```
## Running Tests
All packages have thorough test suites. Tests use `testify/assert` and `testify/require` for assertions.
```bash
# All tests
go test ./...
# A single package
go test ./sigil/
# A single test by name
go test ./local/ -run TestValidatePath_Security
# With race detector
go test -race ./...
# With coverage
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out
```
Or via the Core CLI:
```bash
core go test
core go test --run TestChaChaPolySigil_Good_RoundTrip
core go cov --open
```
## Test Naming Convention
Tests follow the `_Good`, `_Bad`, `_Ugly` suffix pattern:
| Suffix | Meaning |
|--------|---------|
| `_Good` | Happy path -- the operation succeeds as expected |