MakisDSL
A type-safe Scala DSL for generating multi-cloud infrastructure templates. Write your infrastructure once and deploy to AWS, Azure, or GCP.
🔗 Overview
MakisDSL is a domain-specific language built in Scala 3 that allows you to define cloud infrastructure using a unified syntax. The same DSL code can generate:
- AWS CloudFormation templates
- Azure ARM templates
- GCP Deployment Manager templates
🔗 Notice: Early Development
⚠️ MakisDSL is in early development.
This project is actively being developed and the API may change frequently. The documentation currently covers the basic functionality, but many advanced features are still being implemented.
If you'd like to help, please feel free to contribute by submitting issues, feature requests, or pull requests.
🔗 Features
- Multi-Cloud Support - Single DSL generates templates for AWS, Azure, and GCP
- Type Safety - Compile-time validation ensures correct resource configuration
- Resource Dependencies - Explicit dependency management between cloud resources
- Builder Pattern - Fluent API for configuring cloud resources
- Environment Variables - Compile-time environment variable injection
- Resource References - Type-safe references between resources
- Extension Methods - Clean syntax for resource configuration
🔗 Quick Example
Here's a simple example of defining cloud infrastructure with MakisDSL:
import cloud.*
import cloud.CloudProvider.*
import cloud.syntax.*
val myApp = cloudApp(provider = AWS) {
val storage = objectStorage("my-data-bucket")
.withVersioning(true)
.withPublicAccess(false)
val function = serverlessFunction("my-api-handler")
.withRuntime("nodejs18.x")
.withHandler("index.handler")
.withCode(storage.reference)
.dependsOn(storage)
.build
val database = noSqlTable("my-users-table")
.withHashKey("userId", "S")
.dependsOn(function)
.build
}
This same code can generate templates for any supported cloud provider by simply changing the provider
parameter.
For detailed usage instructions and examples, see the Getting Started guide.