This is a simulation, not a real project. The codegen is
the real one, but it is running in a browser sandbox, so some things behave
differently than they would in your app:
- Nothing is actually called. There is no server behind
createRpcClient — you get the types, not a working RPC round trip.
- One buffer is the whole world. Handlers, routers and custom
types must all be defined in the left pane. Specs referencing modules from a
real app (Ecto schemas, middleware,
RpcElixir.CustomType
implementations in other files) cannot resolve.
- Object field order can differ from
mix rpc.gen.ts.
The IR holds fields in a map, and this VM iterates maps in a different order
than the host BEAM. Harmless in TypeScript, but the output is not byte-identical.
- The client types are a stub. The consumer pane checks against a
small hand-written declaration of
@elixir-ts-rpc/client, not the
published package, so its shapes may drift.
- Source links point at the editor, not a file. Real generation
embeds an absolute
file:// link back to the handler line, which your
editor opens. Here the handler is the left pane, so the link names that buffer and
this page reveals the line itself.
- Elixir 1.17.3 only, because Popcorn pins it exactly. The
FromInferred backend needs 1.19 set-theoretic types, so it cannot be
demonstrated here.
- Slower. A regenerate takes seconds in wasm; natively it is
part of a normal compile.