Introduction
curo: /ˈkuː.roː/, [ˈkuːroː]
- to arrange, see to, attend to, take care of, look after, ensure, tend to
- to heal, cure
- to govern, command, preside over
curo is a command line tool for managing development environments, for humans and for automation. It ships a fixed, language-agnostic vocabulary of actions such as build, test and deploy, so you never have to invent your own script names or targets. A curo.toml manifest in your repository maps each action to the real commands. Think of curo as similar to tools like Make, Just and Please, with hints of what build systems like Bazel and Pants have explored over the years.
The main takeaway of curo is that it does not force a particular toolchain for the language(s) you are developing in. You set up the environment, and curo gives every part of your repository the same set of levers.
Why would I use curo?
There are many tools that exist to run commands and structure codebases. The philosophy behind curo is to standardize the language used when building code projects and to reduce the complexity of managing different components. The action vocabulary is deliberately fixed: curo build means the same thing in every repository that uses curo, whatever is happening underneath.
Key Benefits
- Consistent Commands: Everyone on your team runs
curo build,curo test, etc. No more "what do I run here?". - Portable Configuration: All logic lives in
curo.tomlfiles alongside your code, and you can always see what the actual commands are. - No Language Lock-in: You are not tied to any specific toolchain; you define how commands run.
- Smooth for CI/CD: The same commands work everywhere. The
ciandrelprofiles cover the cases where machine reporting or the release artifact genuinely differ. - Friendly to Automation:
--planrenders what would run without running it, and--porcelainemits machine-readable JSON. Agents get honest exit codes and structured output.
# Build all components
curo build
# Run unit tests
curo test.unit
# Deploy a component
curo deploy myapp/api
Project configuration (in curo.toml):
curo_toml_version = "2.1.0"
[about]
name = "myapp"
version = "1.0.0"
[dev]
build = "go build -o bin/myapp ."
[dev.test]
unit = "go test ./..."