27 min read

Install Kelvin for Philips Hue and Access It Remotely

Install Kelvin with Docker, connect your Hue bridge, configure lighting schedules, verify the web interface, and enable HTTP access with Localtonet.

Kelvin running in Docker connects a Hue Bridge to local and remote browsers.
Kelvin manages the Hue Bridge locally, while a Localtonet HTTP tunnel provides remote browser access.
Home Automation Β· Kelvin Β· Philips Hue Β· Localtonet Β· 2026

Run adaptive Hue lighting automation at home, then manage the working web interface from outside your network

Kelvin is a self-hosted automation service that adjusts supported Philips Hue lights according to sunrise, sunset, and room-specific daily schedules. In this guide, we install Kelvin with its official Docker image, pair it with a configured Hue bridge, find the generated web-interface password, verify the service locally, and preserve its configuration. Once the local deployment works, we show how to create a Localtonet HTTP tunnel for remote browser access without inbound router port forwarding, firewall changes, VPN setup, or a public IP address.

πŸ”’ Verify local authentication before public access 🌐 Docker publishes the Kelvin interface on port 8080 ⚑ Localtonet provides an HTTPS public address

What Kelvin does for Philips Hue lighting

Kelvin is a small, self-contained home-automation service for supported Philips Hue and compatible lights. Its main purpose is to vary color temperature and brightness throughout the day. Instead of applying one static light setting, Kelvin can use local sunrise and sunset times together with custom intervals that you define.

A typical schedule might use a cooler but moderate setting early in the morning, move toward a daylight-oriented temperature around sunrise, transition to warmer light after sunset, and reduce brightness at night. Those examples describe the intended pattern rather than mandatory values. The exact timing, brightness, and temperature choices remain yours.

Kelvin supports fine-grained daily schedules for individual rooms. It can define a default startup color and brightness, apply gradual transitions, work with smart switches and conventional switches, and activate through a Hue scene or automatically when a light is switched on. It also respects a manual light adjustment until that light is switched off and on again. This behavior lets an intentional temporary change take precedence without permanently replacing the configured schedule.

πŸŒ… Sunrise and sunset awareness Kelvin can adjust light temperature and brightness according to local sunrise and sunset times, supplemented by custom intervals.
🏠 Room-specific schedules Daily lighting behavior can be defined at room level rather than forcing every light in the home to use one schedule.
πŸ’‘ Gradual transitions Lighting changes are designed to transition gradually instead of producing unnecessarily abrupt shifts.
πŸ–οΈ Manual changes respected A manual adjustment remains in effect until the affected light is turned off and on again.
🎬 Scene or automatic activation Kelvin can be activated through a Hue scene or apply its behavior automatically when a managed light is switched on.
πŸ–₯️ Browser management The documented Docker deployment publishes a password-protected management interface on port 8080.

Kelvin runs on a computer within the same local environment as the Hue bridge. That machine needs to remain on whenever Kelvin should manage the lights. A small always-on system can be suitable, but its operating system and processor must be compatible with either Docker or an available Kelvin release binary.

Project maintenance should be evaluated before deployment

The available evidence identifies release v1.3.9 and a changelog that mentions a container-monitoring health endpoint and support for HEAD requests on the root path. It does not provide enough date information to make a reliable claim about the project's present maintenance cadence. Review the release history and test the software with your Hue environment before treating it as a long-term household dependency.

Prerequisites and deployment decisions

Prepare the local Hue environment before starting the container. Kelvin's documented prerequisites are supported Philips Hue or compatible lights, a configured Philips Hue bridge, and a permanently running computer connected to the network. The bridge should already be operational through its normal local setup before Kelvin attempts discovery and registration.

Hardware and local network requirements

  • A configured Philips Hue bridge that is reachable on the local network.
  • Supported Hue or compatible lights associated with that bridge.
  • A computer that can remain running while lighting automation is needed.
  • Docker installed and functioning if you follow the primary installation path in this guide.
  • Access to the physical Hue bridge because initial registration requires pressing its blue button.
  • A browser on the local network for opening the Kelvin interface.

Docker must be able to pull an image and publish a host port. Confirm Docker itself is working before diagnosing Kelvin. A basic Docker installation check is:

docker version

If that command cannot communicate with the Docker engine, resolve the Docker installation or permissions issue first. Kelvin cannot start until the engine is available.

