# The FTL Core Pillars ## 1. Declarative infrastructure as code Declare your infrastructure requirements in your code as type-safe values, rather than in separate configuration files disaccoiated from their point of use. For example, if you need a database, declare it directly in your code and FTL will take care of provisioning it for you: ```go var myDb = ftl.PostgresDatabase("myDB") ``` ## 2. Language agnostic FTL makes it possible to write backend code in your language of choice. You write normal code, and FTL extracts a service interface from your code directly, making your functions and types automatically available to all supported languages. We currently support Go and Kotlin, but have plans to support Python, TypeScript, and more. ## 3. Fearless development against production There is no substitute for production data. Staging environments, at best, provide a lower fidelity version of production. ## 4. Fearlessly change data structures Multiple versions of a single verb can be live concurrently. See [Unison](https://www.unison-lang.org/) for inspiration. We can statically detect changes that would violate persistent data constraints. ## 5.