6 min read

Lemonade: A Local AI Server for Your GPU and NPU (GitHub, Scanned)

A local AI server for chat, code, speech and images on your own GPU or NPU, with OpenAI-style APIs.

Lemonade logo
✅
Scan: safe. Nothing malicious. Know that it installs as an always-on system service, downloads inference engines and models when you ask, and its bundled web apps carry a large set of npm advisories. Scanned Oct 26, 2026; the full report is below.

Lemonade is a local AI server: install it, pull a model, and you get chat, coding, image generation, speech and transcription on your own hardware, behind the same OpenAI, Anthropic and Ollama style APIs that hundreds of apps already speak. It picks an engine for each job, llama.cpp for language models, Stable Diffusion for images, Whisper for transcription and Kokoro for speech, and handles the downloads and hardware setup.

What sets it apart is hardware reach. AMD engineers contribute optimisations for Ryzen AI NPUs, Radeon GPUs and Strix Halo, and it runs GGUF, ONNX and FLM models across CPU, GPU and NPU, with CUDA, Metal and Vulkan back ends too. The lemonade command runs models, lists and pulls them, sets aliases with failover, and lemonade launch connects a coding agent such as Claude Code or OpenCode to a local model.

It is Apache-2.0 at about 6,000 stars and moves fast, with release v2026.43.3 when scanned. It is a younger project than Ollama, so fewer apps name it directly, but its Ollama-compatible API covers most of them.

Who it is for

Owners of AMD Ryzen AI laptops and Radeon GPUs who want their NPU and GPU used properly, and anyone who wants one local server for text, images and speech instead of three separate tools.

Getting started

1. Ubuntu: install from the stable PPA (Windows: run the MSI; macOS: the .pkg on the releases page)

sudo add-apt-repository ppa:lemonade-team/stable && sudo apt install lemonade-server

2. Download and chat with a model

lemonade run Gemma-4-E2B-it-GGUF

3. Point Claude Code at a local model

lemonade launch claude

The web interface is at http://localhost:13305 once the server is running. The Windows MSI is at github.com/lemonade-sdk/lemonade/releases/latest/download/lemonade.msi. If you use the Docker image, its docs warn that -p 13305:13305 exposes an unauthenticated API on every interface: publish to 127.0.0.1 or set LEMONADE_API_KEY.

Safety scan

We cloned lemonade-sdk/lemonade at commit 04d6f0f on Oct 26, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • No secrets, no committed binaries and no bare-IP URLs across about 346,000 lines of C++, TypeScript and Python.
  • The persistence hits are the packages registering the server as a service: postinst-rpm creates a lemonade user and enables lemond.service under systemd, and the macOS package installs a LaunchAgent. That is what a background server should do, but it means Lemonade runs until you stop or uninstall it.
  • The curl | sh hits are benign. setup.sh (847 lines, uses sudo) is the developer build script and installs Rust with rustup; agent_launcher.cpp only prints the OpenCode and Junie install commands for you to run if those agents are missing. Engines such as llama.cpp builds are downloaded from GitHub releases when you pick a back end.
  • The 147 known advisories (4 critical, 62 high) sit in the two front ends, src/app (the Tauri desktop app) and src/web-app, including DOMPurify, shell-quote and follow-redirects. Some of that code ships to users inside the interface; the C++ server itself has no lockfile advisories.
  • 27 workflows. Two use pull_request_target: auto-label and a Claude review that runs only when a maintainer requests it. Both check out the base branch, not the pull request, though the review job does hand the pull request to an AI model holding an API key. No third-party action is pinned to a commit. Dependabot, licence and contributing guide present; no security policy or CodeQL.

What the scanner counted

CheckResult
SecretsNone found.
Suspicious code5 pattern hits found and read; every one is listed under the raw findings.
Install-time code1 Cargo build script. 2 installer scripts (one fetches and runs a remote script; one can call sudo)
Committed binariesNone.
CI workflows27 workflows. 2 use pull_request_target, none check out the pull request head. 16 of 16 third-party actions pinned to a tag rather than a commit.
Network hosts40 distinct hosts referenced from source; most often lemonade-server.ai, huggingface.co, github.com, raw.githubusercontent.com. No URLs to bare IP addresses.
Known vulnerabilities147 advisories across 1,062 pinned packages: 4 critical, 62 high, 49 moderate, 19 low, 13 unrated. src/app/package-lock.json: 483 packages, 50 advisories; src/app/src-tauri/Cargo.lock: 591 packages, 22 advisories; src/web-app/package-lock.json: 221 packages, 80 advisories.
Project hygieneHas automated dependency updates, licence file, contributing guide. Missing security policy, CodeQL.
OpenSSF ScorecardNot scored: the project is not in Scorecard's weekly index.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

Pattern hits (5)
WhereRuleMatch
setup.sh:767download-piped-to-shellif curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable --no-modify-path; then
src/cpp/cli/agent_launcher.cpp:216download-piped-to-shell" curl -fsSL https://opencode.ai/install | bash\n"
src/cpp/cli/agent_launcher.cpp:291download-piped-to-shell" curl -fsSL https://junie.jetbrains.com/install.sh | bash\n"
src/cpp/postinst-full-mac:17persistenceAGENT_PLIST="${INSTALL_ROOT}/Library/LaunchAgents/${AGENT_LABEL}.plist"
src/cpp/postinst-rpm:29persistencesystemctl enable lemond.service > /dev/null 2>&1 || true
Installer scripts (2)
  • setup.ps1, 266 lines; talks to nodejs.org, win.rustup.rs
  • setup.sh, 847 lines, uses sudo, fetches and runs a remote script; talks to brew.sh, sh.rustup.rs, v2.tauri.app