Choose an appropriate timezone

The documented Docker command passes a timezone through the TZ environment variable. The example uses Europe/Berlin, but you should replace it with the timezone appropriate for the installation location. Correct local time matters because Kelvin's purpose includes time-dependent lighting transitions and local sunrise and sunset behavior.

Do not copy the example timezone merely because it makes the command run. Select the correct timezone identifier for the host location. The Kelvin documentation excerpt supplied for this guide does not enumerate valid timezone values, so this article does not attempt to provide a complete list.

Decide where configuration will persist

Kelvin stores its configuration under /etc/opt/kelvin/ in the container. A container created without persistent storage can run successfully, but its configuration is tied to that container's lifetime. Removing and recreating the container may therefore discard configuration held only inside it.

For a durable installation, map /etc/opt/kelvin/ to a directory on the Docker host. Select a host directory that is included in your normal backup process and protected from unauthorized local access. The directory can contain Kelvin configuration, including the password field described by the project documentation.

Protect the generated password and configuration directory

Kelvin generates its web-interface password on first startup and records it in the startup log and the password field of config.json. Anyone with access to those locations may be able to obtain that password. Restrict access to Docker logs, the mapped configuration directory, host backups, and administrative shell accounts.

Binary installation versus Docker

Kelvin also supports a standalone release-binary workflow. The project instructs users to download the latest archive from its Releases page, extract it, and launch kelvin.exe by double-clicking on Windows or run ./kelvin from a terminal on macOS, Linux, and other Unix-like systems. On first start, Kelvin generates default configuration, discovers a Hue bridge, and begins registration.

This guide uses Docker for the remote-access workflow because the project explicitly documents the Docker web interface as http://{DOCKER_HOST_IP}:8080/. The supplied project evidence does not explicitly establish the browser endpoint for every standalone binary installation. We therefore do not assume that the Docker port and endpoint automatically apply to every binary deployment.

Installation path Documented startup method Remote-access suitability in this guide
Docker image Pull stefanwichmann/kelvin and publish port 8080 Recommended here because the web endpoint and port are explicitly documented
Windows binary Extract the release archive and double-click kelvin.exe Useful for local installation, but this evidence does not explicitly identify its web endpoint
macOS, Linux, or Unix-like binary Extract the archive and run ./kelvin in a terminal Useful for local installation, but do not infer a tunnel target without verifying the actual listener

Install Kelvin with Docker

The official Docker workflow is short: pull the image, start a detached container with the local timezone and port mapping, check that Docker reports it as running, and inspect the logs. Complete the steps in that order so that any image, startup, or bridge-registration error remains easy to identify.

1

Pull the official Kelvin image

Download the image identified by the Kelvin project. This command does not start the service.

docker pull stefanwichmann/kelvin
2

Start the container with the correct timezone

Replace Europe/Berlin with the timezone for the home where the lights are installed. The documented command publishes container port 8080 on host port 8080 and runs the container in detached mode.

docker run -d -e TZ=Europe/Berlin -p 8080:8080 stefanwichmann/kelvin
3

Confirm that Docker reports the container as running

List running containers and locate the entry created from stefanwichmann/kelvin. Record its container ID for subsequent log and restart commands.

docker ps
4

Inspect the startup output

Substitute the ID shown by docker ps. The log is important during initial setup because it reports bridge discovery and registration, lists detected devices after successful pairing, and contains the generated web-interface password.

docker logs {CONTAINER_ID}
5

Open the documented web interface

After bridge registration succeeds and the service is running, browse to http://{DOCKER_HOST_IP}:8080/. Use an address that reaches the Docker host from your current device.

The command above follows the project's documented first-run example. For a long-lived deployment, recreate the container with a Docker bind mount or volume that maps your selected host storage to /etc/opt/kelvin/. Because host paths, ownership, and Docker management tools differ across operating systems, verify the chosen host directory and its permissions rather than copying an arbitrary path.

A generic bind-mount form looks like the following. Replace the timezone and the placeholder host path before running it:

docker run -d \
  -e TZ=Europe/Berlin \
  -p 8080:8080 \
  -v /absolute/host/path:/etc/opt/kelvin/ \
  stefanwichmann/kelvin

