scbake is a single-binary CLI tool that simplifies project setup and maintenance by applying layered infrastructure templates and language packs atomically. It uses a manifest file (scbake.toml) as the source of truth for configuration, ensuring consistency and reproducibility.
scbake provides a safe, composable, and customizable way to manage project infrastructure.
-
Atomic Layering and Composition
Projects are built by applying independent layers (language packs and tooling templates). You can mix and match templates to achieve the desired setup. -
Highly Configurable & Extensible
Designed for flexibility. If a language pack is missing, simply add it. If a template doesn’t fit, you can modify or replace it. The handler interface simplifies extension. -
Built-in Atomic Safety
All modifications are managed by a LIFO-based Transaction Manager. If any task fails, the engine executes a journaled rollback. This deletes created artifacts and restores file backups in reverse order, ensuring the filesystem returns to its original state. -
Prioritized Execution
Tasks run in a defined order using Priority Bands (e.g., directory creation → language setup → universal config) to ensure dependencies are met.
scbake is currently in alpha development. There is no fixed method for installation or distribution beyond compiling from source at this stage.
To compile the binary yourself, ensure you have Go 1.21+ installed:
git clone https://github.com/Emin-ACIKGOZ/scbake.gitgo build -o scbake main.gomv scbake /usr/local/bin/Creates a new directory, bootstraps the scbake.toml manifest, and applies language packs and templates.
Note: Git initialization can be added via the --with git template.
scbake new <project-name> [--lang <lang>] [--with <template...>]| Flag | Description | Example |
|---|---|---|
--lang |
Primary language pack (go, svelte, spring) |
--lang go |
--with |
Comma-separated tooling templates | --with makefile,ci_github |
Example:
scbake new my-backend --lang go --with makefile,ci_githubApplies new language packs or tooling templates to an existing path. Because scbake uses its own transaction logic, it does not require a clean Git tree to operate safely.
scbake apply [--lang <lang>] [--with <template...>] [<path>]| Argument | Description | Default |
|---|---|---|
<path> |
Target directory | . |
Example:
scbake apply --with maven_linterLists available or applied resources.
scbake list [langs|templates|projects]| Language | Initialization Tasks | Required Binaries |
|---|---|---|
| Go | Creates .gitignore, main.go; runs go mod init, go mod tidy |
go |
| Svelte | Runs npm create vite@latest, installs dependencies, sets NPM scripts |
npm |
| Spring | Downloads starter zip from start.spring.io, extracts, makes mvnw executable |
curl, unzip, java |
| Template | Priority Band | Features |
|---|---|---|
editorconfig |
Universal Config (1000) | Standard file formatting across the project |
ci_github |
CI (1100) | Conditional CI setup based on detected languages |
go_linter |
Linter (1200) | Standard golangci-lint configuration |
maven_linter |
Linter (1200) | Sets up Maven Checkstyle |
svelte_linter |
Linter (1200) | ESLint 9 integration for Svelte projects |
makefile |
Build System (1400) | Universal build/lint scripts for all projects |
devcontainer |
Dev Env (1500) | Containerized DX with auto-detected toolchains |
git |
Version Control (2000) | Initializes repo, stages all files, and creates initial commit |
- Create a new package under
pkg/langorpkg/templates. - Implement the
Handlerinterface using task types (CreateTemplateTask,ExecCommandTask, etc.). - Register the handler in the relevant
registry.go.
| Band Name | Range | Purpose |
|---|---|---|
PrioDirCreate |
50–99 | Directory creation |
PrioLangSetup |
100–999 | Language setup |
PrioConfigUniversal |
1000–1099 | Universal config |
PrioCI |
1100–1199 | CI workflows |
PrioLinter |
1200–1399 | Linter setup |
PrioBuildSystem |
1400–1499 | Build systems |
PrioDevEnv |
1500-1999 | Dev environment setup |
PrioVersionControl |
2000-2100 | VCS initialization (Git) |
| Flag | Description |
|---|---|
--dry-run |
Show planned changes without applying them |
--force |
Override safety checks |
-v, --version |
Show version (v0.0.1-dev) |