24 min read

Set Up LiveDebugger with Igniter and Localtonet

Install LiveDebugger with Igniter, verify its local Phoenix endpoint, and securely access the development interface through a Localtonet HTTP tunnel.

Igniter adds LiveDebugger to a local Phoenix app that is reached remotely through a Localtonet tunnel.
Igniter configures LiveDebugger in Phoenix, while Localtonet provides a path from a remote browser to the local development endpoint.
Developer Tools and LiveView Debugging · LiveDebugger · Localtonet · 2026

Debug Phoenix LiveView locally, then reach the development interface from a remote browser

LiveDebugger provides a browser-based view into Phoenix LiveView component trees, assigns, callback execution, state transitions, and rendered elements. This guide installs it with the project’s documented Igniter command, checks the generated development-only integration, starts the existing Phoenix application, and verifies the debugger at its default local endpoint. Once the local interface works, we explain how to expose that endpoint through a Localtonet HTTP tunnel without configuring inbound router port forwarding, changing firewall rules, setting up a VPN, or requiring a public IP address. Because LiveDebugger is explicitly a development tool, the workflow also emphasizes restricted use, short-lived tunnels, and careful handling of debugger data.

🔒 Development-only dependency and controlled exposure 🌐 Local HTTP endpoint through a Localtonet tunnel ⚡ Igniter-assisted installation for Phoenix projects

How LiveDebugger, Igniter, Phoenix, and Localtonet fit together

LiveDebugger is an embedded development tool for applications built with Phoenix LiveView. It is not a separate replacement for the Phoenix application and the browser extension alone is not sufficient. The main LiveDebugger dependency must be installed in the Mix project, and the application must be running for the debugger endpoint to be available.

The tool is designed to help developers examine what is happening inside a LiveView application. Its documented capabilities include viewing the LiveView and LiveComponent tree, inspecting assigns in real time, tracing and filtering callback execution, observing state transitions, and selecting rendered elements to identify the component that produced them. These capabilities can reveal application structure and runtime state, which is useful during development but also explains why the interface should not be exposed casually.

Igniter is the installation path emphasized in this guide. LiveDebugger’s documented Igniter integration uses one command to add the dependency and modify the application’s root layout. A manual installation is also documented and is covered later as a fallback or review reference.

After the Phoenix application starts successfully, LiveDebugger uses http://localhost:4007 by default. That address is local to the machine or execution environment hosting the application. When the browser is on another computer, localhost refers to that other computer, not to the Phoenix host. A remote browser therefore cannot reach the endpoint merely by typing the local URL.

With Localtonet, the client running on a device that can reach the debugger establishes an outbound connection to one of our relay servers. An HTTP tunnel then provides a public HTTPS address that forwards requests to the selected local IP address and port. No inbound router port forwarding, public IP address, VPN setup, or inbound firewall change is required for this tunnel model. The tunnel remains available only while the selected Localtonet client is connected and the tunnel is running.

🌳 Component structure Explore the LiveView and LiveComponent hierarchy to understand how the interface is assembled and where a problem may originate.
🔍 Runtime assigns Inspect the current data associated with a LiveView or LiveComponent and watch how application state changes during interaction.
🔗 Callback tracing Trace lifecycle callbacks, filter the recorded activity, and focus on the events relevant to the behavior under investigation.
🔦 Element inspection Select interface elements to identify which component rendered them and relate the browser output to the component structure.
⚙️ Igniter-assisted setup The documented Igniter command adds LiveDebugger to the project and modifies the root layout needed for the browser integration.
🌐 Optional remote access Once local verification succeeds, a Localtonet HTTP tunnel can forward the debugger endpoint to an assigned public HTTPS address.
LiveDebugger is not intended for production

The project maintainers explicitly warn against production use and require the dependency to be development-only. Do not treat a Localtonet tunnel as a reason to install the debugger in a production release. This guide assumes a controlled development environment, a development-only dependency, and temporary remote access for an authorized developer.

Prerequisites and environment checks

Begin with an existing Phoenix LiveView application that you are authorized to modify and debug. The application should already have a working local development procedure. LiveDebugger’s installation documentation supplies the dependency, root-layout integration, and debugger endpoint, but it does not define a universal Phoenix startup command for every host project. Applications may have their own environment preparation, database, asset, service, or secret requirements, so retain the startup procedure already established by your project.

The Igniter path also assumes that Igniter is available to the project in a form that supports the documented mix igniter.install task. The supplied LiveDebugger evidence does not establish a universal Igniter installation command, an exact supported Igniter version, or a supported Elixir, Erlang, Phoenix, or Phoenix LiveView version matrix. We therefore do not guess those details. If the Mix task is unavailable, use the project’s documented dependency-management process to add Igniter, or use the manual LiveDebugger installation shown in this guide.

