From the same method surface, plat can create:
What is happening here
What is happening here
Why this is weird
What methods exist, what they accept, and what they return.
Transport, runtime, language, and generated caller surfaces.
Call it like you’re there, whether you’re in TS, Python, CLI, or an AI tool-call loop.
Run plat inside a normal Node app and expose your methods over HTTP without changing the class shape.
Use the same method-first model in Python, with Python-native validation and server tooling underneath.
This is the browser-hosted variant. It is great for demos, experiments, and peer-to-peer browser scenarios.
Other runtimes and transports can plug into the same model over time.
Plat can describe your method surface as a full OpenAPI document, including routes, schemas, summaries, and response shapes.
The same contract can power familiar interactive docs and exploration, so humans get a useful playground from the same source.
Docstrings, examples, and schemas become shared interface metadata instead of one-off docs that drift from the code.
Call methods from browser or Node code with a proxy that feels local even when the implementation lives elsewhere.
Keep the same method surface in Python callers so TS and Python apps can both speak the same contract.
Expose the same methods as AI tools instead of re-describing capabilities by hand for each model provider.
Turn the same methods into a command-line interface with built-in help, argument parsing, and discoverable commands.
What you should be thinking about is:
That is the part plat treats as sacred.
Canonical routes:
Why this matters:
Not nested route trees. Not manually synchronized operation names. Just a flat, obvious method surface.
Each operation should feel tool-shaped:
Why this matters:
That shape works unusually well across HTTP APIs, CLIs, generated clients, MCP tools, and AI tool-calling systems.
The same method call should stay usable even when the carrier changes:
You should not have to think:
Why this matters:
Carrier and plugin details are for transport authors. Normal users should still feel like they are just calling methods.
Docs, clients, CLIs, and tool definitions should all come from the same underlying interface, not from separate handwritten copies.
Why this matters: once these surfaces drift apart, users stop trusting the generated docs and clients. Honest generation keeps the whole stack coherent.
For normal plat users, the important thing is:
Why this matters: most users do not want to think about envelopes, retries, brokers, or provider-specific SDK quirks every time they make a call.
For plugin authors, transport and protocol mechanics are the extension story. For everyone else, it should just feel like calling methods.
Start with the package and the CLI. The rest of the flow builds from the same class methods.
Write a controller method, give it input and output types, and start the server. That single method surface becomes the source of truth.
Run the CLI to launch the server, then open the generated docs and OpenAPI description in the browser.
Point plat at the running OpenAPI spec and generate a client you can import directly into your app.
The same method surface can become a real command-line interface with flags, help text, and argument parsing.
You can also build an OpenAPI client at runtime and hand its tool definitions to an AI provider without changing your underlying methods.
Install the Python package and CLI first. After that, the flow is the same idea as TypeScript: define methods once and reuse them everywhere.
Write a controller method with Python types, then start the server. Plat turns that class into an API surface and OpenAPI spec.
Run the CLI to serve the app, then open the generated docs and OpenAPI description in the browser.
Generate a client from the running OpenAPI spec, import it, and call your method directly from Python code.
The same running server can also generate a Python CLI wrapper for scripts, automation, and shell usage.
You can also build an OpenAPI client dynamically, expose its tool definitions, and let an AI system call back into the same methods.
No. OpenAPI is one of the important outputs, but not the whole idea.
The core promise is: define useful methods once, then let clients, CLIs, docs, and AI tools all see the same surface.
Because flat method names make every generated surface simpler.
Deep route hierarchies and duplicated naming schemes create confusion fast, especially once you add SDKs, CLIs, and tool calling.
No. The calling experience is supposed to feel like this:
Not like this:
The carrier is important for plugin authors. For normal users, the method call should stay direct.
Yes. Plat supports Python servers and clients too.
The language can change. The method surface is the point.
Plat tries to keep the mental model the same even when a method is slow.
You can still think in terms of the same method, while getting:
It proves plat is not tied to a traditional backend process.
That demo is intentionally strange. Plat also works perfectly normally as a real TypeScript or Python server.