
No .proto, no stubs
Graftcode reads your public method signatures directly. There's no contract file to author, distribute, or keep in sync — and no protoc step to run on every change.

Same wire speed. Far less code.
Skip the .proto files, the stub regeneration, the status-code mapping. Expose a class and call it.
/USED BY LEADING COMPANIES
/AT GLANCE
Both give you strong typing and fast calls. The difference is everything around the call.
/WHY SWITCH
gRPC solved fast RPC. It didn't remove the work that surrounds every call.

Graftcode reads your public method signatures directly. There's no contract file to author, distribute, or keep in sync — and no protoc step to run on every change.

Move a module from in-process to remote, or swap the transport, without touching a single caller. gRPC bakes the wire into your code; Graftcode keeps it out of it.

Your public methods are exposed as MCP tools automatically. Any MCP client — Claude, Cursor, ChatGPT — calls them as-is. With gRPC that's a custom wrapper you write and maintain.
/SHOW, DON'T TELL
A single typed remote call — getUser(42) — end to end.
service UserService {
rpc GetUser (GetUserRequest) returns (User);
}
message GetUserRequest { int32 id = 1; }
message User { int32 id=1; string name=2; }$ protoc --go_out=. --go-grpc_out=. user.protofunc (s *server) GetUser(ctx, r *pb.GetUserRequest)
(*pb.User, error) {
u := db.Find(r.Id)
return &pb.User{Id:u.Id, Name:u.Name}, nil
}conn, _ := grpc.Dial(addr, opts...)
client := pb.NewUserServiceClient(conn)
res, err := client.GetUser(ctx, &pb.GetUserRequest{Id:42})export class BillingService {
calculateBill(kwhUsed: number): number {
return kwhUsed * 0.42;
}
}import { BillingService } from "@acme/billing-service";
const billing = new BillingService();
const total = billing.calculateBill(420);/FEATURE MATRIX
| Capability | GRPC | Graftcode |
|---|---|---|
| PROGRAMMING MODEL | ||
| Call with Strongly Typed Methods without IDL | [×] NO | [✓] YES |
| Regular Exception support | [×] NO | [✓] YES |
| Complex DTOs & arrays passed by value in one call | [✓] YES | [✓] YES |
| PROGRAMMING DEPENDENCIES & CONTRACTS | ||
| No additional SDK | [×] NO | [✓] YES |
| No contract files | [×] NO | [✓] YES |
| Use remote modules as dependencies | [-] PARTIAL | [✓] YES |
| TOPOLOGY & TRANSPORT | ||
| Monolith <-> Microservices switch by configuration | [×] NO | [✓] YES |
| Switch remote <-> in-memory with config only | [×] NO | [✓] YES |
| TOPOLOGY & TRANSPORT | ||
| Same programming model for queues / event buses | [×] NO | [✓] Via plugins |
| Full streaming | [✓] YES | [✓] YES |
| Automatic Native MCP | [×] NO | [✓] YES |
/BY THE NUMBERS
60%
less code for AI to touch
1/8
of REST/RPC overhead via Hypertube™
20
coding languages supported
10
package managers supported
/FAQS
No. Hypertube™ connects language runtimes directly and skips the serialization overhead of HTTP-based transports — roughly 1/8 of REST/RPC overhead. In-process calls run at near-native speed. You keep gRPC-class performance without the gRPC-class boilerplate.
/COMMUNITY
Many developers are loving Graftcode and what it brings to them.


















“Graftcode appears to be an exceptionally useful platform. Its key value proposition is allowing developers to concentrate on core business requirements instead of tedious service integration tasks. I believe the concept of beginning with a monolithic structure and then having the option to dynamically transition to a microservice architecture will prove to be extremely valuable.”
Expose one class, install the Graft, and make your first typed cross-service call inabout 10 minutes.
