Model or dataset
yomorun/yomo avatar
yomorun/yomo

YoMo: a Rust runtime that puts LLM function calls on a QUIC edge mesh

🦖 Serverless AI Agent Framework with Geo-distributed Edge AI Infra.

1,925 stars147 forksRustLicense varies

At a glance

What is it?
YoMo is an open-source framework for deploying LLM tools and skills as serverless functions behind an OpenAI-compatible endpoint. The README promises geo-distributed inference; the repository itself shows a Rust CLI, a TypeScript tool scaffold, and a request path that runs through port 9001.
Who is it for?
Adopt YoMo if you are building an LLM agent whose tools need to sit near users in more than one region, and you are comfortable reading the source when the README runs out. Do not adopt it if you need a stable, fully documented tool protocol today, or if your agent runs in a single data centre where the geo-distribution story buys you nothing.
Can I use it commercially?
Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
Is it still maintained?
Yes. The repository last received commits 5 days ago.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem YoMo targets: tool calls that live far from the user

Most LLM agent stacks put the model and the tools in one place. The model runs in a hosted API, the tools run in the same VPC or the same process, and every tool call is a round trip across the same distance. YoMo starts from the opposite assumption. Its README states that when people talk about distribution today, it means distribution in a data centre, and that the AI model ends up far away from users around the world. The project calls its answer a geo-distributed system architecture, illustrated with a diagram showing deployment points spread across regions.

The audience is therefore narrower than the topic list suggests. If you are shipping a weather agent for one city, the geo-distribution pitch does nothing for you. If you are shipping an agent whose tools read regional data, hit regional services, or must answer within a latency budget that a cross-continent hop breaks, the placement question is the whole problem. YoMo is aimed at that second case, and at developers who want the tool layer to be a deployable unit rather than a library inside the model server.

What the request path actually looks like

The README shows two ways into a running YoMo instance. The first is an OpenAI-shaped route: POST to http://127.0.0.1:9001/v1/chat/completions with a messages array containing a user turn. The second is a direct route to a single function: POST to http://127.0.0.1:9001/tool/get-weather with an args field holding a JSON string, in the example {"args":"{\"city\":\"London\"}"}. That second endpoint is the interesting one. It means a registered tool is addressable on its own, not only as a consequence of a model deciding to call it.

Both routes share port 9001, so the chat completions API and the raw tool surface sit behind the same listener unless the configuration yaml changes that. The README does not describe the yaml schema. It only notes that yomo serve accepts a --config flag for a custom configuration file. That is a real gap: you can see the surface area, but not the knobs.

The transport layer is where the Rust choice shows up. The feature table claims TLS v1.3 encryption is applied to every data packet by design, and the repository topics include quic. Taken together, the design reads as a QUIC-based mesh where each tool is a node and packets are encrypted per connection rather than tunnelled through a separate overlay. The README does not show the wire protocol, the connection handshake, or how a tool registers itself with the server, so treat the mesh description as a design intent stated by the project rather than something you can verify from the front page.

Getting a weather tool running from zero

The documented path is short. Install the CLI with curl -fsSL https://get.yomo.run | sh, then confirm with yomo --version. Pull a model through Ollama (the README uses ollama pull ornith), start the runtime with yomo serve, scaffold a tool with yomo init, and run it with yomo run -n get-weather ./app. The scaffold produces a TypeScript project; the development section says to edit ./app/src/app.ts. Note the flag inconsistency between the two examples: the quick start uses yomo run -n get-weather ./app while the development section uses yomo run --name get-weather ./app. Both are shown in the same README, so one of them is stale.

If you build from source instead, the sequence is cargo build --release, then ./target/release/yomo --help, ./target/release/yomo serve, ./target/release/yomo init, and ./target/release/yomo run --name get-weather ./app. The CLI is a Rust binary, and the tool authoring surface is TypeScript. That split is worth noticing: you are not writing Rust tools, you are writing TypeScript functions that the Rust runtime hosts and routes.

The sample response in the README is a long, chatty answer about hiking near the Yarra River, complete with clothing advice and a note about mosquitoes. It is a useful reminder of what the framework does not do. YoMo routes the call and hosts the tool; the quality of that answer comes from the model and the tool implementation, not from the runtime.

Where the documentation stops and the guesswork starts

The README is a quick start, not a reference. Several things a production decision depends on are simply absent. There is no description of how a tool declares its schema to the model, which matters because function calling lives or dies on argument validation. There is no list of supported LLM providers beyond the Ollama example. There is no statement about how many tool instances can register against one server, how requests are routed between regions, or what happens when a tool goes offline mid-conversation.

