Simple, yet solid - Type-safe JSON-RPC 1.0/2.0 with OpenAPI support
Project description
python-jsonrpc-lib
Simple, yet solid. JSON-RPC 1.0/2.0 for Python.
JSON-RPC is a small protocol: a method name, some parameters, a result. python-jsonrpc-lib keeps it that way. You write ordinary Python functions and dataclasses; the library handles validation, routing, error responses, and API documentation. No framework lock-in, no external dependencies, no boilerplate.
Install
pip install python-jsonrpc-lib
Quickstart
Define methods as classes with typed parameters. The library validates inputs, routes calls, and builds responses automatically.
from dataclasses import dataclass
from jsonrpc import JSONRPC, Method, MethodGroup
@dataclass
class AddParams:
a: int
b: int
class Add(Method):
def execute(self, params: AddParams) -> int:
return params.a + params.b
@dataclass
class GreetParams:
name: str
greeting: str = 'Hello'
class Greet(Method):
def execute(self, params: GreetParams) -> str:
return f'{params.greeting}, {params.name}!'
rpc = JSONRPC(version='2.0')
rpc.register('add', Add())
rpc.register('greet', Greet())
response = rpc.handle('{"jsonrpc": "2.0", "method": "add", "params": {"a": 5, "b": 3}, "id": 1}')
# '{"jsonrpc": "2.0", "result": 8, "id": 1}'
Pass in a JSON string, get a JSON string back. What carries it over the wire is up to you.
If a is "five" instead of 5, the caller receives a -32602 Invalid params error immediately — no exception handling on your end.
The same AddParams dataclass drives validation, IDE autocomplete, and the OpenAPI schema.
Why python-jsonrpc-lib?
- Zero dependencies — pure Python 3.11+. Nothing to pin, nothing to audit beyond the library itself.
- Type validation from dataclasses — declare parameters as a dataclass, get automatic validation and clear error messages for free.
- OpenAPI docs auto-generated — type hints and docstrings you already wrote become a full OpenAPI 3.0 spec. Point any Swagger-compatible UI at it and your API is self-documented.
- Transport-agnostic —
rpc.handle(json_string)returns a string. HTTP, WebSocket, TCP, message queue: your choice. - Spec-compliant by default — v1.0 and v2.0 rules enforced out of the box, configurable when you need to support legacy clients.
Namespacing and Middleware
Use MethodGroup to organize methods into namespaces and add cross-cutting concerns:
math = MethodGroup()
math.register('add', Add())
rpc = JSONRPC(version='2.0')
rpc.register('math', math)
# "math.add" is now available
Quick Prototyping
For scripts and throwaway code, the @rpc.method decorator registers functions directly (v2.0 only):
rpc = JSONRPC(version='2.0')
@rpc.method
def add(a: int, b: int) -> int:
return a + b
For production use, prefer Method classes — they support context, middleware, and groups.
Documentation
Full documentation with tutorials, integration guides, and API reference:
- Tutorial: Hello World — first method, explained
- Tutorial: Parameters — dataclass validation in detail
- Tutorial: Context — authentication and per-request data
- Tutorial: OpenAPI — interactive API documentation
- Flask integration
- FastAPI integration
- Philosophy — design decisions and trade-offs
- API Reference
Claude Code Integration
If you use Claude Code, a skill for this library is available. It gives Claude built-in knowledge of jsonrpc-lib's API: creating methods, registering them, organizing with groups, handling errors, and adding context and middleware — without having to look up docs.
To use it, add the skill file to your project's .claude/skills/ directory.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file python_jsonrpc_lib-0.3.2.tar.gz.
File metadata
- Download URL: python_jsonrpc_lib-0.3.2.tar.gz
- Upload date:
- Size: 97.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Linux Mint","version":"22.2","id":"zara","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6cc03b76183fe6b34f255e970ca164faaabae4b666045b3352173506ae53523
|
|
| MD5 |
acd0b94d1b43b4175a99d199517126ab
|
|
| BLAKE2b-256 |
a7ede1293f61b1e8a711fb90ab5cb02a4d67359e0406c54ac00876ccfc09c4d7
|
File details
Details for the file python_jsonrpc_lib-0.3.2-py3-none-any.whl.
File metadata
- Download URL: python_jsonrpc_lib-0.3.2-py3-none-any.whl
- Upload date:
- Size: 28.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Linux Mint","version":"22.2","id":"zara","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b96825a865c32a133c1abe1990a04707e1b0b8b2874a42c60062585ba8fe287
|
|
| MD5 |
dd804fb269191f9be4189613047e0ecb
|
|
| BLAKE2b-256 |
885a98a7d7c52f1a417ddaba1db037b8ee42b1de63668cafff9b91df59166a5d
|