flexway
FRENTalk to an expert

One point of decision for your APIs, your models, your agents and your events.

  • REST
  • gRPC
  • SSE
  • MCP
  • A2A
  • Kafka
  • AMQP
  • MQTT
  • /v1
  • Self-hosted
  • no database
  • no registration with the publisher

Map of the Flexway platform

Your infrastructureGitOps control planedrives the gateway, receives its telemetryflexwayAPI, AI and agent gatewayUnified Decision Chain (UDC)Eight domains · features shown, delivered at tag v1.6.3Native Kafka proxyoff the HTTP chain · ACLs and quotas: partlyMQTT listenerPlanned in 1.7429quota exceeded:the upstream is never called01 Contractserved = declared02 IdentityOIDC · mTLS03 Quotasrate · tenant04 Policiesschema · CEL05 Relayno bufferingAPI12 of 13Security11 of 12Traffic14 of 14Transformations14 of 16AI11 of 13Agents: MCP and A2A8 of 9Asynchronous8 of 9Operations18 of 19Web and mobile appsREST · gRPC · gRPC-WebPartnersmTLS · API keyAI agentsMCP · OAuth 2.1BrowsersREST · SSE · WebSocketKafka producersnative KafkaMQTT devicesPlanned in 1.7ServicesREST · gRPCExisting systemsREST translated to gRPCMCP serversfederated · one auditInternal modelsOpenAI-compatibleBrokersKafka, AMQP, MQTT, NATSAI providers€ budget · fallbackPartner webhookssigned · replayableContract in Gitversioned, validatedOIDC providertokens · JWKSConsoleproposes as PRsOpenTelemetrytraces · metricsSecretsfile · variable503Your infrastructureGitOps control planedrives the gateway, receives its telemetryflexwayAPI, AI and agent gatewayUnified Decision Chain (UDC)Eight domains · shown, delivered42901 Contractserved = declared02 IdentityOIDC · mTLS03 Quotasrate · tenant04 Policiesschema · CEL05 Relayno bufferingAPI12 of 13Security11 of 12Traffic14 of 14Transformations14 of 16AI11 of 13Agents: MCP and A2A8 of 9Asynchronous8 of 9Operations18 of 19Web and mobile appsREST · gRPC · gRPC-WebPartnersmTLS · API keyAI agentsMCP · OAuth 2.1BrowsersREST · SSE · WebSocketKafka producersnative KafkaMQTT devicesPlanned in 1.7ServicesREST · gRPCExisting systemsREST translated to gRPCMCP serversfederated · one auditInternal modelsOpenAI-compatibleBrokersKafka, AMQP, MQTT, NATSAI providers€ budget · fallbackPartner webhookssigned · replayableContract in GitOIDC providerConsoleOpenTelemetrySecrets503

Map of the platform: web and mobile apps, partners, AI agents and browsers call Flexway, on your infrastructure; every request follows the UDC: contract, identity, quotas, policies, relay. Flexway, the API, AI and agent gateway, is the single point of passage: every line enters by one port and leaves by one. Kafka producers go through the native Kafka proxy, a separate lane that does not pass these five stations. Flexway gathers eight domains: API, Security, Traffic, Transformations, AI, Agents, Asynchronous, Operations. It serves your REST and gRPC services, your existing systems, your federated MCP servers, your internal models and your Kafka, AMQP, MQTT and NATS brokers; outside your infrastructure, the AI providers and the partners' webhooks. Every possibility is drawn: web and mobile apps reach your services, your existing systems, your brokers, the partners' webhooks, your internal models and the AI providers; partners, your services, your existing systems, your internal models and the AI providers; browsers, your services, your existing systems and your brokers, over SSE or WebSocket; AI agents, tools projected onto your services, tools of your MCP servers, your brokers through a tool that publishes, your internal models and the AI providers through the OpenAI-compatible surface. Six scenarios read one path step by step. The GitOps control plane, in its own frame, drives the gateway and receives its telemetry: contract in Git, OIDC provider, a console that proposes as pull requests, OpenTelemetry, secrets. A partner over its quota gets a 429 and the service is never called. Coming: MQTT devices, through the devices' MQTT listener.

  • Web and mobile apps
  • Partners
  • AI agents
  • Browsers
  • Kafka producers
  1. Contract
  2. Identity
  3. Quotas
  4. Policies
  5. Relay
  • Services
  • Existing systems
  • MCP servers
  • Internal models
  • Brokers
  • AI providers
  • Partner webhooks

quota exceeded: the upstream is never called

