anikku
CLAUDE.md1.1k starsChanged 3 months agoApache-2.0View on GitHub
Anikku is an Android anime/movie watcher app (min SDK 26, target SDK 36, JVM 17 / Kotlin). It's based on Aniyomi with additional features from Mihon, TachiyomiSY, and Komikku (manga fork). The app includes: - Anime discovery and playback with configurable mpv-android player - Local downloading and offline viewing - Multiple tracker support (MyAnimeList, AniList, Kitsu, Simkl, Shikimori, Bangumi) - Anime recommendations and metadata editing - Library management with categories, tagging, and filtering - Multi-source browsing and feed tabs Application…
Trending
More talk lately.thin dataabout the whole repository
Who's talking about komikku-app/anikku
- PineappleTwilight/houri“Prequel/sequel tab”GitHub · Sep 13, 2026 · 1 reactions
- aniyomiorg/aniyomi“Merge/Import Features from Anikku”GitHub · Jun 28, 2025 · 1 reactions
- privacyguides/verified-apps“[New]: Anikku”GitHub · Oct 26, 2026
- yuzono/anime-extensions“# Master Plan 0→7 for the Yūzōnō Anime Extension Repository”GitHub · Aug 3, 2026
- RookieEnough/Orion-Data“App Submission [1 App]”GitHub · Feb 7, 2026
The biggest 5 of 10 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 10
Talked about on GitHub (10 times).
On GitHub · 10
- Sep 13, 2026Prequel/sequel tab — PineappleTwilight/houri1 reaction · 2 comments
- Jun 28, 2025Merge/Import Features from Anikku — aniyomiorg/aniyomi1 reaction
- Oct 26, 2026[New]: Anikku — privacyguides/verified-apps0 reactions · 1 comment
- Aug 3, 2026# Master Plan 0→7 for the Yūzōnō Anime Extension Repository — yuzono/anime-extensions0 reactions · 2 comments
- Feb 7, 2026App Submission [1 App] — RookieEnough/Orion-Data0 reactions · 1 comment
5 more on GitHub
- Jan 25, 2026App Submission [1 App] — RookieEnough/Orion-Data0 reactions · 1 comment
- Nov 30, 2025Prequel/sequel tab — Gent8/Taison0 reactions · 7 comments
- Sep 19, 2025Prequel/sequel tab — jeryjs/TachiyomiSY-with-discord-RPC0 reactions
- Sep 16, 2025Prequel/sequel tab — petalya/Yomiko0 reactions
- May 13, 2025Tracker Chapter fill index do not go above/Pop-up the Keyboard layout. — komikku-app/komikku0 reactions · 1 comment
In this repositoryOne other file it gives its agents.
- AGENTS.mdAGENTS.md
The file
Show its rules and text
We split this CLAUDE.md into the rules it gives an agent
14 rules. About 0 are common, 2 are distinctive, and 12 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
12
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 70
All Anikku-specific additions or modifications must be surrounded with comment markers:
- Distinctive: line 80
All fork markers used in this codebase:
- Very specific: line 152
Critical rule: Never add Anikku strings to non-i18n-ank/ modules.
- Very specific: line 173
Use addSingleton / addSingletonFactory for registration
- Very specific: line 182
Use screenModelScope for lifecycle-bound coroutines
- Very specific: line 194
Add .sqm migration file
- Very specific: line 215
Register DI: Add addFactory { MyFeature(get()) } in DomainModule.kt
- Very specific: line 217
Add strings: Place in i18n-ank/src/commonMain/moko-resources/base/strings.xml using AMR resource class
- Distinctive: line 240
No broad UI test suite exists.
- Very specific: line 258
Never skip spotlessCheck; if it fails, run spotlessApply and retry.
- Very specific: line 264
Branch naming: Use <type>/<short-description> (e.g., feat/anime-recommendations)
- Very specific: line 323
Merge strategy: Keep fork markers intact; preserve upstream // SY, // KMK, // AY blocks when rebasing or cherry-picking.
- Very specific: line 329
Gradle OOM: Run ./gradlew --stop to kill daemon.
- Very specific: line 331
Spotless failures: Run spotlessApply first, then spotlessCheck.
≈ “Common” is an estimate: at least 1 in 5 of the 26,980 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
Anikku is an Android anime/movie watcher app (min SDK 26, target SDK 36, JVM 17 / Kotlin). It's based on Aniyomi with additional features from Mihon, TachiyomiSY, and Komikku (manga fork). The app includes:
- Anime discovery and playback with configurable mpv-android player
- Local downloading and offline viewing
- Multiple tracker support (MyAnimeList, AniList, Kitsu, Simkl, Shikimori, Bangumi)
- Anime recommendations and metadata editing
- Library management with categories, tagging, and filtering
- Multi-source browsing and feed tabs
Application ID: app.anikku (debug variant: app.anikku.dev)
Build & Development Environment
Tech Stack: Jetpack Compose + Material3 • Voyager navigation • SQLDelight database • Injekt DI
JDK/Gradle: JVM 17 (compiles to Kotlin JVM 17 target) • Gradle 9.3+ • Android SDK 36 (compileSdk)
Essential Build Commands
# Code formatting (required before committing)
./gradlew spotlessApply # Auto-fix formatting
./gradlew spotlessCheck # Verify formatting (runs in CI)
# Build variants
./gradlew :app:compileDebugKotlin # Compile-only check (faster than assembleDebug)
./gradlew assembleDebug # Debug APK (local testing)
./gradlew assemblePreview # Preview (beta) APK (CI equivalent; use for consistency)
./gradlew assembleRelease # Release APK
# Testing
./gradlew testReleaseUnitTest # Unit tests for release build
./gradlew test # All unit tests
# Full CI build with telemetry and updater
./gradlew assemblePreview -Pinclude-telemetry -Penable-updater
# Install to device/emulator
./gradlew installDebug
# SQLDelight database regeneration (after .sq or .sqm schema changes)
./gradlew :data:generateSqlDelightInterface
# Clean build daemon (if OOM occurs)
./gradlew --stopBuild types: debug, release, releaseTest, foss, preview (default), benchmark
Gradle -P flags:
| Flag | Effect |
include-telemetry | Include Firebase Analytics + Crashlytics |
enable-updater | Enable In-app update checker |
disable-code-shrink | Skip ProGuard/R8 minification |
include-dependency-info | Dependency metadata in APK |
Code Marking Convention
All Anikku-specific additions or modifications must be surrounded with comment markers:
// ANK -->
// your code here
// ANK <--This is how Anikku-specific changes are tracked relative to the upstream Aniyomi fork. Always apply these markers to any changes you make.
All fork markers used in this codebase:
| Marker | Origin | Notes |
// ANK | Anikku-specific | Use for all new Anikku code |
// SY | TachiyomiSY | Keep intact during upstream merges |
// KMK | Komikku | Keep intact during upstream merges |
// AY | Aniyomi | Keep intact during upstream merges |
// EXH | E-Hentai (legacy) | Avoid; use // ANK for new code |
Architecture
Multi-module layered architecture (22 modules) with MVVM + MVI patterns.
Module Layout
| Module | Purpose |
app/ | UI (Voyager Screens + Compose), DI, workers, build variants |
domain/ | Use cases, models, repository interfaces |
data/ | SQLDelight database, repository implementations |
core:common/ | Network (OkHttp), security, storage, shared utils |
core:archive/ | Archive reading utilities |
core-metadata/ | Comic-info metadata parsing |
source-api/ | Extension Source interface + local source |
presentation-core/ | Shared Compose components |
i18n-ank/ | Anikku-specific strings → AMR resource class |
i18n/ | Mihon strings → MR (frozen upstream) |
i18n-sy/ | TachiyomiSY strings → SYMR (frozen upstream) |
i18n-aniyomi/ | Aniyomi strings → AYMR (frozen upstream) |
i18n-kmk/ | Komikku strings → KMR (frozen upstream) |
i18n-animiru/ | Animiru strings → AMMR (frozen upstream) |
presentation-widget/ | Home-screen Glance widget |
flagkit/ | Country-flag drawables |
telemetry/ | Firebase/Crashlytics (noop unless -Pinclude-telemetry) |
buildSrc/ | Custom Gradle plugins and build logic |
Dependency flow: app → domain → source-api; data implements domain repos.
Data flow: source-api extensions → data repositories → domain use cases → presentation-core ViewModels → app screens
Navigation: Voyager screens/tabs. Screen classes live in app/src/main/java/.../ui/.
DI: Injekt (lightweight custom container). Dependencies are registered at app startup and retrieved via Injekt.get<T>() or by implementing Injekt.inject<T>() delegation.
Database: SQLDelight with migrations in data/src/main/sqldelight/. Schema changes require a new migration file.
Concurrency: Kotlin coroutines + Flow for new code. RxJava remains in the source-api layer (extension compatibility).
Key Technologies
- UI: Jetpack Compose + Material 3, Coil 3 for image loading
- Video: mpv-android, FFmpeg-kit
- Network: OkHttp 5 with DNS-over-HTTPS, Brotli support
- Serialization: Kotlinx Serialization (JSON/Protobuf)
- Scripting: QuickJS (JavaScript engine for source extensions)
- Database encryption: SQLCipher
Key Source Structure
- Activities (non-Voyager):
MainActivity(shell),PlayerActivity+PlayerViewModel,WebViewActivity, OAuth login,DeepLinkActivity - UI Screens (Voyager):
app/src/main/java/eu/kanade/presentation/&app/src/main/java/eu/kanade/tachiyomi/ui/ - Domain use cases:
domain/src/main/java/tachiyomi/domain/*/interactor/(one class per operation; no*Interactorsuffix) - Database: SQLDelight in
data/src/main/sqldelight/tachiyomi/ - Preferences:
eu.kanade.domain.*.service.*Preferencesclasses
Internationalization (Strings)
Critical rule: Never add Anikku strings to non-i18n-ank/ modules. Weblate manages translations; never edit non-base locale files.
| String Type | Module | Resource Class | Base Folder |
| Anikku-only | i18n-ank/ | AMR | i18n-ank/src/commonMain/moko-resources/base/ |
| Mihon (frozen) | i18n/ | MR | i18n/src/commonMain/moko-resources/base/ |
| SY (frozen) | i18n-sy/ | SYMR | i18n-sy/src/commonMain/moko-resources/base/ |
| Aniyomi (frozen) | i18n-aniyomi/ | AYMR | i18n-aniyomi/src/commonMain/moko-resources/base/ |
| Komikku (frozen) | i18n-kmk/ | KMR | i18n-kmk/src/commonMain/moko-resources/base/ |
| Animiru (frozen) | i18n-animiru/ | AMMR | i18n-animiru/src/commonMain/moko-resources/base/ |
Self-check: git diff must not show <string> or <plurals> additions in non-base locales.
Architecture & Design Patterns
Dependency Injection
Uses uy.kohesive.injekt (not Hilt):
- Register in
AppModule.kt,DomainModule.kt,KMKDomainModule.kt,SYDomainModule.kt - Use
addSingleton/addSingletonFactoryfor registration - In class fields:
injectLazy<T>() - In functions:
Injekt.get<T>()
UI & Navigation
Voyager is the primary navigation framework:
- Screens defined in
app/src/main/java/eu/kanade/presentation/andapp/src/main/java/eu/kanade/tachiyomi/ui/ - State via
rememberScreenModel { … }; models extendStateScreenModel<State> - Use
screenModelScopefor lifecycle-bound coroutines launchIO/withIOContext(fromtachiyomi.core.common.util.lang) run on GlobalScope — preferscreenModelScopefor UI lifecycle-bound work
Domain / Data Layer
- One interactor class per operation: verb-based names (e.g.,
GetTracksPerManga,HideCategory) underdomain/…/interactor/ - Wire in
eu.kanade.domain.DomainModule.kt+KMKDomainModule,SYDomainModule SAnime/SEpisodeare source-layer interfaces;Anime/Episodeare domain models (never use source types in domain/UI)
Database Migrations
Schema changes in SQLDelight:
- Add
.sqmmigration file - Update
.sqquery - Update
*RepositoryImplmapper - Run
./gradlew :data:generateSqlDelightInterface
App preference migrations: app/src/main/java/mihon/core/migration/migrations/
Images
Coil 3 (coil3.*); no Glide/Picasso. Configured in App.kt.
Logging
- Anikku code:
xLogE()/xLog()fromexh.log - Mihon code:
logcat { }fromtachiyomi.core.common.util.system
Adding New Anikku Features
- Create domain interactor:
domain/src/main/java/tachiyomi/domain/*/interactor/MyFeature.kt - Register DI: Add
addFactory { MyFeature(get()) }inDomainModule.kt - Create UI: ScreenModel + Screen under
app/src/main/java/eu/kanade/tachiyomi/ui/ - Add strings: Place in
i18n-ank/src/commonMain/moko-resources/base/strings.xmlusingAMRresource class - Wrap code: Surround new/edited lines with
// ANK -->/// ANK <--markers (see Code Marking Convention).
Reference: domain/src/main/java/tachiyomi/domain/category/interactor/HideCategory.kt + DomainModule.kt:133.
Testing
Framework: JUnit 5 + Kotest + Mockk
Test locations:
- Unit tests live in
<module>/src/test/java/ - Unit tests mostly in:
domain/src/test/andapp/src/test/ - Macro benchmarks:
macrobenchmark/(CI-only)
Running tests:
./gradlew testReleaseUnitTest # All release unit tests
./gradlew test # All tests
./gradlew :domain:testReleaseUnitTest --tests "*.ClassName" # Run a single test classNo broad UI test suite exists; focus on domain layer and critical logic tests.
Code Style & Linting
Formatter: Spotless + ktlint
Linting rules:
- Kotlin: ktlint with trimTrailingWhitespace, endWithNewline
- XML: trimTrailingWhitespace, endWithNewline (excludes
**/build/**, non-base i18n locales)
Always run before commit:
./gradlew spotlessApply # Fix issues
./gradlew spotlessCheck # Verify (CI gate — must pass)Never skip spotlessCheck; if it fails, run spotlessApply and retry.
Git Workflow
- Branch naming: Use
<type>/<short-description>(e.g.,feat/anime-recommendations) - Commits: OK on feature branches; never commit/push to
masterormainunless explicitly asked - Before push: Confirm current branch is not
master/main(git branch --show-current) - Code markers: New Anikku-specific code inside
// ANKblocks; preserve upstream// SY,// KMK,// AYduring merges
CI/CD
Primary workflows (.github/workflows/):
build_pull_request.yml– PR validation: spotlessCheck → assemblePreview → testReleaseUnitTestbuild_push.yml– Push to main: full build + signingbuild_release.yml– Release builds
PR check gates:
- Dependency review
- Gradle wrapper validation
- Code format check (
spotlessCheck) - Build (
assemblePreview) - Unit tests (
testReleaseUnitTest) - APK signing (if authorized fork)
Version Catalogs
Dependencies managed via version catalogs in gradle/:
libs.versions.toml– Core dependencieskotlinx.versions.toml– Kotlinx librariesandroidx.versions.toml– AndroidX librariescompose.versions.toml– Compose librariessy.versions.toml– TachiyomiSY-specificaniyomi.versions.toml– Aniyomi-specific
Key Files
App.kt– Injekt bootstrap, logging setup, Coil initializationMainActivity.kt– Voyager navigation hostapp/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt– Core DI setupapp/src/main/java/eu/kanade/domain/DomainModule.kt– Domain interactor registration
Contributing Guidelines
See CONTRIBUTING.md for prerequisites and contribution process. Key rules are covered inline above: code marking in Code Marking Convention, linting in Code Style & Linting, and strings in Internationalization. Translations go through Weblate — never edit non-base locale files directly.
Notes for Multi-Source Development
This codebase merges features from multiple sources:
- Aniyomi (upstream): Video player, tracker support, episodes
- Mihon (upstream): Manga reader foundation (adapted for anime)
- TachiyomiSY (upstream): Recommendations, metadata editing, advanced features
- Komikku (fork peer): Advanced library features, UI patterns
Merge strategy: Keep fork markers intact; preserve upstream // SY, // KMK, // AY blocks when rebasing or cherry-picking. New Anikku-specific code uses // ANK markers.
Common Issues & Solutions
Gradle OOM: Run ./gradlew --stop to kill daemon.
Spotless failures: Run spotlessApply first, then spotlessCheck. See Code Style & Linting.
SQLDelight errors: See Database Migrations — run ./gradlew :data:generateSqlDelightInterface after schema changes.
i18n mistakes: Anikku strings must use AMR + i18n-ank/…/base/. Non-base locales are Weblate-managed.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

