Pythonator

Changelog

Pythonator follows semantic versioning. Each release lists what changed for users.

0.0.10

A rewrite of the engine with 0.0.9’s window on top. The ideas are the same; the code is new, about 10,000 lines instead of 24,000, typed throughout and checked with mypy --strict.

The window

  • 0.0.9’s design and feel: the toolbar with Start all and Stop all, the CPU and RAM meter, the service cards with their state dot and isolation shield, the header with the name, a live info line and the service’s buttons (labels shrink to symbols in a narrow window), the editor over the console, and the file tree under the services.
  • Nothing in the window waits. It opens at once and connects to the background service right after; Start all and Stop all return at once and the list follows. Press Stop (or Stop all) again to kill what is still stopping.
  • Floods don’t slow it down, as in 0.0.9: the console draws for at most 10 ms a frame and skips what it can’t show in time (with a note; the log keeps everything), the window gets only the shown service’s output, and a program that writes faster than it can be handled waits on its pipe instead of building a backlog, so stops stay instant.
  • One editor zoom: Ctrl+, Ctrl-, Ctrl+= and Ctrl+wheel all change it, every open file follows, line numbers stay readable, and Ctrl+0 resets it. The size is kept when the window closes.
  • Plugins’ panels open from Plugins ▾ → Show plugin panels, so the editor and console keep the width.

Running services

  • A background service runs your services and keeps them running when the window closes. The window only shows and asks. A crash of either one leaves the services alone, and leftovers of a crash are found and cleaned up.
  • Restarts back off from 1 s to 60 s and give up after a set number in 10 minutes; schedules take intervals, @daily or cron lines; a memory limit covers the whole process tree.
  • Install packages runs inside the service’s own isolation: a .venv for Python, node_modules, vendor for Ruby and PHP. Rust and PowerShell join the languages.
  • An environment check before each start says what will fail (runtime missing, no or broken venv, missing node_modules), and System check says how Pythonator itself runs and what this computer’s sandbox enforces.
  • Secrets from the environment are masked in the console, the logs and plugin messages.

Isolation

  • Three modes: Sandbox (default), Container and Full access. If a protection can’t be applied, the service doesn’t start.
  • Linux: Landlock (files, TCP ports, scopes) and seccomp in a small standard-library launcher, plus bubblewrap when available. macOS: Seatbelt. Windows: AppContainer with recorded, reversible folder grants, and a job object.
  • Ports: list them, choose this computer or other computers too. Windows: Make reachable adds a loopback exemption, a loopback permit and firewall rules for that service only (127.0.0.1, and private networks when asked); Undo removes them. The permit is what lets the browser on the same PC open a sandboxed server: the exemption and firewall rule alone never got past Windows’ own block of loopback connections into an AppContainer.
  • Containers run with every capability dropped, no-new-privileges, a read-only image and a process limit, and can join a container network to reach a database.

Plugins

  • Every plugin runs in its own sandboxed process and talks to Pythonator through a checked message protocol.
  • Official plugins are recognised by SHA-256 from a reviewed catalog. Third-party plugins show a warning, start in test mode with no permissions, and are disabled when they flood, send garbage or crash repeatedly.
  • Six permissions: network, read_logs, inspect, control, policy, ui. Settings forms and panels are declared, not coded.
  • Three official plugins: Webhooks (Discord, Slack, Telegram, Teams, ntfy, any URL), Guard (rules and a watchdog) and Health checks (a live panel).

Also

  • The editor is QScintilla: fast with big files, highlighting for every language, multiple carets.
  • Git: hardened clone and fast-forward-only pull.
  • Licensing and Support in the toolbar.
  • The background service’s API is documented, with a command-line client in docs/examples/pyctl.py.
  • Documentation rewritten, on the website and in docs/.
  • Installers as in 0.0.9: a Windows setup.exe (and portable .zip), a .dmg for Apple silicon and for Intel Macs, and a .deb for x64 and arm64 Linux (and a .tar.gz). An update stops the background service first; uninstalling on Windows also takes the sandboxes’ entries off folder permissions.
  • CI on Windows, macOS and Linux, which also builds each installer, installs it and starts the app; pip-audit on hash-pinned lock files; releases built from locked dependencies, tested the same way and attested.