Project-side checklist

  • An existing Phoenix application that uses Phoenix LiveView.
  • A local development environment capable of running the application successfully.
  • Mix available in the shell where the project is managed.
  • Permission to change mix.exs and the application root layout.
  • Igniter available if you intend to use the primary installation method.
  • A clean or committed working tree so the generated changes are easy to inspect.
  • A browser on the development machine for local verification.

Localtonet-side checklist

  • A Localtonet account and access to the current dashboard.
  • The Localtonet client installed on the Phoenix host, or on another device that can reach the LiveDebugger endpoint.
  • A device-specific authentication token selected without exposing it in source code, screenshots, logs, or this article’s commands.
  • An available relay server or region selected from the current dashboard rather than copied from an old guide.
  • An HTTP tunnel configuration targeting the local debugger address and default port 4007, provided that your application has not changed that default.
Keep the first test entirely local

Do not create the public tunnel before the debugger works on its local URL. Local verification separates application installation problems from tunnel configuration problems. If http://localhost:4007 does not work on the host, forwarding that same endpoint will not repair the underlying Phoenix or LiveDebugger setup.

Install LiveDebugger with Igniter

Igniter transforms a Phoenix project into one configured with LiveDebugger.
The Igniter task applies the LiveDebugger installation changes to the Phoenix project.

Run the installation from the root directory of the Phoenix project, where its mix.exs file is located. Before changing the project, commit or otherwise preserve the current state. Igniter is expected to modify project files, and having a known baseline makes the result easier to review or revert.

1

Open the existing Phoenix project

Use a terminal in the application’s project root. Confirm that this is the intended development project and that its normal dependencies and local services are in a state where the application can be started after installation.

2

Run the documented Igniter installer

Execute the LiveDebugger Igniter command exactly as documented. It is intended to add the LiveDebugger dependency and modify the application root layout automatically.

3

Review the generated changes

Inspect the resulting project diff. Verify that LiveDebugger is development-only and that the root layout contains the documented LiveDebugger tags expression in its <head>. Resolve any reported conflict rather than assuming a partially applied transformation is complete.

4

Use the project’s normal dependency and startup workflow

Follow the existing application procedure for dependency retrieval, environment setup, database preparation, assets, and server startup. The exact sequence is application-specific and is not established by the LiveDebugger installation evidence, so this guide does not invent a universal command.

The documented installer command is:

mix igniter.install live_debugger

After it completes, inspect mix.exs. The resulting dependency should preserve the project’s development-only requirement. The documented manual form is shown below so that you have a concrete comparison point:

defp deps do
  [
    {:live_debugger, "~> 1.0.0", only: :dev}
  ]
end

Also inspect the application root layout. In the default path shown by LiveDebugger’s documentation, that file is lib/my_app_web/components/layouts/root.html.heex. The my_app_web segment is an example namespace, so your project’s actual path will normally reflect its application module. Do not create an unrelated duplicate layout merely because the example path differs from your project.

The root layout integration should place this expression inside the document’s <head>:

<head>
  <%= Application.get_env(:live_debugger, :live_debugger_tags) %>
</head>

This expression attaches the LiveDebugger meta tag and scripts in the development environment, enabling the browser-side features. If the Igniter command reports that it cannot identify or modify the layout, review the actual root-layout structure and apply the documented expression manually. Do not leave an unreviewed partial change in place.

Do not remove the development-only restriction

The dependency declaration must retain only: :dev. Moving LiveDebugger into general dependencies, enabling it in a production release, or exposing a production application’s internal state contradicts the project’s stated usage warning. Treat this as a hard environment boundary, not merely an optimization.

Manual installation alternative

The manual method is useful when Igniter is not available, when its transformation cannot match a customized project layout, or when you prefer to apply each change yourself. It performs the same two documented integration tasks: adding the development-only dependency and inserting the LiveDebugger tags expression into the application root layout.

1

Add the Mix dependency

Add {:live_debugger, "~> 1.0.0", only: :dev} to the list returned by the project’s existing deps/0 function. Preserve the surrounding dependencies and valid Elixir syntax.

2

Insert the root-layout expression

Find the root HEEx layout used by the Phoenix application and add <%= Application.get_env(:live_debugger, :live_debugger_tags) %> inside its <head>. The documented example path is lib/my_app_web/components/layouts/root.html.heex, but use your application’s real namespace and layout.

3

Start the application in development