Web and mobile apps
Your web and mobile apps: they call your APIs over REST, gRPC or gRPC-Web, and every call goes through Flexway's decision.
Partners
The partner companies that consume your APIs: identified by a client certificate or an API key, under a quota per tenant.
AI agents
AI agents: they call MCP tools and models through Flexway, under the same identity, quota and audit as an API.
Browsers
Browsers: REST calls and real-time streams (SSE, WebSocket), relayed by Flexway without buffering.
Kafka producers
Your Kafka producers and consumers: they plug into Flexway's native Kafka proxy, without changing library.
MQTT devices
Planned in 1.7: Devices that publish over MQTT: Flexway will take them in through its MQTT listener, with an identity and a quota per device.
Contract
Flexway serves only what your OpenAPI, AsyncAPI or Protobuf contract declares; anything else gets a 404 without reaching your services.
Identity
Flexway checks who is calling (OIDC token, API key or client certificate) and reads the tenant from the identity; no valid identity: 401.
Quotas
Flexway limits each caller's rate, then the tenant's daily and monthly quota; beyond them: 429, with Retry-After.
Policies
The route's policies: contract schema, transformations, cache isolated per tenant, a call to a decision service that may refuse.
Relay
Flexway relays to the upstream without buffering, under a bounded deadline and a circuit breaker; each decision leaves an OpenTelemetry trace.
API
The contract is the configuration: one OpenAPI 3.1 is enough to serve, validate and relay.
Security
Tokens from several issuers, scopes and roles from the contract, API keys, client certificates.
Traffic
Rate per caller, quotas per tenant, load shedding, timeouts, retries and circuit breakers: the gateway refuses cleanly rather than falling over.
Transformations
Headers, path, body and status codes reshaped, cache, external call and CEL policies, without touching the upstream.
AI
An OpenAI-compatible surface in front of your models: token and euro budgets per tenant, ordered fallback.
Agents: MCP and A2A
Marked operations become MCP tools under the same decision as REST; federated MCP servers.
Asynchronous
Publish to Kafka, AMQP or MQTT from HTTP, through the same doors; signed, replayable webhooks.
Operations
OpenTelemetry logs, metrics and traces, and a rich console that never touches production: a change becomes a pull request.
Services
Your REST and gRPC services: they receive only the requests Flexway let through, under deadline and circuit breaker.
Existing systems
Your existing systems: a gRPC service becomes callable over REST, without a rewrite, through the Protobuf descriptors.
MCP servers
Your existing MCP servers, federated behind Flexway: their tools come under the same authorization, quota and audit.
Internal models
Your internal models, called through the OpenAI-compatible surface; a sensitive request is pinned to them.
Brokers
Your Kafka, AMQP, MQTT and NATS brokers: Flexway publishes on them under an AsyncAPI contract, in a CloudEvents envelope.
AI providers
The AI providers outside your infrastructure: their keys stay in Flexway, each call counts against the tenant's budget.
Partner webhooks
Your partners' systems: they receive your events as signed, replayable webhooks.
Contract in Git
Your Git repository: the contract and flexway.yaml are versioned and validated offline there; it is the configuration's only source.
OIDC provider
Your OIDC identity provider: it issues the tokens, Flexway reads its keys and checks each token.
Console
Flexway's console: it observes traffic and proposes changes as pull requests, never writing to production.
OpenTelemetry
OpenTelemetry: traces and metrics of every decision, sent to your observability.
Secrets
Your secrets: references (file, variable) resolved at run time, never a clear value in the configuration.
Native Kafka proxy
The native Kafka proxy: Kafka clients plug into it over the Kafka protocol, outside the HTTP chain, with a virtual cluster per tenant.
MQTT listener
Planned in 1.7: The devices' MQTT listener, as a proxy in front of your broker, with identity and quota per device.
  • Possible access through Flexway
  • Line: one route
  • Interchange: shared decision
  • Request
  • Event
  • Model or tool call
  • Refusal
  • Separate lane, off the HTTP chain
  • Your infrastructure
  • GitOps control plane
  • Planned
  1. 01 ContractThe operation or channel is declared; otherwise 404, the upstream is not called
  2. 02 IdentityThe origin (CORS), then the token (iss, aud, scopes), the API key or the client certificate; the tenant is read from the identity
  3. 03 QuotasRate per caller, then the tenant's quota per day and month, on every route, /v1/** included
  4. 04 PoliciesThe contract's schema (422), header and body transformations, CEL conditions compiled at load (a false condition skips the policy), a decision service with a bounded timeout that may refuse (403), cache isolated per tenant
  5. 05 RelayToken exchanged when the upstream requires it; for AI, backend chosen (sensitive -> internal), budget reserved before the call, fallback; bounded deadline, circuit breaker, unbuffered relay; one OpenTelemetry trace per decision

Your infrastructure: nothing leaves it but the calls your configuration declares.

Compose yours in the editor

What is delivered, and its proof

Four pillars, each backed by what is delivered.

Model access, governed and budgeted

Your applications call one OpenAI-compatible surface; provider keys stay in the gateway, every call is authenticated, every tenant has its budget in tokens and euros, a failing provider is replaced before the first byte.

budget:
  store: "${COUNTERS_URL}"
  monthly_tokens: 40000000
  monthly_eur: 50
  soft: { at: 0.8, backend: eu-small }
examples/ai-cost/flexway.yaml, delivered with v1.6.3

Delivered · since v0.1.0Refusal codesbudget_exceededsensitive_no_internal_backendSee the page

Agents under control

The endpoints marked in your contracts become MCP tools, under the same decision as REST; each agent sees only the tools of its scopes, and the trace links the agent, the tool, the API and the system called.

