Getting Started
Keel combines:
ss-keel-core: HTTP framework in Go built on Fiber, with OpenAPI, logging, validation, and lifecycle.keelCLI: scaffolding, component generation, and script automation.
Requirements
Section titled “Requirements”- Go
1.25+ - Git
- (Optional) Air for hot reload
Recommended path: with CLI
Section titled “Recommended path: with CLI”Install the CLI with Homebrew:
brew install slice-soft/tap/keelOr with Go:
go install github.com/slice-soft/keel@latestThen scaffold your project:
keel new myappcd myappRun in development:
keel run devGenerate your first module:
keel generate module usersGenerated base structure
Section titled “Generated base structure”A typical CLI-generated project looks like this:
myapp/├── cmd/│ └── main.go├── internal/│ └── modules/│ └── starter/ # optional├── go.mod├── keel.toml├── application.properties├── .env├── .env.example└── .air.tomlInitial endpoints
Section titled “Initial endpoints”With the server running:
| Endpoint | Description |
|---|---|
GET /hello | Starter route (if you included the starter module) |
GET /health | Health check |
GET /docs | Swagger UI |
GET /docs/openapi.json | OpenAPI 3.0 spec |
/docsand/docs/openapi.jsonare mounted whenEnv != "production".
Manual path: ss-keel-core only
Section titled “Manual path: ss-keel-core only”If you prefer not to use the CLI, you can start manually:
mkdir myapp && cd myappgo mod init github.com/your-org/myappgo get github.com/slice-soft/ss-keel-core@latestMinimal cmd/main.go:
package main
import ( "github.com/slice-soft/ss-keel-core/config" "github.com/slice-soft/ss-keel-core/core" "github.com/slice-soft/ss-keel-core/logger")
func main() { appLogger := logger.NewLogger(config.GetEnvOrDefault("APP_ENV", "development") == "production")
app := core.New(core.KConfig{ Port: config.GetEnvIntOrDefault("PORT", 7331), ServiceName: config.GetEnvOrDefault("SERVICE_NAME", "myapp"), Env: config.GetEnvOrDefault("APP_ENV", "development"), Docs: core.DocsConfig{ Title: "myapp API", Version: "1.0.0", }, })
if err := app.Listen(); err != nil { appLogger.Error("failed to start app: %v", err) }}Run:
go run ./cmd/main.goWhat’s next
Section titled “What’s next”- CLI Installation — installation methods (
go install,brew, releases) - generate command — module generation and automatic wiring
- Configuration — env vars and runtime configuration
- Controllers — route and handler design
- Modules — domain-driven organization
- Testing — unit and integration tests