Released September 24, 2026

Tainer 2.0

Open to everyone. Smarter, faster and safer for everyone who runs it.

Tainer 2.0 site dashboard

Open source

Now open source.

Every line of Tainer is now on GitHub under the GNU Affero General Public License v3.0. The dashboard, the load balancer, Tainy and every fix in this release. Read it, run it, change it, and send the good parts back.

Load balancer

Looks before it leaps.

Every load balancer change in 2.0 follows one idea: never surprise the person who runs the cluster. It starts in dry run, leaves containers alone until you say so, plans whole-cluster moves you can preview, and can see an overload coming.

Node scores

Dry run
pve-0182
pve-0246
pve-0338
pve-04 maintenance12

Would migrate

VM 214pve-01pve-03predicted to cross threshold in 18 min
CT 108pve-04pve-02draining, inside downtime window
0containers moved until you opt in
1migration at a time by default
30 minforecast horizon for predictive moves
50%of the score is memory, up from 30%

Dry run first

Auto-migration logs every move it would make, using the same pipeline and pacing, without touching anything. It's on by default until you trust it.

No surprise downtime

Containers can't live-migrate, so they stay out of automatic balancing unless you allow them, always or only inside windows like 22:00-06:00.

Maintenance drain

Put a node in maintenance and its guests move off one at a time to healthy nodes. Guests that can't move raise a warning.

Whole-cluster plans

Preview the fewest moves that even out the cluster, with projected imbalance before and after. Nothing moves until you click Apply.

Predictive balancing

An opt-in forecast over the last 30 minutes moves a workload before a node crosses the threshold, and logs its evidence.

Pressure-aware scores

On Proxmox VE 9, kernel pressure stall data catches contention that plain utilization hides.

Smaller, smarter moves

The balancer moves the smallest guest that fixes the overload, VMs before containers, and counts ballooned VMs by what they really use.

No migration storms

Max Concurrent Migrations defaults to one and tracks moves to completion through the Proxmox task API.

Control each guest with a Proxmox tag.

Tags are compatible with ProxLB, so rules you already wrote keep working. Excluded nodes and VMIDs can now be edited in the settings form too.

How the load balancer works
  • plb_ignoreNever moved by anything
  • plb_manualOnly by drains and plans you apply
  • plb_pin_<node>Stays on that node
  • plb_affinity_<group>Group members stay together
  • plb_anti_affinity_<group>Group members stay apart

Tainy

Your assistant. Your model.

The assistant has a new name and a new home. Tainy can run on any OpenAI-compatible endpoint you host, and it can now take a request from a sentence to a running container, asking for your approval at every step that changes something.

Air-gap friendly

Point Tainy at vLLM, Ollama, LM Studio or your company LLM gateway. Prompts and cluster data stay on your network.

Tool policy per group

Hide write or destructive tools from a group. Helpdesk can look without touching.

Operator notes

Site guidance every Tainy follows, like never restarting CT 105 during business hours.

Usage and cost

Per-user tokens and tool calls for today and 30 days, with optional cost estimates.

ISOs to VMs

Tainy downloads an installer ISO from a URL you give it and creates a VM that boots from it.

Streams and thinks out loud

Replies stream word by word. Reasoning models get a collapsed Thought process block.

Tainy
llm.internal/v1 · your model

run pihole on node 1

search_docker_imagespihole/pihole
pull_docker_imageCT template ready
get_task_statustask finished
Approval needed

create_container_from_image

image
pihole/pihole
node
node1
network
static IP from pool
password
••••••••
ApproveDeny

Real-time

Live. Not refreshed.

The dashboard, the deployments list and every deployment page now follow a live event stream. Start a guest in the Proxmox UI, and Tainer shows it within seconds, for everyone who has the page open.

Deployments