Retrieve dependencies and start the Phoenix application according to the project’s established development instructions. Confirm that the process starts without compilation, configuration, or template errors before testing LiveDebugger.

Installation path What it changes When to use it
Igniter installation Adds the dependency and modifies the root layout through the documented Igniter task. Use when Igniter is available and the project structure can be transformed successfully.
Manual Mix dependency Adds live_debugger to mix.exs with only: :dev. Use when you need direct control over dependency changes or Igniter is unavailable.
Manual layout integration Adds the LiveDebugger tags expression to the root layout’s <head>. Use when a customized layout prevents automatic modification or when reviewing a partial Igniter result.

The two installation paths are alternatives, not cumulative requirements. If Igniter correctly made both changes, do not add a duplicate dependency or duplicate tags expression. Review the generated diff first and apply only what is missing.

Start the Phoenix application and verify LiveDebugger locally

A running Phoenix server and browser confirm that LiveDebugger is reachable on localhost.
Verify the Phoenix application and LiveDebugger locally before creating the external tunnel.

Installation is complete only after the host application starts and the debugger endpoint responds. LiveDebugger’s documented default address is http://localhost:4007. The endpoint appears after the Phoenix application starts, so an inactive or failed application process will leave nothing for Localtonet to forward.

1

Start the application in its development environment

Use the startup procedure already defined by the Phoenix project. Keep the process running and watch its output for dependency, compilation, template, configuration, database, or port errors.

2

Open the default debugger endpoint on the host

From a browser on the same machine or within the same effective network environment as the application, open http://localhost:4007. If the project has explicitly customized LiveDebugger’s configuration, verify the configured endpoint instead of assuming the default.

3

Exercise the Phoenix LiveView application

Open the application being debugged and interact with a relevant LiveView. Use LiveDebugger to check that the component tree, assigns, callback activity, or element inspection behavior is populated as expected.

4

Resolve local problems before tunneling

If the endpoint does not open or lacks expected data, return to the dependency, environment, root-layout, and application logs. Create the Localtonet tunnel only after the local interface is consistently reachable.

What successful verification looks like

A successful check has three parts. First, the Phoenix application remains running without a fatal startup error. Second, the browser can open the LiveDebugger interface at the local endpoint. Third, interaction with a LiveView produces useful debugging information, such as its component structure or assigns. Merely finding that port 4007 accepts a connection is not as complete as confirming that the interface is functional.

Optional browser extension

LiveDebugger also provides optional Chrome and Firefox DevTools extensions. These allow developers to interact with LiveDebugger features alongside the application runtime. The extension does not replace the Mix dependency, root-layout integration, running Phoenix application, or debugger endpoint. Install it only as an optional workflow enhancement after the main integration is working.

Loopback addresses depend on where the process runs

localhost always refers to the current network environment. If Phoenix runs inside a container, virtual machine, or another isolated environment, opening localhost:4007 on the physical host may not reach it automatically. The supplied project evidence does not define container mappings or alternate bind settings, so use the networking arrangement established by your application and confirm reachability from the device that will run the Localtonet client.

Expose the verified debugger with a Localtonet HTTP tunnel

A remote browser reaches the local Phoenix LiveDebugger endpoint through a Localtonet HTTP tunnel.
The HTTP tunnel routes remote requests through Localtonet to the verified localhost endpoint on the development machine.

LiveDebugger presents a browser-based HTTP endpoint, so the appropriate Localtonet family for this workflow is an HTTP tunnel. The tunnel should point to the same local address and port that you just verified. For the documented default on a Localtonet client running in the same environment, that target is localhost on port 4007.

If the Localtonet client runs on another device, localhost would refer to that client device instead of the Phoenix host. In that arrangement, use a local IP address reachable from the client device and verify that route before creating the tunnel. Do not make the debugger listen broadly merely as a shortcut without considering the resulting local-network exposure.

1

Install and run the Localtonet client

Install our client for the operating system on the device that can reach LiveDebugger. Current installation details can vary by operating system and client release, so use the current Localtonet application or download workflow rather than copying an unverified command. Keep the client running for the duration of remote access.

2

Authenticate or select the client device

Use the device-specific authentication token associated with the client. Treat the token as a secret. Do not paste it into project files, shell history intended for sharing, issue reports, screenshots, or public documentation.

3

Select an available relay server

Choose a currently available server or region from the Localtonet dashboard. Available values can vary, so this guide does not hardcode a server code or claim that every location is available on every plan.

4

Create the HTTP tunnel configuration

Select an HTTP tunnel and enter the verified local target. Use the local IP address that is reachable from the client and port 4007 when LiveDebugger is using its documented default. HTTP tunnels can use Random Sub Domain, Custom Sub Domain, or Custom Domain process types, and each serves the content at a public HTTPS address. Use only the choices currently available to your account.

