# KCD ? What is that

![](https://432876686-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MSO_wOfp1HVCrDanxQD%2F-MZ1pgum2XkI5Ky7sZfo%2F-MZ2gVSiHM3Fhi0XtMRB%2Flogo-kcd.svg?alt=media\&token=d199e57d-f57f-4050-ad3d-ecaa1dc8b1f6)

###

![May change your code a bit ...](https://432876686-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MSO_wOfp1HVCrDanxQD%2F-MYub2cj1-Ikf6XmVZt3%2F-MYucJqmPAynT2r1asiB%2Fversus-expanded%20\(1\).svg?alt=media\&token=642a825b-b938-45d2-965b-82dd99928c63)

### So what's KCD ?

KCD is not a framework, it's not a router. KCD is a helper that simplifies your life for building maintainable and comprehensive REST applications.&#x20;

Its goal is to provide a way to write a beautiful handler without a boilerplate and translate it into a plain old HTTP handler.

This library is **opinionated** by default but **customizable** which means it uses some other libraries like Chi, Logrus... KCD is modular so each piece of the code that relies on a specific library can be changed.

### Is it painful to write your API in go?

What's the problem when you are building an API in Golang? You know the classic:

* Input marshaling from JSON
* Input from query parameters
* Input from path parameters
* Input validation
* Error handling
* Error logging
* Format response&#x20;

All this kind of stuff is boring and when you come from an established language like Java, PHP, Ruby each of these languages has its own framework with a battle-tested solution to handle all of the cases above.
