Skip to main content

Python SDK for XPOS — instant public URLs via SSH tunnels

Project description

getxpos

PyPI Python License Downloads

Python SDK for XPOS — instant public URLs via SSH tunnels. Zero dependencies.

Features

  • Zero dependencies — uses only Python standard library
  • CLI + programmatic API — use from terminal or embed in your tooling
  • HTTP & TCP tunnels — expose web apps or any TCP service
  • Anonymous or authenticated — works instantly, tokens unlock more features
  • Reserved subdomains & custom domains — with Pro/Business plans

Quick Start

# Install and run
pip install getxpos
xpos --port 3000

# Or run without installing
pipx run getxpos --port 3000

Installation

# Global (recommended for CLI usage)
pip install getxpos

# Or with pipx (isolated environment)
pipx install getxpos

Authentication

Get a token from xpos.dev/dashboard/tokens, then either:

# Pass directly
xpos --port 3000 --token tk_xxx

# Or set environment variable
export XPOS_TOKEN=tk_xxx
xpos --port 3000

CLI Usage

# Anonymous tunnel (random subdomain, 3hr expiry)
xpos --port 3000

# Authenticated (random subdomain, 10hr expiry)
xpos --port 3000 --token tk_xxx

# Reserved subdomain (Pro+)
xpos --port 3000 --token tk_xxx --subdomain myapp

# Custom domain (Business)
xpos --port 8000 --token tk_xxx --domain tunnel.example.com

# Port-based TCP tunnel (Pro+)
xpos --port 5432 --token tk_xxx --mode tcp

CLI Options

Option Description Default
--port <port> Local port to expose (required)
--host <host> Local host to forward localhost
--token <token> Auth token (or XPOS_TOKEN env)
--subdomain <name> Reserved subdomain (requires token)
--domain <domain> Custom domain (requires token)
--mode <mode> http or tcp http
--server <host> SSH server hostname go.xpos.dev
-h, --help Show help
-v, --version Show version

Programmatic API

from getxpos import xpos

# HTTP tunnel
tunnel = xpos.connect(port=3000, token="tk_xxx")
print(tunnel.url)         # https://abc.xpos.to
print(tunnel.expires_at)  # 2026-03-28T10:30:45Z
tunnel.close()

# Port-based TCP tunnel
tcp = xpos.connect(port=5432, token="tk_xxx", mode="tcp")
print(tcp.url)            # 1.2.3.4:54321
tcp.close()

Named imports

from getxpos import connect, XposTunnel

tunnel = connect(port=3000)
print(tunnel.url)
tunnel.close()

Callbacks

from getxpos import XposTunnel

tunnel = XposTunnel(
    port=3000,
    on_connect=lambda data: print(f"Connected: {data['url']}"),
    on_output=lambda text: print(text, end=""),  # Raw SSH output
    on_close=lambda code: print("Tunnel closed"),
)

tunnel.start()

Options

Option Type Description
port int Local port to expose (required)
host str Local host (default: "localhost")
token str Auth token (or reads XPOS_TOKEN env)
subdomain str Reserved subdomain
domain str Custom domain
mode str "http" or "tcp" (default: "http")
server str SSH server (default: "go.xpos.dev")
on_connect callable Called with {"url", "expires_at"} on connect
on_output callable Called with raw SSH output text
on_close callable Called with exit code on disconnect

Requirements

  • Python >= 3.8
  • SSH client in PATH (ssh command — comes pre-installed on macOS, Linux, and Windows 10+)

Troubleshooting

"SSH not found" — Install OpenSSH. On Windows: Settings > Apps > Optional Features > OpenSSH Client.

Connection timeout — Check your firewall allows outbound connections on port 443.

"subdomain requires a token" — Reserved subdomains need a Pro plan. Get a token from your dashboard.

Links

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

getxpos-0.1.0.tar.gz (11.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

getxpos-0.1.0-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

Details for the file getxpos-0.1.0.tar.gz.

File metadata

  • Download URL: getxpos-0.1.0.tar.gz
  • Upload date:
  • Size: 11.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for getxpos-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0d7e18af131008d5d73807698f7fcbb247f59afec05e9c049f8634275ec23514
MD5 f565edbaacbc23280351f3337628b866
BLAKE2b-256 2a08f42ce429b73dba580d76785e37e8600307a6d4553d4cfb8d16716c5e9ae2

See more details on using hashes here.

File details

Details for the file getxpos-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: getxpos-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for getxpos-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 98b0abb5718e27a35f19e543c23496a070b9bcd1cd7b341e3830899e06698c92
MD5 b6b58a980f5b1ab4f0923118f70dc110
BLAKE2b-256 2406078dc0d1ef51f4ca27a437cd7ec38c75a52e2110d4b846dd4e76bdcf5b3e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page