13 min read

Self-Host Nixflix with Localtonet Remote Access

Install and verify Nixflix on NixOS, then provide remote HTTP access to Jellyfin or Seerr through a Localtonet tunnel.

NixOS server providing remote access to Jellyfin or Seerr through an HTTP tunnel.
Nixflix services remain on the NixOS host while Localtonet carries remote HTTP traffic.
Self-Hosting · Nixflix · Localtonet · 2026

Build a declarative NixOS media stack, verify it locally, and expose only the web service you intend to share

Nixflix brings services such as Jellyfin, Seerr, Sonarr, Radarr, Lidarr, and Prowlarr into a declarative NixOS configuration. This guide explains the evidence-backed setup workflow, shows a documented starter configuration, and emphasizes local verification before remote access. After the selected service works on the NixOS host, we explain how to connect its HTTP endpoint to a Localtonet tunnel without inbound router port forwarding, firewall changes, VPN setup, or a public IP address. Because Nixflix service addresses and ports depend on the deployed configuration, the Localtonet target must come from your working system rather than an assumed default.

🔒 Expose only the intended authenticated service 🌐 Public HTTPS access to a verified local HTTP endpoint ⚡ Declarative NixOS configuration with outbound tunneling

What Nixflix configures on NixOS

Diagram of NixOS configuration creating Jellyfin and Seerr services through Nixflix modules.
Nixflix expresses the media services as part of the declarative NixOS system configuration.

Nixflix is a declarative media server configuration manager for NixOS. Its purpose is to automate the connective configuration required by a media stack rather than leaving every integration to be completed manually through separate web interfaces. The project supports a Starr stack containing Sonarr, Radarr, Lidarr, and Prowlarr, along with user-facing and supporting services such as Jellyfin, Seerr, Navidrome, SABnzbd, qBittorrent, and Maintainerr.

The project uses the official REST APIs of supported services, with a small number of documented exceptions, to apply configuration represented through NixOS options. Its design is idempotent, so the declared configuration remains the source of truth and can be applied repeatedly. Nixflix can also create media and state directories, configure relationships between services, establish root folders, and manage custom service dependencies.

This architecture is important for remote access. Nixflix does not represent one universal web application with one guaranteed port. It can configure several independent services, and each service has a different role. Jellyfin is typically the interface used to browse and stream a personal media library, while Seerr provides media request management and integrates with Jellyfin libraries and Starr services. Administrative tools such as Sonarr, Radarr, and Prowlarr have powerful management interfaces that generally deserve more restrictive access than a user-facing media or request interface.

📺 Jellyfin integration Nixflix supports basic Jellyfin server management, automatic library configuration based on selected media managers, plugin management, and subtitle tooling.
🎟️ Seerr request management Seerr can be integrated with the Starr services and Jellyfin libraries, making it a practical candidate for a carefully controlled remote HTTP endpoint.
⚙️ Declarative API configuration Supported service settings can be represented as NixOS options and applied through service APIs instead of being maintained only through web dashboards.
🗄️ Directory and database options Nixflix supports configurable media and state directories, automatic directory setup, and optional PostgreSQL integration for the Arr services.
🌐 Reverse proxy support Configurable nginx or Caddy integration is available for supported services, including per-service opt-out behavior.
🔁 Repeatable deployment The project is designed to apply its service configuration idempotently, reducing configuration drift between the NixOS declaration and running applications.

Plan the installation before changing the server

Start with the current Nixflix documentation and its Installation Guide. Nixflix is an actively developed NixOS project, and the exact method used to add it to a system can change between releases. The available evidence establishes that users should begin with the Installation Guide, then use the examples and complete option reference. It does not establish a universal flake input, import expression, channel requirement, or compatibility matrix that can safely be copied into every NixOS installation.

For that reason, this guide does not invent a flake URL, module import path, release pin, or NixOS version requirement. Follow the installation syntax shown by the documentation for the Nixflix release you actually select. If upgrading from an earlier deployment, read the relevant release notes before rebuilding. Nixflix v3.0.0 included a breaking change related to where the Jellyfin manifest is obtained, so an older configuration should not be assumed to migrate without review.

Do not use the repository development commands as installation commands

The repository documents commands such as nix develop, nix fmt, and nix flake check for development, formatting, and validation of the project itself. Those commands do not constitute the documented end-user installation procedure. Use the current Nixflix Installation Guide for the module inclusion method.

