Lalibela CLI
Production-grade backend scaffolding for Go teams.
Lalibela gives you a fast, modern developer experience (inspired by Vite), but built as a lightweight Go CLI with zero runtime dependencies.
Table of Contents
Why Lalibela?
Lalibela was built to improve developer productivity by reducing repetitive setup work and helping teams ship faster with confidence.
It automates common backend workflows, simplifies complex project bootstrapping, and enforces secure defaults from the start so new services begin with a strong baseline.
The Name and Its Symbolism
The name "Lalibela" is inspired by architectural precision and craftsmanship. It reflects the belief that strong software, like great architecture, is shaped with structure, intention, and durability.
This philosophy guides the CLI design: practical foundations, clear structure, and reliable outcomes for real-world engineering.
Features
- Scaffolds new Go web projects from templates
- Supports multiple server frameworks (
gin, echo, fiber, net/http)
- Auto-configures
templates/index.html welcome page
- Starts local development server with
lalibela run
- Optional browser auto-open (
--open)
- Interactive and non-interactive modes (
--yes)
- Actionable errors with command-specific help
- Colorized help/version output for better terminal UX
- Built-in feature installation system (
lalibela add )
- Safe self-uninstall command (
lalibela uninstall with optional --force)
- Embedded templates in the binary
- Cross-platform support: Windows, macOS, Linux
Installation
Windows (recommended): WinGet
If you’re on Windows, WinGet is the best option (no Go required to run the CLI):
winget install NaodEthiop.Lalibela
Upgrade:
winget upgrade NaodEthiop.Lalibela
Uninstall:
winget uninstall NaodEthiop.Lalibela
If winget can’t find the package yet, use Releases or Install with Go.
Download prebuilt binaries
- Open Releases:
https://github.com/naodEthiop/lalibela-cli/releases
- Download your OS/architecture archive
- Extract and add
lalibela to your PATH
One-command installer
Windows (PowerShell):
Invoke-Expression ((Invoke-WebRequest -UseBasicParsing "https://raw.githubusercontent.com/naodEthiop/lalibela-cli/main/scripts/install.ps1").Content)
macOS/Linux:
curl -fsSL https://raw.githubusercontent.com/naodEthiop/lalibela-cli/main/scripts/install.sh | sh
Install with Go
Go is only required if you install/build from source. (You’ll also need Go to run the generated project.)
go install github.com/naodEthiop/lalibela-cli/cmd/lalibela@latest
Windows (helper to install Go and configure PATH):
PowerShell:
Invoke-Expression ((Invoke-WebRequest -UseBasicParsing "https://raw.githubusercontent.com/naodEthiop/lalibela-cli/main/scripts/install-go.ps1").Content)
Command Prompt (cmd.exe):
powershell -NoProfile -ExecutionPolicy Bypass -Command "Invoke-Expression ((Invoke-WebRequest -UseBasicParsing 'https://raw.githubusercontent.com/naodEthiop/lalibela-cli/main/scripts/install-go.ps1').Content)"
Windows: Scoop
scoop install https://raw.githubusercontent.com/naodEthiop/lalibela-cli/main/packaging/scoop/lalibela.json
Quick Start
Lalibela scaffolds a Go project. You need Go installed to run the generated project (even if you installed Lalibela via WinGet).
# 1) Scaffold a new project
lalibela
# 2) Move into the generated folder
cd myapp
# 3) Start development server (wrapper around: go run .)
lalibela run --open
Non-interactive:
lalibela --yes -name myapi -framework gin
cd myapi
lalibela run
CLI Usage
Root
lalibela [flags]
lalibela help [command]
Commands
lalibela add
lalibela run [--open]
lalibela update
lalibela uninstall [--force]
Common Flags
-h, --help show help
-v, --version print version
-y, --yes auto-accept prompts / non-interactive mode
-fast scaffold with defaults
-name set project name
-framework select framework
-features "Clean,Logger,PostgreSQL,JWT,Docker" select legacy scaffold features
-template-list print template catalog
-config custom config file path
Examples
lalibela
lalibela --yes -name billing-api -framework echo
lalibela -name auth-api -framework gin -features "Logger,JWT,Docker"
lalibela add postgres
lalibela add redis
lalibela run
lalibela run --open
lalibela update
lalibela uninstall
lalibela uninstall --force
lalibela help add
lalibela help run
lalibela help uninstall
Example Generated Project Structure
myapi/
|- .env
|- go.mod
|- main.go
|- startup.go
|- templates/
| |- index.html
| |- lalibela2.webp
|- internal/
| |- routes/
| | |- routes.go
| |- middleware/
| | |- jwt.go (if selected)
| |- config/
| | |- config.go (default production feature)
| |- logger/
| | |- logger.go (default production feature)
| |- server/
| |- health.go
| |- cors.go
| |- error_handler.go
| |- graceful_shutdown.go
|- .lalibela/
|- features.json
Configuration (~/.lalibela.json + ~/.lalibela/)
{
"project_name": "starter-api",
"framework": "gin",
"features": ["Logger", "Docker"],
"fast": false
}
Use a custom config file:
lalibela -config ./lalibela.json
Lalibela also stores local state (for example, installed feature metadata) under ~/.lalibela/.
Roadmap
- Improved plugin ecosystem for third-party templates
- Expanded framework-aware feature patching
- Database migration command workflow
- Optional CI/CD starter profiles
- Shell completion support
- Better project upgrade/diff tooling
Contributing
Contributions are welcome.
- Fork the repository
- Create a feature branch
- Run tests:
go test ./...
- Open a PR with:
- clear summary
- rationale
- before/after CLI output when relevant
Please keep changes backward compatible and UX-focused.
License
MIT License.