OpenOnyx is an open-source organization dedicated to building state-of-the-art knowledge tools centered around user privacy, local file ownership, and modern AI intelligence.
A local-first, AI-assisted knowledge workspace for Markdown vaults.
OpenOnyx is a professional desktop knowledge management app built around plain Markdown files, Obsidian-style workflows, graph navigation, local semantic indexing, and optional cloud collaboration. It is designed for people who want ownership of their notes while still having a modern thinking layer for search, synthesis, writing assistance, and knowledge exploration.
The app is built with Electron, React, TypeScript, CodeMirror, D3, Tailwind CSS, Transformers.js, IndexedDB, and Supabase.
OpenOnyx is for writers, researchers, engineers, students, and teams who want a serious knowledge base without surrendering their files to a proprietary silo.
| Principle | What it means |
|---|---|
| Local-first by default | Notes are normal files in normal folders. Core workflows work offline. |
| Markdown-native | Your writing stays portable, readable, and tool-friendly. |
| AI where it helps | Retrieval, suggestions, summaries, and inline writing tools are grounded in your vault. |
| Cloud when you choose | Supabase-backed sync, collaboration, and public Spaces are optional. |
| Plugin-aware | OpenOnyx targets Obsidian plugin compatibility through a tested runtime layer. |
Write in a fast CodeMirror-powered editor with live preview, source mode, split panes, tab groups, backlinks, tags, outline, properties, and wiki links. OpenOnyx keeps the editing surface focused while making surrounding context available when you need it.
Key capabilities:
[[note-name]] syntax
Move through large vaults with quick switching, global search, in-note search, bookmarks, daily notes, context menus, and a file explorer that keeps ordinary folders as the source of truth.
Key capabilities:
Explore relationships between notes through an interactive graph built for local vaults. The graph helps reveal dense clusters, isolated notes, hidden relationships, and important hubs in the knowledge base.
Key capabilities:
Use semantic similarity and graph analysis to surface relationships that are not obvious from manual links alone. The AI graph can highlight suggested links, bridge notes, idea islands, central concepts, clusters, and directional reading flows.
Key capabilities:
Create visual maps of notes, ideas, and relationships with Obsidian-style .canvas support. Canvas files stay portable and live beside the rest of the vault.
Key capabilities:
.canvas document support
Spaces turn a vault into a queryable knowledge layer. A Space indexes notes, chunks content, creates embeddings, and lets users ask contextual questions over their own material.
Key capabilities:
@xenova/transformers
OpenOnyx includes optional AI assistance for writing, editing, synthesis, and vault-level reasoning. Remote LLM providers are used only when configured.
Key capabilities:
Cloud features are optional, but when enabled OpenOnyx can sync Spaces, preserve offline edits, and support collaborative workflows through a Supabase-backed data model.
Key capabilities:
pgvector schema for semantic matching
OpenOnyx includes an Obsidian-compatible runtime layer and a plugin management experience for community-style plugins.
Key capabilities:
obsidian package
The interface is built for long working sessions: quiet surfaces, readable typography, restrained contrast, and theme-aware components across the editor, graph, settings, modals, and plugin views.
Key capabilities:
public/
Customize your environment by uploading any custom image to serve as the application-level wallpaper. Panel translucency overlays automatically adjust to blend with your background.
Key capabilities:
OpenOnyx includes compatibility infrastructure for export plugins and plugin runtimes that expect desktop APIs.
Key capabilities:
Download official binaries for your platform from the GitHub Releases Page.
OpenOnyx.app → select Open, or run this command in Terminal after moving to Applications:xattr -cr /Applications/OpenOnyx.app
.exe installer from Releases. Free code signing provided by SignPath.io and certificate by SignPath Foundation..AppImage, .deb, .rpm, or .pkg.tar.zst from Releases, or run curl -fsSL https://raw.githubusercontent.com/OpenOnyx/OpenOnyx/main/scripts/install.sh | bash.git clone https://github.com/OpenOnyx/OpenOnyx.git
cd OpenOnyx
npm install
npm run dev
npm run dev builds the Electron main process, starts Vite on port 5173, and launches the Electron app against the local dev server.
If Electron’s postinstall download was skipped or interrupted, the dev launcher will try to repair node_modules/electron automatically before starting the desktop app. If the repair cannot download Electron because of a network or proxy issue, run:
npm config set ignore-scripts false
npm rebuild electron
npm run dev
npm run package
Electron Builder writes distributable artifacts to release/.
Platform-specific builds:
npm run package:win builds Windows .exe installers.npm run package:mac builds macOS .dmg and .zip artifacts.npm run package:linux builds Linux .AppImage, .deb, .rpm, and Arch pacman package artifacts.npm run package:all requests every configured target. Use CI for real cross-platform releases because macOS installers must be produced on macOS.GitHub release builds are handled by .github/workflows/release.yml. Push a tag such as v1.0.0, or run the workflow manually with a tag, and the workflow will attach the Windows, macOS, and Linux installer files to the GitHub Release.
On Arch-based local machines, the .deb, .rpm, and pacman targets require libxcrypt-compat for Electron Builder’s bundled fpm tool. The GitHub workflow installs the Ubuntu equivalent automatically.
Package-manager publishing templates for AUR, Homebrew, and winget are documented in docs/release/package-distribution.md.
OpenOnyx runs without environment variables for local vault editing, local search, local embeddings, local graphs, and local Spaces.
Cloud-backed features require Supabase:
cp .env.example .env.local
Then set:
VITE_SUPABASE_URL=https://your-project-id.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key-here
vector extension in Database > Extensions.supabase/schema.sql..env.local or paste them into the in-app database settings.Optional OAuth redirect configuration:
VITE_SUPABASE_REDIRECT_URL=https://your-project-id.supabase.co/auth/v1/callback
Local embeddings do not require an API key. Remote generation features use provider credentials configured in the app settings for OpenAI or OpenRouter.
Common commands:
| Command | Description |
|---|---|
npm run dev |
Build Electron, start Vite, and launch the desktop app |
npm run build |
Type-check, build the renderer, and build Electron |
npm run build:electron |
Compile the Electron main and preload process |
npm run package |
Build and package desktop installers |
npm run lint |
Run TypeScript with --noEmit |
The Vite dev server uses:
http://localhost:5173
Useful development environment variables:
| Variable | Purpose |
|---|---|
VITE_DEV_SERVER_URL |
Override the renderer URL loaded by Electron |
OPENONYX_DEBUG_PORT |
Enable Chromium remote debugging for Electron |
OPENONYX_VERBOSE_CHROMIUM_LOGS=1 |
Keep verbose Chromium logs in development |
OPENONYX_PANDOC_DIR |
Override the managed Pandoc backend directory |
OPENONYX_PANDOC_ARCHIVE |
Install Pandoc backend from a local archive |
OPENONYX_PANDOC_WASM |
Override the Pandoc WASM path used by the runner |
Contributors can verify their changes against compilation, API definitions, document processors, unit tests, integration sandboxes, and build integrity configurations using a single command. This command automatically sets up any missing prerequisites (like Pandoc WASM and plugin fixtures) to ensure execution succeeds:
npm run test:all-checks
You can also trigger individual test runs manually:
# Compilation check / Type check
npm run lint
# Test the settings and build installer packaging configuration
npx vitest run tests/build-integrity.test.ts
# Test general features (tab groups, embedding cache, etc.)
npx vitest run tests/tab-groups.test.ts tests/embedding-cache.test.ts
# Test Obsidian API sandbox compatibility runtime layer
npm run test:plugin-runtime
Pandoc-backed export compatibility:
npm run install:pandoc-backend
npm run test:pandoc-backend
Live plugin tests are available for selected plugins:
npm run test:kanban-live
npm run test:excalidraw-live
npm run test:notebook-navigator-live
Some live tests expect a vault path through environment variables such as OO_KANBAN_VAULT, OO_EXCALIDRAW_VAULT, or OO_NOTEBOOK_NAVIGATOR_VAULT.
OpenOnyx uses Electron’s multi-process model with a strict boundary between the renderer and local system access.
Renderer Process
React, CodeMirror, D3, Spaces UI, plugin UI, local AI workers
|
| window.electronAPI
v
Preload Process
contextBridge IPC surface
|
| ipcRenderer / ipcMain
v
Main Process
window lifecycle, vault filesystem, search index, dialogs, shell integration
|
v
Local Vault
Markdown files, canvas files, assets, .openonyx cache
Core principles:
.
|-- electron/ # Electron main, preload, IPC, filesystem, search
|-- src/
| |-- components/ # React UI: editor, graph, canvas, settings, plugins, spaces
| |-- context/ # Shared React context
| |-- editor/ # CodeMirror extensions
| |-- keybindings/ # Global keyboard behavior
| |-- lib/ # Supabase, sync, local DB, plugin manager, Obsidian API
| |-- styles/ # Theme and generated-document style helpers
| |-- types/ # TypeScript domain types
| `-- utils/ # AI, embeddings, RAG, filesystem helpers, app utilities
|-- supabase/
| |-- schema.sql # Tables, RLS, pgvector functions, sync schema
| `-- functions/ # Edge functions for chat and embeddings
|-- docs/ # Architecture, feature docs, and screenshot slots
| `-- images/ # README screenshots and feature images
|-- scripts/ # Dev, compatibility, fixture, and Pandoc scripts
|-- tests/ # Vitest and runtime compatibility tests
|-- public/ # Logos, icons, and static assets
|-- vite.config.ts # Vite, React, Tailwind, and WASM runtime aliases
`-- package.json # Scripts, dependencies, and Electron Builder config
OpenOnyx targets the public Obsidian plugin API using the official obsidian npm package as its baseline.
Current compatibility coverage includes:
obsidian@1.13.1See docs/obsidian-plugin-compatibility.md for the full compatibility matrix and verification flow.
| Shortcut | Action |
|---|---|
Ctrl+N / Cmd+N |
Create note |
Ctrl+S / Cmd+S |
Save current note |
Ctrl+F / Cmd+F |
Search inside current note |
Ctrl+Shift+F / Cmd+Shift+F |
Search vault |
Ctrl+O / Cmd+O |
Quick switcher |
Ctrl+P / Cmd+P |
Command palette |
Ctrl+G / Cmd+G |
Open graph |
Ctrl+Shift+C / Cmd+Shift+C |
Create or open canvas |
Ctrl+B / Cmd+B |
Toggle sidebar |
Ctrl+Tab |
Next tab |
Ctrl+Shift+Tab |
Previous tab |
Ctrl+W / Cmd+W |
Close active tab |
Escape |
Close modal or transient panel |
docs/spaces.md explains the Spaces architecture, indexing pipeline, RAG lifecycle, storage model, and sync behavior.docs/obsidian-plugin-compatibility.md documents plugin API coverage and the real-plugin regression matrix.changelog.md tracks project changes.npm install.npm run lint.For changes that touch plugins, Spaces, sync, AI retrieval, filesystem behavior, or Electron IPC, include the matching compatibility or integration tests where practical.
OpenOnyx is released under the MIT License.