/orders/{id}:
  get:
    operationId: getOrder
    summary: Read one order
    x-flexway-tool: true
examples/mcp-tools/openapi.yaml, delivered with v1.6.3

Delivered · since v0.1.0See the page

The UDC, for every surface

REST, gRPC, streams, MCP, A2A (in progress), model calls and brokers (HTTP publishing) go through the same UDC: the contract derives it, and the ai: section declares the inference surface; what is not declared does not exist.

version: 1
contracts:
  openapi: ./openapi.yaml
upstreams:
  default:
    url: http://orders.internal:8080
examples/rest-minimal/flexway.yaml, delivered with v1.6.3

Delivered · since v1.5.0Refusal codesnot_foundSee the page

Sovereign and operable

One self-hosted binary, signed images; metrics, estimated costs and OpenTelemetry traces in a console that never changes production.

Commandflexway validate

Delivered · since v1.3.0Operate as code

Also

  • The contract is the configuration
  • Multi-tenant from birth
  • A configuration that does not break production
  • A console that never touches production
  • Every feature in every plan

145 of 211 features delivered, in release v1.6.3 - read from the catalogue of the published release.

Operate · GitOps control plane

Operate Flexway as code

Configuration lives in Git. It is validated in CI without a cluster, deployed the way you already deploy, hot-reloaded; the console observes and proposes, a person merges. Nothing changes production outside Git.

Flexway's GitOps line: Git, validate in CI, deploy, hot reload, observe, propose, pull request, back to Git; an invalid configuration is refused and the running version keeps serving; one console for several gateways is planned, with no release yet.invalid configuration: refused, the running version servesplanned, to be scheduled: one console for all your gateways1Gitconfiguration and contracts2Validate in CIflexway validate3DeployHelm, container, binary4Hot reloadno lost request5Observemarks, SLOs6Proposea simulated diff7Pull requestreview, merge -> Git
  1. 1 · Gitflexway.yaml and your contracts, versioned and reviewed.
  2. 2 · Validate in CIflexway validate offline, no cluster; a failing exit code on error, configuration digest printed.Delivered · since v0.1.0
  3. 3 · DeployHelm chart, container or binary; your GitOps tool reconciles.Delivered · since v0.1.0
  4. 4 · Hot reloadThe new version is picked up with no restart and no lost request, open streams included.Delivered · since v0.1.0
  5. 5 · ObserveEvery reload marked on every console chart; error budgets per endpoint.Delivered · since v1.3.0
  6. 6 · ProposeA diff, simulated on the proposed configuration; never a write to the gateway.Delivered · since v1.2.0
  7. 7 · Pull requestThe commit carries exactly the reviewed diff; "applied" when every replica serves the new digest. Back to Git.Delivered · since v1.2.0
  8. RefusalInvalid configuration: refused and logged, the running version keeps serving.Delivered · since v0.1.0

Limit: opening the pull request targets a GitHub repository today. Guides: Change the configuration without restarting · Propose a change from the console

A modern console that proposes, never writes

Overview of the Flexway console: traffic, errors and latency per endpoint, demo dataOverview of the Flexway console: traffic, errors and latency per endpoint, demo data
Real console screenshot, demo data.
  • Propose from the screen that shows it: a diff, simulated, then a pull request under your repository's rulesDelivered · since v1.2.0
  • Proposal log: who, which diff, drift at mergeDelivered · since v1.2.0
  • No metrics or trace backend needed: the gateway pushes OTLP to the consoleDelivered · since v1.3.0
  • Objectives per endpoint: remaining error budget, burn over several windows, built-in alertDelivered · since v1.3.0
  • One mark per reload on every chartDelivered · since v1.3.0
  • Touch-ready on phone and tablet: panels, silences, proposalsDelivered · since v1.4.0

One binary, everywhere

No database, no control plane to install, no registration with a publisher service: one binary and one file.

Laptopdocker run for a trial, from the public opening
VM, serverThe amd64 or arm64 binary, its signed checksums, under systemd
ContainerDistroless non-root image, multi-architecture
KubernetesHelm chart installed on a bare cluster on every chart change; dashboard and alerts included
  • Replicas with no state on the path: shared counters reconciled asynchronously, local decision with no round tripDelivered · since v0.1.0
  • An overloaded replica sheds load instead of failingDelivered · since v0.2.0
  • Health of each replica in the consoleDelivered · since v1.4.0
  • Several hosts, each with its contracts, conflicts detected at load; the same binaryDelivered · since v0.1.0

Limit: load balancing between replicas stays with the edge or the mesh.

Deployment topologies, one per need

One console for all your gateways

One console in front of several gateways, through declared scopes (gateways, metrics source, repository, role groups); an overview that adds counters, never percentiles; your roles applied in each scope.

  • Console shared by scopesTo be scheduled
  • Shared policy fragments across gatewaysTo be scheduled
  • Edge mode: the same binary on a site, signed configuration pulledPlanned in 1.11

Today: one console per gateway and its replicas. The release will show by itself the day the roadmap names one.

Strengths · on your premises

What you won't find elsewhere

Four things Flexway does out of the box, in your infrastructure, with no third-party service; then every strength, delivered or coming, each with its status in the published release.

