The Problem
Running local LLMs on a Mac typically means juggling a terminal server, a separate chat UI, and manual model management. Nativ consolidates chat, model discovery, inference serving, and analytics into a single native macOS app, targeting users who want local AI without the orchestration overhead.
What This Does
Nativ is a SwiftUI macOS app that bundles an mlx-vlm server (in PythonDistribution/) and wraps it with model management, chat, analytics, and OpenAI/Anthropic-compatible API endpoints. The app discovers models in your Hugging Face cache, downloads new ones, and serves them over localhost.
The Sources/NativServerKit/ directory owns the Python server lifecycle and client APIs. Sources/Nativ/ contains the UI layer — chat, dashboard, models, integrations, and settings. A website/ folder provides a marketing page, and scripts/ handles release automation (signing, notarization, DMG packaging).
How It Is Wired
The module graph shows 5 internal modules with zero import edges — every file is effectively standalone, which means no dependency cycles but also no clear architecture boundaries. The import graph is flat; there is no hub module carrying disproportionate blast radius.
Execution starts at Sources/Nativ/Main.swift, which boots the SwiftUI app. AppDelegate.swift (1468 lines — the largest file) initializes NativServerKit, which spawns the Python server via PythonDistribution/Launcher/mlx_vlm_server_launcher.c. The server (PythonDistribution/Overlay/nativ_server.py) exposes OpenAI-compatible endpoints on localhost. The app's NativChatClient.swift and NativImageClient.swift talk to that server over HTTP.
Key responsibilities:
Sources/Nativ/Features/Chat/— chat UI, session store, composerSources/Nativ/Features/Models/— model discovery (LocalModelDiscovery.swift), provider abstraction (LocalModelProvider.swift)Sources/Nativ/Features/Dashboard/— analytics store and stats viewsSources/Nativ/Features/Integrations/— configures Codex, Claude Code, and other tools to use Nativ's APISources/NativServerKit/— server lifecycle and client wrappersscripts/— release pipeline: build, sign, notarize, package DMG
The system touches the network only for model downloads (Hugging Face) and the localhost API. Everything else is filesystem-local.
How To Use It
Build from source requires Xcode with macOS 26 SDK, xcodegen, and Python 3:
# Install xcodegen if needed, then generate and build
xcodegen generate
open Nativ.xcodeproj
Run the app: Launch from Xcode, or download the DMG from GitHub Releases. First launch walks through model selection and optional API key generation.
Configuration: Configuration/Nativ-Info.plist holds app metadata; Configuration/Signing.xcconfig handles code signing. No environment variables are required for basic use.
Release builds: Makefile at the root orchestrates the scripts/release_macos.sh pipeline.
Real-World Use
A developer using Claude Code with local models: install Nativ, download a model via the Models tab, start the server, then configure Claude Code to point at http://localhost:8080/v1 (the exact endpoint path is in Sources/NativServerKit/NativServerKit.swift). Nativ handles model loading, KV-cache quantization, and speculative decoding — the developer gets a private, offline coding assistant without managing a server process manually.
Code Health & Issues
Static analysis (47 findings: 17 high, 30 medium) reports:
- High — Deep nesting (23 instances) in
ControlPanelView.swift,ChatComposer.swift, andChatConfigurationView.swift; max depth 8 makes control flow hard to follow. - High — Duplicated code blocks: 102 repeated 6-line blocks across 19 files, including
nativ_server.pyandChatSessionStore.swift. - High — 15 oversized files;
AppDelegate.swiftalone is 1468 lines. - Medium — Bare
exceptinnativ_server.pyswallows errors indiscriminately. - Medium — High branching density in
LocalModelDiscovery.swiftandLocalModelProvider.swift(290 branch points over 992 lines).
SDLC observations: no test suite exists (34 source files, zero tests). .github/workflows/pages.yml has continue-on-error on a correctness step, and its jobs lack timeout-minutes. build_mlx_vlm_server.py makes outbound calls without timeouts. Missing .editorconfig, .gitattributes, and formatter config.
The Bottom Line
Nativ is a well-scoped macOS app that solves a real problem — local LLM management without terminal gymnastics. The architecture is flat and simple, but the lack of tests and the oversized AppDelegate.swift will make changes risky as the feature set grows. Worth using if you're on Apple silicon and want a polished local inference workspace; worth contributing to only if you're prepared to add the test infrastructure it lacks.