Skip to content

Repository files navigation

Bauhaus

Download MLX models on your Mac and serve them to the rest of your network — an OpenAI-compatible endpoint, in a menu-bar app.

License: MIT Status: experimental Go 1.25 Built with Claude Code
Apple Silicon MLX / Metal


Bauhaus turns one Apple Silicon Mac into a shared local-inference server. Browse and download MLX models from HuggingFace, and serve them over an OpenAI-compatible API to every other machine and user account on your network. Anything that talks to ChatGPT can talk to your Mac — just change the base URL.

It manages its own runtime: on first launch it installs a private Python and MLX under ~/Library/Application Support/Bauhaus and never touches your system Python. Uninstalling is deleting one folder.

Status

Experimental. Runs and is tested end-to-end on macOS 26 / Apple Silicon. Cross-machine LAN use works; TLS and notarized distribution are not yet included.

Features

  • Model browser — search the mlx-community org, download with live progress, resume interrupted transfers.
  • OpenAI-compatible server/v1/chat/completions, /v1/completions, /v1/models, streaming included. Drop-in for any OpenAI SDK.
  • Runs many models — one process per model, with an LRU memory budget so a request for a second model evicts an idle one instead of OOMing the machine.
  • Network-shared — bind the LAN, discoverable over Bonjour, optional API key.
  • Multi-account — other user accounts on the same Mac share one copy of each model on disk and on the GPU.

Install

One line — installs Bauhaus.app (the menu-bar server) to /Applications, allows it through the firewall, and launches it:

curl -fsSL https://raw.githubusercontent.com/REPPL/Bauhaus/main/install.sh | bash

The server needs Apple Silicon (MLX runs on Metal). For the native chat client (BauhausChat.app, universal — runs on Intel too, talks to a server over the network):

curl -fsSL https://raw.githubusercontent.com/REPPL/Bauhaus/main/install.sh | bash -s -- client

The installer verifies the download's signature before installing it, so you need minisign on your PATH:

brew install minisign

The release workflow signs a checksums file with a key held only in CI; the installer carries the matching public key and refuses to install anything that does not verify against it. The binaries are ad-hoc signed, not notarized; because the installer has already cryptographically verified the app, it clears the Gatekeeper quarantine so it launches without a prompt. The first launch installs the MLX runtime (a few minutes, shown in the control panel), then you can download and serve models. New here? See docs/getting-started.md.

Build from source

make app         # build Bauhaus.app (menu-bar app bundle)
make install     # copy to /Applications and launch it
make run         # or: run headless in the foreground, for development

Using it

Click the menu-bar icon → Open Control Panel, or from any OpenAI client:

from openai import OpenAI
client = OpenAI(base_url="http://your-mac.local:11535/v1", api_key="not-needed")
print(client.chat.completions.create(
    model="mlx-community/Qwen3-8B-4bit",
    messages=[{"role": "user", "content": "Hello!"}],
).choices[0].message.content)

Security

By default the server is reachable by anyone on your network with no API key — the control panel warns you while this is so. Set a key in Settings to require Authorization: Bearer <key>. Same-machine clients (loopback, including other user accounts) never need a key. The control panel and its /api/* endpoints are bound to loopback only and are never reachable from the LAN.

Layout

  • cmd/bauhaus/ — menu-bar app + singleton election.
  • internal/ — the engine: hub (HuggingFace client + downloader), runtime (Python/MLX provisioning + process pool), gateway (OpenAI + control API), registry, discovery, config, app.
  • docs/ — getting-started guide.

Design decisions and the empirical facts behind them: DECISIONS.md.

Development

make test        # go test -race ./...
make lint        # fmt + vet + test

Licence

MIT. See LICENSE.

About

Serve local MLX models on your network. EXPERIMENTAL: Do not use.

Resources

Stars

Watchers

Forks

Releases

Contributors

Languages