Removed

  • The AI assistant plugin, the plugin pyproject.toml packaging, the bot.json and other old-format migrations, the in-app API reference generator, and the code signing scripts (the downloads are unsigned). 0.0.9’s pythonator.json is still imported once.

0.0.9

  • Windows sandbox: Make reachable… makes a sandboxed server reachable from this PC on its own address (http://127.0.0.1:8765/), with or without ports under Serves on. It adds a firewall rule for that sandbox that admits this PC only. Press it once more for services set up with 0.0.8 or earlier.
  • Dependencies menu: the venv controls are always there for Python services. A line says where the service runs, then Create venv, Recreate venv… and a Use .venv on/off switch, greyed out where they don’t apply.
  • A venv you create is used from then on, even if the service was set to another Python.
  • Other runtimes’ Dependencies menu says where their packages go. The docs compare each runtime’s equivalent of a venv.

0.0.8

  • Python services: Pythonator asks before running outside the project’s venv (no venv, a venv the service doesn’t use, or a broken one). You can use the venv, create or recreate it, or continue without. The choice can be remembered per service.
  • After creating or recreating the venv, the start, install or command you asked for runs in it.
  • $ commands that install for your whole account (npm -g, yarn global, gem install, composer global, pip --user…) ask first, and offer the project-local command instead.

0.0.7

  • Windows sandbox: “working folder read only” is enforced again for a service that was set to “read & write” before. Pythonator now also blocks writes that another folder’s permissions would allow.

0.0.6

  • Removed the command line added in 0.0.5. Pythonator is a desktop app; everything is in the window.
  • Cleaned up the changelog.

0.0.5

  • Windows sandbox: temporary files now go to the sandbox’s own temp folder instead of the service’s folder.
  • Dependencies are checked for known vulnerabilities on every change and every week.
  • Dependabot now also keeps the app’s and the official plugins’ requirements up to date.

0.0.4

  • Windows sandbox: a first attempt at keeping temporary files out of the service’s folder (finished in 0.0.5).

0.0.3

  • Windows sandbox: pip installs and Python’s tempfile work in sandboxed services.
  • Guard plugin: rewritten as a security policy with 19 rules for isolation, exposed ports, outgoing connections, container images and a resource watchdog. Each rule can warn, stop or restart, with per-service exceptions. See the Guard plugin’s README.
  • Webhooks plugin: alerts on Discord, Telegram, WhatsApp, Slack, Teams, ntfy, Pushover, Gotify or your own endpoint, batched per service and rate-limited. See the Webhooks plugin’s README.
  • Plugin SDK 2: plugins can inspect a service’s setup and resource use, and have multi-line and tabbed settings. See Writing a plugin.
  • Each service’s outgoing connections are now recorded with its listening ports.

0.0.2

  • Windows sandbox: “Create venv” works, and the venv always has pip.
  • “Install dependencies” adds pip first to a venv that has none.
  • Windows sandbox: $ commands run in cmd, because PowerShell can’t run in the sandbox.
  • Sandboxed services no longer inherit Pythonator’s own DLL search path or internal variables.

0.0.1

The first public release. Install it from the release page; development builds (0.1.x) don’t offer it as an update. Your services, settings and logs are kept.

  • Services in Python, Node.js, Bun, Deno, Go, Java, .NET, Ruby, PHP, shell, PowerShell or any program. See the Runtimes page of that version’s docs.
  • Restarts with back-off and a crash-loop limit, schedules, memory and CPU limits, autostart and start at login.
  • A background service keeps services running while the window is closed.
  • A sandbox per service on Linux, macOS and Windows, and Docker / Podman containers. See Security.
  • An editor with highlighting and completion, a fast console with colours, rotating logs and history.
  • Clone from Git and pull before each start.
  • Plugins: official ones are verified against a reviewed catalog; third-party ones always run sandboxed. Official plugins: webhooks, guard and the AI assistant (Claude, OpenAI, Gemini, DeepSeek, Ollama).
  • A website with guides, a glossary, a dependency list and an API reference.