The desktop app stays on your computer
- The desktop app has no sign-in and opens no network port, so other devices can’t reach it or use your API key.
- The apps you build, and web pages from other sites, can’t use AppBlips to call your AI provider.
- Set a spend limit with your AI provider. Your own copy of AppBlips doesn’t limit how many requests it sends, so a runaway app could otherwise run up costs.
Browser and Docker versions
The browser version (npm start) and Docker run a small web server on your computer. Like the desktop app, it has no sign-in, so it’s set up to answer only you:
- It listens on
127.0.0.1(Docker publishes it as127.0.0.1:3000), so other devices on your network can’t connect. - It only answers when opened as
localhost,127.0.0.1or[::1]. This stops a website from pointing its own domain name at your computer to reach AppBlips. - Like the desktop app, it refuses AI requests from other websites and from the apps you build.
Your API key
- Desktop app: your provider key is encrypted with your system keychain and used only by the app’s background process. It is never sent to the app’s web page.
- Browser and Docker versions: a key entered in Settings → AI is sent once to AppBlips’ own server, which saves it in a file only your user account can read (
provider-key.jsonin.appblipsin your home folder, or in theappblips-datavolume for Docker). The server adds it to each request to your provider. It is never saved in your browser, and the page can’t read it back. A key in.envalso stays on the server. Your Surge sign-in for Publish to the web is kept the same way, insurge-token.json, as are the Pollinations sign-in (pollinations-key.json) your Pixabay key (pixabay-key.json) and your Tavily key (tavily-key.json). AppBlips 0.1.7 and earlier kept the key in the browser; the first time you open a newer version, it moves the key to the server and deletes it from the browser.
Sandboxed preview
Generated apps never run directly inside the main AppBlips page. Every generated app runs in an isolated preview, which means:- The generated app cannot access the parent page’s DOM, cookies, or
localStorage - The parent page cannot reach into the generated app’s DOM
- The generated app cannot use your API key or call your AI provider through AppBlips
Microphone
Voice input records the microphone only while you have it switched on with the microphone key, and turns it into text on your computer. The recording is never uploaded or saved.- In the desktop app, only AppBlips’ own screen may use the microphone, and only for sound. The preview, where generated apps run, is refused, and nothing may use the camera.
- In the browser version, the preview has no permission to use the microphone either.
The speech model
The speech model (OpenAI’s Whisper base) is part of AppBlips itself, not something it fetches while running:- The desktop app includes it in the installer.
- When you build from source or with Docker, the build downloads it once from Hugging Face. It always downloads one fixed version and checks each file against a fingerprint (a SHA-256 hash) stored in AppBlips’ code. If a file has been changed, the build stops with
does not match its pinned sha256instead of using it. - While AppBlips runs, it is set to load the model only from its own files. If they are missing, voice input shows an error rather than downloading a model from the internet.
- The model and the code that runs it come from AppBlips’ own server or app files, not from a CDN (a public site that hosts code), so using voice input makes no network requests.

