A native macOS workspace for local AI models, provider-backed chat, multimodal agents, and conversational image creation.
Playa turns an Apple Silicon Mac into a private AI model studio and agent workspace. It combines one-click MLX inference, a local model catalog designed for hundreds of models and terabytes of storage, OpenAI-compatible third-party providers, Fx Agent multimodal sessions, and image generation or editing through supported Codex and Gemini models.
Load and serve compatible local models without assembling a Python environment by hand. Playa embeds an mlx-vlm runtime, exposes OpenAI- and Anthropic-compatible local APIs, and provides live health and performance metrics.
Playa can discover models in Hugging Face caches and user-selected local directories. The library is designed for collections containing hundreds of open models and more than a terabyte of files.
- Automatic family, capability, format, and modality tags
- Search and tag-based filtering
- Sorting by on-disk size, name, recency, and measured performance
- Local downloads, progress tracking, history, launch, and removal controls
- MLX and compatible local model discovery
Use a model running directly on your Mac or connect an OpenAI-compatible provider. EasyCLIProxyAPI integration supports editable base URLs and API keys, OAuth-backed upstream providers, model discovery, model-list caching, and a selectable default model.
Choose between a normal streaming conversation and Fx Agent sessions. Fx Agent supports multimodal context, local tools, and an optional OpenComputer-enhanced execution mode for isolated remote environments.
Select supported Codex or Gemini image models directly from the conversation workflow. Generate an image from text, attach references for iterative editing, and view returned image results inline without leaving the session.
Inspect token usage, time to first token, decode speed, memory usage, request history, server health, endpoints, and logs from the native interface.
flowchart LR
A["Playa · SwiftUI app"] --> B["PlayaServerKit"]
B --> C["Embedded mlx-vlm server"]
C --> D["Apple MLX runtime"]
D --> E["Local models · unified memory"]
A --> F["EasyCLIProxyAPI and compatible providers"]
A --> G["Fx Agent"]
G --> H["Local tools"]
G --> I["Optional OpenComputer environments"]
A --> J["Codex and Gemini image workflows"]
- Apple Silicon Mac
- macOS 26 or newer
- Enough unified memory and disk space for the selected models
- Xcode with the macOS 26 SDK
- XcodeGen
- Python 3
- Zig and a local checkout of vercel-labs/fx at
../fx, orPLAYA_FX_SOURCE_ROOTpointing to it - Network access during the first embedded-runtime build
The v0.3.4 release includes Playa-0.3.4-macos-arm64-unnotarized.dmg, an ad-hoc-signed Apple Silicon community build containing the complete offline MLX and MLX-VLM Python runtime. It is not notarized by Apple, so macOS Gatekeeper may block the first launch. Verify the published SHA-256 checksum, copy Playa to /Applications, then Control-click the app and choose Open. See the release notes for the full security notice.
git clone https://github.com/jasonet/Playa.git
cd Playa
brew install xcodegen zig
git clone https://github.com/vercel-labs/fx.git ../fx
make xcode-build
open build/XcodeDerivedData/Build/Products/Debug/Playa.appThe first build assembles a relocatable Python environment for the embedded server and can take substantially longer than later builds.
Machine-specific signing configuration belongs in Configuration/Signing.local.xcconfig, which is intentionally ignored by Git. Do not place signing identities, team IDs, private update keys, or API credentials in tracked files.
Example local override:
PLAYA_BUNDLE_IDENTIFIER = com.example.Playa
PLAYA_SERVER_KIT_BUNDLE_IDENTIFIER = com.example.PlayaServerKit
DEVELOPMENT_TEAM = YOUR_TEAM_ID
Unsigned development builds can be produced with:
xcodebuild \
-project Playa.xcodeproj \
-scheme Playa \
-configuration Debug \
-derivedDataPath build/XcodeDerivedData \
CODE_SIGNING_ALLOWED=NO \
buildBy default, Playa serves on http://127.0.0.1:8080. With a model selected:
curl http://127.0.0.1:8080/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "your-model-id",
"messages": [{"role": "user", "content": "Hello from Playa"}],
"stream": false
}'If server authentication is enabled, add Authorization: Bearer your-api-key.
Sources/
├── Playa/ # SwiftUI application
└── PlayaServerKit/ # Embedded server lifecycle and Swift clients
PythonDistribution/
├── Launcher/ # Relocatable server launcher
├── Overlay/ # Playa server extensions
├── Requirements/ # Pinned Python dependencies
└── Scripts/ # Runtime assembly and verification
Configuration/ # App metadata and public signing defaults
scripts/ # Build, archive, signing, and regression checks
website/ # GitHub Pages source
project.yml # XcodeGen project definition
Local inference stays on the Mac after model files and dependencies have been downloaded. Requests sent to a configured third-party provider are subject to that provider's policies. Playa does not include provider API keys, Apple signing credentials, or private update-signing keys in this repository.
See SECURITY.md for vulnerability reporting.
Contributions are welcome. Read CONTRIBUTING.md before opening a pull request.
Playa is available under the MIT License. The project is derived from the Nativ codebase originally created by Prince Canuma; its original copyright notice is preserved in the license.


