A modular, versioned scaffold for reproducible Go project generation.
goboot is a deterministic scaffolding tool for Go repositories.
It focuses on explicit, layered project setup that stays maintainable as projects grow.
It is not a framework or IDE. It targets teams that want reproducible output, clear service boundaries, and auditable generation behavior.
v0.2.0 is the active containerization milestone.
It builds on the v0.1.x CI and logging foundation with Dockerfile,
docker-compose, local Docker helper commands, and provider CI container jobs for
generated CLI-style Go projects, plus a container image path for the goboot
generator CLI itself.
- Modular Service Architecture: Logic is split into isolated services
(
base_project,base_lint,base_test,base_logger,base_docker,base_local,base_ci) with strict contracts. - Containerized Lint Tooling: Lint jobs run via Docker by default, while CI simulation uses host tools (
act,gitlab-ci-local). - Secure Scaffolding: Built-in protection against path traversal and strict root confinement.
- BDD Testing: Full Ginkgo/Gomega suite covering core packages and E2E flows.
- CI Generation: GitLab and GitHub CI templates generated from explicit contracts and image policies.
- Logger-Aware Scaffolding: Generated projects can use
slogorzerologthrough explicit settings owned by the project templates. - CLI Container Packaging: Generated projects can include a multi-stage
Dockerfile, compose file,
.dockerignore, local Docker commands, and CI image build validation throughbase_docker. - Containerized Generator: The
gobootCLI itself can be built as a Docker image for mounted-workspace generation runs. For file layout details, seedoc/PROJECT_STRUCTURE.md.
Even in early stages, goboot is being built with:
- Layered versioning and changelog visibility
- Clear module boundaries (
cmd/,pkg/,configs/, etc.) - Incremental support for Docker, CI/CD, and template-driven code generation
You can follow the structural milestones in ROADMAP.md.
- Go 1.26.3+
- Make for
maketargets - Task for
tasktargets and fullverify_intro - Docker for containerized lint tooling and container image builds
Lint tools such as GolangCI-Lint, Yamllint, Checkmake, Markdownlint, ShellCheck, shfmt, and EditorConfig Checker run from pinned container images by default.
For make verify_ci_canary, act,
gitlab-ci-local, Docker daemon access
(including /var/run/docker.sock), and a non-restricted host runtime are required.
The Make/Task canary targets run both providers. Direct script runs can override
provider selection with ./scripts/verify_ci_canary.sh --provider=<github|gitlab|both|config>.
git clone https://github.com/it-timo/goboot.git
cd goboot
make lint
make test
# or, using Task
task lint
task testmake test runs BDD suites (Ginkgo/Gomega) with race detection and coverage,
excluding /test/noauto and /templates by default. See doc/TESTING.md.
There’s still no “one-click project generator” here — the goal is deterministic scaffolding with visible layers.
If you are new to the repository, start with:
These documents focus on input config -> expected output behavior.
This repository uses:
- ROADMAP.md for planned milestones
- CHANGELOG.md for release-facing change summaries
- doc/VERSIONING.md for semantic version handling
- doc/WORKFLOW.md to define long-term contribution and CI logic
- doc/ci.md for CI policy modes and provider-specific generated CI behavior
- doc/containerization.md for generated Docker behavior
- doc/quickstart.md for first-run usage without reading internals
- doc/examples.md for concrete config-to-output scenarios
- doc/PROJECT_STRUCTURE.md to track how the folder layout evolves over time
- doc/README.md for the full docs index
- doc/adr/ for architecture decisions in ADR format
- doc/img/ for flow visualizations
These documents evolve alongside the project.
To protect generation runs from unexpectedly large template trees, goboot enforces runtime guardrails:
- max template files per service source:
5000 - max total template bytes per service source:
64 MiB
Limits are validated before rendering and fail fast when exceeded.
Licensed under the MIT License. See LICENSE. Includes attribution in NOTICE (if applicable).
goboot is pre-alpha and intended for structural exploration and reproducible setup.
It is not yet suitable as a production generator baseline.
If goboot helps you or saves you time, consider supporting its development:
No pressure — just a small way to say "thanks" if it brought you value.