# Kobalt: A modern, versatile build system

Kobalt is a build system inspired by Gradle and Maven. It reuses the best concepts from these two successful and popular build systems while adding a few modern features of its own. Kobalt is written entirely in Kotlin and its build files are valid Kotlin files as well. Thanks to IDEA's top notch support for Kotlin, writing Kobalt build files automatically benefits from auto completion and all the other features that you are used to when writing code with your IDE of choice.

Here are some of Kobalt's most prominent features.

## Features

## Clean, minimal syntax for build files

For example, here is JCommander's entire build file:

    import com.beust.kobalt.*
    import com.beust.kobalt.plugin.java.*
    import com.beust.kobalt.plugin.packaging.*
    import com.beust.kobalt.plugin.publish.*

    val jcommander = project {
        name = "jcommander"
        group = "com.beust"
        artifactId = name
        version = "1.52"

        dependenciesTest {
            compile("org.testng:testng:")
        }

        assemble {
            mavenJars {
            }
        }

        bintray {
            publish = false
        }
    }

This build file also includes a directive to upload your artifacts to Bintray automatically.

## Build file auto-completion in your IDE

Since Kobalt's build files are actual Kotlin files, not only can you leverage auto-completion to write your build files but the full power of your IDEA is at your fingertips to write these files in any way you see fit: using expressions, conditionals, classes, extension functions, constants... The sky is the limit!

Kobalt uses Kotlin's type safe builder pattern to offer a DSL that's extremely similar to Gradle and minimalistic while allowing you to switch to full Kotlin code whenever necessary.

Here is an example of the auto-completion dialog:

And see the following section to get a feel for Kobalt's build file syntax.

## Incremental tasks

Most of Kobalt's core tasks are incremental, which means that if you run them without having changed anything, they will be skipped. The support for incremental tasks is also trivial to add for plug-in developers, which guarantees that your builds with Kobalt will always be as fast as they can be.

## Intuitive plug-in architecture

Kobalt's plug-in architecture is heavily inspired from other successful plug-in architectures such as Eclipse and IDEA. Thanks to Kotlin's static type safety, writing plug-ins for Kobalt is both flexible and intuitive, with a minimum of boiler plate. See the Kobalt plug-in development documentation for more details.

## Status

Kobalt is currently in Beta but already used in several projects. Here are links to a few build files you can inspect to get a feel for what Kobalt enables:

- JCommander.
- TestNG (this build file shows an example of adding a custom task in the build itself).
- Klaxon
- u2020 (Android show case application)
- ... and of course, Kobalt itself (this build file demonstrates multi projects and project dependencies).

## Next steps

Proceed to the Getting Started section to learn more about Kobalt.