Skip to content

Latest commit

 

History

16 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Øxygen

Your AI. Your machine. Your rules.

A desktop chat app for Ollama models that keeps everything — conversations, files, settings — on your own computer. No account. No cloud. No telemetry. No exceptions.

License: MIT Built with Rust Built with Tauri

English · Português · Español · Français · Deutsch · Italiano · Русский · 简体中文 · 日本語


Why Øxygen exists

Every mainstream AI chat app asks you to trade your thinking for convenience. You sign up, you type something personal, and it lands on somebody else's server — logged, retained, and used on terms you did not write.

Øxygen is the opposite trade. Open it, type, get an answer, close it. The model runs on your hardware. The database is a file in your home directory that you can read, back up, move, or delete with rm. There is nothing to log out of because there was never anything to log into.

Open it, type, get your answer, done. That is the whole product.

What it does

Chat Streaming replies from any Ollama model, with reasoning shown separately for models that think out loud.
Files and photos Drop in PDFs, Word, PowerPoint, Excel, OpenDocument, code, or plain text and it reads them. Images go to vision models.
Library Keep documents you return to often; attach them to any conversation in one click.
Search by meaning With an embedding model installed, finds the right passage in your files and history even when you don't recall the exact words.
Web search Off by default. When you turn it on, only your search terms leave the machine — never your conversation.
Deep search Splits a question into sub-questions, gathers evidence from your files and the web, checks what's missing, then answers with citations.
Voice Speak instead of typing, transcribed by a local Whisper — the recording is deleted the moment it's transcribed.
Pictures Generate images through a local Stable Diffusion server. Your prompt never leaves the machine.
Nine languages English, Português (Brasil), Español, Français, Deutsch, Italiano, Русский, 简体中文, 日本語.
Accessibility Three contrast levels, reduced motion, larger text, bolder text, wider letter spacing, focus outlines.
Your data Turn off storage entirely, set a retention window, export everything to JSON or Markdown, delete it all in one click.

Install

1. Install Ollama

Øxygen does not ship a model and never downloads one behind your back. Get Ollama from ollama.com, then pull at least one chat model:

ollama pull llama3.2

That is the only requirement. Everything else is optional and the app tells you, in plain language, what each extra model is for.

2. Run Øxygen

Prebuilt bundles are on the releases page. To build it yourself:

git clone <this-repository>
cd oxygen
pnpm install
pnpm tauri build          # or: pnpm tauri dev

Prerequisites: Rust 1.77+, Node 18+, and pnpm. On Debian or Ubuntu you also need the WebKit stack:

sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev \
                 librsvg2-dev build-essential curl file patchelf

Optional but recommended: poppler-utils for PDF text and ffmpeg for voice.

Optional models, and what each one is for

Open Settings → Setup inside the app and it shows this list with live install status and a copy-ready command for anything missing.

Model ollama pull What it does for you
Chat llama3.2 Answers you. The only model Øxygen genuinely cannot work without.
Small chat gemma3:1b A fast fallback if you have little memory to spare.
Embeddings nomic-embed-text Makes your files, history and web results searchable by meaning rather than exact words.
Vision llava Reads photos, screenshots and scanned pages you attach.
Reasoning deepseek-r1:8b Works a problem out step by step, shown in a collapsible panel.

Two features need a separate program because Ollama does not provide them:

Both run locally. Both are opt-in. Neither is required to chat.

Where your data lives

One folder. On Linux:

~/.local/share/app.oxygen.desktop/
├── oxygen.db        SQLite: chats, messages, settings, search index
├── attachments/     files you sent in conversations
├── library/         files you saved for reuse
├── generated/       pictures you generated
└── exports/         anything you exported

macOS uses ~/Library/Application Support/app.oxygen.desktop, Windows uses %APPDATA%\app.oxygen.desktop. Settings → Data controls → Open data folder takes you straight there.

Back it up by copying the folder. Delete everything by deleting the folder. There is no other copy anywhere.

What talks to the network

Being specific matters more than a promise, so here is the complete list:

Destination When What is sent
Your local Ollama (127.0.0.1:11434) Every message Your prompt and the conversation history
Your local image server (127.0.0.1:7860) Only if you enable pictures Your image description
A search engine you choose Only if you enable web search and press the search button on a message Your search terms only — never the conversation

That's it. No analytics, no crash reporting, no update pings, no accounts, no usage statistics. The web search provider defaults to DuckDuckGo; point it at your own SearXNG instance if you want even that under your control.

Keyboard shortcuts

Ctrl/Cmd + N New chat
Ctrl/Cmd + K Search your history
Ctrl/Cmd + , Settings
Ctrl/Cmd + B Toggle sidebar
Enter Send · Shift + Enter for a new line

Architecture

src/                React + TypeScript. Design tokens drive theme, contrast,
                    density and text size — one attribute on <html> restyles
                    the whole app.
src-tauri/          Rust. Ollama client, SQLite storage, file text extraction,
                    embeddings, search, voice capture, image generation.

Some notable choices and why:

  • No FTS5. Candidate rows come back with LIKE and are ranked in Rust. At personal-archive scale that is fast enough, and it keeps the schema free of virtual tables that would complicate export and migration.
  • Vectors in a plain table. Tens of thousands of chunks is microseconds of dot products. A real vector index would be complexity with no payoff here.
  • Voice capture in a subprocess. getUserMedia support in WebKitGTK varies too much across distributions to depend on.
  • Ephemeral chats use an in-memory SQLite database. When you turn storage off, reads and writes take the identical code path — only the connection differs, and nothing reaches disk.

Contributing

Contributions are welcome. Start with CONTRIBUTING.md, and please read CODE_OF_CONDUCT.md.

Adding a language is genuinely a one-file change — copy src/i18n/en.ts, translate the values, and add one line to src/i18n/index.ts. Missing keys fall back to English, so a partial translation is still useful.

License

MIT — see LICENSE. Use it, fork it, sell it, embed it. Third-party components are credited in NOTICE.md.


Øxygen is not affiliated with Ollama, Meta, Google, DeepSeek, or any model provider.

About

A private desktop chat app for local Ollama models. No account, no cloud, no telemetry — your conversations never leave your machine.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages