Decision: confirm Kotlin + Jetpack Compose stack #5

Closed
opened 2026-07-23 14:46:23 +02:00 by cloudbot · 1 comment
Collaborator

Decision #5 — confirm the Kotlin + Jetpack Compose native stack, and pick the HTTP client.

The design doc assumes this stack (from the "native Android UI template sheet" framing) but flags it for confirmation, because it's the foundation the whole project scaffolds on.

Assumed stack (§11)

  • Kotlin + Jetpack Compose — native UI.
  • WorkManager — debounced/background sync.
  • Room — offline cache.
  • Android Keystore — per-user Outline API key storage.
  • Retrofit or Ktor — the Outline REST client (unresolved).

Secondary decision: Retrofit vs Ktor

  • Retrofit — the Android default; annotation-based, huge ecosystem, trivial to wire with Moshi/kotlinx-serialization and OkHttp. Best-understood, least-surprise choice.
  • Ktor client — Kotlin-first, coroutine-native, multiplatform-ready, more flexible for custom request shaping. Slightly more setup, smaller Android community.

What to decide

  1. Confirm Kotlin + Compose (and the WorkManager/Room/Keystore choices).
  2. Choose Retrofit or Ktor.

Blocks: project scaffolding (M1) — nothing can start until the stack is fixed.

Recommendation: confirm Kotlin + Compose, and use Retrofit + OkHttp + kotlinx-serialization. The Outline API is a plain REST surface (§12) with no multiplatform requirement, so Retrofit's maturity and lower setup cost win; Ktor's advantages don't pay off here.

Source: Solution Design — Family App v1 §11 (doc vpBNbG4TsV), decision §13 #5.

**Decision #5 — confirm the Kotlin + Jetpack Compose native stack, and pick the HTTP client.** The design doc *assumes* this stack (from the "native Android UI template sheet" framing) but flags it for confirmation, because it's the foundation the whole project scaffolds on. ### Assumed stack (§11) - **Kotlin + Jetpack Compose** — native UI. - **WorkManager** — debounced/background sync. - **Room** — offline cache. - **Android Keystore** — per-user Outline API key storage. - **Retrofit *or* Ktor** — the Outline REST client (unresolved). ### Secondary decision: Retrofit vs Ktor - **Retrofit** — the Android default; annotation-based, huge ecosystem, trivial to wire with Moshi/kotlinx-serialization and OkHttp. Best-understood, least-surprise choice. - **Ktor client** — Kotlin-first, coroutine-native, multiplatform-ready, more flexible for custom request shaping. Slightly more setup, smaller Android community. ### What to decide 1. Confirm Kotlin + Compose (and the WorkManager/Room/Keystore choices). 2. Choose Retrofit or Ktor. **Blocks:** project scaffolding (M1) — nothing can start until the stack is fixed. **Recommendation:** confirm Kotlin + Compose, and use **Retrofit + OkHttp + kotlinx-serialization**. The Outline API is a plain REST surface (§12) with no multiplatform requirement, so Retrofit's maturity and lower setup cost win; Ktor's advantages don't pay off here. **Source:** Solution Design — Family App v1 §11 ([doc vpBNbG4TsV](https://outline.marquezkeenan.family/doc/solution-design-family-app-v1-vpBNbG4TsV)), decision §13 #5.
Owner

I don't have a strong opinion on the stack. To define the requirements very clearly - text entry, and button interactions, must feel native and super fast and responsive.

I don't have a strong opinion on the stack. To define the requirements very clearly - text entry, and button interactions, must feel native and super fast and responsive.
ben closed this issue 2026-07-23 17:44:26 +02:00
Sign in to join this conversation.
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
utilities/Logbook#5
No description provided.