An open API service indexing awesome lists of open source software.

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.

Awesome Lists containing this project

README

          

English | [简体中文](README_zh.md)

# Yanami

![Badge](https://hitscounter.dev/api/hit?url=https%3A%2F%2Fgithub.com%2Ficylian%2FYanami&label=icylian%2FYanami&icon=github&color=%23feb272&message=&style=flat&tz=UTC)
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/icylian/Yanami)


banner

**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


addserver serverlist

### Day/Light Mode (Phone)


nodelist nodedetail1

### Day/Light Mode (Tablet)


nodelisttablet


nodedetail1tablet

### Night/Dark Mode


nodelistdark nodedetaildark

### Latency Monitoring/SSH Terminal


nodedetail2 nodeterminal

### Snippets


snippetslist addsnippet

### Widget


widget widgetdark

## 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).