Skip to content
Projects

raviqqe/onerpc has 31 GitHub stars and 1 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-10 02:23 UTC. Last push 2026-11-03.

How these counts are measured

The router-less serverless RPC framework for TypeScript

What you can do

  • 🔮 Seamless client-server communication You can call remote procedures just as seamless as calling local functions.
  • 🛡️ Type safe Server-client communication is made safe with request and response types in TypeScript which are used by both client and server.
  • 🔥 Serverless first Routing is delegated to other frameworks or infrastructures.
  • 🤝 HTTP friendly You can leverage full potential of HTTP functionalities, such as cache control headers.

Measured star growth

in 24h
0
in 7 days
Collecting history
in 15 days
Collecting history
in 1 month
Collecting history

Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.

README.md

Original

oneRPC

GitHub Action Codecov npm License

The router-less serverless RPC framework.

oneRPC is a minimal RPC library to convert a server-side function of a type, (input: T) => Promise<S> into (request: Request) => Promise<Response> and make it callable from the client side in a type-safe way.

Currently, we support React Router, Next.js Route Handlers, and AWS Lambda.

Features

  • 🔮 Seamless client-server communication

    You can call remote procedures just as seamless as calling local functions.

  • 🛡️ Type safe

    Server-client communication is made safe with request and response types in TypeScript which are used by both client and server.

  • 🔥 Serverless first

    Routing is delegated to other frameworks or infrastructures.

  • 🤝 HTTP friendly

    You can leverage full potential of HTTP functionalities, such as cache control headers.

  • 🐁 Minimal dependencies

    It depends only on Web APIs. Thus, it works on many platforms including Node.js, Deno, and edge runtimes.

  • 🌊 Streaming support

    Stream responses are transferred as JSON Lines and clients can consume them chunk by chunk.

Documentation

Here.

Examples

For all examples, see a examples directory.

Next.js with Route Handlers

app/api/foo/route.ts:

import { query } from "onerpc";
import { z } from "zod";

export const GET = query(z.number(), z.string(), (x) => `Hello, ${x}!`, {
  path: "/api/foo",
});

app/page.tsx:

import { type GET } from "@/app/api/foo/route";
import { query } from "onerpc/client";

export default async (): Promise<JSX.Element> => (
  <div>{await query<typeof GET>("/api/foo", 42))}</div>
);

References

License

MIT

Explore related projects