Skip to content

Limitations ​

What Kite does not do yet, and what it deliberately does not do. Knowing both before you adopt it is worth more than discovering them later.

Version 0.1.1 is not a stable API ​

The generated surface, the rule annotations and the board protocol may all change between 0.x releases. Pin an exact version.

A graph argument's identity is its name ​

Two leaves called timeoutMillis are the same argument and get one value — which is the feature that replaces @Named, and also the sharp edge. Two unrelated String leaves that happen to share a parameter name will unify. Give arguments names specific enough to be globally unique (profileApiKey, not key).

Runtime lookups need a @Root ​

The processor reads constructors. A plain class resolved only through by injected() or Kite.get<T>() has no constructor parameter pointing at it, so it needs @Root(Foo::class) in the owning module's GraphRules.kt. A class behind an interface never needs this.

The same applies to a plain class exported to another module — see multi-module apps.

The board's live runtime needs adb ​

Runtime facts come from a device over adb with a forwarded port. There is no Wi-Fi mode. Without adb, without a device, or with an app built without the inspector, the board still works — it shows the static graph and nothing else.

Toolchain is not loose ​

KSP is versioned against the exact Kotlin compiler, so Kite tracks specific Kotlin and KSP versions rather than a range. minSdk is 23 and the JVM target is 11. See the requirements.

Things that are missing on purpose ​

These are not gaps — the concept does not exist because it has nothing to do:

  • Assisted injection. An unprovidable ViewModel parameter simply becomes a parameter of the generated adapter. No @AssistedInject, no factory interface. See ViewModels.
  • Modules and @Provides. Types you don't own become graph arguments; their construction is ordinary code at the Graph.start call site.
  • Qualifier annotations. A graph argument's identity is its parameter name, and choosing between implementations is a mark — your own annotation on both sides, with nothing to apply it to.
  • Components and subcomponents. Scopes open and close with the Android lifecycle; there is nothing to build or install.

Released under the Apache 2.0 License.