What is Amadla?¶
Amadla is an infrastructure automation ecosystem for setting up and managing servers — from a single laptop to a fleet of cloud instances. It works on any OS (Linux, macOS, Windows, OpenBSD) and follows the UNIX philosophy: small, focused tools that each do one thing well and can be mixed, replaced, or extended independently.
Each tool reads specific types of HERY entities (structured YAML files that describe what you need) and figures out how to make it happen on the target platform. Tools communicate via stdin/stdout, piping YAML or JSON between each other.
Core Differentiator
Amadla is resource-centric: instead of defining environments (like Terraform or Ansible), each resource (application, service, database) carries its own schema-validated configuration. Requirements are declared explicitly — not buried in documentation — and enforced by schemas. Layers compose and merge, giving a single queryable source of truth.
The Idea: Lists and Specialists¶
Imagine you have a busy Saturday. You need groceries, your dog needs a vet visit, and your kid wants a custom pizza. You write three lists:
- Grocery list — milk, eggs, bread, avocados
- Vet appointment — dog name, symptoms, vaccination history
- Pizza order — large, extra cheese, pepperoni, no olives
Each list goes to a specialist who knows exactly how to read it. The grocery store reads your grocery list. The vet reads the appointment details. The pizza shop reads the pizza order. You don't explain how to stock shelves, perform surgery, or operate a pizza oven — you just describe what you want, and each specialist figures out the rest.
Now imagine doing this without lists. You walk into the grocery store and try to remember everything from memory. You forget the avocados. At the vet, you can't remember when the last vaccination was. At the pizza shop, you order the wrong size. Every stop is trial-and-error.
That's the difference Amadla makes. In infrastructure automation:
- HERY entities are the lists — structured, validated, reusable descriptions of what you need
- Tools are the specialists — each reads specific entity types and knows how to act on them
- The pipeline is your Saturday route — amadla looks at all your lists, figures out which specialist handles each one, and works out the right order
A package entity goes to lay (the installer). A template entity goes to weaver (the config generator). A secret entity goes to doorman (the secrets resolver). A user entity goes to enjoin (the system configurator). Each tool only understands its own entity types — and that's the point. Simple tools, clear boundaries, no confusion.
The Pipeline¶
Define requirements (hery) → Resolve secrets (doorman) → Provision infra (raise)
→ Install apps (lay) → Configure system (enjoin) → Generate configs (weaver) → Audit state (judge)
Because every tool follows the same protocol (stdin/stdout, structured data, standard exit codes), you can:
- Replace any tool with your own implementation
- Skip tools you don't need
- Add custom tools that read new entity types
- Pipe tools together in any combination
Ecosystem at a Glance¶
| Category | Count | Examples |
|---|---|---|
| Core Tools | 14 | hery, doorman, weaver, judge, lay, raise, enjoin, waiter, unravel, conduct, lighthouse, garbage, dryrun, amadla |
| Libraries | 6 | LibraryUtils, LibraryFramework, LibraryPluginFramework, LibraryDoormanFramework, LibraryJudgeFramework, LibraryEnjoinFramework |
| Doorman Plugins | 16 | doorman-vault, doorman-aws, doorman-keepassxc, doorman-keycloak, ... |
| Raise Plugins | 10 | raise-libvirt, raise-virtualbox, raise-wsl, raise-xen, ... |
| Judge Plugins | 3 | judge-application, judge-system, judge-infrastructure |
| Weaver Plugins | 4 | weaver-jinja, weaver-js-handlebars, weaver-js-mustache, weaver-qute |
| Enjoin Plugins | 10 | enjoin-user, enjoin-service, enjoin-firewall, enjoin-cron, ... |
| Entity Definitions | 27+ | 15 types + sub-types + Tools |
Total: 52+ repositories across AmadlaOrg (public) and AmadlaCom (private).
Key Technologies¶
HERY is YAML-based, entities are validated against JSON Schema, and versioning requires Git. All tools and libraries are written in Go.
| Concern | Technology |
|---|---|
| Language | Go 1.24+ |
| CLI Framework | Cobra (wrapped by LibraryFramework) |
| Data Storage | YAML + SQLite caching (HERY) |
| Schema Validation | JSON Schema |
| Entity Versioning | Git |
| Secrets | Encrypted in-memory cache (doorman) |
| Template Engines | Jinja, Mustache, Handlebars, Qute (via weaver plugins) |