Zero Inspector Kit: an in-app debug console for Flutter apps
A powerful Flutter SDK plugin for in-app developer console, providing real-time debugging tools including network request inspection, logging, database viewing, memory monitoring, FPS monitoring, and route tracking.
At a glance
- What is it?
- Zero Inspector Kit bundles network capture, log capture, database browsing, memory and FPS monitors into a Flutter plugin you enable with one line. It is a good fit for debug builds on a physical device, and a poor fit for anything you want to ship to end users.
- Who is it for?
- Adopt Zero Inspector Kit if you debug Flutter apps on real devices and want network, log and database state in one overlay instead of three tools. Do not adopt it if you need a console that runs in release builds, or if a GPL-3.0 dependency in your app is a problem for your distribution model.
- Can I use it commercially?
- Yes, with conditions. MPL-2.0 is a weak copyleft licence: you can use it inside commercial and closed-source software, but if you distribute changes to its own files, you must publish those changes under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 6 days ago.
- What is it written in?
- Mainly Dart, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 25, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The problem Zero Inspector Kit addresses in Flutter debug builds
Debugging a Flutter app usually means splitting attention across a terminal running flutter logs, a proxy such as Charles or Proxyman for HTTP traffic, a database browser for the on-device SQLite file, and the DevTools performance tab for frame timing. Each of those is a separate window, and on a physical device the proxy step requires certificate installation before you see a single request.
Zero Inspector Kit puts those views inside the running app. The README describes it as an in-app developer console with network inspection, logging, database viewing, memory monitoring, FPS monitoring and route tracking, all reachable from a floating overlay button. The audience is Flutter developers working on Android and iOS, particularly people testing on hardware where attaching a desktop toolchain is awkward.
The README frames the integration as "Zero-Invasion Integration", meaning one line in main() rather than edits spread across the app. That framing is the product's main claim, and it is worth reading carefully: the plugin still has to hook into your app's startup, your routing and your HTTP stack to do its job.
How the capture actually works: Zone, HttpOverrides and a route observer
The mechanism is visible in the README's integration table. Log capture works through Zone: the one-line helper wraps your app so that print(), debugPrint() and Flutter framework errors are captured without you replacing your logging calls. Network capture works through HttpOverrides, which intercepts Dart's HttpClient. The README states this covers both the http package and Dio, on the grounds that Dio uses HttpClient underneath. That is an important boundary: anything that does not route through Dart's HttpClient is outside the hook.
Database scanning is described as automatic for SQLite, with custom providers for other stores. shared_preferences and Hive are supported through adapters, and the README is explicit that the plugin does not depend on those packages; your app must already have them if you want them inspected. Route tracking comes from InspectorRouteObserver, which the helper injects into MaterialApp.
The floating button is rendered through an Overlay, so it is not a widget you place in your tree. Memory and FPS monitoring are described as having master switches specifically to avoid overhead, which tells you the authors treat those two as the expensive parts of the panel.
Installing Zero Inspector Kit and getting a first panel on screen
The README lists pub.dev as the recommended install path. Add the dependency to your app's pubspec.yaml. The README currently pins ^1.6.1 and carries an upgrade note about multi-line log reassembly being fixed in that release.
dependencies:
zero_inspector_kit: ^1.6.1If you prefer to track a specific tag rather than the published package, the README gives a git form with ref: release/v1.6.1, and says to replace 1.6.1 with the version you need.
dependencies:
zero_inspector_kit:
git:
url: https://github.com/zero-labsco/zero_inspector_kit.git
ref: release/v1.6.1For the shortest path to a working panel, the README's recommended entry point replaces runApp with a single call, and adds the route observer to MaterialApp. Run the app in debug mode and you should see the floating button overlaid on your first screen.
import 'package:flutter/material.dart';
import 'package:zero_inspector_kit/zero_inspector_kit.dart';
void main() {
ZeroInspectorKit.runAppWithInspector(const MyApp());
}If you want the widget inspector or the network timeline pre-enabled, the manual path calls ZeroInspectorKit.init with two optional flags before runApp. The README shows enableWidgetInspector and enableNetworkTimeline, and notes both are off by default.
ZeroInspectorKit.init(
enableWidgetInspector: true,
enableNetworkTimeline: true,
);To capture logs from libraries that never call InspectorLog, start the interceptor once at startup. The README says print(), debugPrint(), Flutter framework errors and runZonedGuarded exceptions are then picked up automatically.
InspectorLogInterceptor.instance.start();Where the one-line promise breaks down
The README's own manual integration example undercuts the zero-invasion pitch. Registering shared_preferences or Hive requires you to construct the adapter with a live instance and pass it in, which means awaiting the store and calling registerSharedPrefs or registerProvider during startup. That is real code in your app, not a line you can forget about.
Network capture has a sharper edge. Because it depends on HttpOverrides, requests made by native platform code, by a WebView, or by an HTTP client that does not go through Dart's HttpClient will not appear in the panel. The README does not enumerate these exclusions; it asserts coverage of http and Dio. If your app uses something else, you find out by seeing an empty network tab, not by reading a compatibility list.
There is also a version discipline cost. The README's upgrade note recommends moving to ^1.6.1 because of a log ordering bug in earlier versions, and the release history shows three releases inside three days at the end of August 2026. A plugin that patches log reassembly and ships three versions in a week is one you should expect to update on a similar cadence, and one whose behaviour in the panel may shift between minor versions.
Release builds, GPL-3.0 and the cost of keeping the plugin current
The README states that the inspector is automatically disabled in release mode and that tree-shaking removes the related code, so you do not delete anything before shipping. Treat that as a claim to verify in your own build rather than a guarantee: tree-shaking depends on how the plugin's entry points are referenced, and the README does not describe a manual kill switch beyond the release-mode behaviour. The practical check is to build a release artifact and confirm the floating button is absent.
The licence is GPL-3.0, per the repository. That is a copyleft licence, and it is unusual for a Flutter UI plugin. If you link this package into a distributed app, the obligations that attach to your combined work are a question for your own legal review, not something the README answers. The repository does carry a NOTICE file alongside LICENSE, which is worth reading before you assume the terms are plain GPL-3.0 with no additional text.
Upgrade cost is the other recurring expense. The last push to the repository was on 2026-08-29, and the most recent release is v1.6.1 on the same date. The README's advice to move to ^1.6.1 means the caret range will pull in later 1.x releases automatically, which is convenient until a panel behaviour changes under you mid-sprint. Pinning the exact version and bumping deliberately is the lower-surprise option for a package that touches your HTTP stack.
Zero Inspector Kit versus Flutter DevTools and a desktop proxy
The obvious alternative is the combination most Flutter teams already use: Flutter DevTools for widget inspection, memory and frame timing, plus a desktop proxy for HTTP. DevTools is maintained by the Flutter project, runs outside your app, and imposes no licence obligation on your binary. A proxy gives you request rewriting and replay that the in-app panel does not attempt.
The difference in approach is where the tool lives. DevTools and a proxy require a host machine, a debug connection and, for HTTPS interception on a device, a trusted certificate. Zero Inspector Kit runs inside the app process on the device, which is why it works when you are away from your desk and why it can show SQLite contents, shared preferences and Hive boxes in the same overlay as the request log. The README's bug report feature follows the same logic: it assembles device model, OS, current memory, recent logs and recent network into a snapshot shared through the system share sheet.
What you give up is depth and independence. DevTools can inspect a running app without the app knowing; this plugin is part of the app, so a bug in the plugin is a bug in your debug build, and its network view is limited to what HttpOverrides sees. For performance work, the README describes trend charts and jank detection, but it does not claim to replace the DevTools timeline.
Who should adopt Zero Inspector Kit, and who should not
Adopt it if you are building a Flutter app for Android and iOS, you test on physical devices, and your HTTP traffic goes through the http package or Dio. The database tab is the strongest argument: seeing SQLite, shared preferences and Hive contents next to the request that wrote them removes a round trip to a desktop tool. Teams that file bug reports from QA devices will get use out of the one-click snapshot, since it collects device model, OS, memory, recent logs and recent network without asking the reporter to run adb.
Do not adopt it if you need any of this in a release build, if your networking bypasses Dart's HttpClient, or if a GPL-3.0 dependency is incompatible with how you distribute your app. It is also the wrong tool for deep frame-level profiling, where DevTools remains the instrument with the finer resolution.
What to verify first: that ^1.6.1 is still the current pub.dev version when you add it, that the floating button is genuinely absent from a release build you produce, and that the network tab populates for every client your app uses. If the network tab stays empty, the cause is almost certainly the HttpOverrides boundary rather than a configuration mistake.
Editorial conclusion
Adopt Zero Inspector Kit if you debug Flutter apps on real devices and want network, log and database state in one overlay instead of three tools. Do not adopt it if you need a console that runs in release builds, or if a GPL-3.0 dependency in your app is a problem for your distribution model. Before committing, verify two things yourself: that the current pub.dev version is still ^1.6.1, and that your app's HTTP stack actually goes through Dart's HttpClient, because the README ties network capture to HttpOverrides.
Frequently asked questions
Does Zero Inspector Kit work in release builds?
The README states that the inspector is automatically disabled in release mode and that tree-shaking removes the related code, so you do not need to delete anything before shipping. It does not describe a separate manual kill switch, so confirm the behaviour in a release artifact you build yourself.
Which HTTP clients does Zero Inspector Kit capture?
The README says network interception covers all http and Dio requests, because it hooks Dart's HttpClient through HttpOverrides and Dio uses HttpClient underneath. Requests that do not go through Dart's HttpClient are outside that hook.
Does Zero Inspector Kit inspect shared_preferences and Hive?
Yes, through adapters registered at startup, and both appear under the Database tab using the same browse and export flow as SQLite. The README notes the plugin itself does not depend on those packages, so your app must already include them.
What licence does Zero Inspector Kit use?
The repository is licensed GPL-3.0, and it carries a NOTICE file alongside the LICENSE file. Whether that copyleft licence is acceptable for your app's distribution model is a question for your own legal review.
How do I install Zero Inspector Kit?
Add zero_inspector_kit to your pubspec.yaml dependencies, currently pinned as ^1.6.1, or use the git form with ref: release/v1.6.1 if you want a specific tag. Then replace runApp with ZeroInspectorKit.runAppWithInspector in main().
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/zero-labsco-zero-inspector-kit)