https://github.com/icylian/yanami
A Material Design 3 Android client for the Komari server monitoring tool.
https://github.com/icylian/yanami
android jetpack-compose komari kotlin mvi
Last synced: 3 months ago
JSON representation
A Material Design 3 Android client for the Komari server monitoring tool.
- Host: GitHub
- URL: https://github.com/icylian/yanami
- Owner: icylian
- License: other
- Created: 2026-03-06T08:25:12.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-03-08T14:13:10.000Z (4 months ago)
- Last Synced: 2026-03-09T21:07:05.262Z (4 months ago)
- Topics: android, jetpack-compose, komari, kotlin, mvi
- Language: Kotlin
- Homepage:
- Size: 2.12 MB
- Stars: 93
- Watchers: 0
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
English | [简体中文](README_zh.md)
# Yanami

[](https://deepwiki.com/icylian/Yanami)
**Yanami** is an Android client for the [Komari](https://github.com/komari-monitor/komari) server monitoring tool, built with the Material Design 3 design language.
> A Material Design 3 Android client for the Komari server monitoring tool.
---
## Features
- **Multi-Instance Management** — Add, edit, and switch between multiple Komari server instances.
- **Three Authentication Modes** — Support password, API Key, and guest mode authentication.
- **Real-Time Node List** — WebSocket real-time push for node status (CPU / RAM / Disk / Network IO).
- **Node Detail Dashboard** — Load history line charts, Ping latency trends, basic server information.
- **SSH Terminal** — Full-featured ANSI/VT100 terminal based on termux terminal-view + WebSocket, supporting special key toolbars and font size adjustment.
- **Home Screen Widget** — Glance widget for node overview, refresh, and update interval configuration.
- **Tablet Landscape Layout** — Adaptive large-screen layout with NavigationRail, multi-column lists, and split detail panels.
- **Multi-Language Support** — Chinese (Default), English, Japanese.
- **Theme System** — Material You dynamic colors (Android 12+) + 6 preset color palettes, supporting dark/light mode and system-following mode.
## Screenshots
Expand
### Instance Management
### Day/Light Mode (Phone)
### Day/Light Mode (Tablet)
### Night/Dark Mode
### Latency Monitoring/SSH Terminal
### Snippets
### Widget
## System Requirements
| Item | Requirement |
|---|---|
| Android | 9.0 (API 28) and above |
| Server | Komari 1.1.7 or above |
## Build
```bash
# Debug APK
./gradlew assembleDebug
# Release APK
./gradlew assembleRelease
# Clean and Build
./gradlew clean assembleDebug
```
Build outputs are located at `app/build/outputs/apk/`.
## Tech Stack
| Library | Version | Purpose |
|---|---|---|
| Kotlin | 2.3.10 | Main language |
| Jetpack Compose BOM | 2026.02.01 | UI Framework |
| MD3 | — | Design System |
| Voyager | 1.1.0-beta03 | Navigation + ScreenModel |
| Koin | 4.1.1 | Dependency Injection |
| Ktor | 3.4.1 | HTTP Client + WebSocket |
| Room | 2.8.4 | Local Database (Encrypted credential storage) |
| Vico | 3.0.3 | Charts (Compose M3) |
| termux terminal-view | 0.119.0-beta.3 | Terminal ANSI/VT100 Rendering |
| DataStore Preferences | 1.2.0 | User Preferences Persistence |
## Architecture
Adopts the **MVI (Model-View-Intent)** pattern with an adaptive root shell:
```
UI Layer MainActivity Root Shell + Voyager Screen + Compose UI + MviViewModel
Domain Layer Repository Interface + Domain Model (Node, ServerInstance …)
Data Layer Repository Implementation, Ktor, Room, DataStore
```
Each page follows the **Contract Pattern**, describing the complete MVI contract of the page with nested `State` / `Event` / `Effect`.
### Navigation Flow
```
ServerListScreen → AddServerScreen
→ NodeListScreen → NodeDetailScreen → SshTerminalScreen
→ SettingsHubScreen → SettingsScreen / AboutScreen
```
### Authentication & Network
- **PASSWORD** — Obtain `session_token` via `POST /api/login` (supports 2FA).
- **API_KEY** — Use `Authorization: Bearer ` directly, without login flow.
- **GUEST** — No authentication header; monitor APIs and WebSocket data remain available, but SSH terminal is disabled.
- Credentials and session data are encrypted with AES/GCM and stored in Room, automatically restored on startup.
- WebSocket (`wss://host/api/rpc2`) always requires the `Origin` header.
- `SessionCookieInterceptor` / network layer automatically inject Cookie, Bearer token, or skip auth headers according to `authType`.
### Adaptive Layout
- Phone / narrow width: standard Voyager stack navigation.
- Tablet landscape: root-level `NavigationRail` + content pane.
- Node and server lists switch to multi-column card layouts on wide landscape screens.
- Node detail charts and info cards use split wide-screen layouts.
- Form and settings pages use centered constrained-width content on large screens.
## License
This project is licensed under the [MIT License](LICENSE).