Know before you deploy

Describe a request: Flexway returns the verdict, the operation, the effective chain and the request the upstream would receive. Nothing is called, spent or counted. The console shows each route's effective chain and tries it dry; this site's architecture editor simulates before the first line.

4 deliveredsince v0.1.0

Flexway console, Policies screen: the effective chain of a route, step by stepFlexway console, Policies screen: the effective chain of a route, step by step
curl -s localhost:9090/simulate -d '{"method":"GET","host":"api.example.com","path":"/orders?status=open",
Command of the guide “Observing”, at tag v1.6.3
  • On your premises : on your gateway's admin port; the simulation never leaves your infrastructure.
  • Limit : a declared external call is never called in a simulation; a console reader simulates in their own tenant only.

Guide : Observing · Reading with the console · v1.6.3

Multi-tenant end to end, built in

The tenant comes from a verified source and applies everywhere, not only to routing. An isolation test runs on every change; the authenticated cache does not turn on without it.

7 delivered1 partly deliveredsince v0.1.0

WhereWhat is guaranteed
IdentityThe tenant comes from a signed claim, an API key, a certificate or a trusted mesh; the value the client writes never reaches the upstream
Quotas and budgetsCounted per tenant: a tenant never spends another's quota
CacheAn authenticated response is cached per tenant and per person; isolation test on every PR
Asynchronous planeA subscriber reads its tenant only; a channel can be bound to one person
Native KafkaA virtual cluster per tenant; no other tenant's name, neither in an answer nor toward the broker; proven by mutation on every PR
EncryptionAn encrypted field is bound to its tenant, topic and path: copied elsewhere, it does not decrypt
ConsoleAn account bound to a tenant sees that tenant only; elsewhere, 403
Table of the guide “Multi-tenant isolation”, at tag v1.6.3
  • On your premises : your tenants live in your gateway; none passes through a service of the publisher.
  • Limit : logical isolation in a shared gateway (one gateway per customer for physical isolation); Kafka ACLs and quotas partly delivered.

Guide : Multi-tenant isolation · v1.6.3

Built-in observability, no external stack

The console has its own metrics source: p50, p95 and p99 latencies, errors by code, SLO objectives and error budget, alerts, traces of slow requests, a marker on every reload, new error detected, shareable links. On a phone too.

19 delivered5 partly deliveredsince v1.3.0

Flexway console, Traces screen: the slow or failed requests kept by the console, step by stepFlexway console, Traces screen: the slow or failed requests kept by the console, step by step
  • On your premises : no third-party observability service, no data leaving; OpenTelemetry for those who also want their own stack.
  • Limit : a console reads one gateway; some views have their data delivered and their screens to follow; the shared console is to be scheduled.

Guide : Observability and console · SLO objectives · v1.6.3

Take over what you run

The configuration of an existing gateway is taken over once, offline. Flexway writes a configuration validated by its start-up loader, the annotated contract and a report that classes each element: taken over, taken over differently or without equivalent. Nothing is invented.

1 deliveredsince v1.1.0

$ flexway import "$FORMAT" --config "$CONFIG" --contract openapi.yaml --out ./import
#   ./import/flexway.yaml
#   ./import/openapi.yaml
#   ./import/contract.patch.json
#   ./import/coverage.md
Command and files written, from the guide “Take over an existing gateway”, at tag v1.6.3; the input format is named there
  • On your premises : offline, with no connection to the former gateway or to any service.
  • Limit : one input format today, named in the guide; other formats suggested for 1.9.0, not binding.

Guide : Take over an existing gateway · v1.6.3

Every strength, delivered and coming

Coming releases: those of Flexway's roadmap, not binding. The “on your premises” mark flags a contribution to digital sovereignty.

Contract and configuration

  • The contract is the configuration: served = declaredDelivered · since v0.1.0
  • Validated offline in CI, hot-reloaded without a lost request; an invalid configuration is refusedDelivered · since v0.1.0
  • Secrets by reference, never in clear in the configurationDelivered · since v0.1.0on your premises
  • A published schema of the configuration and the contractPlanned, no version yet
  • Policy fragments shared between gateways, with no central planePlanned, no version yet

Operate as code

  • The console proposes a diff, never a mutation; the pull request opens from the proposalDelivered · since v1.2.0
  • One binary, a distroless non-root image, amd64 and arm64; starts under 2 s, no mandatory dependencyDelivered · since v0.1.0on your premises
  • Local accounts with no identity provider; OIDC optionalDelivered · since v0.1.0on your premises
  • Traffic split between versions: targeted canary, blue-green, rollbackPlanned, no version yet
  • AI for operations: it proposes, never on the decision pathPlanned, no version yet
  • Developer portal, optional Kubernetes operator, edge mode with no central planePlanned in 1.11
  • One console for several gateways, by declared scopesPlanned, no version yet

