{"id":24041896,"url":"https://github.com/openfabr/cdf","last_synced_at":"2025-04-19T19:52:29.924Z","repository":{"id":63766391,"uuid":"570152300","full_name":"openfabr/cdf","owner":"openfabr","description":"OpenFABR Cloud Development Framework (CDF)","archived":false,"fork":false,"pushed_at":"2023-07-20T02:16:29.000Z","size":3160,"stargazers_count":18,"open_issues_count":25,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-18T22:45:44.825Z","etag":null,"topics":["awscdk","cdk8s","cdktf","cloud","csharp","custom","devops","golang","iac","infrastructure-as-code","java","modular","pulumi","python","typescript"],"latest_commit_sha":null,"homepage":"https://openfabr.github.io/cdf/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openfabr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null},"funding":{"github":"openfabr"}},"created_at":"2022-11-24T13:04:03.000Z","updated_at":"2023-10-22T19:54:09.000Z","dependencies_parsed_at":"2023-02-13T21:45:59.842Z","dependency_job_id":null,"html_url":"https://github.com/openfabr/cdf","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfabr%2Fcdf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfabr%2Fcdf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfabr%2Fcdf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfabr%2Fcdf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openfabr","download_url":"https://codeload.github.com/openfabr/cdf/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233105916,"owners_count":18625916,"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":["awscdk","cdk8s","cdktf","cloud","csharp","custom","devops","golang","iac","infrastructure-as-code","java","modular","pulumi","python","typescript"],"created_at":"2025-01-08T22:13:39.638Z","updated_at":"2025-01-08T22:13:45.732Z","avatar_url":"https://github.com/openfabr.png","language":"TypeScript","readme":"# OpenFABR Cloud Development Framework (CDF)\n\n**The IaC framework to build cloud infrastructure faster**\n\nBecause it is **React for Infrastructure-as-Code** - [see why](./docs/introduction/react-for-iac.md)\n\n*developed and sponsored by [FABR](https://fabrhq.com?utm_source=openfabr-cdf-docs\u0026utm_medium=md-doc\u0026utm_campaign=general-oss)*\n\n![OpenFABR CDK header](./docs/assets/header-640x320.png)\n\n| ![AWS CDK](./docs/assets/3rd-party/awscdk-icon-v2.png) | ![Terraform CDK](./docs/assets/3rd-party/cdktf-icon.png) | ![cdk8s](./docs/assets/3rd-party/cdk8s-icon-v2.png) | ![Pulumi](./docs/assets/3rd-party/pulumi-icon.png) |\n| :-- | :--: | :--: | --: |\n| AWS CDK | Terraform CDK | cdk8s | Pulumi |\n\n\nFramework(s):\n\n- \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/typescript/typescript-original.svg\" alt=\"TypeScript\" style=\"width:25px;height:25px\" /\u003e ![NPM](https://img.shields.io/npm/v/@openfabr/cdf)\n- Coming Soon: \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/python/python-original.svg\" alt=\"Python\" style=\"width:25px;height:25px\" /\u003e | \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/java/java-original.svg\" alt=\"Java\" style=\"width:25px;height:25px\" /\u003e | \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/go/go-original.svg\" alt=\"Go\" style=\"width:25px;height:25px\" /\u003e ([vote](https://github.com/openfabr/cdf/discussions/31))\n\nPackages as reference implementations:\n\n- \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/typescript/typescript-original.svg\" alt=\"TypeScript\" style=\"width:25px;height:25px\" /\u003e AWS CDK: ![NPM](https://img.shields.io/npm/v/@openfabr/package-ri-awscdk)\n- \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/typescript/typescript-original.svg\" alt=\"TypeScript\" style=\"width:25px;height:25px\" /\u003e Terraform CDK: ![NPM](https://img.shields.io/npm/v/@openfabr/package-ri-cdktf)\n- \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/typescript/typescript-original.svg\" alt=\"TypeScript\" style=\"width:25px;height:25px\" /\u003e Pulumi: ![NPM](https://img.shields.io/npm/v/@openfabr/package-ri-pulumi)\n\nSample projects using the packages above:\n\n  - \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/typescript/typescript-original.svg\" alt=\"TypeScript\" style=\"width:25px;height:25px\" /\u003e [AWS CDK](./samples/projects/awscdk-typescript/README.md) for [AWS](https://aws.amazon.com)\n  - \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/typescript/typescript-original.svg\" alt=\"TypeScript\" style=\"width:25px;height:25px\" /\u003e [Terraform CDK](./samples/projects/cdktf-typescript/README.md) for [Digital Ocean](https://digitalocean.com)\n\n## [Documentation](https://openfabr.github.io/cdf/)\n\n## Introduction\n\nOpenFABR CDF aims to offer a brand new way of building cloud infrastructure, based on our view that the future of DevOps is **MODULAR + CUSTOM**.\n\n![CDF: MODULAR + CUSTOM](./docs/assets/cdf-module_custom.png)\n\nWe envisage a future where application developers (in product engineering) and DevOps/Cloud engineers (in platform engineering) collaborate by code in a true Infrastructure-as-Code manner. OpenFABR CDF is the missing piece, the glue, that brings the entire tool chain together from IaC runtimes like CDK, to imperative languages like TypeScript, testing frameworks like Jest, and artefact repositories like NPM.\n\n### MODULAR: Reusable, High-level Packages\n\nAd-hoc, bespoke infra build project after project should be a thing of past. There are common patterns emerging that can be encapsulated into reusable modules, or L2/L3 constructs as AWS would call them. Bigger engineering organisations with platform engineering function also tend to have their own opinions about how their internal cloud operations can be constructed by high-level components, which in turn can be offered to the product engineering counterpart in the same organisation.  \n\n### CUSTOM: Project-specific Code Blocks\n\nAbstraction (via packages mentioned above) is hard, and almost impossible to work without an escape hatch, because every infra project could have its own quirks, e.g. special permissions, external dependencies, or even different domain names. OpenFABR CDF fully acknowledges it by offering an inversion-of-control based custom code block feature for application developers to access all underlying cloud resources fully, for customisation.  \n\n### The Framework\n\nFor application developers, OpenFABR CDF is the framework that pieces together a cloud infra package with local custom code to deliver a cloud infra project extremely quickly. \n\n- From 0 to 95%: With the help of a selected package, an infra baseline can be assembled using a simple, schema-aware JSON configuration file. This can be done in *minutes* or *hours*, instead of days or weeks.\n- From 95% to 100%: Every project is different, the framework allows detailed customisation to every underlying infra resources being created by the modular approach earlier. This can be done in *hours* or *days*, certainly not *weeks*.\n\nFor DevOps/Cloud/Platform engineers, adopting OpenFABR CDF means following a separation-of-concern approach by implementing modular, reusable packages from day one.\n\nBest of all, OpenFABR CDF does not have any opinions about what IaC runtime (AWS CDK and Terraform CDK; Pulumi and others coming soon) and language (Typescript; Python, Java, C# and Golang coming soon) one should use. It allows engineering organisations to pick their favourite runtime and language. It forms the foundation of an internal cloud platform and leaves the opinions about how to implement cloud infrastructure to package authors and application developers.\n\n![CDF Stack Overview](./docs/assets/cdf-stack-overview.png)\n\n## Use\n\nFollow the [Getting Started](./docs/getting-started/quick-start.md) to experience the workflow yourself.\n\nTo dive deep, the [User Guide](./docs/user-guide/overview.md) covers the context as well as detailed manuals for both application developers and package authors.\n\n## Support\n\nClick on the badge to join our server:\n\n[![](https://dcbadge.vercel.app/api/server/4ma3bVVkrv?theme=default-inverted\u0026logoColor=FC7E56)](https://discord.gg/4ma3bVVkrv)\n\n[Discord Support Channel](https://discord.com/channels/1039810916625162260/1039819988296552510)\n\n## Contribute\n\n### License and Contribution Agreement\n\nSame as other OpenFABR projects, it is dual-licensed under\n\n- [GNU AGPL v3](https://www.gnu.org/licenses/agpl-3.0.en.html)\n- [FABR Commercial v1](#) (coming soon)\n\nBefore accepting your contribution, please e-sign the [Contributor License Agreement](#) (coming soon) which is a common practice in open source. Once signed, your GitHub username will then be registered on the project's contributor list which safeguards the contributions to the project.\n\n### Development\n\nThe monorepo is structured in a way that different build tools are used for different CDF language implementation. See below for details about how to develop for CDF in a particular language:\n\n- Framework:\n  - [core/typescript](./core/typescript/README.md) for CDF\n- Packages as reference implementations:\n  - [samples/packages/awscdk-typescript](./samples/packages/awscdk-typescript/README.md) for TypeScript based AWS CDK package\n  - [samples/packages/cdktf-typescript](./samples/packages/cdktf-typescript/README.md) for TypeScript based CDKTF package\n  - [samples/packages/pulumi-typescript](./samples/packages/pulumi-typescript/README.md) for TypeScript based Pulumi package\n- Sample projects based on the use of the packages above:\n  - [samples/projects/awscdk-typescript](./samples/projects/awscdk-typescript/README.md) for using the TypeScript AWS CDK package above\n  - [samples/projects/cdktf-typescript](./samples/projects/cdktf-typescript/README.md) for using the TypeScript CDKTF package above\n- Documentation:\n  - [Quick Start](./docs/getting-started/)\n  - [User Guide](./docs/user-guide/)\n\nTools and libraries in use include:\n\n- [GitHub Actions](https://docs.github.com/en/actions) are used as CI/CD tooling. Again the build and release workflows vary between sub repos based on language, framework etc.\n\n- [Conventional Commits](https://www.conventionalcommits.org/) spec is strictly followed which enabled the use of [Release Please](https://github.com/googleapis/release-please) across CDF releases in different languages.\n\n- [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) is used to generate the doc site from [markdown format](https://www.markdownguide.org/basic-syntax/). A Github Actions workflow handles CI/CD. It can also be [previewed locally](./preview-docs.sh) before creating pull requests.\n- [\u003cimg src=\"https://localstack.cloud/images/header-logo-new.svg\" alt=\"LocalStack logo\" style=\"height:30px; margin-top:10px;\"/\u003e](https://localstack.cloud) used to speed up development.\n","funding_links":["https://github.com/sponsors/openfabr"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenfabr%2Fcdf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenfabr%2Fcdf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenfabr%2Fcdf/lists"}