Install and configure Nixflix

1

Open the current Nixflix Installation Guide

Confirm the supported installation approach for your chosen Nixflix release and NixOS configuration style. Apply the documented module inclusion instructions exactly, including any release pinning or import details shown there. Do not infer those details from repository development files.

2

Choose the services and storage paths

Decide which components you actually need and select appropriate media and state directories. A smaller initial deployment is easier to validate. For example, begin with Jellyfin and only the Starr or download services required by your workflow rather than enabling every available component at once.

3

Add the documented Nixflix options

Add a nixflix configuration to the NixOS module configuration after completing the official installation step. Use secret files for API keys and adjust all example paths to match the server. The starter configuration below is based on the project’s documented quick example, but it is not a substitute for installing and importing the module correctly.

4

Rebuild the NixOS system

Review the configuration and apply it with the standard NixOS rebuild process. Resolve evaluation or activation errors before moving on. A tunnel cannot correct an invalid NixOS module declaration or a service that failed to start.

5

Verify the selected service locally

Confirm that Jellyfin, Seerr, or the chosen reverse proxy is running and reachable from the device that will run our client. Record the actual local IP address, hostname, scheme, and port. These observed values become the Localtonet HTTP tunnel target.

The Nixflix quick example demonstrates the shape of a small configuration with Sonarr, Prowlarr, SABnzbd, and Jellyfin enabled. It also demonstrates secret-file references rather than embedding API key values directly in the Nix expression:

{ nixflix = {
  enable = true;
  mediaDir = "/data/media";
  stateDir = "/var/lib";

  sonarr = {
    enable = true;
    config.apiKey = {
      _secret = "/run/secrets/sonarr-api-key";
    };
  };

  prowlarr = {
    enable = true;
    config.apiKey = {
      _secret = "/run/secrets/prowlarr-api-key";
    };
  };

  sabnzbd = {
    enable = true;
    settings.misc.api_key = {
      _secret = "/run/secrets/sabnzbd-api-key";
    };
  };

  jellyfin.enable = true;
}; }

Treat this as a starting structure, not a complete production policy. The referenced secret files must exist through a secret-management approach appropriate for the system, and their contents must never be committed to a public repository. The media directory must be mounted and readable by the relevant services. The complete Nixflix reference should be used for service-specific options, users, libraries, quality profiles, download clients, reverse proxies, and other integrations.

Rebuild and verify local operation

Four-step flow from NixOS configuration and rebuild to running services and a local browser check.
Verify the rebuilt services locally before creating any public tunnel.

After the Nixflix module has been installed and configured according to its documentation, apply the NixOS configuration:

sudo nixos-rebuild switch

A successful rebuild is only the first verification checkpoint. Check the systemd status of every service you intend to use. For a Jellyfin deployment, the documented status command is:

sudo systemctl status jellyfin

The standard NixOS Jellyfin service uses port 8096 by default, and a standalone local installation can normally be tested at http://localhost:8096. However, Nixflix supports nginx and Caddy reverse-proxy integration, and your Nixflix options can produce a different effective endpoint. Do not assume that port when a proxy, custom network configuration, or service-specific override is active.

Test the exact endpoint from the machine that will run the Localtonet client. If the client runs directly on the NixOS server, a loopback address may be suitable. If it runs on another device, the service must be reachable from that device over the local network. Complete Jellyfin’s application setup, confirm that its web interface loads, and verify that authentication works before making it remotely reachable.

Local verification defines the tunnel target

Localtonet forwards requests to the local IP address and port you configure. It does not discover the Nixflix service or repair a failed reverse proxy. If the selected endpoint does not load locally from the client device, resolve the NixOS service, permissions, proxy, or network issue before creating a tunnel.

Choose the right endpoint to expose

Expose the smallest useful surface. Jellyfin is appropriate when remote users need to browse or stream an authorized personal library. Seerr is appropriate when users should submit and manage media requests without receiving access to the broader administration stack. An nginx or Caddy endpoint can be appropriate when Nixflix already places the service behind a configured reverse proxy.

