anaksor-ocr
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…

exo’s Apache-2.0 software that links your devices into one AI cluster, so a model too big for one machine can run across them. The setup notes cover the macOS app, source installs on macOS and Linux, RDMA over Thunderbolt, the API and uninstalling.
exo is an open-source project on GitHub in the Developer category, listed by Mindket. It is free. This is version 2, last updated on . Install it from GitHub as its README says. Get Mindket’s setup notes on your Mindket account, as a zip.
brew install --cask exo
exo links your devices into one AI cluster. Its README says exo lets you run models larger than would fit on a single device, and with day-0 support for RDMA over Thunderbolt it makes them run faster as you add devices. Each device serves a dashboard and an API on port 52415. The API speaks the OpenAI Chat Completions, Claude Messages, OpenAI Responses and Ollama formats, so clients you already use can talk to it.
People with more than one capable device, most clearly several Apple silicon Macs, who want to run a model too large for any one of them. The README’s dashboard picture shows four 512 GB M3 Ultra Mac Studios. On Linux the README says exo currently runs on CPU. The contributing guide says the codebase is actively evolving and that testing is mostly manual.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Home labs | Mac owners with two or more Macs | Join the Macs into one cluster and run a model that needs both | Someone installs EXO on a second Mac, puts both on the same network and sees it appear in the dashboard within a few seconds. |
| Software teams | Developers who already use OpenAI, Claude or Ollama clients | Point the client’s base URL at exo instead of rewriting the code | A developer creates an instance, then sends the README’s chat completions request to localhost:52415/v1/chat/completions. |
| Performance work | Engineers who compare placements | Run exo-bench across pipeline and tensor sharding on one or more nodes | An engineer runs bench/exo_bench.py with --sharding tensor and --max-nodes 2, then reads prompt_tps and generation_tps. |
| Shared infrastructure | Admins with models on shared storage | Point exo at models already on shared storage, read-only | An admin runs EXO_MODELS_READ_ONLY_DIRS=/mnt/nfs/models:/opt/ai-models uv run exo, and exo can’t delete those models. |
| Ollama tools | People who use OpenWebUI or other Ollama clients | Use the Ollama-format endpoints | Someone lists models with curl http://localhost:52415/ollama/api/tags. |
exo runs on macOS and Linux. Its README and API reference name these ways to reach it.
| Platform | Install | What the README asks for |
|---|---|---|
| macOS app | EXO-latest.dmg, or brew install --cask exo | Apple silicon and macOS Sequoia 15.1 or later |
| macOS from source | Clone, build the dashboard, uv sync --extra mlx, uv run exo | Xcode for the Metal ToolChain, uv, node and stable Rust. Nix is an option |
| Linux from source | The same steps with uv sync --extra mlx-cpu. The README’s comment names --extra mlx-cuda13 or --extra mlx-cuda12 for NVIDIA | uv, node 18 or higher, stable Rust and Python 3.13. The README’s note says it runs on CPU for now |
| RDMA over Thunderbolt | rdma_ctl enable, run from Recovery mode | macOS Tahoe 26.2 or later and a Mac with Thunderbolt 5 |
Get it saves a zip of Mindket’s setup notes in your downloads folder. It has a page for the app, each source install and the tasks around them, taken from exo’s README, API reference, contributing guide, uninstall script and pyproject.toml. On a Mac, the app is the README’s easiest route.
| Need | Detail |
|---|---|
| Devices | One to start. For a cluster, two or more on the same local network or joined by a Thunderbolt cable |
| The same version | Every device runs the same version of exo. Devices on different versions don’t join each other |
| For the app | A Mac with Apple silicon and macOS Sequoia 15.1 or later |
| For a source install | uv, node to build the dashboard (18 or higher on Linux), stable Rust, Python 3.13, and on a Mac, Xcode |
| Disk space | Room for the models you load. The README’s environment variables set where downloads go |
| An admin password | For the app’s optional Thunderbolt network setup, for Uninstall EXO in its Settings, and for the README’s sudo lines: the uninstall script, the Nix daemon restart and apt on Linux |
brew install --cask exo
To run from source on macOS, the README gives these lines. On Linux it swaps the uv sync line for uv sync --extra mlx-cpu.
git clone https://github.com/exo-explore/exo cd exo/dashboard && npm install && npm run build && cd .. uv sync --extra mlx uv run exo
Chat in the dashboard, or call the API. The README walks through four steps with a small model, mlx-community/Llama-3.2-1B-Instruct-4bit.
curl -N -X POST http://localhost:52415/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "mlx-community/Llama-3.2-1B-Instruct-4bit",
"messages": [
{"role": "user", "content": "What is Llama 3.2 1B?"}
],
"stream": true
}'The same server answers /v1/messages for the Claude format, /v1/responses for OpenAI Responses and /ollama/api/chat for Ollama. The README gives a curl line for each.
You have two Macs and want them to work as one cluster. You install EXO on both with Homebrew and open it on each.
brew install --cask exo
You put both Macs on the same Wi-Fi or Ethernet network and check that they run the same version. The README says the second Mac shows up in the dashboard within a few seconds. If it doesn’t, the README’s checklist starts with the version, then the Local Network switch in System Settings on both Macs. To see the version in the app, choose About EXO from the menu bar icon or open Settings › General. A source install prints it with this line.
uv run exo --version
The app and a source checkout number their versions differently, so by default they don’t join each other. Give every device the same cluster name to mix them.
If you are new. A cluster here means your own devices sharing the work on one model. exo reads the layout of your network, picks how to split the model and handles the rest. Start with the app on one Mac, add a second, and try the README’s small model before any large one. Models are big files, so check the free space on the drive that holds ~/.exo/models. The /state endpoint shows the instance IDs and what is deployed.
For experts. The README lists topology-aware auto parallel, which weighs device resources and the latency and bandwidth of each link. It also lists tensor parallelism, with a claimed speedup of up to 1.8x on 2 devices and 3.2x on 4. For RDMA over Thunderbolt 5 it claims a 99% cut in latency between devices. The inference backend is MLX, with MLX distributed for communication.
A preview lists a sharding, Pipeline in the README’s sample, and an instance_meta, MlxRing in the sample. exo-bench filters on ring, jaccl or both, and on pipeline, tensor or both. Cancelling works by closing the HTTP connection, or by calling /v1/cancel/{command_id}.
EXO_MODELS_DIRS adds writable model folders, tried in order after the default, and the first with enough free space is used. EXO_ZENOH_NAMESPACE does the same as --namespace. The --no-worker flag makes a coordinator-only node. Models are described by TOML model cards, and the contributing guide lists the required fields.
The app and the dashboard work on your devices, and a few steps reach into your system or the internet.
This kit holds setup notes only. Mindket wrote them. exo's source is in exo labs' repository: https://github.com/exo-explore/exo. Its macOS app downloads from https://assets.exolabs.net/EXO-latest.dmg or installs with Homebrew.
These notes are not made or endorsed by exo labs. The README says "exo: Run frontier AI locally. Maintained by exo labs" and describes it this way: "exo connects all your devices into an AI cluster. Not only does exo enable running models larger than would fit on a single device, but with day-0 support for RDMA over Thunderbolt, makes models run faster as you add more devices." The repository's docs folder holds one page, the API reference: https://github.com/exo-explore/exo/blob/main/docs/api.md
License: Apache-2.0. The LICENSE file (https://github.com/exo-explore/exo/blob/main/LICENSE) is the Apache License 2.0 text. Its appendix notice reads "Copyright 2025 Exo Technologies Ltd". The README's badge also says Apache 2.0. The repository has no NOTICE file.
The contributing guide says the codebase is actively evolving and that testing is mostly manual for now. Source: https://github.com/exo-explore/exo/blob/main/CONTRIBUTING.md
uv. Source: README.md (Run from Source)~/.exo on a Mac, with downloaded models in ~/.exo/models. On Linux it follows the XDG folders: see setup/run-from-source-linux.md.io.exo.networksetup and a network location named exo. See setup/macos-app.md.uv, Node.js (to build the dashboard) and a stable Rust toolchain. On macOS, Xcode too, for its Metal ToolChain. Linux needs Node.js 18 or higher. Source: README.md (Run from Source)On a Mac, the README's easiest way is the app. Download EXO-latest.dmg from https://assets.exolabs.net/EXO-latest.dmg, or use Homebrew:
brew install --cask exo
From source, the README gives these lines for macOS. Linux uses a different extra in the uv sync line: see setup/run-from-source-linux.md.
git clone https://github.com/exo-explore/exo
cd exo/dashboard && npm install && npm run build && cd ..
uv sync --extra mlx
uv run exo
Either way, exo then serves its dashboard and API at http://localhost:52415. Source: README.md (Quick Start)
--no-worker and --legacy-daemon flags and file locationsREADME.md 4 KB setup/api-and-clients.md 5 KB setup/benchmarking.md 2 KB setup/configuration.md 4 KB setup/macos-app.md 4 KB setup/rdma-thunderbolt.md 2 KB setup/run-from-source-linux.md 3 KB setup/run-from-source-macos.md 2 KB setup/update-and-uninstall.md 4 KB
Updated by Mindket to the current version of this kit.
Posts and comments that name this project on Hacker News, Bluesky, X, Reddit, Facebook and YouTube, found by a weekly search and on Trendshift. Mindket doesn’t write or check them. Open one to read it where it was posted.
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
Qwen · Kit
Qwen2.5-7B-Instruct as GGUF files in eight quantization sizes, to chat with locally through llama.cpp. For people who want a capable 7.6B model on their own co…
ACE-Step · Kit
Generates music from text with a 4B diffusion decoder, 50 steps and guidance control, aiming for higher audio quality than the base. For creators with a GPU of…
alirezarezvani · Skill
Adds 411 ready-made skills for Claude Code and other coding agents, grouped by role from engineering and product to marketing, finance and compliance. Installs…
block · Kit
Self-hostable workspace where people and AI agents share the same rooms, built on a Nostr relay that logs every action as a signed event. For teams that want t…
backnotprop · Kit
Opens your AI coding agent's plans, specs and code changes in a browser so you can annotate or comment on them and send the feedback straight back to the agent.