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
porta logo

Self-host porta

v0.16.2

Remote web interface for Antigravity with PWA support

BetaOpen SourceMIT
Updated11 hours ago
LanguageTypescript
Setup difficultyModerate
MobilePWA
Stars
211
Ports
3170 (Proxy (Antigravity LSP bridge)), 3070 (Web UI (Vite dev server))
Requires
Antigravity, Node.js, Pnpm
Install with NPM
Porta desktop and mobile interfacePorta mobile demo

What is porta?

Porta gives you a browser-based way to reach Google's Antigravity agent from other devices. It runs a local proxy that connects to the Antigravity language server and a web front end you can install as a PWA. The stack needs Node.js 22 or newer and pnpm 10 or newer. Data moves over WebSocket as structured LSP messages, so bandwidth stays tiny and latency is low. The UI works well on phones and tablets. If you want access from outside your LAN, the docs explain how to wire it up with Cloudflare Tunnel, Pages, and Zero Trust. You must already have Antigravity running; Porta does not add a code editor or terminal. Licensed MIT.

Should you self-host porta?

porta scores 42/100 on selfhost.directory (how scoring works) and ranks #122 of 166 in Developer Tools. It has 211 GitHub stars.

It shipped 17 stable releases in the past year. The latest, v0.16.2, came out on 9 September 2026. New versions land roughly every 9 days.

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

Its closest alternative on selfhost.directory is openhands (87/100, 92 094 stars). It scores higher overall, so compare the two before you pick. See porta vs openhands side by side.

Features

  • Cloudflare Integration
  • Container Support
  • Cross-platform
  • Full Privacy
  • LAN Access
  • Near-zero Bandwidth
  • Real-Time WebSocket Streaming
  • Self-Hosted
  • Token Authentication

porta README

How to install porta

Install porta with NPM

Environment variables
PORTA_HOST, PORTA_PORT, PORTA_CORS_ORIGINS, PORTA_TUNNEL_NAME, PORTA_CLOUDFLARED_CONFIG, PORTA_CF_PROJECT, PORTA_WEB_PORT, PORTA_ALLOWED_HOSTS, PORTA_REQUIRE_AUTH, PORTA_ACCESS_TOKEN, VITE_API_BASE, PORTA_BASE_PATH, PORTA_CONTAINER, PORTA_ALLOW_WILDCARD

git clone https://github.com/L1M80/porta.git cd porta pnpm install cp .env.example .env # edit if needed — see comments inside pnpm dev # proxy (:3170) + web (:3070)

Requires Node.js ≥ 22, pnpm ≥ 10, and a running Antigravity instance.

How to configure porta

  • PORTA_ACCESS_TOKENAccess token for authentication. Use at least 32 characters.

    Access token for authentication. Use at least 32 characters.

  • PORTA_ALLOWED_HOSTSExact public hostname(s), comma-separated; no scheme or path. Example: porta.example.com

    Exact public hostname(s), comma-separated; no scheme or path. Example: porta.example.com

  • PORTA_ALLOW_WILDCARDSet to 1 to allow wildcard binds (0.0.0.0, ::) which are rejected by default.

    Set to 1 to allow wildcard binds (0.0.0.0, ::) which are rejected by default.

    values: 1

  • PORTA_BASE_PATHOptional when hosting the web UI below a path such as https://example.com/porta/

    Optional when hosting the web UI below a path such as https://example.com/porta/

  • PORTA_CF_PROJECTCloudflare Pages project name (e.g. porta)

    Cloudflare Pages project name (e.g. porta)

  • PORTA_CLOUDFLARED_CONFIGCloudflared config path when not using ~/.cloudflared/config.yml

    Cloudflared config path when not using ~/.cloudflared/config.yml

  • PORTA_CONTAINERSet to 1 when running the proxy in a container that does not expose standard Docker, Podman, Kubernetes, or containerd markers.

    Set to 1 when running the proxy in a container that does not expose standard Docker, Podman, Kubernetes, or containerd markers.

    values: 1

  • PORTA_CORS_ORIGINSRequired for a public host, e.g. https://porta.example.com

    Required for a public host, e.g. https://porta.example.com

  • PORTA_HOST127.0.0.1Host to bind the proxy to. Loopback only by default; set to an explicit private LAN IP for home network use.

    Host to bind the proxy to. Loopback only by default; set to an explicit private LAN IP for home network use.

  • PORTA_PORT3170Port for the proxy server.

    Port for the proxy server.

  • PORTA_REQUIRE_AUTHWhen 1/true/yes/on, every request must present the access token or is rejected (fail-closed).

    When 1/true/yes/on, every request must present the access token or is rejected (fail-closed).

    values: 1/true/yes/on

  • PORTA_TUNNEL_NAMECloudflare tunnel name (e.g. my-porta-tunnel)

    Cloudflare tunnel name (e.g. my-porta-tunnel)

  • PORTA_WEB_PORT3070Port for the web dev server. Must match the watchdog origin port and cloudflared ingress service.

    Port for the web dev server. Must match the watchdog origin port and cloudflared ingress service.

  • VITE_API_BASEAbsolute API URL (e.g. https://api.example.com). Leave unset for local dev or the Cloudflare Pages Edge proxy.

    Absolute API URL (e.g. https://api.example.com). Leave unset for local dev or the Cloudflare Pages Edge proxy.

porta releases & version history

More in Chat

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…