Jan earns the first paragraph, not a grudging mention at the bottom. It's the genuinely open-source app in local AI. The full desktop source sits on GitHub with about 44,800 stars, the license is Apache 2.0, there's no paid tier of any kind, and telemetry is opt-in at first launch with zero collection by default. If open source is your hard filter, Jan is the app built for it.

Openness is Jan's defining strength. Jan got the license right and the architecture right. What sends people searching for an alternative is the list of things it doesn't do.

Is Jan open source and free?

Yes on both counts. Jan is Apache 2.0 licensed with the full desktop app source on GitHub, and it's completely free, with no paid tier of any kind as of October 2026.

The privacy posture matches the license. Telemetry is a question Jan asks at first launch, it defaults to off, and nothing is collected until you say yes. Even opted in, what leaves your machine is daily-active and retention counts, not chats or prompts. You don't have to take any of this on faith because the code is right there to read.

That's the auditability open source buys.

What did Jan get right architecturally?

Jan bundles llama.cpp directly in the app, serves a local OpenAI-compatible API on 127.0.0.1:1337, downloads plain GGUF models from Hugging Face, and takes your own keys for remote providers. The engine lives on your machine, the API is standard, and the files are standard.

This is the shape we'd argue every local AI app should have, and Jan committed to it earlier than most. llama.cpp is managed in-app, since v0.8.0 as a router that loads and unloads models on demand, with no separate runtime to babysit. An experimental MLX engine runs on Apple Silicon (macOS 14 or later), though it's still labeled experimental and doesn't run embeddings yet. The app itself is Tauri, shipping on Windows, macOS, and Linux from one codebase.

Point a script at port 1337 and it behaves like any OpenAI endpoint. Download a model and it's a file you can see. None of this sounds remarkable until you've used tools that hide weights behind hashed blob stores or quietly route a "local" feature through someone's cloud. We made the same architectural calls in ToolPiper for the same reasons. Plain files outlive the app that downloaded them, and a standard API means your scripts never care which engine answered.

Why do people look for a Jan alternative?

The common reasons are capability walls, not quality complaints. Jan has no voice surface (no speech-to-text, text-to-speech or dictation), it consumes MCP tools but documents no way to serve them to Claude Code or Cursor, it has no Mac system automation, its agent modes (Cowork and Jan Agent) ship only as nightly previews, and it has no mobile app.

No voice, in either direction. Jan won't transcribe a meeting, won't read an answer aloud, and won't take dictation. As of v0.8.4 there's no STT or TTS in the app; chats accept audio files only for audio-capable models. If voice is part of how you want to use local AI, Jan doesn't cover it yet.

MCP runs one way. Jan is an MCP host. Plug servers into it and its models will call their tools, which is genuinely useful. What its docs don't describe is the reverse - serving tools to an outside agent. Claude Code and Cursor can't reach your Mac through Jan, because there's no server side to connect to.

Agents are still previews. Cowork, Jan's agentic task mode, and Jan Agent, its terminal coding agent, ship only in nightly channels, and Jan Agent runs no inference engine of its own: it calls a cloud provider or an OpenAI-compatible endpoint such as Jan's local server.

Smaller walls exist too. MLX support is still experimental, so on Apple Silicon you're mostly on the Metal llama.cpp path. Outside the nightly Cowork preview and its Browser MCP, Jan doesn't act on your Mac, so there's no system automation to build on. And there's no mobile app.

Notice what's missing from that list. Nobody leaves Jan because the chat is bad or the engine is slow. They leave because they want more than chat.

How does ToolPiper compare to Jan?

ToolPiper keeps the architecture Jan got right - an embedded upstream llama.cpp engine (build b11669), a local OpenAI-compatible API on localhost:9998, plain GGUF files - and adds a platform layer around it. That layer includes an MCP server with over 450 tools across 26 macOS domains, free transcription on the Neural Engine, free push-to-talk dictation and three free TTS engines, local indexed RAG on Pro, a chat that calls those tools itself, and 142 macOS system actions.

The free tier is the whole runner, no account required. ToolPiper embeds upstream llama-server directly, build b11669, the same engine llama.cpp ships. When llama.cpp improves, we pick it up on the next bump, unmodified. Models download from Hugging Face as plain named GGUF files, and chat, transcription, the local API, and the full MCP server all sit in the free tier with no caps.

The MCP server is where Jan's one-way wall falls. ToolPiper doesn't only consume tools, it serves them. Connect Claude Code or Cursor to your Mac and the agent gets file operations, window control, browser automation, and the rest of ToolPiper's 142 system actions as callable tools, drawn from a catalog of more than 300 across 26 macOS domains.

Voice exists at every point Jan leaves blank, and all of it is free. Transcription runs on the Neural Engine. Push-to-talk dictation works anywhere on the Mac, 127-173 ms from key release to text in our testing, and there are three text-to-speech engines. Document Q&A on Pro is an indexed pipeline, HNSW vectors plus BM25 keyword search over your files.

Voice chat rounds out the free tier. Speak to a local model and hear it answer: speech-to-text into a language model into text-to-speech, with no glue code to write. Jan has no equivalent surface.

Jan's openness is real: you can read every line it runs. ToolPiper takes a different approach to trust, a short, disclosed list: your prompts, files and outputs stay on your Mac with local models, and ToolPiper's own traffic is limited to update checks, license checks when signed in, a daily activity count and optional usage counts, none of which carry your content. You can see those requests with tools already on your Mac, but what they contain is our policy, not something you can read in source. We wrote up exactly how to verify it, and the method works on any app, Jan and ToolPiper alike.

Pricing is the other asymmetry, and it cuts both ways. Jan is free, full stop, with no paid offering as of October 2026. ToolPiper's runner is free with no account, and so is much of the platform layer: voice, the MCP host, all nine inference backends, and 206 of ToolPiper's 468 native tools. Pro ($10/month) is our tools: browser automation, files and Git, the clipboard cache, local RAG over your files, web scraping with YouTube transcripts, and the cloud API proxy for your own keys. Studio is $29 for media tools. Max is $49 for dev tools.

Who is Jan built for?

Jan fits when open source is a hard requirement, when you work on Windows or Linux, when your budget for paid tiers is zero, or when you want to read and patch the code you run.

None of those are edge cases. Plenty of teams hold an open-source-only policy for anything that touches their data, and Jan clears that bar. Cross-platform consistency is real value if your machines aren't all Macs. And if your needs end at chatting with a local model, your project documents and your own API keys, Jan already covers them, free, and the alternative question never needs to come up.

The switch makes sense when the gaps above are your daily work: voice, agents that act on your Mac in a shipping release, an MCP server for your coding agent, automation. In Jan those are absent or still in preview.

Try them side by side

Nothing about this choice requires uninstalling anything. Jan serves its API on 127.0.0.1:1337, ToolPiper serves on localhost:9998, and they coexist on the same Mac while you decide. Download ToolPiper at modelpiper.com/download, let the starter model arrive, and try the things Jan doesn't ship yet. Dictate into any text field. Wire the MCP server into Claude Code. If the platform layer earns its keep, the paid-tier decision comes later, on your schedule. If it doesn't, you've lost nothing but the download time, and Jan was the right answer all along.

The full feature-by-feature table is in Jan vs ToolPiper. For the wider field, see five local AI platforms compared. The method for watching any app's network connections is in how to verify an AI app is really offline.