[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81783":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":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":35,"readmeContent":36,"aiSummary":37,"trendingCount":16,"starSnapshotCount":16,"syncStatus":38,"lastSyncTime":39,"discoverSource":40},81783,"flutter-cli","Antoinegtir\u002Fflutter-cli","Antoinegtir","Modern terminal UI for Flutter — hot reload across N devices, live HTTP\u002Fperf inspector, drops into your shell so 'flutter run' becomes the dashboard.","https:\u002F\u002Fgithub.com\u002FAntoinegtir\u002Fflutter-cli\u002Freleases",null,"Rust",56,3,47,8,0,1,9,1.81,"MIT License",false,"master",true,[25,26,27,28,29,30,31,32,33,34],"cli","dart","developer-tools","devops","flutter","hot-reload","mobile-development","rust","terminal","tui","2026-06-12 02:04:19","\u003Cdiv align=\"center\">\n\n# `flutter run`, but with superpowers.\n\n[![Release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002FAntoinegtir\u002Fflutter-cli?logo=github&color=brightgreen)](https:\u002F\u002Fgithub.com\u002FAntoinegtir\u002Fflutter-cli\u002Freleases\u002Flatest)\n[![npm downloads](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fdm\u002F@antoinegtir\u002Fflutter-cli.svg?logo=npm)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@antoinegtir\u002Fflutter-cli)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-blue.svg)](LICENSE)\n[![Discussions](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fdiscussions\u002FAntoinegtir\u002Fflutter-cli?logo=github)](https:\u002F\u002Fgithub.com\u002FAntoinegtir\u002Fflutter-cli\u002Fdiscussions)\n\nA modern terminal UI for Flutter — hot reload across N devices, real-time perf, inline scrollback. Drops into your shell so `flutter run` *becomes* the dashboard.\n\n![flutter-cli landing](docs\u002Fscreenshots\u002Flanding.gif)\n\n\u003C\u002Fdiv>\n\n## Try it without installing\n\n```sh\nnpx @antoinegtir\u002Fflutter-cli run\n```\n\nFetches the binary into npm's cache, no shell shim, no rc edits — just runs the dashboard on the current project. Swap `run` for `test`, `build`, or `devices`.\n\n## Install\n\n```sh\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002FAntoinegtir\u002Fflutter-cli\u002Fmaster\u002Finstall.sh | bash\n```\nor:\n```sh\nnpm i -g @antoinegtir\u002Fflutter-cli\n```\n\nBoth paths drop a binary on your `PATH` and wire the shell shim into your rc automatically. Open a new terminal — `flutter run` \u002F `test` \u002F `build` \u002F `devices` now route through the TUI. Your IDE keeps using vanilla `flutter`; everything else (`flutter pub`, `doctor`, `clean`, …) passes through unchanged.\n\n**Requirements:** an existing Flutter SDK reachable via `PATH`, [FVM](https:\u002F\u002Ffvm.app), or `$FLUTTER_ROOT`. macOS \u002F Linux \u002F Windows (bash, zsh, fish, Git Bash, WSL).\n\n---\n\n## At a glance\n\n**Multi-device picker — `space` to select, `a` for all, `enter` to fire.**\n![Device picker](docs\u002Fscreenshots\u002Fselect-devices.png)\n\n**Live per-device FPS + memory sparklines, side by side.**\n![Per-device performance](docs\u002Fscreenshots\u002Fperformance.png)\n\n**Press `n` — full HTTP traffic inspector, color-coded by status.**\n![Network inspector](docs\u002Fscreenshots\u002Fnetwork.png)\n\n**Press `\u002F` — logs filter as you type, by message or by level.**\n![Live filter](docs\u002Fscreenshots\u002Flogfilter.png)\n\n**Press `b` — flip light\u002Fdark on every device without leaving the terminal.**\n![Brightness toggle](docs\u002Fscreenshots\u002Fdarkmode.png)\n\n**Press `o` — fake iOS or Android per device to chase layout bugs.**\n![Platform override](docs\u002Fscreenshots\u002Fplatform.png)\n\n---\n\n### Works with FVM\n\n`flutter-cli` auto-detects per-project FVM pins: it resolves `.fvm\u002Fflutter_sdk` first (what your IDE reads), then falls back to `.fvmrc` \u002F legacy `.fvm\u002Ffvm_config.json` against `~\u002Ffvm\u002Fversions`. No `fvm flutter` prefix needed, and the resolved Flutter\u002FDart versions show up in the dashboard header.\n\n### Pre-run \u002F pre-test \u002F pre-build hooks\n\nCodegen, fixture seeding, env checks — drop a `flutter_cli:` section in `pubspec.yaml` and the commands run before the TUI takes over the terminal. First non-zero exit aborts.\n\n```yaml\n# pubspec.yaml\nflutter_cli:\n  pre_run:\n    - dart run build_runner build --delete-conflicting-outputs\n  pre_test:\n    - dart run build_runner build\n  pre_build:\n    - .\u002Ftool\u002Fcheck_env.sh\n```\n\nEach command is spawned through `sh -c` so pipes, `&&`, env-var substitution all work. Output streams live to your terminal — codegen progress stays visible after the dashboard exits.\n\n### IntelliJ \u002F Android Studio hot reload\n\n`flutter-cli` prints the canonical `A Dart VM Service on \u003Cdevice> is available at: http:\u002F\u002F…` line as soon as the app boots. The Flutter IntelliJ plugin scrapes for that pattern and auto-attaches — **Cmd+S in your IDE then triggers hot reload** straight through the VM Service, no extra config needed.\n\n### Upgrade\n\nRe-run the same install line — idempotent, no reload needed:\n```sh\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002FAntoinegtir\u002Fflutter-cli\u002Fmaster\u002Finstall.sh | bash\n```\nor:\n```sh\nnpm update -g @antoinegtir\u002Fflutter-cli\n```\n\n### Uninstall\n\n```sh\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002FAntoinegtir\u002Fflutter-cli\u002Fmaster\u002Funinstall.sh | bash\n```\nor:\n```sh\n npm uninstall -g @antoinegtir\u002Fflutter-cli\n```\n\nStrips the shim from every shell rc \u002F profile, removes the binary from every known dir. Non-invasive.\n\n### Direct binary (no shim)\n\nCall `flutter-cli run` \u002F `test` \u002F `build` directly. Handy for CI runners or machines where you can't touch rc files.\n\n---\n\n## Why\n\n`flutter run` was built for one device, one terminal. Today you're usually:\n- Testing on 2+ devices at once (iOS, Android, simulator).\n- Watching FPS, memory, jank — not just compile errors.\n- Drowning in 50k lines of scrollback.\n- Re-typing `flutter run --device emulator-5554 --flavor prod` for the hundredth time.\n\nSame `flutter` underneath, dramatically better feedback loop:\n\n| | vanilla `flutter run` | with the shim |\n|---|---|---|\n| Multi-device hot reload | one at a time | parallel, single `r` |\n| Per-device FPS \u002F memory | — | live sparklines |\n| Inline TUI (scrollback preserved) | — | yes |\n| Device picker | text prompt | navigable list |\n| `--release` \u002F `--profile` \u002F `--flavor` \u002F `--dart-define` | works | works |\n| Open DevTools | copy URL manually | `d` keystroke |\n| Live HTTP inspector | DevTools-only | `n` keystroke |\n| Side-by-side screenshots | per-platform tooling | `s` keystroke |\n| Skip the TUI | n\u002Fa | `--basic` |\n\n---\n\n## Commands\n\n### `flutter run` — multi-device dashboard\n\n```sh\nflutter run                    # auto-pick or interactive picker\nflutter run --release          # release mode\nflutter run -d emulator-5554   # specific device\nflutter run -d all             # every connected device\nflutter run -- --flavor prod --dart-define=API=https:\u002F\u002Fx   # any flutter flag\n```\n\nKeybindings while running:\n\n| key | action |\n|---|---|\n| `r` \u002F `R` | hot reload \u002F hot restart (all devices) |\n| `b` \u002F `o` | flip theme (light\u002Fdark) \u002F fake platform (iOS\u002FAndroid) |\n| `p` \u002F `P` | debug paint \u002F performance overlay |\n| `e` | jump to error location in VS Code \u002F Android Studio (or ⌘+click the underlined ref) |\n| `n` | toggle Network inspector |\n| `d` | open Flutter DevTools in your browser |\n| `s` | screenshot every device → `screenshots\u002F\u003Ctimestamp>\u002F\u003Cdevice>.png` |\n| `\u002F` | filter logs live · `c` copy the filtered slice |\n| `↑` \u002F `↓` | scroll the active panel |\n| `q` | quit |\n\nScreenshots go through the VM Service's `_flutter.screenshot` RPC first (zero deps), with `flutter screenshot` \u002F `adb` \u002F `idevicescreenshot` \u002F `simctl` as fallbacks. Works on iPhone, Android, simulators, and desktop.\n\n### `flutter test`\n\nLive failures panel: pass\u002Ffail\u002Fskip counters update in real time, any failure jumps to its stack trace. `Tab` switches focus, `c` copies failures, `r` re-runs.\n\n![flutter test runner](docs\u002Fscreenshots\u002Ftest.png)\n\n```sh\nflutter test                       # everything under test\u002F\nflutter test test\u002Fauth\u002F            # one directory\nflutter test integration_test\u002F     # e2e — picker fires automatically\nflutter test --golden --update-goldens\nflutter test --coverage --tags slow --exclude-tags flaky\nflutter test -- --start-paused --total-shards 4   # any extra flag\n```\n\n### `flutter build` — any target\n\n```sh\nflutter build apk\nflutter build ios --release\nflutter build ipa\nflutter build macos\nflutter build ios -- --no-codesign --obfuscate --split-debug-info=symbols\u002F\n```\n\n### `flutter devices`\n\nLive-tracked list with status and OS version.\n\n### `--basic` — skip the TUI\n\n```sh\nflutter run --basic              # vanilla `flutter run` output\nflutter test --basic --coverage\nflutter build apk --basic --release\n```\n\nUseful for CI, piping into another tool, or debugging the TUI itself. Same logs you'd get if `flutter-cli` weren't on `PATH`.\n\n---\n\n## How the shim works\n\nThe installer adds 3 lines to your rc, gated by sentinel comments so removal is a one-liner:\n```sh\n# >>> flutter-cli shim >>>\neval \"$(flutter-cli init \u003Cshell>)\"\n# \u003C\u003C\u003C flutter-cli shim \u003C\u003C\u003C\n```\n\nThe eval expands to a function that routes only the 4 claimed subcommands through the TUI, falling through for everything else:\n```sh\nflutter() {\n  case \"$1\" in\n    run|test|build|devices) shift; command flutter-cli \"$@\" ;;\n    *) command flutter \"$@\" ;;\n  esac\n}\n```\n\nSelf-healing: if `flutter-cli` ever disappears (uninstalled, PATH broken, …), the function detects it and falls back to `command flutter` for every call instead of erroring. Your IDE plugins, CI pipelines, and dotfile zealotry stay untouched.\n\n---\n\n## Manual install (without the script)\n\n```sh\ngit clone https:\u002F\u002Fgithub.com\u002FAntoinegtir\u002Fflutter-cli && cd flutter-cli\ncargo install --path crates\u002Fflutter-cli\necho 'eval \"$(flutter-cli init zsh)\"' >> ~\u002F.zshrc   # bash \u002F fish — substitute shell\n```\n\n---\n\n## Docker\n\nMulti-stage `Dockerfile` (Debian slim runtime, non-root) for CI and locked-down dev VMs. The image **does not** bundle the Flutter SDK — mount yours.\n\n```sh\ndocker build -t flutter-cli:dev .\ndocker run --rm -it -v \"$PWD\":\u002Fwork -w \u002Fwork \\\n  -v \"$FLUTTER_ROOT\":\u002Fopt\u002Fflutter:ro \\\n  -e PATH=\u002Fopt\u002Fflutter\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin \\\n  flutter-cli:dev run --basic\n```\n\nAndroid USB needs `--device \u002Fdev\u002Fbus\u002Fusb` + udev rules on the host. iOS interaction stays macOS-only (`xcrun`).\n\n---\n\n## Contributing\n\n```sh\ngit clone https:\u002F\u002Fgithub.com\u002FAntoinegtir\u002Fflutter-cli && cd flutter-cli\ncargo test --workspace        # `cargo fmt` + `cargo clippy -D warnings` also checked by CI\n```\n\n---\n\nMIT — see [LICENSE](LICENSE). Built by [@Antoinegtir](https:\u002F\u002Fgithub.com\u002FAntoinegtir).\n","`flutter-cli` 是一个现代化的 Flutter 终端用户界面工具，旨在增强开发者的命令行体验。它支持跨多个设备进行热重载，并提供实时性能监控和内联回滚功能，使 `flutter run` 命令转变为一个强大的控制面板。该项目使用 Rust 语言编写，具有多设备选择器、实时每设备 FPS 和内存趋势图、HTTP 流量检查器以及日志过滤等功能。适用于需要高效调试和测试 Flutter 应用的场景，尤其适合同时在多个设备上进行开发或需要频繁切换环境配置的情况。",2,"2026-06-11 04:06:40","CREATED_QUERY"]