[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-83139":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":13,"stars7d":15,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":16,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":14,"starSnapshotCount":14,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},83139,"quokka","dutradotdev\u002Fquokka","dutradotdev","Inspect and clean a USB-connected device from your terminal: storage, apps, media, and a live log viewer. No jailbreak, no root.","",null,"Rust",75,1,0,21,7,0.9,"MIT License",false,"main",true,[],"2026-06-12 02:04:31","# quokka 🐹\n\n> Inspect and clean a USB-connected device from your terminal: storage, apps, media, and a live log viewer. No jailbreak, no root.\n\n[![CI](https:\u002F\u002Fgithub.com\u002Fdutradotdev\u002Fquokka\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fdutradotdev\u002Fquokka\u002Factions\u002Fworkflows\u002Fci.yml)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-blue.svg)](LICENSE)\n![Platform: macOS](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-macOS-lightgrey.svg)\n![Devices: iOS · Android](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdevices-iOS%20%C2%B7%20Android-success.svg)\n\nquokka is a Mac CLI for the phone you have plugged in — iPhone **or** Android.\nIt reads storage, battery, apps, media, identity, and the live system log; it\ncan also reclaim space and reboot the device. iPhones are reached over\n`usbmuxd` and lockdown-classic services (no jailbreak, no `core_device_proxy`\ntunnel); Android devices over a local `adb` server (no root). No elevated\nprivileges on either.\n\nWorks on iOS 17+ and Android 8+.\n\n## What you can do with it\n\n- **Tail the device syslog while you debug.** `qk logs` opens a TUI viewer that filters live logs by level or process, with search, pause, and save. `--no-tui` streams plain text for piping or CI.\n- **Free up space on a test device.** `qk analyze` ranks the heaviest media files and `qk media -d` groups likely duplicates; both can delete from an interactive picker.\n- **Manage installed apps by size.** `qk apps` lists user apps largest-first and uninstalls by bundle id, with `--yes` for scripts.\n- **Read device, system, and storage state.** `qk status` and `qk info` print it in clean blocks; `--redact` masks serial, UDID, IMEI, and MAC for safe screenshots.\n\n## Quick start\n\n```sh\nbrew install dutradotdev\u002Ftap\u002Fquokka-cli\nqk\n```\n\nWith no arguments, `qk` opens the interactive launcher. See [Install](#install)\nbelow for `curl` and `cargo` alternatives.\n\n## Demo\n\n![quokka demo](docs\u002Fdemo.gif)\n\n## Commands\n\n| Command           | What it does                                                                                                                                        |\n| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `quokka`          | Interactive launcher. Dashboard plus a menu to jump into any command below.                                                                         |\n| `quokka status`   | Print the device dashboard once.                                                                                                                    |\n| `quokka info`     | Static identity in three blocks (Device \u002F System \u002F Network). `--redact` masks serial, UDID, IMEI, and MAC for safe screenshots.                     |\n| `quokka apps`     | Picker of installed user apps by size. `--uninstall \u003Cbundle-id>` removes one directly.                                                              |\n| `quokka analyze`  | Walk media folders and surface the heaviest files. Read-only by default; `--delete` opens a picker.                                                 |\n| `quokka media`    | Survey camera roll and downloads. Per-kind counts, per-month breakdown, top-10 largest. `-d` adds likely-duplicate groups.                          |\n| `quokka logs`     | Stream the device's system log (syslog \u002F logcat) in a TUI viewer. Filter by level or process, search, pause, save. `--no-tui` streams plain stdout. |\n| `quokka reboot`   | Soft reboot the device. Confirms by default; `--yes` skips.                                                                                         |\n| `quokka shutdown` | Power off the device. Confirms by default; `--yes` skips.                                                                                           |\n| `quokka devices`  | List every device reachable over `usbmuxd` (iOS) or `adb` (Android). Does not select one.                                                           |\n| `quokka card`     | Render a 1080×1080 PNG snapshot of the device, a neofetch-style flex card. Saves to `~\u002FDesktop` and opens in Preview by default.                    |\n\n## Examples\n\n```sh\nqk status                              # one-shot device dashboard\nqk info                                # full identity (Device + System + Network)\nqk info --redact                       # ...with serial \u002F UDID \u002F IMEI \u002F MAC masked\n\nqk apps                                # interactive app picker (sizes stream in live)\nqk apps --uninstall com.example.app    # uninstall a specific app (asks to confirm)\nqk apps --uninstall com.example.app --yes   # ...without the confirmation prompt\n\nqk analyze                             # print the 20 heaviest media files\nqk analyze --top 50                    # ...the heaviest 50 instead\nqk analyze --delete                    # interactive deletion picker (needs a TTY)\n\nqk media                               # camera roll \u002F downloads survey\nqk media -d                            # ...plus likely-duplicate groups\n\nqk logs                                # TUI log viewer (q to quit)\nqk logs --no-tui --min-level warning   # plain-stream mode, warning+ only\nqk logs --no-tui --process SpringBoard --save \u002Ftmp\u002Fsb.log  # filter + tee\n\nqk reboot                              # asks to confirm\nqk shutdown --yes                      # non-interactive\n\nqk card                                # render a 1080x1080 PNG to ~\u002FDesktop and open in Preview\nqk card --output ~\u002FPictures\u002Fme.png     # custom output path\nqk card --no-open --redact             # don't open Preview, mask anything personal\n\nqk status --json                       # machine-readable output (also: info\u002Fapps\u002Fanalyze\u002Fmedia\u002Fdevices)\nqk info --redact --json | jq .         # redaction applies before serialization\nqk logs --json                         # NDJSON stream, one JSON object per log line\n```\n\nEvery query command takes `--json`: it prints the same data the GUI consumes,\nso you can pipe quokka into `jq` or another tool. `logs --json` streams NDJSON\n(one object per line); `card` (an image) and `capture` (a live TUI) stay out of\n`--json`.\n\n## Picking a platform and device\n\nquokka autodetects whether you have an iPhone (over `usbmuxd`) or an Android\ndevice (over `adb`) plugged in. Force one with `--platform ios|android` (or the\n`QK_PLATFORM` env var) when both are connected and you want a specific one.\n\nIf you have more than one device plugged in — across either platform — the bare\n`qk` launcher lists them all in a sidebar so you can switch between them. For a\nspecific subcommand, pick which device it talks to:\n\n```sh\nqk devices                              # list every device (iOS + Android) with name + model + id\nqk --udid 00008130-0019... info         # target an iPhone by UDID\nqk --udid ABCD1234 info                 # ...or an Android by adb serial\nQK_UDID=00008130-0019... qk apps        # ...or via env var for a whole shell session\nqk --platform android status            # force the Android backend\n\nqk info                                 # 2+ devices on a TTY: opens an interactive picker\nqk info                                 # 2+ devices in a pipe\u002FCI without --udid: errors with a hint\n```\n\n`--udid` is a global flag that works on every subcommand (long-only; there is\nno `-d` short form because `qk media -d` already means `--find-duplicates`). It\ntakes an iPhone UDID or an Android adb serial, and also reads from `QK_UDID` in\nthe environment, so you can set it once per shell.\n\n## Requirements\n\n- A Mac, with a phone connected via cable.\n\n**For an iPhone:**\n\n- The Xcode command line tools (`xcode-select --install`) supply `usbmuxd`.\n- The device must be trusted: the first time you plug it in, unlock the iPhone\n  and tap _Trust this computer_.\n- iOS 17 or newer.\n\n**For an Android device:**\n\n- `adb` on your `PATH` — `brew install android-platform-tools`.\n- USB debugging enabled (Developer options), and the _Allow USB debugging_\n  prompt accepted for this Mac.\n- Android 8 or newer (so the `adb` shell can read per-app sizes from\n  `dumpsys diskstats` without root).\n- Without root, some fields are best-effort: app names show as package ids,\n  battery health\u002Fcycles are unavailable, and packet capture (`qk capture`) is\n  iOS-only.\n\n## Install\n\n### Homebrew (recommended)\n\n```sh\nbrew install dutradotdev\u002Ftap\u002Fquokka-cli\n```\n\nWorks on Apple Silicon and Intel. `brew upgrade` keeps you on the latest\nrelease.\n\n### One-line installer (no Homebrew)\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf \\\n  https:\u002F\u002Fgithub.com\u002Fdutradotdev\u002Fquokka\u002Freleases\u002Flatest\u002Fdownload\u002Fquokka-cli-installer.sh | sh\n```\n\nPulls the prebuilt binary from GitHub Releases into `~\u002F.cargo\u002Fbin`. Re-run the\nsame command to update.\n\n### Cargo (build from source)\n\nIf you already have a Rust toolchain:\n\n```sh\ncargo install --git https:\u002F\u002Fgithub.com\u002Fdutradotdev\u002Fquokka quokka-cli\n# or, from a local clone:\ncargo install --path crates\u002Fquokka-cli\n```\n\nSlower because it compiles locally. Use this when you want to track `main`\nbetween tagged releases.\n\nEvery install method drops two binaries on your `PATH`: `quokka` and the\nshorter `qk`. They share the same code, so `qk status` and `quokka status` do\nthe same thing.\n\n## Development\n\n```sh\ncargo build\ncargo test                  # unit + integration, no iPhone needed\ncargo test --features e2e   # adds tests that need a real iPhone over USB\ncargo test --features e2e-android   # adds tests that need a real Android over adb\ncargo clippy --all-targets -- -D warnings\ncargo fmt\n```\n\nquokka is a Cargo workspace with two crates: **`quokka-core`** (the\npresentation-free `Device` seam, the application facade, and the pure\nprojection\u002Fformat logic — the crate a GUI would depend on) and **`quokka-cli`**\n(the `quokka`\u002F`qk` binaries and all terminal UI). All `cargo` commands run from\nthe repo root and span the workspace.\n\n- [CONTRIBUTING.md](CONTRIBUTING.md): how to set up, test, and submit a change.\n- [docs\u002FARCHITECTURE.md](docs\u002FARCHITECTURE.md): how quokka is put together and why.\n- [CHANGELOG.md](CHANGELOG.md): what changed between versions.\n- [SECURITY.md](SECURITY.md): how to report a vulnerability.\n\nEvery push and pull request runs through [CI](.github\u002Fworkflows\u002Fci.yml):\nformatting, clippy, the full test suite, `cargo audit`, and `cargo deny`.\n\n## Tested devices\n\nVerified end-to-end on real hardware. OEM quirks (storage reporting, `find`\nflavours) tend to surface here first — if quokka works on a device not listed,\na PR adding a row is welcome.\n\n| Platform | Device               | OS         |\n| -------- | -------------------- | ---------- |\n| iOS      | iPhone 15 Pro Max    | iOS 26.5   |\n| Android  | Redmi Note 9S (MIUI) | Android 12 |\n\n## Acknowledgments\n\n`qk card` ships with [JetBrains Mono](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FJetBrainsMono)\nembedded in the binary so the rendered PNG looks the same on every machine.\nJetBrains Mono is distributed under the\n[SIL Open Font License 1.1](assets\u002Ffonts\u002FOFL.txt); the bundled font files are\nunmodified copies.\n\nBadge artwork uses [Twemoji](https:\u002F\u002Fgithub.com\u002Fjdecked\u002Ftwemoji) by Twitter\nand contributors, licensed under\n[CC-BY 4.0](https:\u002F\u002Fcreativecommons.org\u002Flicenses\u002Fby\u002F4.0\u002F). The bundled SVGs\nare unmodified copies.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","quokka 是一个命令行工具，用于通过终端检查和清理通过USB连接的设备（包括iPhone和Android），支持存储、应用、媒体文件管理和实时日志查看。其核心功能包括无需越狱或获取root权限即可访问设备的存储、电池状态、应用程序、媒体文件及系统日志，并提供空间分析与释放、应用管理等实用工具。该程序采用Rust语言编写，确保了高性能与安全性。适用于开发人员在调试过程中需要快速了解设备状态或清理测试设备时使用，特别适合macOS环境下对iOS 17及以上版本以及Android 8及以上版本的设备进行操作。",2,"2026-06-11 04:10:14","CREATED_QUERY"]