Every recipe. No slots, no keys, no limits.
The hub is public and free for every developer. Sign in exists to keep bots off the API — not to unlock anything.
Mechanical
Something was renamed or moved. Read straight out of the release notes for that version jump, and available for anything on PyPI.
Behavioral
The call still exists, but it means something different now. Hand-written per library, then re-checked against your own code before a line moves.
What the hub already knows.
Data & scientific
Where a silent default flip corrupts numbers instead of raising.Copy-on-Write, numeric_only flip, pd.NA nullable dtypes, inplace chains
Removed scalar aliases, promotion rules (NEP 50), copy= semantics
Relocated submodules and removed legacy solver kwargs
Estimator kwarg renames, deprecated attribute accessors
Expression API renames and strictness changes
Relation API and result-fetch surface
Figure factory removals, template renames
Query planner defaults and collection API
Web & API frameworks
Framework majors that move code between packages, not just names.URL/middleware surface, async views, removed model & form APIs
Dropped before_first_request, JSON provider, app-context rules
Pydantic v2 beneath the framework — response & validation edges
Session lifecycle and timeout kwargs
Worker config keys and header handling
find_element_by_* removals, options objects
Typing, ORM & validation
The jumps that rewrite how objects are constructed and validated.validator → field_validator, Config → model_config, .dict() → .model_dump()
2.0 select() style, Session.execute, typed DeclarativeBase
Removed collection helpers and cursor kwargs
Connection pool and async client surface
Cursor/row-factory API and connection context rules
Positional-arg removal across the client
Orchestration & platform
Migrations that are really re-architectures — mapped before they're attempted.Provider splits, logical_date rename, no direct metadata-DB access
Config key lowercasing and CLI entry points
Consumer/producer kwarg drift
Removed RDD helpers, Arrow defaults
Fixture and hook signature changes
Renamed constants and removed C-API shims
Six upgrades, and what changes underneath them.
Not a case study — these are documented changes in these libraries, and you can check every one against their release notes. Pick one to see the molt, the shed skin: the old behavior on the left, what it grew into on the right. The code barely changes. What it does underneath is another matter.
totals = df.sum() # silently drops# non-numeric colsdf["net"].fillna(0, inplace=True)
totals = df.sum(numeric_only=True)# ^ now explicit — otherwise raisesdf["net"] = df["net"].fillna(0) # CoW
What actually changes
- Copy-on-Write: chained inplace assignment stops mutating the original frame
- numeric_only default flipped to False — reductions that dropped columns now raise
- pd.NA / nullable dtypes: use pd.isna(), not `is None`
How PyMolt surfaces it — contract traces the boundary under 1.5 and 2.2, then diffs — result_changed flags exactly these.
Your stack isn't listed? It still gets migrated.
Nothing here is a whitelist. The catalog is just the work already done.
Any package on PyPI
Ask for a version pair and the hub reads that release diff on the spot — renames, moved imports, dropped arguments. It does not have to be in the catalog.
Anything that turns out to be behavioral
If the jump changes what code means rather than what it's called, that needs rules written by hand. Tell us which one and it gets built, then added to the catalog for everyone.
Mechanical recipes are instant. Hand-written rules take as long as they take — we'll tell you which.
Request a libraryYour code never goes anywhere.
A recipe request is a package name and two version strings. That is the entire payload — no source, no file names, no lockfile, no telemetry. Rules come back, get re-run against your own code, and only the ones that hold are applied. The round trip, drawn out
{
"package": "pandas",
"from": "1.5.3",
"to": "2.2.0"
}Cloud, on-prem, or nothing at all.
Axiom Cloud Hub
The default. Public, free, rate-limited by token rather than by wallet.
pymolt auth loginYour own endpoint
Point the CLI at an internal recipe server. Nothing leaves the network.
export PYMOLT_ENDPOINT=…Offline cache
Recipes replay from .pymolt_cache. An air-gapped machine still migrates.
pymolt codemods . --offline