Klotho - a new infrastructure deployment way
Tags: aws, klotho, awscommunitybuilders, review
Published: 2022-04-17 21:47:05

---
title: Klotho - a new infrastructure deployment way
series: Review of Klotho (Alpha Early Access)
published: true
description: Review of Klotho, the tool to simplify management of application's infrastructure
tags: #AWS #klotho #awscommunitybuilders #review
cover_image: https://www.pawelpiwosz.net/assets/klotho/cover1.png
---

I was asked to check and review the new tool in the town, [Klotho](https://klo.dev/). I took a look on the tool and it looks quite interesting. So, I decided to check it out and share with you what I think.

# Introduction of the tool

What is Klotho? According the their webpage:

> Klotho is a new development model enabling large-scale organizations and teams to write and operate cloud applications at the fraction of the effort, while maintaining all the benefits and capabilities of monoliths, microservices and serverless architectures.

Klotho is compatible with [Infrafree](https://infrafree.tech/) approach. There is not much information to read, but the concept of agnostic approach to deployments is quite interesting. And... challenging.

We are dancing here around *noOps* or even *noArch* approaches too. And being honest and clear with you - I am not convinced, politely speaking. In the same way, as I am not convinced by *noCode*. Although I see places and solutions where it can be useful. I say it to show, how my thinking influence this review :)

# What does Klotho do?

By annotating the application's code with `Capabilities`, `Requirements` and `Directives` and compiling the code using Klotho CLI, we receive 'prebaked' IaC templates, ready to be deployed.

By using `Capabilitites` the code is splitted to functional elements, like APIs and microservices.

With `Requirements` the code can be instrumented with developer's expectations for specific behavior. Klotho will take into consideration what developer wants to focus (for example latency), and with defined metric(s) it will prepare the compiled project with proper approach (for example scalability, or type of resources).

`Directives` give the possibility to overwrite default behavior of Klotho. For example, if Klotho be default will create microservice based on Docker, developer can force it to use EC2.

## **Important**

At this moment Klotho is available in early access, it is not officially released. So I expect a lot will change in nearest future.

## High-level specification

I said that Klotho works on annotated application code. So, what languages can we use? 

At this moment the integration is with Javascript. After check of the documentation and placeholders for snippets, the Klotho team works on Java and Go integrations. Personally, I am waiting for Python one.

Klotho works with monolithic applications as well as with microservices and Serverless. This should give a lot of potential usecases and should fit many organization's needs.

Where we can deploy our compiled project? AWS, Azure and GCP seems to be obvious. Additionally we have Heroku.

Compiled material is prepared in Terraform, Pulumi or CDK.

Well, I should say it will be. At this point only AWS and Pulumi is available. GCP is there, but still 'under construction'.

# The crowning feature

And now the most interesting feature of Klotho. The use of IaC in the process, is not the main functionality. Another words, it is not a tool like CDK, no. Klotho, based on provided directives, build the infrastructure to fulfill the requirements. This include scalability, reliability, performance, etc. 

Together with growing consumption of resources by the application, we have to take care about the underlying infrastructure. Sometimes this activity requires a lot of work. Klotho addresses this case.

# So, what is Klotho?

Klotho is a tool which through the instrumentation of the code allows us to create, maintain and scale the application. Also, when Klotho creates the project, it tries to 'architect' the application, using available services and patterns.