Endpoint Typical purpose Remote-access consideration
Jellyfin Browse and stream a personal media library Verify user authentication, library permissions, and the actual local HTTP endpoint before tunneling.
Seerr Media request management Prefer this narrower interface when remote users only need to request content rather than administer the stack.
nginx or Caddy Reverse proxy in front of a selected service Target the working proxy listener and confirm its host-routing behavior locally before public access.
Sonarr, Radarr, or Prowlarr Administrative media automation These interfaces can control libraries, indexers, and automation. Avoid broad exposure unless it is necessary and strongly access-controlled.
A public URL does not replace application authorization

Configure strong application credentials and least-privilege accounts before starting the tunnel. Never place API keys in a public URL, browser bookmark, article, or shared configuration. Review the selected service’s permissions and expose only the interface that remote users require.

Add Localtonet remote HTTP access

Remote HTTP traffic passing through a Localtonet tunnel to either Jellyfin or Seerr on a private NixOS host.
The tunnel maps a public HTTP endpoint to the chosen local Jellyfin or Seerr service.

Once the Nixflix service is working locally, an HTTP tunnel is the natural fit for a browser-based Jellyfin, Seerr, nginx, or Caddy endpoint. Our client establishes an outbound connection to a Localtonet relay server, so this workflow does not require inbound router port forwarding, firewall changes, VPN setup, or a public IP address. The resulting tunnel provides a public address while the selected client is connected and the tunnel is running.

1

Install and run the Localtonet client

Install our client on the NixOS host or another device that can reach the verified Nixflix HTTP endpoint. Keep the client running for as long as remote access is required.

2

Authenticate the client device

Use the device-specific authentication token assigned through our platform. Treat the token as a secret, never place it in the Nixflix configuration, and never publish it in logs or screenshots.

3

Select an available relay server

Choose a currently available server or region from the dashboard. Available values can vary, so obtain the selection from the current product instead of copying a hardcoded server code from a tutorial.

4

Create an HTTP tunnel for the verified endpoint

Enter the local IP address and port that successfully served Jellyfin, Seerr, nginx, or Caddy during local testing. Do not guess the port. HTTP tunnels can use a random subdomain, a supported custom subdomain, or a custom domain, with the current dashboard determining the available choices.

5

Start the tunnel and test the public address

Creating a tunnel does not start it. Press Start, then open the assigned public URL and verify the expected application, sign-in flow, and content permissions from an external connection.

6

Stop or delete access when it is no longer needed

Stop the tunnel to make the public endpoint unavailable while retaining its configuration, or delete it when the configuration is no longer required. The endpoint is available only while the selected client is connected and the tunnel is running.

For current dashboard details, consult our Localtonet HTTP tunnel documentation. Recheck the application after every significant Nixflix or reverse-proxy change. A declarative rebuild can alter service listeners, proxy behavior, or enabled components, so the public endpoint should be retested rather than assumed to remain correct.

Frequently asked questions

Does Nixflix have one default port for the entire media stack?

No. Nixflix configures multiple independent services, and reverse-proxy or network options can change their effective endpoints. Determine the address and port from the deployed service and verify them locally before configuring Localtonet.

Can I use Jellyfin port 8096 as the Localtonet target?

Jellyfin uses port 8096 by default in a standard NixOS setup, but you should use it only if your deployed Nixflix configuration actually serves Jellyfin there. If nginx, Caddy, or another override is active, target the endpoint that you confirmed locally.

Should I expose Jellyfin or Seerr?

Choose Jellyfin when authorized users need library and streaming access. Choose Seerr when they only need media request management. Exposing the narrower interface is generally preferable when it meets the actual requirement.

Does Localtonet require router port forwarding?

No. Our client establishes an outbound connection to a relay server, so the standard tunnel workflow does not require inbound router port forwarding, firewall changes, VPN setup, or a public IP address.

Will creating the tunnel immediately make Nixflix available?

No. Creating a tunnel does not mean it is running. The selected client must be connected, and the tunnel must be started. The local service must also remain healthy and reachable from that client device.

Can a tunnel fix a failed Nixflix or Jellyfin service?

No. Localtonet forwards traffic to the configured local target. NixOS evaluation errors, failed systemd units, incorrect storage permissions, missing secrets, and reverse-proxy problems must be corrected on the local system first.

Connect your verified Nixflix service with Localtonet

Finish the NixOS deployment, confirm Jellyfin or Seerr locally, and then create an HTTP tunnel for that exact endpoint. Keep application authentication enabled and stop the tunnel whenever remote access 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