Do not run both example containers simultaneously with the same host port. Docker will normally reject the second attempt because host port 8080 is already allocated. If you initially created a temporary container, stop and remove that container before creating the persistent version. Confirm that the mapped directory contains the expected Kelvin configuration after startup.

Pair Kelvin with the Hue bridge

A hand presses the Hue Bridge link button while Kelvin is open nearby.
Pressing the Hue Bridge link button authorizes Kelvin to pair on the local network.

Initial pairing requires local discovery and physical authorization. Kelvin starts by generating a default configuration when one is not already present. It then looks for a bridge on the local network. When it finds one and begins user registration, the log asks you to push the blue button on the Hue bridge.

1

Watch the startup log for bridge discovery

Run docker logs {CONTAINER_ID} and look for output indicating that no bridge configuration was found, local discovery started, and a bridge was found.

2

Press the physical blue bridge button

Press the blue button on top of the Hue bridge when Kelvin requests registration. Kelvin waits one minute for this action.

3

Repeat startup if the one-minute window expires

If the button was not pressed in time, start the process again and repeat the registration step. Do not expose the service remotely as a workaround for failed local pairing.

4

Confirm that Kelvin lists detected devices

Successful startup output includes the devices discovered on the bridge and their relevant capabilities. Devices that do not support functionality Kelvin uses may be excluded from unnecessary polling.

5

Confirm location detection and cyclic updates

If a location has not been configured, Kelvin can detect one by IP. The log should then indicate that cyclic updates are starting. Check that the detected location is appropriate before relying on sunrise and sunset behavior.

Bridge pairing is a local authorization step

Only press the Hue bridge button when you intentionally started Kelvin registration. Physical button access authorizes a new integration to communicate with the bridge. If registration prompts appear unexpectedly, stop the container and review what is running on the local network.

After successful registration, test Kelvin with a small set of lights before applying broad household changes. Switching a managed light off and on provides a practical way to observe how Kelvin reacts. Remember that manual changes are respected until the light is switched off and on again, so a manually overridden light may not immediately demonstrate the currently scheduled state.

Configure lighting schedules through the web interface

Kelvin web interface showing a time-based Hue lighting schedule.
Kelvin’s web interface defines how Hue lighting changes over time.

Open http://{DOCKER_HOST_IP}:8080/ from a browser that can reach the Docker host. The interface requests a password and accepts any username. Kelvin generates the password on first start. Retrieve it from the startup log:

docker logs {CONTAINER_ID}

The password is also available in the password field of config.json. If configuration storage is mapped to the host, protect that file as a credential-bearing configuration file.

Kelvin's documented capabilities include defining fine-grained daily schedules for each room, setting default startup color and brightness, and coordinating changes with sunrise and sunset. Use the web interface to adapt the default configuration to your household. Plan the desired behavior before editing:

  • Identify which rooms Kelvin should manage.
  • Decide how brightness and color temperature should vary through the morning, daytime, evening, and night.
  • Choose whether Kelvin should activate through a Hue scene or automatically when lights are switched on.
  • Set sensible startup behavior for lights returning from an off state.
  • Confirm that the configured location and timezone correspond to the physical installation.
  • Make small changes first and observe at least one normal transition cycle.

The available project evidence confirms these capabilities but does not provide a complete field-by-field specification of the current web interface. Labels and controls may vary by release. For that reason, this guide does not invent menu names, schedule syntax, brightness ranges, temperature units, or save buttons that are not established by the evidence.

Configuration changes require a Kelvin restart

After altering configuration, restart Kelvin through its web interface or run docker restart {CONTAINER_ID}. Reopen the interface and inspect the logs after restart to confirm that the new configuration loads successfully.

docker restart {CONTAINER_ID}

Understand manual overrides

Kelvin respects manual light changes until the affected light is switched off and on again. This is useful when someone temporarily wants different lighting, but it can also make schedule testing confusing. If a light does not adopt the expected scheduled state, determine whether it was manually changed. Cycle it off and on, then observe Kelvin again.

Validate gradual transitions carefully

Kelvin is designed to apply gradual transitions that are not intrusive. Do not conclude that a schedule failed merely because there was no immediate dramatic change. Check the configured time interval, current light state, room assignment, manual-override behavior, and log output. During testing, use clearly distinguishable but comfortable settings and avoid values that could disturb other occupants.