The licence situation is the sharpest example. The README ends with an Apache License 2.0 link, but the repository metadata supplied for this review lists the licence as unknown. Those two facts can both be true if the metadata has not been populated, but a team that needs licence clarity before adoption should open the LICENSE file in the repository rather than trusting either signal. This is not a legal opinion, just a note that the two sources disagree.

The feature table also leans on words like seamlessly and effortlessly, which tell you nothing about failure behaviour. When a serverless tool crashes, does the chat completion return an error, a fallback, or a hang? The README does not say. If you are evaluating YoMo for anything user-facing, that question needs an answer from the source or from a test you run yourself.

The honest comparison: YoMo versus an in-process tool registry

The obvious alternative is not another agent framework. It is the default approach most teams already use: define tools as functions inside the same process as the model client, and let the model call them directly. That approach has no network hop between the orchestrator and the tool, no separate deployment unit, and no port to expose. Debugging is a stack trace.

YoMo trades that away deliberately. Tools become independently deployable services, which means you can put the weather tool in Sydney and the inventory tool in Frankfurt, and each one talks to its regional dependencies over a short hop. The cost is everything a distributed system costs: a tool is now a process you have to deploy, monitor, and version separately; the call can fail at the network layer; and the runtime becomes a component you must keep running.

There is no free lunch in the latency arithmetic either. If your model runs in a hosted API in one region, moving the tool closer to the user only shortens half the round trip. YoMo's geo-distribution argument is strongest when the model itself is also deployed regionally, which is consistent with the README's framing about AI inference being far from users, but it means the framework alone does not deliver the latency win. You need the whole path to be regional.

Maintenance, releases, and what an upgrade costs

The project is active, not archived, with a last push in September 2026 and three releases in the two months before that: v2.0.6 in late July, v2.1.0 in mid August, v2.1.1 at the end of August. That cadence suggests minor versions arrive roughly every two to three weeks, which is frequent enough that pinning a version matters. The jump from v2.0.6 to v2.1.0 is a minor bump, and the README does not include a changelog or migration notes, so the cost of an upgrade is not visible from the front page. If you deploy YoMo, read the release notes for each version before moving.

There are two moving parts to maintain: the Rust runtime you install or build, and the TypeScript tool projects you scaffold. The runtime is distributed via a shell installer at get.yomo.run, which means your upgrade path depends on that script continuing to serve the version you want. Building from source with cargo build --release gives you more control and a longer build step. The tool projects are ordinary TypeScript, so they carry their own dependency maintenance burden independent of YoMo's release schedule.

On licensing, the README points to Apache License 2.0. Apache 2.0 typically permits commercial use and modification with attribution and notice requirements, but the repository metadata for this review lists the licence as unknown. Confirm the actual LICENSE file before you build a product on it. That is a verification step, not a legal conclusion.

Who should pick this up, and what to check first

YoMo fits a specific shape of team: one building an LLM agent whose tools need regional placement, comfortable with a Rust binary plus TypeScript tool projects, and willing to read source when the README is silent. The OpenAI-compatible /v1/chat/completions endpoint means existing clients can point at it with a base URL change, and the /tool/ endpoint gives you a way to test a function without going through the model, which is genuinely useful during development.

It does not fit teams that need a documented tool schema contract, a provider matrix, or published failure semantics before they ship. It also does not fit single-region deployments, where the geo-distribution architecture adds operational surface without adding a latency benefit.

Before adopting, verify three things in the repository rather than the README: the LICENSE file, since the metadata says unknown and the README says Apache 2.0; the yomo serve configuration yaml, since --config is mentioned but never specified; and the registration and routing behaviour when a tool is unreachable, since nothing in the supplied material describes it. The install command is one line and the scaffold is one command, so the cost of checking is an afternoon, not a sprint.

Editorial conclusion

Adopt YoMo if you are building an LLM agent whose tools need to sit near users in more than one region, and you are comfortable reading the source when the README runs out. Do not adopt it if you need a stable, fully documented tool protocol today, or if your agent runs in a single data centre where the geo-distribution story buys you nothing. Before committing, verify the licence file in the repository, check whether the yomo serve config yaml schema is documented anywhere outside the CLI help, and confirm that the /tool/ endpoint is something you actually want exposed on the same port as the chat completions API.

Official sources

  1. Issues
  2. Project website
  3. README
  4. Releases
  5. yomorun/yomo on GitHub
Community notes

Community notes