ScriptsGuide

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.

7 min readBefore this: Writing codeOpen in Waiso
What you will learn
  • 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

LanguageRuntimeLatestPrevious
PythonCPython3.15 (3.15.0)3.14 (3.14.8)
TypeScript, JavaScriptBun1.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.

report.py
1import yaml2 3def main(title: str = "Daily report"):4    rows = [{"city": "Recife", "orders": 2}]5    return {"title": title, "yaml": yaml.safe_dump(rows)}6 7 8 9 
Python 3.15LSP
Language version
Python 3.15 latestFollows each new stable release.
Python 3.14 previousStays on 3.14 until you move it.
The badge names the version the script runs on; its menu offers the latest and the previous.
which_runtime.py
import platform


def main():
    return {"runtime": "python", "version": platform.python_version()}
Expected outputSuccessThe Python variant on a script that follows the latest; TypeScript reports <code>1.4.3</code>, C <code>14.x</code>
{
  "runtime": "python",
  "version": "3.15.0"
}

Follow the latest, or pin

  1. 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.

  2. 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.

  3. 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 saysMeaning
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.