Open source · Written in Rust
The fastest programmable gateway for models, tools and services.
Arion is an ultra-high-performance L7 data plane written in Rust. One data plane, multiple gateways: an LLM gateway for model traffic, an MCP gateway for agent tools, an API gateway and L7 proxy for everything else — speaking Envoy configuration over xDS.
docker run --rm -p 8080:8080 ghcr.io/arion-gateway/arion:latest
01 · Gateways
One data plane, multiple gateways.
02 · Benchmarks
The fastest in the ecosystem.
Only nginx comes close on speed. Only Arion is this programmable.
Program the data path using
- 1xDS
- 2Rust HttpFilters
- 3WASM filters
- 4External Processing (ext_proc)
03 · Extend
Programmable at every layer.
WASM filters
Write filters in Rust with the Arion SDK: async HTTP and gRPC callouts, shared state across instances.
#[arion_plugin]
impl Plugin for AuthFilter {
fn on_request_headers(&mut self, ctx: &RequestHandle<HttpHeaders>) -> FilterAction {
match ctx.get_header("authorization") {
Ok(Some(v)) if is_valid(&v) => FilterAction::Continue,
_ => ctx.direct_response(unauthorized()),
}
}
}
External Processing (ext_proc)
Hand requests to an out-of-process server over gRPC, with per-route overrides.
- name: envoy.filters.http.ext_proc
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.ext_proc.v3.ExternalProcessor
failure_mode_allow: false
processing_mode:
request_header_mode: SEND
response_header_mode: SKIP
message_timeout: 5s
grpc_service:
envoy_grpc: { cluster_name: ext_proc_server }
Rust HttpFilters
Compile a native filter into Arion in Rust: async, with full access to the request and nothing between your code and the data path.
// A native filter, compiled into Arion
pub async fn apply_request(
&mut self,
request: &mut Request<ArionRequestBody>,
ctx: &RequestCtx,
) -> FilterDecision {
let tenant = self.tenants.lookup(request.headers());
request.headers_mut().insert("x-tenant", tenant);
FilterDecision::Continue
}
04 · MCP gateway · Code mode
MCP Code Mode: sandboxed code execution -- in the gateway.
Arion's MCP gateway supports REST APIs, OpenAPI documents, upstream MCP servers and serves two distinct modes.
Tools mode is conventional MCP: one call per model turn.
Code mode provides all tools as an SDK available to agent generated code which Arion executes in a sandbox.
Fewer turns. Less Tokens.
In code mode, Arion publishes just one tool called 'execute'. Arion executes the agent's code in a sandbox, in the context of the gateway, with full policy enforcement applied to every upstream call.
| Measure | tools mode | code mode |
|---|---|---|
| Model turns | 4 | 1 |
| Model ↔ gateway crossings | 8 | 2 |
| Raw results in context | 4 | 0 |
Same tools, same guardrails: every call a script makes passes the same authorization, schema checks and limits as a direct tool call.
Agent Programmability
Work involving multiple tool calls can be batched programatically: look up a customer, fetch history and plan in parallel, branch, open a ticket.
// One execute call: look up, fan out, decide, act.
const customer = await tools["crm.find_customer"]({ email: "ada@acme.io" });
if (!customer.ok) return { error: "unknown customer" };
const [history, plan] = await Promise.all([
tools["support.recent_tickets"]({ customer_id: customer.data.id }),
tools["billing.current_plan"]({ customer_id: customer.data.id }),
]);
const ticket = await tools["support.create_ticket"]({ ticket: {
customer_id: customer.data.id,
priority: plan.data.tier === "enterprise" ? "high" : "normal",
summary: "Refund not received",
} });
return { ticket: ticket.data.id, seen: history.data.items.length };
- 01 REST APIs become tools Templated paths, JSON Schema on the way in and out, and calls dispatched straight to your clusters.
- 02 OpenAPI in, tools out Point a source at a spec and every operation becomes a tool, filtered by glob and sharing one policy.
- 03 One endpoint for many servers Federate upstream MCP servers: their tools join one catalog, each under its own namespace.
- 04 Big catalogs, small context Progressive disclosure and tool search, ranked with BM25 or your embeddings model.
- 05 Per-tool authorization JWT claims decide who can see and call each tool, in direct calls and inside scripts alike.
- 06 A live catalog Tools, OpenAPI sources, servers and toolkits change over xDS, with no listener reload.
05 · Builder
Compose a config.
FeaturesAPI gateway
jwt issuer https://idp.example.comJWT authentication
- Listener
- HTTP listener
- HTTP filters
- Rate limit
- JWT authentication
- Router
- Routes
- Route to cluster
- Retries
- Clusters
- Cluster
- HTTP health check
- name: envoy.filters.http.jwt_authn
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.jwt_authn.v3.JwtAuthentication
providers:
idp:
issuer: https://idp.example.com
from_headers:
- name: Authorization
value_prefix: "Bearer "
payload_in_metadata: jwt_payload
remote_jwks:
http_uri:
uri: https://idp.example.com/.well-known/jwks.json
cluster: idp_jwks
Describe a feature in a few words. The Builder puts it where Arion applies it, adds what the config needs, and writes the complete Envoy-compatible file for you to edit and copy.
Open in Builder06 · Compatibility
Speaks Envoy.
Arion supports xDS protocol and natively supports a large subset of Envoy configuration. Unsupported configs are explicitly rejected. No silent deviations
07 · Blog
From the blog.
-
MCP gateway
Code mode: let the model write the code
Why the Arion MCP gateway supports sandboxed code execution
2026-10-13 · 8 min read -
control plane
Introducing the Arion control plane
Choose between a standalone Arion control plane managed with files and an optional shell, or a Kubernetes controller driven by Gateway API.
2026-10-06 · 9 min read -
Releases
Introducing Arion
Why we set out to build a better Envoy in Rust, and how Arion became a gateway that matches nginx and outperforms agentgateway, Envoy and others.
2026-09-29 · 5 min read