lstk is developed by the LocalStack team. You can read the source, build it, and fork it freely.
We do not accept pull requests from outside collaborators.
The way to participate is to open a well-formed issue. A reproducible bug report or a clearly explained feature request gives us the context we need to act.
Open a new issue for a bug report or feature request.
For bug reports, include enough information for someone else to reproduce the problem without a follow-up.
For feature requests, lead with the problem rather than only a proposed implementation.
lstk's architecture and roadmap move quickly, and reviewing outside patches requires context and coordination we cannot currently offer fairly. An issue lets us validate the problem and decide on an approach before anyone spends time implementing it.
- Go 1.21+ (or latest stable)
- Docker (for integration tests)
- Make
- pre-commit (for secret scanning hooks)
After cloning, install the pre-commit hooks:
pre-commit installThis sets up a local git hook that runs gitleaks before each commit to prevent accidentally committing secrets or credentials.
make build # Compiles to bin/lstkmake test # Run unit tests (cmd/ and internal/) via gotestsum
make test-integration # Run integration tests (rebuilds bin/lstk first, requires Docker)
make lint # Run golangci-lintTo run a single integration test:
make test-integration RUN=TestStartCommandSucceedsWithValidToken- Comments: only for non-obvious "why" decisions
- Error handling: always check returned errors (except in tests)
- No package-level global variables; use constructors and dependency injection
- No direct stdout/stderr printing; use
output.Sinkfor user output,log.Loggerfor diagnostics
cmd/— CLI wiring only (Cobra), no business logicinternal/— all business logic:container/— emulator container handlingruntime/— container runtime abstraction (Docker)auth/— authentication (env token, keyring, browser login)config/— Viper-based TOML configoutput/— event/sink system for CLI/TUI renderingui/— Bubble Tea viewsupdate/— self-update logiclog/— internal diagnostic logging
See CLAUDE.md for full architecture details.
Use the skill:
/add-command <name>
This scaffolds a new CLI subcommand with proper wiring, domain logic, and tests.
Use the skill:
/add-event <EventName>
This adds a new typed event to the output/ event system.
Use the skill:
/add-component <name>
This scaffolds a new Bubble Tea TUI component.
- Prefer integration tests for most behavior
- Unit tests for isolated logic where integration is impractical
- When fixing a bug, always add an integration test that reproduces the scenario
These steps are for authorized repository collaborators:
- Create a feature branch from
main - Run
make lintandmake testbefore submitting - Review your own PR first — run
/review-pr <number> - Open a PR against
main
Check README.md for usage docs and CLAUDE.md for architecture.