Closed by default

  • Closed by default: what is not declared does not pass.Delivered · since v0.1.0
  • Signed images and checksums, for amd64 and arm64.Delivered · since v0.1.0
  • No model decides an authorisation, a rate or a route.Tested rule
  • Tenant isolation tested on every change.Delivered · since v1.1.0
  • Kubernetes (Helm), docker run or a binary on a VM: one binary, one image, one file.Delivered · since v0.1.0on your premises
  • API keys and client mTLS as first-class identities; chained audit logDelivered · since v0.1.0
  • Inbound webhook signatures verified, IP address filteringPlanned in 1.8
  • Sender-constrained tokens: mTLS or DPoPPlanned, no version yet

Security and the supply chain in detail

Announced resilience

  • Per-operation deadline, per-upstream bulkhead, circuit breakerDelivered · since v0.1.0
  • An overloaded replica sheds instead of being killed; adaptive sheddingDelivered · since v0.2.0
  • Degradation announced, never silent; graceful shutdownDelivered · since v0.1.0
  • Identical in-flight reads coalesced into one upstream callPlanned in 1.8

Uniform errors

  • A closed catalogue of codes, RFC 9457 everywhere, rendered in each surface's format: OpenAI, gRPC, MCP, CloudEventsDelivered · since v1.5.0

Governed AI

  • OpenAI-compatible surface, routing by policy, budget in euros per tenantDelivered · since v0.1.0
  • A sensitive request pinned to an internal model; audit without ever the promptDelivered · since v0.1.0on your premises
  • Plans, budgets per user, per use case and per teamPlanned in 1.8
  • Task routes, models allowed per caller, data classes, residency, guardrailsPlanned in 1.9on your premises
  • Exportable evidence of execution: helps you respond to the EU AI ActPlanned, no version yet

Agents under control

  • MCP tools from the contract, OAuth 2.1, human and agent token exchange, bounded delegation, MCP federationDelivered · since v0.1.0
  • Agents dashboard: tools, cost, scopesDelivered · since v1.2.0
  • A2A governance: signed agent cards, quota, auditUnder way
  • Human approval, rights limited to one task, budget per agent runPlanned in 1.10

Events

  • Native Kafka proxy, virtual clusters per tenant, fields encrypted under your KMSDelivered · since v1.6.1on your premises
  • ACLs and quotas per Kafka clientPartly · next to be scheduled
  • AsyncAPI, CloudEvents, signed and replayable webhooks, NATS, AMQP 1.0, schema registryDelivered · since v1.6.1
  • MQTT devices, Sparkplug B, OPC UAPlanned in 1.7

Proofs

  • Reproducible performance bench, checked in CI; figures to be measured until published with version, machine and commandPartly · next to be scheduled
  • Licence checked offline and public openingPlanned, no version yet

The evidence

What you can verify: standards, pace, supply chain

An enterprise gateway is judged on facts you can check. Each one points to its source: the catalogue of the published release, the documentation, the release pipeline.

StandardWhat Flexway doesFlexway v1.6.3
OpenAPI 3.1The REST contract is the configuration: what it declares is served, nothing elseDelivered · since v0.1.0
AsyncAPI 3Source of the asynchronous plane: channels, messages, send and receive to Kafka, AMQP, MQTT, NATSDelivered · since v1.5.0
Protobuf and gRPCgRPC served, REST to gRPC translation through descriptorsDelivered · since v0.2.0
RFC 9457Every refusal as Problem Details, with a stable codeDelivered · since v0.1.0
OAuth 2.1 and RFC 9728Resource server, protected resource metadata publishedDelivered · since v0.1.0
RFC 8707Token audience bound to the declared public URLDelivered · since v0.1.0
RFC 8693Token exchange: human subject, agent actor, only ever narrowingDelivered · since v0.1.0
MCPContract endpoints as tools, existing MCP servers federatedDelivered · since v0.1.0
A2AAgent-to-agent relay under quota and audit; signed agent cards to comeUnder way
OpenTelemetryMetrics and traces pushed over OTLPGenAI conventions: Planned in 1.8Delivered · since v1.3.0
W3C Trace Contexttraceparent propagated or created end to endDelivered · since v0.1.0
CloudEventsEnvelope of messages published to brokersDelivered · since v1.5.0
  • Features145 delivered out of 211, in release v1.6.3
  • Pace14 published releases, each presented by what it brings; what is written for a 1.x reads unchanged in every 1.x. The releases
  • Supply chainDelivered · since v0.1.0Image and binaries signed keyless on their digest, attested SBOM; a release re-tags the tested digest, never rebuilds. Verifiable with the guide's command:
    Configuring and operating Flexway
    cosign verify-blob --bundle SHA256SUMS.sigstore.json \
      --certificate-identity-regexp '^https://github.com/flexwiz/flexway/.github/workflows/release.yml@' \
      --certificate-oidc-issuer https://token.actions.githubusercontent.com SHA256SUMS
  • TestsDelivered · since v0.1.0Reload under load with no lost request, per-caller rate, bounded metric cardinality: proven by test, as the catalogue states; chart installed on a bare cluster on every change.
  • PerformanceThroughput per replica to be measured · added latency to be measured · idle memory to be measuredPublished with release, date, machine and command, never before.

Statuses and "since" read from the catalogue of the published release; counts read at the same tag and from the list of published releases.

What enterprises expect today