Verify the complete local installation

Remote access should only be added after local verification succeeds. This separation is important because a tunnel cannot repair a stopped container, unsuccessful Hue registration, incorrect schedule, missing password, or inaccessible local web listener.

1

Confirm the container remains running

Run docker ps and verify that the Kelvin container is still listed. If it is absent, inspect all containers and their logs before proceeding.

2

Review the application log

Confirm that bridge registration completed, relevant devices were found, location handling completed, and cyclic updates started. Resolve recurring errors before public exposure.

3

Open the interface on the Docker host

Test http://127.0.0.1:8080/ from the Docker host where applicable. The documented port publication makes host port 8080 the expected local entry point.

4

Test from another local device

Browse to http://{DOCKER_HOST_IP}:8080/ from another device on the same local network. This verifies the address you may use when the Localtonet client runs on a different machine.

5

Authenticate and inspect the configuration

Enter any username and the generated password. Confirm that the expected rooms, lights, and schedule configuration are visible before creating a tunnel.

6

Observe real lighting behavior

Test a managed light, account for manual overrides, and confirm that Kelvin responds as expected. A reachable web page alone does not prove that bridge communication and automation work.

The v1.3.9 release information mentions a health endpoint for container monitoring, but the supplied evidence does not establish its path or response contract. Do not guess a URL for monitoring. Use the documented root interface, container status, application logs, and actual Hue behavior unless you independently confirm the health-endpoint details for the installed release.

Access Kelvin remotely with a Localtonet HTTP tunnel

Remote browsers reach the local Kelvin web interface through a Localtonet HTTP tunnel.
The Localtonet agent forwards remote HTTP requests to Kelvin inside the private network.

After the Docker deployment works locally, Localtonet can publish the Kelvin web interface through an HTTP tunnel. Our client establishes an outbound connection to a Localtonet relay server, so the setup does not require inbound router port forwarding, firewall changes, VPN configuration, or a public IP address.

The tunnel points to the already working local service. In this deployment, that service is the Docker host on port 8080. If the Localtonet client runs on the Docker host, the local target may be 127.0.0.1 and port 8080, provided the client can reach that listener. If the client runs on another device, use the Docker host's reachable local IP address and port 8080.

πŸ“€ Outbound connection The Localtonet client connects outward to our relay, avoiding the need to create an inbound router forwarding rule.
🌐 Public HTTPS address HTTP tunnels use a generated subdomain, a selected subdomain where supported, or a custom domain to serve the local content at a public HTTPS address.
🎯 Explicit local target The tunnel forwards requests to the local IP address and port where the verified Kelvin interface is listening.
⏹️ Controlled lifecycle Creating a tunnel does not start it. The selected client must be connected, and the tunnel must be started before its public address becomes available.
1

Install and run the Localtonet client

Install our client on the Docker host or another device that can reach http://{DOCKER_HOST_IP}:8080/. Verify local reachability from that exact device before continuing.

2

Authenticate or select the client device

Use the device-specific authentication token supplied through your Localtonet account. Tokens identify client devices and must not be copied into public notes, screenshots, commands, or support posts.

3

Select an available relay server

Choose a currently available server or region from the Localtonet dashboard. Available values can vary, so obtain them from the current product rather than relying on a hardcoded server code from an article.

4

Create an HTTP tunnel to Kelvin

Configure the local target as the address that worked during verification and use local port 8080. For a client on the Docker host, test whether 127.0.0.1:8080 is reachable. For a separate client device, use the Docker host's reachable LAN address.

5

Choose the HTTP process type

Select Random Sub Domain, Custom Sub Domain, or Custom Domain according to the currently available dashboard options and your requirements. These process types serve the same local content at a public HTTPS address. Exact custom-domain DNS instructions should be checked against current Localtonet documentation before changing DNS.

6

Start and test the tunnel

Use the Start button, then open the assigned public address from a network outside the home. Confirm that Kelvin requests credentials and that the expected management interface loads. Stop or delete the tunnel when remote access is no longer required.

Everything can be managed from the Localtonet dashboard or REST API, but this guide does not invent API endpoints or authentication examples. For the current product workflow, consult the Localtonet documentation.

A public URL makes the login page internet-reachable

