Your First Component 
In Komponent, a component is just a reusable function that creates some UI.
To declare a component, simply define a function with the Html receiver:
fun Html.MyComponent() {
    // ...
}UI is described using simple functions. The most basic of which is the text(String) function which appends some text to the document.
fun Html.MyComponent() {
    text("Hello, world!") 
}You can also append tags to the document:
TIP
If you are seeing red lines in your editor, or your code doesn't compile, see the installation steps.
fun Html.MyComponent() {
    h1(className = "title") { 
        text("<h1>") 
    } 
}In any Komponent, it is convention to always set attributes using explicitly named arguments.
Props 
Components are just functions, so they can accept any regular arguments to use and transform into UI.
enum class ButtonKind {
    PRIMARY,
    SECONDARY
}
fun Html.Button(kind: ButtonKind) {
    when (kind) {
        PRIMARY -> button(className = "primary") {
            text("Primary")
        }
        SECONDARY -> button(className = "secondary") {
            text("Secondary")
        }
    }
}Props can also be reactive. See Reactivity.
Children 
Sometimes, props include other components. In this case, the Children type should be used as the last parameter. The Children type is actually a shorthand for Html.() -> Unit which is tedious to write every time so we can just use the shorthand.
enum class ButtonKind {
    PRIMARY,
    SECONDARY
}
fun Html.Button(kind: ButtonKind, children: Children) {
    when (kind) {
        PRIMARY -> button(className = "primary") {
            children() 
        }
        SECONDARY -> button(className = "secondary") {
            children() 
        }
    }
}Mounting the Component 
So far, we have created components, but we haven't been able to actually see them on a page. To "mount" a component, we must attach it to a DOM element.
fun main() {
    mount(document.body!!) {
        // Render the body here
        MyApp()
    }
}
fun MyApp() {
    // ...
}Events 
Komponent supports events by passing on<Event> arguments to any tag you want to listen to.
fun Html.Button() {
    button(onClick = { println("You clicked!") }) {
        text("Click me")
    }
}Life Cycle Events 
All elements have two life cycle stages that can occur an indefinite amount of times:
- Mounting
- Unmounting
You can listen for them with onMount and onUnmount respectively. This is useful for managing resources.