Six families of AI use cases come back in every project. For each, what Flexway delivers in release v1.6.3, what is partly there, and the release that completes it; upcoming releases are not commitments.

Centralised, secure access to models

Delivered: 3 · partly: 2 · planned or to be scheduled: 0

  • Centralise access to providers and internal modelsDelivered · since v0.1.0
  • Hide provider keys, manage secretsDelivered · since v0.1.0
  • Rights per team, application, model or environmentPartly · next in 1.9

Routing between models

Delivered: 1 · partly: 4 · planned or to be scheduled: 0

  • Fail over when a provider is downDelivered · since v0.1.0
  • Choose the model by taskPartly · next in 1.9
  • Choose by latency, cost, quality or regionPartly · next in 1.9

Cost control

Delivered: 1 · partly: 5 · planned or to be scheduled: 0

  • Control peaks, prevent abuseDelivered · since v0.1.0
  • Quotas per application, team, user or projectPartly · next in 1.8
  • Limit requests and tokensPartly · next in 1.8

Data protection with models

Delivered: 0 · partly: 2 · planned or to be scheduled: 4

  • Detect or mask personal dataPlanned in 1.9
  • Prevent confidential data from reaching some providersPartly · next in 1.9
  • Data residencyPlanned in 1.9

AI observability and audit

Delivered: 2 · partly: 4 · planned or to be scheduled: 0

  • Latency, availability, errors, tokens, estimated costsDelivered · since v0.1.0
  • Correlate traces with OpenTelemetryDelivered · since v0.1.0
  • Link each call to an application, user, use casePartly · next in 1.8

Agent tool governance

Delivered: 4 · partly: 1 · planned or to be scheduled: 1

  • Control agents' tool callsDelivered · since v0.1.0
  • Expose business APIs as MCP toolsDelivered · since v0.1.0
  • Authorise by identity and contextPartly · next in 1.10

Six families and ten enterprise use cases: 44 expectations, 12 delivered, 27 partly, 5 planned.Every expectation, line by line

Upcoming releases are not commitments; "Delivered" only when the catalogue of the published release says so.

See what enterprises expect

What is at stake, and how Flexway handles it

For each stake, what Flexway does, the proof you can check and the limit, stated.

StakeWhat Flexway doesThe proofThe limit, stated
FunctionalWhat is served is what is declared: a route or tool missing from the contract answers 404; a business API becomes an agent tool without rewriting the service.404x-flexway-toolDelivered · since v0.1.0Rights on the object stay with the service.
TechnicalOne binary, no database on the path: configuration validated offline in CI, hot-reloaded without a lost request; streams relayed without buffering; amd64 and arm64.flexway validateamd64arm64Delivered · since v0.1.0Public TLS termination and anti-DDoS stay at the edge.
SecurityClosed by default: tokens from several issuers, API keys, client certificates; the tenant comes from the verified identity, never from a header; every refusal carries a stable code.rate_limitedtenant_requiredDelivered · since v0.1.0The gateway is a first layer, not the only one.
SovereigntyYour data stays with you: self-hosted, published in Europe; no external service required to serve; a request marked sensitive only goes to an internal model, otherwise refused.sensitive_no_internal_backendDelivered · since v0.1.0Residency by region: Planned in 1.9
AINo model decides on the path: authorisation, rate and routing follow declared rules and measurements; a model's judgement comes from a guard service you configure.budget_exceededcapability_unavailableDelivered · since v0.1.0No guard alone is enough against prompt injection.

Tomorrow: from industrialising to governing agents

What enterprises will expect by 2030, in three stages, and where Flexway stands. Releases are those of Flexway's roadmap, not commitments.

  1. 2026-2027

    Industrialise

    Authentication, keys, token quotas, multiple models, costs, observability, first MCP tools.

    Partly · next in 1.8
  2. 2027-2028

    Govern

    Tools, agent identities, contextual authorisation, delegation, action audit.

    Partly · next in 1.9
  3. 2028-2030

    Optimise

    Federated policies, arbitration between cost, performance and risk - by declared rules, never by a model.

    To be scheduled

14 expectations for tomorrow: 11 partly, 3 planned or to be scheduled. The detail

Pace

A small team, a visible pace

Flexway's published releases and what each one brought; then what is coming, with no promised date.

  1. v1.6.0fixes
  2. v1.6.17 new features
  3. v1.6.2fixes
  4. v1.6.3fixes

Upcoming, no date promised

See the page

The product

Eight domains, one binary.

For each domain, what is delivered in the latest published release, and since which release.

API

The contract is the configuration: one OpenAPI 3.1 is enough to serve, validate and relay.

  • gRPC also served as gRPC-Web and REST
  • SSE and WebSocket relayed without holding
  • Import of an existing gateway's configuration
See the page

Answers 8 market expectations, 3 of them delivered

12 of the 13 shown delivered · since v0.1.0

Security

Tokens from several issuers, scopes and roles from the contract, API keys, client certificates.

  • Closed by default
  • Audit of authorisation decisions
See the page

Answers 5 market expectations, 1 of them delivered

11 of the 12 shown delivered · since v0.1.0

Traffic