5

Start the tunnel

Creating a tunnel does not start it. Use the Start button and wait for the selected device and tunnel to be connected. The assigned public URL is usable only while the client remains connected and the tunnel remains running.

6

Test the assigned HTTPS URL

Open the assigned public address from the intended remote browser. Confirm that it reaches the same LiveDebugger interface tested locally, then exercise a non-sensitive development scenario to verify that the debugger and target LiveView remain functional.

7

Stop remote access when finished

Stop the tunnel after the debugging session. Delete it if it is no longer needed. Also stop LiveDebugger by shutting down the development application when the environment is not in use.

The Localtonet client makes an outbound connection to our relay, and the public address forwards traffic to the selected local service. This avoids inbound router configuration, but it does not change the sensitivity of the application being published. Anyone who can reach an insufficiently protected debugger URL may be able to observe development state exposed by the tool.

For the current dashboard sequence and field names, consult our Localtonet HTTP tunnel documentation . Use the live dashboard for current server choices and account-specific options rather than relying on screenshots or values from older tutorials.

Layer Address or role Verification question
Phoenix application The existing development application containing LiveView Does the application start successfully using its normal development workflow?
LiveDebugger http://localhost:4007 by default Can a browser in the host environment open the debugger and inspect an active LiveView?
Localtonet client Device that can reach the local debugger endpoint Can the selected client device reach the same local IP address and port?
Localtonet HTTP tunnel Assigned public HTTPS URL Is the tunnel started, and does its URL display the verified debugger interface?

Security practices for remote LiveView debugging

A debugger is more sensitive than a normal public landing page. LiveDebugger can expose component structure, assigns, callback behavior, state transitions, and relationships between rendered elements and application components. Depending on the application and test data, those views may include personal information, tokens, internal identifiers, business state, or implementation details. The safest workflow is to minimize what is exposed, who can reach it, and how long it remains available.

Use a dedicated development environment

Keep the dependency restricted to :dev and run it only against a development instance. Do not point a development debugger at production data merely because the application process itself is local. Prefer synthetic or sanitized records that reproduce the issue without revealing customer information.

Use the narrowest practical access window

Start the tunnel only when the remote debugging session begins and stop it immediately afterward. A tunnel that is configured but stopped is not the same as an active public endpoint. Remember that creating the tunnel does not start it, and that deleting an obsolete tunnel removes accidental reuse from the workflow.

Do not publish credentials or device tokens

The Localtonet authentication token identifies the client device. It must not be embedded in the Phoenix repository, committed to version control, placed in examples, or shared with a collaborator as a substitute for access control. Likewise, remove sensitive values from screenshots, screen recordings, issue reports, and debugger demonstrations.

Apply available access controls

Use appropriate authentication, least-privilege access, IP restrictions, or other controls available for your current setup. Exact options can vary by configuration, plan, and product version, so confirm them in the current dashboard before depending on a specific control. A hard-to-guess URL alone should not be treated as authorization.

Review what the debugger displays

Before sharing remote access, inspect representative LiveViews locally. Look at assigns and callback data from the perspective of someone who should not know the application internals. If the debugger reveals secrets or unnecessary personal data, correct the development data and application behavior before opening the tunnel.

A public tunnel is real internet exposure

Outbound tunnel establishment removes the need for inbound router changes, but it does not make the resulting public URL private. Restrict access where supported, share the URL only with authorized participants, avoid production or sensitive data, monitor the active session, and stop the tunnel as soon as the work is complete.

Routine operation and troubleshooting

A practical session routine

  1. Start the Phoenix application in development mode.
  2. Open http://localhost:4007 and confirm that LiveDebugger works locally.
  3. Start the Localtonet client on the device that can reach that endpoint.
  4. Start the existing HTTP tunnel.
  5. Open the assigned HTTPS URL from the remote browser.
  6. Perform the debugging task with sanitized development data.
  7. Stop the tunnel, then shut down the development application when finished.

The Igniter task is unavailable

Confirm that the terminal is in the correct Mix project and that Igniter is available to that project. The LiveDebugger evidence documents the installer command but does not establish one universal Igniter bootstrap command or version requirement. If the task cannot be made available using your project’s supported process, apply the documented manual dependency and root-layout changes instead.

The project no longer compiles after installation

Inspect the generated diff and the first relevant compiler error. Check for malformed list syntax in deps/0, a duplicate dependency, an expression inserted outside the root layout’s <head>, or an unresolved Igniter conflict. Restore the clean project state if necessary, then apply the two documented changes carefully.

