Differential: Type safe RPC that feels like local functions
Idempotency & Delivery Semantics
- Large part of the thread debates the “idempotency” feature.
- Critics argue the framework cannot make arbitrary effectful functions truly idempotent; at best it can offer at-most-once or at-least-once semantics, not exactly-once.
- The system reportedly uses idempotency keys plus a lock/lease; for functions marked idempotent it aims for at‑most‑once by only issuing the call once to a worker. If not marked, failed calls may be retried on another machine (at‑least‑once).
- Several commenters say the docs and marketing blur these distinctions and risk misleading users, especially when examples involve payments.
- Some suggest renaming the feature to something like “tryOnce” or “retry policy” instead of “idempotency.”
Error Handling, Retries & AI
- Errors are surfaced as exceptions in async functions; timeouts from lost replies are treated similarly.
- There is an AI-based “predictive retries” feature that classifies errors (e.g., connection resets, deadlocks) as transient and retries automatically.
- This is opt‑in and currently a global (per-cluster) switch; some argue it should be per-function and question the value of AI here versus explicit annotations.
- Concern: if the AI misclassifies a non-idempotent operation as retryable, side effects could be applied twice.
RPC Abstraction & Distributed Systems Concerns
- Many push back on the tagline “feels like local functions,” warning that hiding network realities (latency, partial failure, partitions) historically leads to fragile distributed monoliths.
- Others say RPC-like ergonomics are fine as long as developers remain aware they’re in “distributed systems land.”
- There is broader debate about whether making remote calls feel easy encourages bad architectures versus empowering teams who have already chosen microservices.
Architecture, Scope & Serialization
- Product is described as type-safe RPC for backend/microservices with a centralized control-plane orchestrating calls, retries, and health checks (clustered for availability).
- Some see it as “trpc/rspc + service mesh”; others call it “service mesh with bells & whistles.”
- It’s TypeScript-first, which raises concerns for polyglot environments versus IDL-based systems like gRPC.
- Arguments must currently be JSON-serializable; functions/promises aren’t supported yet. Critics say this omits the harder parts of building a true distributed language runtime (closures, aliasing, mutation semantics).
Reception & Maturity
- Several commenters find the idea interesting and note similar internal systems in big companies.
- Many criticize unclear or overreaching docs/marketing, especially around idempotency and reliability guarantees, but acknowledge the project is early and still iterating.