Rate per caller, quotas per tenant, load shedding, timeouts, retries and circuit breakers: the gateway refuses cleanly rather than falling over.

  • 429 with Retry-After
  • An overloaded replica sheds instead of being killed
See the page

Answers 7 market expectations, 1 of them delivered

14 of the 14 shown delivered · since v0.1.0

Transformations

Headers, path, body and status codes reshaped, cache, external call and CEL policies, without touching the upstream.

  • Sensitive fields masked
  • Cache isolated per tenant
See the page

Answers 2 market expectations, none delivered yet

14 of the 16 shown delivered · since v0.1.0

AI

An OpenAI-compatible surface in front of your models: token and euro budgets per tenant, ordered fallback.

  • A sensitive request never sent to an external model
  • Prompts never logged
See the page

Answers 19 market expectations, 4 of them delivered

11 of the 13 shown delivered · since v0.1.0

Agents: MCP and A2A

Marked operations become MCP tools under the same decision as REST; federated MCP servers.

  • Bounded delegation, exchanged token (RFC 8693)
  • A2A governance: in progress
See the page

Answers 16 market expectations, 5 of them delivered

8 of the 9 shown delivered · since v0.1.0

Asynchronous

Publish to Kafka, AMQP or MQTT from HTTP, through the same doors; signed, replayable webhooks.

  • AsyncAPI as the source
  • Native Kafka proxy: delivered · v1.6.1
See the page

Answers 8 market expectations, none delivered yet

8 of the 9 shown delivered · since v1.5.0

Operations

OpenTelemetry logs, metrics and traces, and a rich console that never touches production: a change becomes a pull request.

  • Built-in dashboards, nothing to install
  • No personal data in logs
Policies screen of the Flexway console: the effective chain of a routePolicies screen of the Flexway console: the effective chain of a route
See the page

Answers 3 market expectations, 2 of them delivered

18 of the 19 shown delivered · since v0.1.0

Each surface, for real

The path, the configuration, the console.

For each surface, the decision steps, the configuration of the example delivered with the published release and the console screen that shows it.

The path, the configuration, the console.

contract · identity · quota · policies · relay

File examples/rest-minimal/flexway.yaml, delivered with Flexway v1.6.3
# The smallest useful configuration: one contract, one upstream. Every operation of the contract is
# served and relayed there; nothing else is.
version: 1
contracts:
  openapi: ./openapi.yaml
upstreams:
  default:
    url: http://orders.internal:8080

token for the surface · filtered tools · quota · token exchanged when the upstream requires it

File examples/mcp-tools/flexway.yaml, delivered with Flexway v1.6.3
# Agent tools from the contract: one line per host declares the MCP surface, then x-flexway-tool
# per operation. A token must be issued for that URL (RFC 8707); it is never relayed upstream.
version: 1
contracts:
  openapi: ./openapi.yaml
upstreams:
  default:
    url: http://orders.internal:8080
auth:
  tenant_header: X-Tenant
  issuers:
    - name: customers
      discovery: https://login.example.net/.well-known/openid-configuration
      audience: api                              # REST tokens; MCP tokens carry the resource below
      tenant_claim: org
agents:
  mcp:
    resources:
      api.example.com: https://api.example.com/mcp

identity · euro budget · sensitivity · routing · fallback

File examples/ai-cost/flexway.yaml, delivered with Flexway v1.6.3
# What inference costs, and what happens when a backend fails: prices declared per backend, a
# monthly budget in euros per tenant beside the token budget, a soft cap that warns and moves the
# call to a cheaper backend, and fallbacks tried in order before any byte reaches the client - never
# an external one for a sensitive request.
version: 1
auth:
  issuers:
    - name: customers
      discovery: https://login.example.net/.well-known/openid-configuration
      audience: api
      tenant_claim: org
ai:
  security:
    - oidc: { scopes: [inference] }
  sensitive_header: X-Sensitive
  default_backend: eu-large
  sensitive_backend: on-prem
  backends:
    eu-large:
      url: https://api.provider.example/v1
      api_key: "file:/etc/flexway/secrets/provider-key"
      default_model: mistral-large
      external: true
      price: { input_per_mtok: 2.00, output_per_mtok: 6.00 }   # euros per million tokens
      fallback: [eu-small, on-prem]              # in order, on connection failure, 5xx, timeout
    eu-small:
      url: https://api.provider.example/v1
      api_key: "file:/etc/flexway/secrets/provider-key"
      default_model: mistral-small
      external: true
      price: { input_per_mtok: 0.10, output_per_mtok: 0.30 }
      fallback: [on-prem]
    on-prem:
      url: http://vllm.inference.svc:8000/v1
      default_model: mistral-7b-instruct
      price: { input_per_mtok: 0, output_per_mtok: 0 }      # 0 is a price: internal
  budget:
    store: "${COUNTERS_URL}"
    monthly_tokens: 40000000                     # both budgets hold: the first reached decides
    monthly_eur: 50                              # per tenant, over the calendar month
    soft: { at: 0.8, backend: eu-small }         # past 80 %: Flexway-Budget: soft, moved to eu-small
  overrides:
    - { match: { tenant: acme }, monthly_eur: 500 }

