← Back to Blog

pyRPC v0.13.0: explicit backends and native dev servers

·6 min read

v0.13.0 is the release where pyRPC stopped inferring and started asking. Your backend framework, entry point, and registration module are now declared configuration; the dev server launches each framework natively; and the TypeScript client grew tRPC-style links with request batching. Here is the tour.

1. Declared backends

{
 "backend": { "framework": "flask", "entrypoint": "main:app" },
 "clients": [{ "framework": "Next.js", "root": "../frontend" }]
}

The wizard asks the framework first, sniffing only preselects, Enter confirms. --yes sniffs or errors; it never guesses. Django additionally requires a types_module (the module where your @rpc decorators live), which also fixes stale-type regeneration for split-module layouts. Existing flat configs are rewritten in place on your next run, that is the whole migration.

2. Native dev servers

fastapi/asgi -> python -m uvicorn module:app --reload
flask -> python -m flask --app module:app run --reload
django -> python manage.py runserver 127.0.0.1:8000

No WSGI bridges, no ASGI wrappers around WSGI apps. Flask runs under Flask; Django under runserver; tracebacks stay native. And because launch resolution returns data rather than spawning processes, editing the framework in pyrpc.json live-swaps the runtime mid-session.

3. Links and batching

const api = createClient<Types>({
 links: [httpBatchLink({ url: "http://localhost:8000" })],
})

One terminating link owns transport (httpLink or httpBatchLink); composable links can sit in front later. Batching coalesces operations issued in the same tick into one POST array, dispatched sequentially server-side, capped at 100, each operation resolving independently. All four adapters re-export the links.

4. Quality-of-life

  • Client-root autocomplete: live directory completion jailed to the project root (symlinks and dot dirs filtered), Tab to accept.
  • pyrpc watch --module X works without a config file again, and the watchfiles shadowing crash is gone.
  • Actionable import errors carried forward: failures point at your file and line.

5. Site and docs

A visual redesign unified branding, light/dark theming, and syntax highlighting across landing, docs, and playground. The sidebar now matches how people arrive, adapters first, links documented properly, AI resources (llms.txt, MCP) promoted to a section of their own. All twelve examples were brought up to the same conformance bar.

Upgrading

  • Rerun pyrpc dev once to rewrite legacy configs (the wizard preselects detected values).
  • Migrate client constructors to the links array, see the migration post; TypeScript flags every call site.
  • Bump packages: pyrpc-core==0.13.0, adapters ^0.13.0.

Full details live in the changelog; deep dives on each feature are linked from the blog index.