Command line
dart pub global activate devpul_cliThis installs the devpul command from devpul_cli. It runs from the pub cache, where it finds the UI build in the devpul package; a dart compile exe binary cannot. devpul --help prints the summary below; -h and --help work after any command too.
devpul [options] [vm-service-url]devpul [options] run [flutter run or dart run arguments]devpul mcp [--port <n>] [vm-service-url]devpul add <plugin>[@version|#ref] [--path <dir>] [--yes]devpul remove <id>devpul listdevpul sync [--check]devpul outdated [--exit-code]devpul upgrade [id] [--major-versions] [--yes]devpul updatedevpul cache cleandevpul create <dir> [--js] [--dart]devpul check [dir]devpul
Section titled “devpul”devpul # serve the UI and open itdevpul http://127.0.0.1:41234/AbCdEf12=/ # open it connected to a running appServes the UI on http://127.0.0.1:7171 until stopped with Ctrl+C. With a VM service URL, the UI opens connected to that app.
| Option | |
|---|---|
--port <n> |
The UI port, 7171 by default. Settings and history are kept per port, since each is its own browser origin. Without it, a port taken by another program moves to the next free one, up to 7190. |
--no-open |
Print links and open no browser. |
--plugin <path> |
Serve a plugin module file or plugin folder to the UI, loaded again on each save. Repeat it for several. See Writing plugins. |
-h, --help |
Print usage. |
A devpul that finds another devpul on its port hands its app to that one's tab and serves nothing itself, so one tab follows every app you start. --plugin needs its own server: stop the other one or pass --port.
The server listens on 127.0.0.1 only and answers only requests whose Host is a loopback name. A later devpul hands over its app with a token from the user cache directory, which only your user can read.
devpul run
Section titled “devpul run”devpul run -d macos # flutter run with these argumentsdevpul run --profile -d macos # a profile build with DevPul kept indevpul run bin/server.dart # dart run outside a Flutter projectdevpul --port 7272 run -d linux # options before runRuns flutter run with the arguments after run, in a folder whose pubspec.yaml depends on the Flutter SDK, and dart run anywhere else. Once the app is up, DevPul opens connected to it, and the app's printed link points at this server. devpul's own options go before run; everything after it goes to the tool.
flutter runkeeps its terminal keys (r,R,q), and DevPul gets Reload and Restart buttons.--profileadds--dart-define=DEVPUL_PROFILE=true; see profile builds.dart rungets a VM service on a free port and hot reloads each time a.dartfile in the folder is saved.- devpul exits with the tool's exit code.
devpul mcp
Section titled “devpul mcp”devpul mcp # the app the devpul on 7171 last connected todevpul mcp http://127.0.0.1:41234/AbCdEf12=/ # this appAn MCP server on stdio for coding agents: requests, logs, errors, events and the app's actions. Without a URL it asks the devpul serving the UI on --port (7171 by default) for its app on every tool call. See Agents (MCP).
Plugins
Section titled “Plugins”Run in the app root, the folder with pubspec.yaml. Installing plugins walks through them.
devpul add riverpod # listed on the plugins pagedevpul add dio # a pub package listed theredevpul add cart@^1.2.0 # a pub version constraintdevpul add https://example.com/plugins.git --path cart # a git repositorydevpul add https://example.com/plugins.git#main --path cartdevpul add https://example.com/flags/plugin.json # a plugin.json over httpsdevpul add ../plugins/cart # a folderCopies a plugin into lib/devpul/<id>/, records it in devpul.lock and writes lib/devpul/plugins.dart. @version takes a pub version constraint, #ref a git branch, tag or commit. A name the plugins page lists as a pub package, such as dio or http, runs dart pub add or flutter pub add for that package, and for devpul when the app lacks it, then prints the wiring.
| Option | |
|---|---|
--path <dir> |
The plugin folder in a git repository, when it is not the root. |
--yes |
Run the dart pub add or flutter pub add a plugin needs without asking. |
remove
Section titled “remove”devpul remove <id> deletes the plugin's folder and lock entry and writes plugins.dart again.
devpul list prints each plugin in devpul.lock with its version and source, and marks copies with local edits.
devpul sync writes lib/devpul/plugins.dart from devpul.lock, offline, and copies plugins added from a folder again when the folder changed.
| Option | |
|---|---|
--check |
Write nothing; exit 1 when plugins.dart or a folder copy is stale. |
outdated
Section titled “outdated”devpul outdated lists each plugin's current version, the newest its constraint allows and the latest, and devpul_cli against pub.dev. A source it cannot reach prints why and does not fail the command.
| Option | |
|---|---|
--exit-code |
Exit 1 when anything is behind. |
upgrade
Section titled “upgrade”devpul upgrade [id] moves one plugin, or all, to the newest version the constraint allows, then writes plugins.dart. It shows a git diff of the copied files and asks first; without a terminal and without --yes it prints the diff and writes nothing. Refs move to their current commit, folders and plugin.json URLs to their current contents.
| Option | |
|---|---|
--major-versions |
Take the latest version, rewriting the constraint when it does not allow it. |
--yes |
Write without the diff and run the pub add a plugin needs. |
update
Section titled “update”devpul update updates devpul itself: dart pub global activate devpul_cli with the SDK that runs it.
cache clean
Section titled “cache clean”devpul cache clean deletes the git mirrors of plugin repositories.
Plugin authoring
Section titled “Plugin authoring”create
Section titled “create”devpul create my_plugin # JS module, Dart and an example appdevpul create --dart my_plugin # add the Dart half to an existing folderWrites a plugin folder named after the plugin id, or the files missing from one. A new plugin gets both halves unless one is picked; an existing one gets the picked half added. See Writing plugins.
| Option | |
|---|---|
--js |
A JS module for a tab. |
--dart |
Dart for the app, such as an observer. |
devpul check [dir] validates a plugin folder, the current one by default, the way add and the registry do, and exits 1 on any problem.
Exit codes
Section titled “Exit codes”| Code | When |
|---|---|
| 0 | Done. |
| 1 | A command failed, a check found problems, or --exit-code found updates. |
| 64 | Wrong arguments; the usage follows the message. |
devpul run exits with the code of flutter run or dart run.
| Path | |
|---|---|
~/.cache/devpul on Linux, ~/Library/Caches/devpul on macOS, %LOCALAPPDATA%\devpul on Windows |
The port and token of each serving devpul, and git mirrors of plugin repositories. $XDG_CACHE_HOME moves it on Linux. |
Git plugins and the upgrade diff need git on PATH.