What Flexway does not do, and who it leaves it to

Flexway enforces policies on the flows. Every neighbouring responsibility has its own component; Flexway plugs into it, it does not replace it.

ResponsibilityLeft toWhat Flexway does at the border
Issuing tokens, managing usersYour identity providerVerifies tokens and proofs
Agent logic and stateYour agent runtimeGoverns their tools and exchanges
Per-document rightsYour search platformGoverns access to search and embedding APIs
Answer qualityYour evaluation toolGives it costs, latencies and errors per model
Prompt and model registryYour LLMOps pipelineEnforces the approved list
Human approvalYour workflowWill require the approval proof Planned in 1.10
Trace and incident analysisYour OpenTelemetry platformEmits OTLP
Secrets and machine identitiesYour vault, PKI or KMSReads references, never a plain secret

And the technical roles Flexway leaves to the edge, the mesh or other products

What Flexway does not doWhy
Service meshEncryption and routing between services stay with the mesh in place; Flexway fits into it.
Load balancing between replicasThe job of the edge and the mesh, which see the replicas; Flexway picks the version of a service, not the machine.
Composed GraphQL gateway, free aggregationA free query has no rights, quota or trace known in advance; only queries declared in advance are considered.
Connectors tied to one cloud providerContrary to sovereignty; an HTTP or gRPC call covers the need.
Bot detection, web application firewallThey need network signals only the edge has; Flexway already refuses whatever is not declared.
API testing clientAnother product; offline validation, the examples and the console cover verification.
Plugin ecosystemAn attack surface and a compatibility debt; only isolated, capped extensions are planned.

Developers

From contract to traffic, without guessing.

The configuration is validated before starting: an error is refused at load time, never discovered in production.

Try it live · Your architecture, its flexway.yaml and its simulated decisions, in the browser.

See the page

Start in 5 minutes

In the folder of your flexway.yaml and OpenAPI contract - for instance those of the rest-minimal example:

These commands work from the public opening, when the image is published; until then, try Flexway in your browser. Try it in your browser

  1. Validate the configuration, offline

    docker run --rm -v "$PWD:/etc/flexway:ro" ghcr.io/flexwiz/flexway:v1.6.3 validate -v
  2. Start the gateway

    docker run --rm --name flexway -p 8080:8080 -p 9090:9090 \
      --add-host=host.docker.internal:host-gateway \
      -v "$PWD:/etc/flexway:ro" \
      ghcr.io/flexwiz/flexway:v1.6.3

Then call an operation declared in your contract: it answers. A route missing from the contract answers 404, as application/problem+json.

Commands from the guide “Serving your first API”, image of release v1.6.3.

Follow the step-by-step guide

In production at home first

Our products go through Flexway.

Before being offered to others, Flexway is the gateway of our own products. Sheets drawn from their architecture decisions.

flexplay

Status
Relies on Flexway
Role
The product's only API gateway, REST and real time
What it gets
Keycloak identity, per-tenant quotas, traces down to the service

flexmak

Status
Moving to Flexway
Role
Replaces the current gateway, batch by batch
What it gets
Flexway beside the old gateway, configuration taken over

flexlok

Status
Will go through Flexway
Role
Will go through Flexway from its first release
What it gets
One less gateway to write

See the page

Pricing

The same product for everyone. Production is paid.

Every feature in every plan; prices published at the public opening.

Developer

€0

  • Outside production, 90 days renewable
  • Every feature
  • Capped throughput, licence header
Talk about it

Business

Price at opening

  • Production, flat fee per environment
  • Service commitment
  • 30 days of grace at expiry
Talk about it

Enterprise

Price at opening

  • Long-term maintenance, support
  • Multi-gateway console
  • Code audit under agreement
Talk about it

Every plan will install on your premises.

See the page

Frequently asked questions

Which identity provider?

Any OIDC provider, several at once: Keycloak, Entra ID, Okta, Auth0, Cognito, Google.

Does my data leave my infrastructure?

No: Flexway is self-hosted and only sees the traffic you send it.

Does Flexway replace our identity provider?

No. It verifies the tokens of your issuers, several at once; it issues none.

Does a model decide who gets through?

No. Authorisation, rate and routing follow your configuration; a model can propose a change, a person approves it.

Does Flexway help with the EU AI Act?

It helps you respond to it: chained audit of decisions, prompts never logged; the exportable execution proof is to be scheduled.

Is a database or a control plane to install required?

No. One binary and one configuration file; a Redis-compatible shared cache (Redis, Dragonfly or Valkey) is optional, to share rates and quotas between replicas. The GitOps control plane is made of your tools: Git, your identity provider, OpenTelemetry, your vault, and the console.

Can the console change production?

No. It proposes a diff and opens a pull request in your repository; your review decides, your GitOps tool deploys.

Flexway is made by Flexwiz. Discover Flexwiz

Let's talk about your gateway

Flexwiz is a young company: you talk directly with the person who founds it. Tell us what you want to run through Flexway. We talk about your infrastructure and your digital sovereignty requirements.

Online booking is coming soon; until then, an e-mail is enough.