{
    "_comment": "VoidPort Tunnel egg for Pterodactyl and Pelican (PTDL_v2). Source: https://github.com/voidmind-io/voidport.io/tree/main/docker/ptero",
    "meta": {
        "version": "PTDL_v2",
        "update_url": null
    },
    "exported_at": "2026-09-27T12:00:00+00:00",
    "name": "VoidPort Tunnel",
    "author": "support@voidport.app",
    "description": "Puts another server on this node online through a VoidPort tunnel, without port forwarding. Create the tunnel at voidport.app, paste its token and set the target port to the game server's allocation port. The tunnel uses no allocation for traffic: any free allocation works.",
    "features": null,
    "docker_images": {
        "VoidPort": "ghcr.io/voidmind-io/voidport:ptero"
    },
    "file_denylist": [],
    "startup": "voidport connect",
    "config": {
        "files": "{}",
        "startup": "{\r\n    \"done\": \"  online\"\r\n}",
        "logs": "{}",
        "stop": "^SIGTERM"
    },
    "scripts": {
        "installation": {
            "script": "#!/bin/bash\r\n# Nothing to install: the VoidPort CLI is part of the image\r\n# (ghcr.io/voidmind-io/voidport:ptero). The tunnel keeps no files.\r\necho \"VoidPort Tunnel: nothing to install.\"\r\n",
            "container": "debian:bookworm-slim",
            "entrypoint": "bash"
        }
    },
    "variables": [
        {
            "name": "Tunnel Token",
            "description": "The tunnel's token from the VoidPort dashboard (tunnel page). Several tunnels, e.g. game and voice chat, can be given separated by commas; they all forward to the same host.",
            "env_variable": "VOIDPORT_TOKEN",
            "default_value": "",
            "user_viewable": true,
            "user_editable": true,
            "rules": "required|string|max:2000",
            "field_type": "text"
        },
        {
            "name": "Target Host",
            "description": "Where the tunnel forwards to, as seen from this container. 172.18.0.1 (the node's Docker gateway on the default pterodactyl0 network) reaches the allocations of other servers on this node. If the game server's allocation is bound to a specific IP, use that IP instead. Leave empty to use this container's gateway automatically.",
            "env_variable": "VOIDPORT_HOST",
            "default_value": "172.18.0.1",
            "user_viewable": true,
            "user_editable": true,
            "rules": "nullable|string|max:253",
            "field_type": "text"
        },
        {
            "name": "Target Port",
            "description": "The port of the game server's allocation (e.g. 25565). Leave empty to use the local port saved with the tunnel. Only works with a single token.",
            "env_variable": "VOIDPORT_PORT",
            "default_value": "",
            "user_viewable": true,
            "user_editable": true,
            "rules": "nullable|integer|between:1,65535",
            "field_type": "text"
        }
    ]
}
