Chuchu is actively developed and contributions are welcome. The project author daily-drives Chuchu, which means real-world bugs get found and fixed quickly — and it means your bug reports and pull requests land in an app that someone actually uses. Whether you fix a crash, improve the UI, or just file a detailed issue, you are helping move the project forward. The project is hosted at github.com/jossephus/chuchu.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/jossephus/chuchu/llms.txt
Use this file to discover all available pages before exploring further.
Ways to contribute
Report a bug
Open an issue on GitHub with steps to reproduce, your Android version, and the Chuchu version.
Submit a pull request
Fork the repository, create a branch, implement your change, and open a PR.
Test and give feedback
Use Chuchu as your daily SSH client and report anything that feels wrong or breaks.
Build from source
Set up a local build environment to develop and test changes before submitting.
Reporting bugs
Good bug reports save significant debugging time. When opening an issue, include:- Steps to reproduce — the exact sequence of actions that triggers the problem
- Android version — Settings → About phone → Android version
- Chuchu version — visible in the app settings or from the GitHub release page
- What you expected vs what actually happened
- Logcat output if the app crashed — run
adb logcat -s ChuKittySSHto capture native SSH logs
Submitting pull requests
Set up your build environment
Follow the instructions in Build from source to compile the native library and run the app on a device.
Implement your change
Make your changes following the code style guidelines below. Keep commits focused — one logical change per commit.
Code style
Zig
The Zig source lives inzig-src/src/. Follow these conventions when modifying or adding Zig code.
Naming:
| Construct | Convention | Example |
|---|---|---|
| Functions and methods | camelCase | connectSocket |
| Variables and parameters | snake_case | socket_fd |
| Types, structs, enums | PascalCase | NativeSshSession |
| Constants | SCREAMING_SNAKE_CASE | LOG_TAG |
//!module doc commentconst Self = @This();(for self-referential types)- Imports:
std→builtin→ project modules const log = std.log.scoped(.module_name);
switch/if control flow in parent functions and push pure computation into helpers.
Documentation — use /// for public API doc comments, // for implementation notes. Explain why the code exists, not just what it does.
Memory — pass allocators explicitly. Use errdefer to clean up on the error path. The native layer uses std.heap.c_allocator throughout.
Kotlin
The Android app follows standard Android and Kotlin conventions:- Jetpack Compose for all UI — no XML layouts
StateFlowfor reactive state, observed withcollectAsStateWithLifecyclein Compose- ViewModels scoped to the navigation destination
- Room for all local persistence — no raw SQLite
- Coroutines with structured concurrency;
TerminalSessionEngineruns on a dedicated single-thread dispatcher namedterminal-session
Progress tracking
The project tracks feature progress in.plans/progress.txt. When you complete or materially advance a feature, update that file with a dated entry describing what changed. Treat the progress update as part of the same commit as the code change — do not defer it.
The project author daily-drives Chuchu as their primary SSH client, so bugs that affect real usage are taken seriously and prioritised quickly. If something annoys you in daily use, it is worth filing an issue even if you cannot reproduce it reliably.