Skip to content

Help and FAQ

The URL is from an earlier run; the port and token change on every full restart. Click the new printed link or paste the new URL, and it replaces the old one. devpul run hands each new run to the open tab.

From Dart 3.14 the VM service accepts websockets only from pages on 127.0.0.1, and the browser shows no reason for the refusal. Use devpul run or the printed link, which opens DevPul in DevTools. The hosted site connects to Dart 3.13 and older.

The browser asks to access apps on this device

Section titled “The browser asks to access apps on this device”

Chrome and Firefox ask before a hosted page connects to 127.0.0.1. Allow it once for this site. If you dismissed it, allow "Local network access" in the site settings.

Safari blocks hosted pages from reaching 127.0.0.1. Run devpul instead; it works in Safari.

  • In Flutter, the link appears once a tool is attached through DDS, a moment after startup; see the printed link.
  • It appears after the app's first DevPul call, such as Devpul.session.
  • printLink: false or console: ConsoleMode.off turn it off, and Flutter web prints none.
  • The app must be a debug build, or a profile build with --dart-define=DEVPUL_PROFILE=true. Release builds never emit.
  • The packages must be hooked up: Devpul.session, an HTTP adapter, DevpulFlutter.install().
  • DevpulConfig(enabled: false) or an ignoreUrls rule may hide calls.
  • Check the filter box and chips; filters are remembered per tab.

On connect, DevPul fetches the app's own backlog of recent events, up to backlogSize (16 MB by default). Older events are gone; raise backlogSize if you attach late to long sessions.

The response never reached the adapter: the call is still running, was dropped without an error, or the Dio interceptor is not last in the chain and another interceptor resolved the call. Long-lived streams stay pending by design.

Use --enable-vm-service, not --observe. --observe pauses isolates on exit, which stalls Isolate.run and Dio's background JSON decoding.

Its error shows in the status bar and the Plugins tab. The module must be served with CORS headers and a JavaScript content type, and export a plugin as its default export.

DevPul runs only in your browser and sends nothing anywhere you did not ask for. A connected DevPul can run code in the app, as any debugger can, and so can the plugins you allow. Security and privacy has the details.

How do I see Flutter network requests in the browser?

Section titled “How do I see Flutter network requests in the browser?”

Add the devpul package and an HTTP adapter (devpul_dio for Dio, devpul_http for package:http), then run the app with devpul run, or click the DevPul link it prints in a debug run. Requests, responses and errors appear live.

No. DevPul runs entirely in your browser and reads events from your app over 127.0.0.1. Requests, headers and bodies are never sent to a server. History stays in the browser's local storage.

Does DevPul need a proxy, certificates or a server?

Section titled “Does DevPul need a proxy, certificates or a server?”

No. The app posts events with dart:developer postEvent, and the browser reads them from the Dart Development Service websocket on 127.0.0.1.

No. Release builds have no VM service and DevPul never emits in them, so there is nothing to strip before shipping. Profile builds run it only when built for it.

How is DevPul different from the Flutter DevTools network tab?

Section titled “How is DevPul different from the Flutter DevTools network tab?”

DevPul works with any HTTP client through adapters, including on Flutter web, shows errors, logs and custom events next to requests, filters by tags, fields and app runs, watches several apps at once, keeps history across reloads, exports HAR and takes plugins. Both read dart:io traffic with no code change; in DevPul, turn on HTTP without an adapter. See DevPul, DevTools and talker.

Yes. Export a session file and they can open it in DevPul without the app, or export HAR for other tools. Exports contain everything the app sent, so redact secrets first.

Yes. A short ProviderObserver or BlocObserver sends every state change as an event; Extending DevPul has both, plus a plugin that puts them in a State tab. With GetX or anything else, call Devpul.emit where state changes.

Can I trigger things in the app from DevPul?

Section titled “Can I trigger things in the app from DevPul?”

Yes. Register actions with Devpul.action and they show in the Actions menu. Plugins call handlers the app registers with Devpul.handle; those that change the app wait for Allow writes in the Plugins tab.