Skip to content
solidway

Theme

SolidwayLLM gateway

Solidway v0.1.0 is released under AGPL-3.0; source and releases are on GitHub. This documentation is being rewritten against the release — pages outside Quick start and Reference still describe planned behaviour. The current reference lives in docs/getting-started.md and docs/architecture.md in the repository.

Overview

What Solidway is, the constraint it is built around, and what that means for your traffic.

Solidway is an LLM gateway written in Rust. It sits between your application and your model providers, and forwards requests without modifying them.

The design constraint is narrow and deliberate: the forward path does not touch the payload, with one exception — the top-level model field is rewritten when a credential maps a client-facing alias to a different upstream id. Routing, health and accounting are decided per request, outside the bytes you send.

What runs alongside the forward path

Three mechanisms operate around each request. None of them reads or rewrites the body:

  • Failover — a request that fails on one target is served by the next target in its chain.
  • Load balancing — traffic is distributed across keys and endpoints by weighted, health-aware selection.
  • Circuit breaking — a target that reports a failure about itself is held out of rotation.

What is preserved

Preserved Why it matters
Request body A parameter a provider ships this week works without waiting for a gateway release
Response body What the provider returned is what your code parses
Streaming frame boundaries Client-side incremental rendering behaves the same with and without the gateway
Endpoint path Upstream paths come from the credential’s template, so region/project details stay in the gateway
Prompt prefix Rewriting a prefix invalidates the provider’s prompt cache, which raises cost and latency

What Solidway does not do

It does not translate between provider dialects. Calling Claude through the OpenAI SDK, or any model through another vendor’s SDK, is out of scope by design. If that is a requirement, Bifrost and LiteLLM do it.

It also does not ship a prebuilt adapter for every provider. A provider is added in the console, not by writing an adapter module.

Where to go next