Aster
RPC after hostnames.
Identity-first connectivity, content-addressed contracts, and cross-language services for real distributed systems.
Built for AI runtimes, edge deployments, and multi-language services that cannot assume static addresses or bolt-on trust.
Define services in code. No .proto files. No generation step.
Decorate a class with @service and its methods with @rpc. Aster scans the type signatures, generates a content-addressed contract, and handles serialization across languages. Your Python dataclasses are the schema.
from dataclasses import dataclass
from aster.decorators import service, rpc
@dataclass
class HelloRequest:
name: str = ""
@dataclass
class HelloResponse:
message: str = ""
@service
class HelloService:
@rpc
async def say_hello(self, req: HelloRequest) -> HelloResponse:
return HelloResponse(message=f"Hello, {req.name}!")
Browse, inspect, and invoke any service from the shell.
The Aster shell connects to any peer and lets you navigate services like a filesystem. Browse methods, inspect contracts, and invoke RPCs interactively — no local type definitions needed.
Tab completion, streaming output, session subshells, and non-interactive CLI equivalents for scripting.
$ aster shell <endpoint-addr>
producer:/$ cd services/HelloService
producer:/services/HelloService$ ls
Method Pattern Signature
say_hello unary (HelloRequest) -> HelloResponse
producer:/services/HelloService$ ./say_hello name="World"
-> HelloService.say_hello(name='World')
(42ms)
{
"message": "Hello, World!"
}
Connect any AI agent to your services in one command.
aster mcp runs an MCP server that exposes your services as tools with full type information. No OpenAPI specs, no REST gateways, no SDK generation — the contract is the tool definition.
Three-layer security model: credential-based filtering, allow/deny patterns, and human-in-the-loop confirmation.
# Expose your service to Claude or any MCP-compatible agent
$ aster mcp <endpoint-addr>
# The agent sees typed tools automatically:
# HelloService:say_hello
# - name (string, required)
# - greeting (string, default: "Hello")
#
# FileStore:list (server_stream, returns array)
# FileStore:upload (client_stream, accepts _items array)
Hostname-first RPC no longer matches the systems we actually build.
Transport, serialization, and contract — intentionally separable.
Identity-first connectivity, NAT-tolerant reachability, real-world networks.
High-performance cross-platform payloads, including row-oriented modes for data-heavy workloads.
Code-first services and content-addressed contract identity.
Built for the systems that come after cloud-native defaults.
AI runtimes, edge deployments, sovereign meshes, and multi-language services need a different foundation.