Runtime versions
Waiso runs the latest stable version of each language and keeps the previous one side by side, so an upgrade never breaks a script by surprise. A script follows the latest version until you pin it; when a new version ships, each script is rehearsed on it — its last good run replayed with the same inputs — and moves only if the replay succeeds with the same shape of result.
- Know which versions each language runs on
- Follow the latest or pin a script from the editor’s badge
- Read a rehearsal and move a script to a new version
- See every script’s version from the Workers tab
Latest and previous, side by side
| Language | Runtime | Latest | Previous |
|---|---|---|---|
| Python | CPython | 3.15 (3.15.0) | 3.14 (3.14.8) |
| TypeScript, JavaScript | Bun | 1.4 (1.4.3) | 1.3 (1.3.14) |
| C, C++ | gcc / g++ | 14 | — (latest only) |
A script records a minor version (3.14, 1.3) or nothing, which means “follow the latest”. The versions offered are the ones every online worker carries, so a selector never offers a version that some worker could not run. C and C++ always compile with the latest gcc and record nothing.
import platform
def main():
return {"runtime": "python", "version": platform.python_version()}{
"runtime": "python",
"version": "3.15.0"
}Follow the latest, or pin
- Open the version menu
Click the engine badge at the foot of the code (Change the language version). The Language version menu has two options.
- Pick previous to pin
Python 3.14 · previous — Stays on 3.14 until you move it. The script is pinned: no rehearsal will ever move it.
- Pick latest to follow
Python 3.15 · latest — Follows each new stable release. From a pin on the previous version this goes through a rehearsal first (Moves after a rehearsal passes.).
The rehearsal
A rehearsal replays the script’s last successful run — same code, same inputs — on the new version. It passes when the run succeeds and its result has the same top-level shape: the same kind of value and, for an object, the same keys. Then the script moves — and, when it was published, its published code is recorded again as a new published version on the new runtime, with the packages the rehearsal installed. Otherwise it stays where it was, and the failure says why (The output’s keys changed (missing total).).
- Automatic: when a newer version ships, every script that follows the latest is rehearsed in the background, a few at a time.
- By hand: a script behind shows 3.15 available on its badge and a Move to Python 3.15 button — Runs the script on 3.15 with the inputs of its last good run. It moves only if the result matches.
- A rehearsal that failed is not retried by itself, and a pin you chose is never moved.
| What the badge says | Meaning |
|---|---|
| Rehearsing on Python 3.15… | The replay is running |
| Moved to Python 3.15. | It passed; the script now runs on 3.15 |
| Stays on Python 3.14 — the rehearsal failed. | With the error and Open the rehearsal run |
| Nothing to replay — run the script once successfully first. | No good run yet |
Python packages without a build yet
On the newest Python, a script that is not pinned installs only pre-built packages (wheels), never a long build from source. When a package has no build for the newest Python yet, the script runs on the previous one by itself and says so — on the badge, and in the Dependencies panel: Running on Python 3.14 — numpy has no build for 3.15 yet. Once the package ships one, Move to Python 3.15 rehearses it.
Every script at once: the Workers tab
The Workers tab of the projects page has a Language versions section — Scripts move to the newest version after a rehearsal passes. For Python and Bun it shows how many scripts are on Latest and Previous, and a searchable list with the columns Script, Version (with a pinned mark), Last rehearsal (Queued, Running, Passed, Failed, Skipped) and Error.
- Rehearse all behind queues a rehearsal for every script still on the previous version.
- Re-run on a row rehearses one script again — the way to retry a failed rehearsal after fixing the script.
- C and C++ are not listed: they run on the latest gcc only.
Limits
- Only two versions per language are offered: the latest and the previous minor. A version older than that is not available.
- Changing the version needs edit access to the script.
- A rehearsal compares the result’s shape, not its values: a script whose output depends on the date or on data can pass with different values.