Kelvin's generated password remains essential after the HTTP tunnel is started. Use a strong, private password, restrict access to the configuration and logs that contain it, and expose the interface only when remote administration is needed. A tunnel provides connectivity, not permission to disregard application authentication, household security policy, or least-privilege practices.

Test from a genuinely external network

A browser on the same Wi-Fi network may not demonstrate the complete remote path. After starting the tunnel, test its public HTTPS address from a mobile connection or another external network. Verify that the login prompt appears before configuration data is displayed. Then authenticate and perform a low-impact operation, such as reviewing the configured schedule.

Avoid making disruptive lighting changes during the first remote test. Connectivity, authentication, and application behavior should be tested separately. If the page does not load, first determine whether the failure is local, at the Localtonet client, or in the tunnel configuration.

Routine operation, restarts, persistence, and updates

Check whether Kelvin is running

Use docker ps for a quick status check. If the container is not present, use Docker's container listing and inspect its logs to determine whether it stopped. The normal local web interface depends on the Kelvin container, while remote access additionally depends on the Localtonet client and HTTP tunnel.

docker ps
docker logs {CONTAINER_ID}

Restart after configuration changes

Kelvin requires a restart after configuration changes. Restart through the web interface when that option is available, or use the documented Docker command:

docker restart {CONTAINER_ID}

After restarting, inspect the logs and reload the web interface. Confirm bridge connectivity, location handling, and cyclic updates instead of assuming that a successful Docker restart means the application accepted every setting.

Back up persistent configuration

If /etc/opt/kelvin/ is mapped to the host, include the mapped directory in a protected backup routine. Treat backups as sensitive because configuration may contain the web-interface password. Test restoration on a noncritical instance or during a planned maintenance window before relying on it.

A bind mount preserves data only if it points to the intended directory and the container can read and write it. After recreating a container, confirm that the previous schedule and password remain present. An empty interface or newly generated default configuration may indicate that the wrong host path was mounted.

Approach image updates cautiously

Pulling the image again can retrieve a newer available build, but replacing a running container is an operational change. Preserve configuration first, review the project release notes, and record the currently working deployment details. This guide does not claim that every release is compatible with every previous configuration or prescribe an unattended update policy.

Kelvin advertises an auto-upgrade capability, but a containerized environment still deserves deliberate change control. Verify behavior after any upgrade, particularly bridge registration, room schedules, local access, authentication, and the Localtonet target.

Understand the two independent service lifecycles

Component What must be running Failure symptom
Hue automation Kelvin container and reachable Hue bridge Schedules or lighting adjustments stop even if another web service remains reachable
Local web management Kelvin container with host port 8080 published http://{DOCKER_HOST_IP}:8080/ does not load
Remote web management Kelvin, Localtonet client, and started HTTP tunnel Local access works, but the public HTTPS address does not
Configuration persistence Correct mapping for /etc/opt/kelvin/ Settings or the generated password change after container recreation

Troubleshooting Kelvin and remote access

The image does not download

Run docker version and confirm that the Docker engine is available. Then retry docker pull stefanwichmann/kelvin. Errors at this stage concern Docker connectivity, image retrieval, host permissions, or platform compatibility rather than Hue pairing or Localtonet.

The container is not shown by docker ps

A container that exits is omitted from the default running-container list. Inspect Docker's full container list and read its logs. Do not create repeated replacement containers without understanding the original failure, especially if each attempt generates separate configuration.

Docker reports that port 8080 is already allocated

Another process or container is already using host port 8080. Identify that process before changing the mapping. Although Docker can publish a different host port, this guide bases the Localtonet workflow on the documented 8080:8080 deployment. If you deliberately choose another host port, verify the resulting local URL and use that verified host port as the tunnel target.

Kelvin does not find the Hue bridge

Confirm that the bridge is configured and available on the local network, and that the Docker host is connected to the appropriate network. Review the Kelvin log for the exact discovery state. The supplied evidence does not document alternative bridge-address settings or Docker network modes, so this article does not prescribe unverified flags. Resolve local discovery before attempting remote access.

The blue-button registration times out

Kelvin waits one minute for the physical button press. Restart the registration attempt, watch the log, and press the blue button when requested. Pressing it long before or after the registration prompt may not complete the intended authorization.

The web-interface password is unknown

