
No producers, no consumers
Traditional messaging requires producer and consumer code, broker SDKs, and message contracts. Graftcode turns ordinary public methods into remotely callable operations over your chosen message broker.

Keep the broker. Skip the plumbing.
Graftcode makes any public method callable over Kafka, RabbitMQ, Azure Service Bus, Amazon SQS, or Google Pub/Sub. Just switch plugins, with no queue-specific code or vendor lock-in.
/USED BY LEADING COMPANIES
/AT GLANCE
Graftcode doesn't replace queues or PaaS platforms. It simplifies how you use them. Call ordinary public methods over Kafka, RabbitMQ, Azure Service Bus, Amazon SQS, or Google Pub/Sub without writing broker-specific SDK code. Keep the same messaging capabilities with cleaner code and no vendor lock-in.
Messaging, Queues & Events
/WHY SWITCH
Keep the full power of your messaging infrastructure without coupling your code to broker-specific SDKs, producers, or consumers. Just call ordinary public methods.

Traditional messaging requires producer and consumer code, broker SDKs, and message contracts. Graftcode turns ordinary public methods into remotely callable operations over your chosen message broker.

Switch between Kafka, RabbitMQ, Azure Service Bus, Amazon SQS, and Google Pub/Sub by changing the plugin configuration. Your public methods and business logic stay exactly the same.

Changing a message contract can break consumers at runtime. Graftcode generates strongly typed clients directly from your public method signatures and automatically refreshes them through your package manager when the API changes. No manual codegen or contract synchronization required.
/SHOW, DON'T TELL
Traditional messaging requires producers, consumers, serialization, and broker-specific SDKs. With Graftcode, you simply expose a public method and call it remotely through the same message broker.
var message = new UserCreated {
Id = 42,
Name = "Adam",
Email = "adam@example.com"
};
var body = Encoding.UTF8.GetBytes(
JsonSerializer.Serialize(message)
);
channel.BasicPublish(
exchange: "events",
routingKey: "user.created",
basicProperties: null,
body: body
);var consumer = new EventingBasicConsumer(channel);
consumer.Received += (_, ea) => {
var json = Encoding.UTF8.GetString(ea.Body.ToArray());
var user = JsonSerializer.Deserialize<UserCreated>(json);
if (user != null)
HandleUserCreated(user);
};
channel.BasicConsume(
queue: "user.created",
autoAck: true,
consumer: consumer
);public class Users
{
public void Create(User user)
{
_users.Save(user);
}
}from acme_users import Users
from graftcode import GraftConfig
GraftConfig.host = "plugin:Your-Broker;amqp://your-messaging-service-connectionstring"
users = Users()
users.create(user)
# Strongly typed, broker configured separately/FEATURE MATRIX
| Capability | MESSAGING, QUEUES & EVENTS | Graftcode |
|---|---|---|
| PROGRAMMING MODEL | ||
| Call with Strongly Typed Methods | [×] 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 | [×] NO | [✓] YES |
| TOPOLOGY & TRANSPORT | ||
| Switch between WebSocket, HTTP/2, TCP, queues, events, or PaaS channels with a single env var. | [×] NO | [✓] YES |
| Switch remote <-> in-memory with config only | [×] NO | [✓] YES |
| TOPOLOGY & TRANSPORT | ||
| Same programming model for queues / event buses | [-] PARTIAL | [✓] Via plugins |
| Full streaming | [-] PARTIAL | [-] PARTIAL |
| Expose methods are immediately callable via MCP | [×] NO | [✓] YES |
/BY THE NUMBERS
60%
less code for AI to touch
1/8
of CPU usage comparing to REST or gRPC
20
coding languages supported
10
package managers supported
/FAQS
No. Graftcode works with your existing message broker, preserving its capabilities, including asynchronous messaging, buffering, retries, and fan-out. Through plugins for Kafka, RabbitMQ, Azure Service Bus, Amazon SQS, and Google Pub/Sub, you can call strongly typed public methods without writing producers, consumers, or broker-specific SDK code. Your broker still handles the messaging. Graftcode simply makes it easier to use.
/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.”
No producer code, no consumer code, no message schema-just typed methods over the broker you already run.
