v0.151.1

plain-portal changelog

0.2.8 (2026-06-26)

What's changed

  • Bumped the portal server's npm dependencies (undici, Cloudflare workerd/wrangler) to resolve security advisories. (cea9cd30b2)

Upgrade instructions

  • No changes required.

0.2.7 (2026-05-05)

What's changed

  • Exposes __version__ from importlib.metadata on plain.portal for version probes that don't want to scrape pip metadata. (c6cf6edb)

Upgrade instructions

  • No changes required.

0.2.6 (2026-04-22)

What's changed

  • Updated read_only, get_connection, and has_connection imports from plain.postgres.connections to plain.postgres.db (the module was renamed in plain-postgres 0.98.0). (2a51b25)

Upgrade instructions

  • If portal is used against a Plain project, that project should be on plain-postgres>=0.98.0.

0.2.5 (2026-04-13)

What's changed

  • Migrated type suppression comments to ty: ignore for the new ty checker version. (4ec631a7ef51)

Upgrade instructions

  • No changes required.

0.2.4 (2026-04-03)

What's changed

  • Replaced socket-probe guard with flock-based locking. The previous approach tried to connect to the existing socket to detect a running session, but this was racy and could fail under certain timing conditions. Now uses an exclusive file lock (fcntl.flock) that is held for the process lifetime and released automatically on exit or crash. (a6866332a7cb)
  • Portal socket is now project-scoped. The socket and lock files are placed under .plain/tmp/portal/ instead of the system temp directory, so multiple projects can run portal sessions simultaneously without conflicts. (a6866332a7cb)

Upgrade instructions

  • No changes required.

0.2.3 (2026-04-02)

What's changed

  • Updated agent skill to include --yes flag alongside --writable in documentation, matching the confirmation-skip behavior added in 0.2.1 (86b0257)

Upgrade instructions

  • No changes required.

0.2.2 (2026-03-30)

What's changed

  • Detect stale socket files after SIGKILL instead of blocking new sessions — connect now probes the existing socket and cleans it up if nothing is listening, rather than refusing to start (461da76c8c78)
  • Handle unclean websocket disconnects gracefully — remote sessions now catch ConnectionClosed instead of crashing when the relay or network drops the connection (5b7995df2f6d)
  • Updated agent skill to clarify that both start and connect are blocking foreground processes (6a6b1ccff532)

Upgrade instructions

  • No changes required.

0.2.1 (2026-03-27)

What's changed

  • Added --yes/-y flag to portal start to skip the write-mode confirmation prompt (0af36e101f03)

Upgrade instructions

  • No changes required.

0.2.0 (2026-03-24)

What's changed

  • Simplified portal connect — now runs in the foreground instead of forking a background daemon. Kill the process to end the session (95be9f59e68a)
  • Removed portal disconnect and portal status commands — no longer needed since connect runs in the foreground (95be9f59e68a)
  • Removed PID file tracking and --foreground flag (95be9f59e68a)
  • Updated agent skill to reflect foreground-only connect workflow (669e52eda37d)

Upgrade instructions

  • plain portal connect now runs in the foreground — kill the process (Ctrl+C) to disconnect instead of running plain portal disconnect.
  • Remove any scripts or automation that use plain portal disconnect or plain portal status.

0.1.1 (2026-03-23)

What's changed

  • Fix backgrounded connect on macOS by forking before entering asyncio, avoiding kqueue file descriptor issues (870d591fb1cc)
  • Simplify local.py by moving fork/daemonize logic into cli.py and removing the foreground parameter from the connect() function (870d591fb1cc)

Upgrade instructions

  • No changes required.

0.1.0 (2026-03-22)

What's changed

Initial release. Remote Python shell and file transfer via encrypted tunnel.

  • SPAKE2 key exchange + NaCl SecretBox for E2E encryption through a Cloudflare relay (7c782e15a962)
  • Streaming stdout — output appears line-by-line in real time
  • Read-only database mode by default, --writable opt-in with confirmation prompt
  • File transfer: pull and push through the encrypted tunnel (up to 50MB, push restricted to /tmp/)
  • Per-command exec timeout (default 120s, --timeout override)
  • --json flag for machine-readable exec output
  • Keepalive pings every 30s to survive proxy idle timeouts
  • CLI commands: start, connect, exec, pull, push, disconnect, status