{"id":25720307,"url":"https://github.com/wearetechnative/catstack","last_synced_at":"2026-02-12T05:04:22.635Z","repository":{"id":279207753,"uuid":"938044998","full_name":"wearetechnative/catstack","owner":"wearetechnative","description":"Loosely coupled Terraform framework making complex infrastructure understandable and scalable.","archived":false,"fork":false,"pushed_at":"2025-02-24T10:47:31.000Z","size":6,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-24T11:40:08.553Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wearetechnative.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-24T10:34:19.000Z","updated_at":"2025-02-24T10:47:38.000Z","dependencies_parsed_at":"2025-02-24T11:40:11.763Z","dependency_job_id":"603e86cf-2277-498c-86ce-5fea2541b4fe","html_url":"https://github.com/wearetechnative/catstack","commit_stats":null,"previous_names":["wearetechnative/catstack"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wearetechnative%2Fcatstack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wearetechnative%2Fcatstack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wearetechnative%2Fcatstack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wearetechnative%2Fcatstack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wearetechnative","download_url":"https://codeload.github.com/wearetechnative/catstack/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240717200,"owners_count":19846405,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-25T17:39:44.374Z","updated_at":"2026-02-12T05:04:22.630Z","avatar_url":"https://github.com/wearetechnative.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# CatStack\n\nLoosely coupled Terraform framework making complex infrastructure\nunderstandable and scalable.\n\n\u003cimg src=\"catstacklogo.png\" style=\"width:200px\" /\u003e\n\n## What is CatStack?\n\nCatStack is a Terraform/OpenTofu framework that originated within TechNative. The\nframework solves several crucial problems that Cloud Engineers face when\nperforming migrations and helps them set up completely new projects much faster.\nCatStack draws inspiration from frameworks in the software development world\nwithout trying to resemble them.\n\nThe main principles of CatStack are:\n\n- \"Don't repeat yourself\" (DRY)\n- Domain-separated organization of infrastructure\n\nCatStack is designed to be used without having to install additional software\nexcept for Terraform/OpenTofu itself.\n\n## Is CatStack magic?\n\nNo, we're not making it prettier than it is. CatStack is simply a well-considered\ncollection of conventions, best practices, and a directory structure that\nbundles multiple Terraform projects together. All of this combined delivers a\ncomprehensible and scalable IaC project that increases productivity for any cloud team,\nwhether small or large.\n\n## The advantages of CatStack\n\nThese are the advantages of building a terraform project with CatStack.\n\n### Collaboration in a team environment\n\nBy dividing infrastructure into logical domains, multiple engineers can\ncollaborate on a larger project. CatStack has best practices, but in principle,\na team is free to determine its own domains. A domain has its own\nterraform state, so as long as engineers don't work on a domain simultaneously,\nthey can use `terraform apply` whenever they want.\n\n### DRY and multi-environments\n\nCatStack helps engineers write efficient source code that is reusable.\nFirst, CatStack implements multi-environments in a clear and\nscalable way. An environment can be deployed in multiple ways but\nthe most obvious application is to separate production and non-production\ncloud accounts from each other. Heavier resources can be configured\nfor the production account. The source code that defines the resources\nis shared across all environments.\n\n### DRY and data blocks\n\nThrough Terraform's data blocks, resources from one domain can read necessary\ninformation from the state of another domain.\n\n### DRY and shared code libraries\n\nCatStack offers the possibility to place project-specific terraform code that\nappears in multiple domains in a shared library.\n\n### DRY and Domain modules\n\nThis is a programming pattern that CatStack encourages, but that every good\nTerraform programmer naturally knows and applies. As soon as you define\nmultiple nearly identical resources within a domain, you create a module. You do this\nwithin the domain. You can compare this to creating a function in a\ngeneric programming language.\n\n### DRY and Terraform remote modules\n\nWithin a domain, you can of course make use of Terraform's powerful\nmodule system. Use any of the thousands of modules from the\nTerraform Registry, or reference previously written modules in a git repo.\nDon't limit yourself because Terraform modules are the building blocks of the\nCloud.\n\n### Flexible\n\nCatStack is incredibly flexible. Any application can be captured within the\nCatStack framework. And this while maintaining the ability to make as much use\nas possible of existing building blocks. This combination of qualities\nmakes CatStack ideal for teams that execute many projects. Each project\nis tailor-made, and at the same time, each project contributes to the projects that\nare yet to come.\n\n### Cloud Agnostic\n\nJust like Terraform is suitable for AWS, Azure, or any other provider...\nCatStack is just as versatile. It's even possible within a CatStack\nproject to have multiple providers working together. As a fun experiment,\nwe built a several projects in MineCraft with CatStack and the Terraform MineCraft\nprovider.\n\n### Optional tooling\n\nAs stated earlier, CatStack is a framework that can be used with\nTerraform as its only dependency. However, because CatStack is\nbased on smart conventions, it offers excellent opportunities to make tasks\neven easier. TechNative has created quite a few scripts and small programs for AWS\nthat make our engineers even more productive.\n\nAt TechNative, we work with the rule: feel free to use all those handy scripts\nthat allow you to work faster. But not before you understand how Terraform\nworks and how CatStack is structured.\n\nHere's a list of CatStack tooling we use withing TechNative:\n\n- [RACE](https://github.com/wearetechnative/race) - Terraform Tools for TechNative CatStack \n- [Bootstrap-AWS-CatStack](https://github.com/wearetechnative/bootstrap-aws-catstack) - Bootstrap-AWS-CatStack Script\n\n## FAQ\n\n\u003e What does the name CatStack mean?\n\nCatStack doesn't mean that much. A cat is a nice animal. You can read it as:\nCloud AWS Terraform Stack.\n\n\u003e Does CatStack also work with OpenTofu instead of Terraform?\n\nCatStack is 100% compatible with OpenTofu.\n\n## Definition of Terms\n\ninfra_environments: infra_environments short for infrastructure environments\nare the AWS accounts where resources will be created and hosted.\n\nxxx.tfvars.json: This file hosts Terraform variables that are shared between\nthe domains and stacks.\n\nxxx.tfbackend: This file hosts the details of the Terraform backend\nconfiguration for that specific infrastructure environment.\n\nDomain: Domains are directories which contains the IaC code of the resources\ndeployed. Domains have numbers infront of them which indicates in which order\nof the Stack they are applied. For example, Domains starting with 001 means\nthat the resources in those domains are the first that should be deployed in an\nenvironment.\n\nStack: The Stack directory contains the directory of all domains. Think of a\nStack as a kitchen drawer and the contents in that drawer are known as domains.\n\nModule: A module is a group of resources that together provide a certain value\nfor a domain or stack.\n\n## Documentation\n\nFor more detailed documentation, see the [docs](./docs/) directory:\n\n- [Architecture](./docs/architecture.md) - Detailed CatStack architecture and structure\n\n## Domains\n\nA CatStack is a composition of _domains_. A domain is an autonomous Terraform\ncomponent with its own seperated Terraform state. You can have low level\ndomains and higher level domains, E.g. the KMS domain is a low level domain as\nit has many dependants, while an EC2 instance domain is high level domain. Like\nany other vanilla Terraform project, a CatStack domain can use terraform\nmodules.\n\nA CatStack domain is not distributed as an installable module, but its\nmore like glue code for one or more resources to define an infrastruture\ncomponent in a larger system or solution.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwearetechnative%2Fcatstack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwearetechnative%2Fcatstack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwearetechnative%2Fcatstack/lists"}