# What is Yamvil

> :warning: This is a Work in Progress&#x20;
>
> The Runtime Library is totally usable as it is just a "normal" Android Library.
>
> The Compiler Plugin works in terms of compilation errors shown in the Build output, but as K2 IDE Plugin [doesn't work yet on Android Studio](https://issuetracker.google.com/issues/341233001), the errors or warnings thrown by Yamvil doesn't show up in Android Studio, yet.

## The Runtime Library

The runtime Library brings you three main base classes:

* MVIViewModel\<UiState, UiEvent>
* MVIFragment\<UiState, UiEvent, UiAction>
* Actionable (one-time actions)

## The Compiler Plugin

The Compiler Plugin checks a few pitfalls for us so we'll implement MVI without creating any bugs.

### Fragments

MVIFragment as a base class brings all the infrastructure needed to use MVI properly, besides one detail.

The Compiler plugin will throw an error (or a warning instead if you choose to) if you've implemented `Actionable` on your `UiState` but forgot to call `state.onAction` in `observeUiState()`.

### Composable functions

The compiler plugin will validate that a Composable is written correctly, meaning it has

* an `uiState` parameter of the type of its ViewModel (matched by name)
* an `handleEvent()` parameter function getting the Action Type of its ViewModel