The Phoenix application starts, but port 4007 does not respond

Verify that the application is actually running in the development environment and that the LiveDebugger dependency is present there. Recheck the root-layout expression and application logs. If the project intentionally customized LiveDebugger configuration, the endpoint may differ from the documented default. This article does not guess optional configuration keys or alternate defaults that were not established by the supplied evidence.

The interface opens, but expected browser features are absent

Confirm that the LiveDebugger tags expression is inside the root layout’s <head> and that the browser is rendering that root layout. The expression attaches the meta tag and scripts needed for the full browser experience. Also remember that a DevTools extension is optional and cannot replace the installed dependency.

Local access works, but the public URL does not

Check each layer in order. Confirm that the Localtonet client is connected, the correct device token is selected, the tunnel is started, and the local target uses the correct address and port. If the client runs in another container, virtual machine, or physical device, localhost:4007 may point to the wrong environment. Test reachability from the client’s location rather than only from your own browser.

The public URL reaches the wrong service

Recheck the tunnel’s local IP address and port. Port 4007 is LiveDebugger’s documented default, but another local process or project-specific configuration can change what is actually reachable. Stop the tunnel while correcting the target so that the unintended service is not left publicly accessible.

The tunnel was created but remains unavailable

Creation and execution are separate lifecycle states. Use the Start button after configuring the tunnel. The selected Localtonet client must also remain connected. If either the client disconnects or the tunnel stops, the public endpoint will not remain available.

A collaborator sees stale or incomplete state

First confirm that both browsers are looking at the intended development application and debugger instance. Reproduce the relevant interaction in the LiveView application, then inspect the component tree, assigns, and filtered callbacks again. If the application itself uses project-specific caches, background jobs, or external services, troubleshoot those according to the host project’s operation procedures.

Diagnose from the inside out

Test the Phoenix application first, then the local LiveDebugger endpoint, then reachability from the Localtonet client device, and finally the public URL. This order prevents a local application failure from being misdiagnosed as a relay or tunnel problem.

Frequently asked questions

What command installs LiveDebugger with Igniter?

From the Phoenix project root, the documented command is mix igniter.install live_debugger. It is intended to add the LiveDebugger dependency and modify the application root layout automatically. Review the resulting diff and confirm that the dependency remains restricted to the development environment.

What is the default LiveDebugger URL?

After the Phoenix application starts, LiveDebugger runs by default at http://localhost:4007. Verify that URL locally before configuring remote access. If the project has deliberately customized its LiveDebugger configuration, use the configured endpoint instead.

Can I use LiveDebugger in production?

No. Its maintainers explicitly state that LiveDebugger should not be used in production. The dependency must be development-only through only: :dev. A Localtonet tunnel does not change that restriction.

Which Localtonet tunnel type should I use for LiveDebugger?

Use an HTTP tunnel because LiveDebugger provides a browser-based HTTP endpoint. Point it to the local IP address reachable from the Localtonet client and to port 4007 when the documented default is in use.

Does the Localtonet client have to run on the Phoenix host?

Not necessarily. It must run on a device that can reach the debugger endpoint. Running it in the same environment makes localhost:4007 the straightforward target. If it runs elsewhere, configure a reachable local IP address and verify connectivity from that client device before starting the tunnel.

Is the LiveDebugger browser extension enough by itself?

No. The main LiveDebugger dependency must be installed in the Mix project. The optional Chrome or Firefox extension enhances the DevTools workflow, but it does not replace the dependency, root-layout integration, running Phoenix application, or debugger endpoint.

Does creating a Localtonet tunnel make it immediately available?

No. Creating and starting are separate lifecycle actions. After configuration, use the Start button. The tunnel remains available only while the selected client is connected and the tunnel is running.

Do I need router port forwarding or a public IP address?

No. The Localtonet client establishes an outbound connection to our relay server, so this workflow does not require inbound router port forwarding, a public IP address, firewall changes, or VPN setup. You still need to protect the resulting public endpoint and comply with the policies governing the development environment.

Open your verified LiveDebugger endpoint with Localtonet

Install LiveDebugger as a development-only dependency, confirm the interface locally at port 4007, then create a temporary Localtonet HTTP tunnel for authorized remote debugging. Stop the tunnel as soon as the session is complete.

Get Started Free →

Localtonet is a secure multi-protocol tunneling and proxy platform designed to expose localhost, devices, private services, and AI agents to the public internet supporting HTTP/HTTPS tunnels, TCP/UDP forwarding, mobile proxy infrastructure, file server publishing, latency-optimized game connectivity, and developer-ready AI agent endpoint exposure from a single unified control plane.

support