selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
PipeGate logo

Self-host PipeGate

0.1.0

Lightweight self-hosted HTTP tunnel via WebSocket

AlphaOpen SourceMIT
Updated3 weeks ago
LanguagePython
Setup difficultyModerate
Stars
242
Port
8000 (HTTP and WebSocket server)
Install with pip

What is PipeGate?

PipeGate is a lightweight HTTP tunneling proxy written in Python using FastAPI. It lets you make a local web server reachable from the internet by routing traffic through a single WebSocket link between a server on a public VPS and a client running beside your application. The WebSocket connection is secured with JWT tokens, while outside callers only need the connection identifier in the URL. Multiple simultaneous requests share one WebSocket by using correlation IDs to match responses. Binary data passes through via base64 encoding. If the WebSocket breaks, the client reconnects with exponential backoff. All coordination happens in memory using asyncio queues, so no database or Redis is needed. The tool is configured through environment variables and requires Python 3.12 or newer.

Should you self-host PipeGate?

PipeGate scores 43/100 on selfhost.directory (how scoring works) and ranks #24 of 31 in Networking. It has 242 GitHub stars.

There was no stable release in the past 12 months, so check the repository's recent activity before you rely on it.

Setup is moderate: expect some configuration beyond a single command. It is MIT-licensed and written mostly in Python.

Its closest alternative on selfhost.directory is Webhook.site (66/100, 6 785 stars). It scores higher overall, so compare the two before you pick. See PipeGate vs Webhook.site side by side.

Features

  • Automatic reconnection
  • Binary payload support
  • Concurrent request handling
  • Correlation ID injection
  • Health check endpoint
  • HTTP tunneling over WebSocket
  • No external state requiredDoes not survive server restarts and does not scale horizontally
  • Query parameter preservation

PipeGate README

How to install PipeGate

Install PipeGate with pip

Environment variables
PIPEGATE_JWT_SECRET, PIPEGATE_JWT_ALGORITHMS, PIPEGATE_JWT_ISSUER, PIPEGATE_JWT_AUDIENCE, PIPEGATE_JWT_TTL_DAYS, PIPEGATE_CONNECTION_ID, PIPEGATE_MAX_BODY_BYTES, PIPEGATE_MAX_QUEUE_DEPTH

git clone https://github.com/janbjorge/pipegate.git && cd pipegate uv sync

export PIPEGATE_JWT_SECRET="change-me-to-something-secret" export PIPEGATE_JWT_ALGORITHMS='["HS256"]'

Generate a tunnel token (21-day expiry)

pipegate token

Run the server (on your public VPS)

pipegate server

Run the client (on your local machine, another terminal)

pipegate client http://localhost:3000 "ws://yourserver:8000/?token="

Requires Python 3.12+

How to configure PipeGate

  • PIPEGATE_CONNECTION_IDrandom UUIDPin a specific connection ID when generating tokens

    Pin a specific connection ID when generating tokens

  • PIPEGATE_JWT_ALGORITHMSAlgorithm list, e.g. '["HS256"]'

    Algorithm list, e.g. '["HS256"]'

  • PIPEGATE_JWT_AUDIENCEpipegateJWT aud claim — must match on both sides

    JWT aud claim — must match on both sides

  • PIPEGATE_JWT_ISSUERpipegateJWT iss claim — must match on both sides

    JWT iss claim — must match on both sides

  • PIPEGATE_JWT_SECRETShared secret for JWT signing/verification

    Shared secret for JWT signing/verification

  • PIPEGATE_JWT_TTL_DAYS21Token lifetime in days

    Token lifetime in days

  • PIPEGATE_MAX_BODY_BYTES10 MBReject requests larger than this (413)

    Reject requests larger than this (413)

  • PIPEGATE_MAX_QUEUE_DEPTH100Per-tunnel queue size before returning 503

    Per-tunnel queue size before returning 503

More in Proxy

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…