Worst known vulnerabilities (24 of 147)
AdvisorySeverityPackageSummary
GHSA-cg2g-xh64-v4q7criticaldompurify@3.4.11DOMPurify SAFE_FOR_TEMPLATES bypass: split template expressions survive in attached shadow root content on DOM output mo…
GHSA-jqcg-44mw-7w3hcriticalproxy-addr@2.0.7proxy-addr vulnerable to IP spoofing via IPv4-mapped IPv6 trust subnet
GHSA-pqg4-j6r4-53mvcriticalshell-quote@1.8.4shell-quote: `quote()` command injection via a line terminator in a token after a `{ comment }` token
GHSA-cg2g-xh64-v4q7criticaldompurify@3.4.10DOMPurify SAFE_FOR_TEMPLATES bypass: split template expressions survive in attached shadow root content on DOM output mo…
GHSA-vc2v-76pw-4v95highcompression@1.8.1compression vulnerable to Denial of Service via memory leak on premature response close
GHSA-mrv2-3pqr-j5jrhighdompurify@3.4.11DOMPurify IN_PLACE: hook that removes a parent or sibling leaves the detached subtree's event handlers armed (incomplete…
GHSA-27r3-jxmh-p828highbody-parser@1.20.5body-parser vulnerable to Denial of Service via trailing bytes after a compressed request body
GHSA-8r9p-f939-6h3chighfollow-redirects@1.16.0follow-redirects sensitiveHeaders regex escaping can expose credential headers
GHSA-q3jh-wrc6-jgq8highfollow-redirects@1.16.0follow-redirects array-form headers bypass cross-origin credential stripping
GHSA-587h-7wmj-h5pmhighlaunch-editor@2.14.1launch-editor: `fs.existsSync()` existence check can be bypassed on Windows
GHSA-395f-4hp3-45gvhighshell-quote@1.8.4shell-quote: Quadratic-complexity Denial of Service in `parse()` (CWE-407)
GHSA-v245-v573-v5vmhighlinkify-it@5.0.1linkify-it: Quadratic-complexity DoS via the `mailto:` validator scan-loop on attacker text
GHSA-gfr2-rv44-r23chighmarkdown-it@14.2.0markdown-it: Quadratic-time rendering of a single multi-line link reference definition with default options (regression …
GHSA-r7fv-28h4-cvq7highmarkdown-it@14.2.0markdown-it: Quadratic complexity in smartquotes with unmatched closing quotes
GHSA-r28c-9q8g-f849highpostcss@8.5.15PostCSS: Path Traversal in Previous Source Map Auto-Loading (sourceMappingURL) leads to Arbitrary .map File Disclosure
GHSA-28wg-ghj8-5hjvhighnanoid@3.3.12nanoid: non-secure generators can loop indefinitely with negative size
GHSA-2v37-7h3g-55p8highnanoid@3.3.12nanoid: custom generators can loop indefinitely when size is zero
GHSA-68fv-2mgg-jv7qhighsource-map-js@1.2.1source-map-js allows event-loop denial of service through indexed source-map section offsets
GHSA-4c8g-83qw-93j6highfast-uri@3.1.2fast-uri vulnerable to host confusion via failed IDN canonicalization
GHSA-7p8r-x3mc-p8w7highfast-uri@3.1.2fast-uri vulnerable to host confusion via backslash authority introducer
GHSA-f65p-4m7j-42xchighfast-uri@3.1.2fast-uri vulnerable to server-side request forgery via malformed IPv6 normalization
GHSA-fph4-wmhf-6fwfhighfast-uri@3.1.2fast-uri vulnerable to server-side request forgery via repeated hostname percent-decoding
GHSA-jqff-g426-hqxphighfast-uri@3.1.2fast-uri vulnerable to host confusion via percent-encoded scheme normalization
GHSA-qw65-cvwx-89v3highfast-uri@3.1.2fast-uri vulnerable to authority injection via an unvalidated port in serialize
Workflows worth a look

By the numbers

Stars6,000
Forks538
Contributors142
Commits1,720
Open issues431
Open pull requests176
Releases80
Latest releasev2026.43.3
LicenceApache-2.0
Main languageC++
Project age1 year
Last pushOct 26, 2026
Tracked files1,169
Lines of code345.7K
Checkout size18 MB

Lines by language: C++ 109K, TypeScript 53.1K, Python 47.1K, CSS 31.6K, Markdown 26K, C/C++ header 21.6K.

Questions

Is Lemonade free?

Yes. Lemonade is free and open source under Apache-2.0, and the models it runs are free to download under their own licences. An experimental option can route requests to cloud providers such as OpenRouter or Fireworks, which charge separately, but it is off unless you configure it.

Do I need an AMD computer to use Lemonade?

No. It runs on CPUs and on NVIDIA, Apple Silicon and other GPUs through llama.cpp's CUDA, Metal and Vulkan back ends. AMD hardware gets extra optimisations, and Ryzen AI NPU support is where it stands out.

How is Lemonade different from Ollama?

Both serve local models behind an API. Lemonade also covers image generation, speech and transcription in the same server, targets NPUs as well as GPUs, and exposes OpenAI, Anthropic and Ollama compatible APIs, so apps built for Ollama can use it too.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.