The OutRay CLI reads a TOML file to start multiple tunnels at once. By default it looks forDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/outray-tunnel/outray/llms.txt
Use this file to discover all available pages before exploring further.
outray/config.toml in the current working directory. Pass --config <path> to outray start or outray validate-config to use a different path.
File structure
A config file has an optional[global] section and one or more [tunnel.<name>] sections.
[global]
Global settings that apply to all tunnels unless overridden at the tunnel level.
Default organization slug. Every tunnel uses this org unless it specifies its own
org field.WebSocket URL of the OutRay tunnel server. Must use the
ws:// or wss:// scheme. Omit this field to use the production server at wss://api.outray.dev/.[tunnel.<name>]
Each tunnel section defines one tunnel. Replace <name> with a descriptive identifier, for example [tunnel.web] or [tunnel.postgres]. Names must be unique within the file.
Connection fields
The tunnel protocol. Must be one of
"http", "tcp", or "udp".The local port that OutRay will forward traffic to. Must be an integer between 1 and 65535.
Hostname or IP address of the local service. Useful when the service is running in another container or on a different machine on your LAN.
HTTP-only fields
Request a specific subdomain for the public tunnel URL, for example
my-app produces https://my-app.tunnel.outray.app. Requires authentication.Use a custom domain instead of a generated subdomain. The domain must be configured in the OutRay dashboard and your DNS must point to the OutRay server before the tunnel can serve traffic.
Protect the HTTP tunnel with Basic Auth. Visitors are prompted for this password before they can access the tunnel.
When
true, the service is also advertised on the local network via mDNS so devices on the same LAN can reach it at <subdomain>.local in addition to the remote tunnel URL.TCP/UDP-only fields
Request a specific public port. TCP ports are allocated from the range 20000–30000; UDP ports from 30001–40000. If the requested port is already in use the server assigns a different one.
Organization override
Organization slug for this tunnel only. Overrides
global.org. Useful when tunnels in the same config file belong to different organizations.Annotated example
Validation
Runoutray validate-config to check your configuration file before starting tunnels:
- At least one
[tunnel.*]section must be present. protocolmust be"http","tcp", or"udp".local_portmust be an integer between 1 and 65535.local_hostmust be a valid hostname when provided.server_urlmust be a valid WebSocket URL (ws://orwss://) when provided.remote_portis forbidden on HTTP tunnels.subdomainandcustom_domainare forbidden on TCP and UDP tunnels.