live
  • runninggiteaCT 101
  • stoppedpiholeCT 108
  • runninggrafanaCT 112
  • runningbuild-runnerCT 214
  • One watcher per site

    However many browsers are connected, Tainer runs a single watcher per site, and stops when nobody is looking.

  • Buttons that keep up

    Start, stop and restart show their spinner and flip the status the moment the Proxmox task finishes.

  • A fallback that stays

    Periodic refresh still runs underneath, so a dropped stream never leaves a stale page.

Automation and admin

Script it. Scope it. Sleep well.

API tokens let Terraform, CI and your own scripts call Tainer without a browser session. Each token has its own permissions and site scope, is shown once, stored only as a hash, and can expire.

ci / deploy.sh
# token scoped to one site, stored only as a hash
curl https://tainer.example.com/api/... \
  -H "Authorization: Bearer tnr_…"

Firewall on every deployment

See and edit the guest-level Proxmox firewall from the deployment page: policies, rules and a one-click toggle.

Tainer backs itself up

Users, 2FA, encrypted credentials, the audit log and policies in one passphrase-encrypted file (AES-256-GCM), daily or on demand.

Operators run their own site

Site permissions now cover delete, migrate, recreate, backup policies, updates and the CVE scanner. Before, those were admin only.

Reset a user's 2FA

Lost the authenticator and the recovery codes? An admin clears it from the Users page, and the reset is audited.

Security

Locked down, line by line.

2.0 closes gaps across sign-in, SSO, API tokens, Tainy, webhooks and SSH, and every site page now checks access on its own.

35

security fixes and hardening changes in a single release.

Every site page checks access

Pages, consoles and read endpoints verify the session and site access themselves.

No privilege escalation

Only admins create admins. Group managers can only grant what they hold.

Hardened SSO

Tainer 2FA on SSO sign-in, verified email for account matching, same-origin redirects only.

An audit log that can't be flooded

More events recorded. Repeated failures from unknown callers are throttled and summarized.

Tighter SSRF guard

Webhooks don't follow redirects and are checked against the address actually connected to.

Fair lockouts

Lockout is tied to email and client address, so nobody can lock an admin out.

Read all 35 in the changelog

And so much more.

  • Deploy forms pick the Automatic node from live balancer scores
  • The balancer activity log records breakers, errors and settings changes
  • Default score weights are now memory first
  • Every load balancer setting explains itself inline
  • The assistant is now called Tainy
  • Tainy can deploy a Docker image without a template
  • Tainy waits for long Proxmox tasks before moving on
  • Deployment activity is no longer lost on concurrent writes
  • Docker image library path is set in Settings
  • Recovery codes work when the 2FA secret can't be read
  • A wrong 2FA code keeps you on the code form
  • The Docker image now runs on Node 24

Before you upgrade

A major version, with major-version care.

Most installs only need an AUTH_SECRET. Read the list before you pull, and back up the data volume first.

openssl rand -base64 32
Full upgrade guide
  1. 01

    Set AUTH_SECRET before you upgrade.

    Tainer checks it at boot and will not start without it. If you ran without one, the first start re-encrypts everything under the new key. Everyone is signed out once.

  2. 02

    Behind a reverse proxy, set APP_URL or TAINER_TRUST_PROXY_HEADERS=true.

    SSO no longer trusts forwarded headers by default.

  3. 03

    API tokens are limited to their site scope.

    Scripts that used a token for global actions will be refused.

  4. 04

    Providers without email_verified need a checkbox.

    For Entra ID and similar, enable Trust email without email_verified claim to keep email matching.

  5. 05

    Password reset no longer turns off 2FA.

    Users who lost everything need an admin to use Reset 2FA.

  6. 06

    Strict SSH host key policy is enforced everywhere.

    Sites set to strict need a known_hosts file.

  7. Five more notes cover site connection edits, group permissions, AIA certificates, webhooks and the Node 24 image. They are all in the upgrade guide.

Get Tainer 2.0.

Free, open source and yours to run. Pull the image or build it from source.

docker pull tainersh/tainer:2.0.0