Skip to main content
Remote debugging is the fastest way to iterate on a plugin. You run the plugin process on your laptop, and Dify treats it as if it were installed in the workspace. Save your edits and restart the process, and the changes take effect immediately.

Prerequisites

  • A Dify workspace where you can access Plugins in the top-right corner.
  • A scaffolded plugin project (see CLI if you haven’t created one yet).
  • Python 3.12 and the plugin’s dependencies installed (pip install -r requirements.txt).

Step 1: Get the Debug URL and Key

Open the Plugins page in Dify and click the debug icon (the small bug icon next to Install Plugin). A dialog shows the remote install host:port and an API key.
Remote Debugging Plugin
The host is something like debug-plugin.dify.dev:5003. The key is unique to your workspace; anyone with the key can attach a plugin, so do not share it.

Step 2: Configure the Plugin’s .env

In your plugin project, copy .env.example to .env and fill in the values:
INSTALL_METHOD=remote
REMOTE_INSTALL_URL=debug-plugin.dify.dev:5003
REMOTE_INSTALL_KEY=********-****-****-****-************
REMOTE_INSTALL_URL is the combined host:port from Step 1, not two separate variables.

Step 3: Run the Plugin

From the plugin project directory:
pip install -r requirements.txt
python -m main
The process stays in the foreground and logs incoming invocations. Edit your code and restart the process to apply changes.

Step 4: Verify the Install

Go back to the Dify Plugins page. The plugin appears in the list, labeled with a debug marker. Other members of the workspace can also see and use it.
Plugin Installed to Workspace
The plugin tile shows a debug indicator and your local terminal logs the first registration handshake. You’re attached.
Trigger the plugin as you would any other: call it from a workflow node, run it as a tool inside an Agent, or hit an endpoint URL. Invocations land on your local process and you can attach a debugger.

Troubleshooting

The daemon is not listening on the address you put in REMOTE_INSTALL_URL. On self-hosted setups, confirm the daemon container has PLUGIN_REMOTE_INSTALLING_ENABLED=true and that port 5003 is exposed. On cloud, double-check you copied the host:port exactly as shown in the debug dialog.
The most common cause is a stale or wrong REMOTE_INSTALL_KEY. Regenerate the key from the debug dialog and rerun python -m main. Also confirm the daemon log shows the incoming registration.
The author field in manifest.yaml or in provider/*.yaml doesn’t match a value the daemon accepts. Set it to your GitHub handle, then restart.
The plugin process needs to restart after every edit; there’s no hot reload. Stop with Ctrl+C and rerun python -m main.

Edit this page | Report an issue