Inspect the startup log with docker logs {CONTAINER_ID}. Kelvin generates the password on first start and also stores it in the password field of config.json. If neither location contains the expected persistent configuration, check whether the correct host directory is mapped to /etc/opt/kelvin/.

The browser cannot open the local interface

First confirm that the container is running and that Docker published host port 8080. Test from the Docker host, then from another device using http://{DOCKER_HOST_IP}:8080/. A failure on the Docker host indicates a local container or listener problem. Success on the host but failure from another LAN device points to address selection, host firewall policy, or local-network reachability.

The schedule appears not to affect a light

Check whether the light supports the relevant Kelvin functionality, belongs to the expected room, is currently on, and was manually adjusted. Kelvin respects manual changes until the light is switched off and on again. Also verify timezone, detected location, current schedule interval, and the application log.

The public URL fails while the local interface works

Confirm that the Localtonet client is connected, the correct device token is selected, the relay server is available, and the HTTP tunnel has actually been started. Then verify the local target from the Localtonet client device itself. If the client is on another computer, 127.0.0.1 refers to that computer rather than the Docker host, so use the Docker host's reachable LAN address.

The public page opens but authentication fails

Verify the generated Kelvin password from the protected startup log or config.json. The project documentation says the interface accepts any username, so focus on the password and whether a new configuration was generated. If the password changed unexpectedly, examine configuration persistence before resetting or recreating anything.

Remote access stops unexpectedly

Check each dependency independently: Kelvin container status, local port 8080, Localtonet client connectivity, and tunnel status. A Localtonet tunnel is available only while the selected client device is connected and the tunnel is running. Creating a tunnel configuration alone does not keep it active.

Use a local-first diagnostic order

Start with the Kelvin container, then test the local interface from the Localtonet client device, then check the client connection, and finally test the public address. This order isolates the failing layer and avoids changing a correct tunnel to compensate for a broken local service.

Frequently asked questions

What is Kelvin for Philips Hue?

Kelvin is a self-hosted automation service that adjusts supported Hue lighting according to local sunrise and sunset times and custom daily intervals. It supports room-specific schedules, gradual transitions, startup settings, scene or automatic activation, and temporary manual overrides.

Does Kelvin require a Philips Hue bridge?

Yes. The documented prerequisites include a configured Philips Hue bridge and supported Hue or compatible lights. Initial Kelvin registration requires pressing the blue button on the physical bridge within a one-minute window.

Which port does the Kelvin Docker web interface use?

The documented Docker command maps host port 8080 to container port 8080. The documented local interface is http://{DOCKER_HOST_IP}:8080/.

Where do I find the Kelvin web-interface password?

Kelvin generates the password on first start. Find it in the startup log by running docker logs {CONTAINER_ID} or in the password field of config.json. The interface accepts any username.

How do I preserve Kelvin configuration when recreating the container?

Map the container directory /etc/opt/kelvin/ to persistent storage on the Docker host. Protect and back up the host directory because it can contain configuration and the web-interface password.

Must Kelvin be restarted after schedule changes?

Yes. After changing configuration, restart Kelvin through the web interface or run docker restart {CONTAINER_ID}. Inspect the logs and verify the resulting behavior after restart.

Can I install Kelvin without Docker?

Yes. Kelvin provides release binaries. Extract the downloaded release archive, then launch kelvin.exe on Windows or run ./kelvin on macOS, Linux, or another Unix-like system. This article uses Docker for remote access because port 8080 and the Docker web endpoint are explicitly documented.

Does Localtonet require router port forwarding?

No. Our client establishes an outbound connection to a Localtonet relay server. This lets you expose the verified Kelvin service without inbound router port forwarding, firewall changes, VPN setup, or a public IP address.

Does creating a Localtonet tunnel make it immediately available?

No. The selected Localtonet client must be connected, and the tunnel must be started with the Start button. It can later be stopped or deleted when remote Kelvin access is no longer needed.

Should I expose Kelvin before Hue pairing and local testing are complete?

No. First confirm that the container remains running, Hue registration succeeds, the local web interface opens, authentication works, and a test light responds correctly. Add the HTTP tunnel only after the local workflow is reliable.

Access your verified Kelvin dashboard with Localtonet

Once Kelvin is running locally on Docker port 8080, create a Localtonet HTTP tunnel to manage its password-protected web interface from outside your home network. Keep the tunnel stopped when remote administration is not required.

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