{"id":50041306,"url":"https://github.com/nehloo-interactive/graphnosis-app","last_synced_at":"2026-06-03T23:01:04.850Z","repository":{"id":358827349,"uuid":"1235285390","full_name":"nehloo-interactive/graphnosis-app","owner":"nehloo-interactive","description":"Graphnosis App  — your local encrypted second cortex for every AI.","archived":false,"fork":false,"pushed_at":"2026-05-31T12:47:35.000Z","size":14469,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-31T13:17:09.068Z","etag":null,"topics":["ai-memory","encrypted-memory","engram","graphnosis","hippocampus","local-memory","memory","neocortex","prefrontal-cortex","private-memory"],"latest_commit_sha":null,"homepage":"https://graphnosis.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nehloo-interactive.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-11T07:18:18.000Z","updated_at":"2026-05-31T12:47:39.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nehloo-interactive/graphnosis-app","commit_stats":null,"previous_names":["nehloo-interactive/graphnosis-app"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/nehloo-interactive/graphnosis-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nehloo-interactive%2Fgraphnosis-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nehloo-interactive%2Fgraphnosis-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nehloo-interactive%2Fgraphnosis-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nehloo-interactive%2Fgraphnosis-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nehloo-interactive","download_url":"https://codeload.github.com/nehloo-interactive/graphnosis-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nehloo-interactive%2Fgraphnosis-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33883102,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-memory","encrypted-memory","engram","graphnosis","hippocampus","local-memory","memory","neocortex","prefrontal-cortex","private-memory"],"created_at":"2026-05-21T03:07:16.492Z","updated_at":"2026-06-03T23:01:04.839Z","avatar_url":"https://github.com/nehloo-interactive.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Graphnosis™\n\n\u003e Private second memory for any AI. Local-first, encrypted, multi-graph.\n\u003e Attaches a relevant subgraph from your own memory to every prompt you send\n\u003e to any MCP-aware AI — no effort, no API keys, no AI literacy required.\n\n**Product name:** Graphnosis · **Domain:** [graphnosis.com](https://graphnosis.com) (primary) · [graphnosis.app](https://graphnosis.app) (downloads) · [graphnosis.org](https://graphnosis.org) (OSS) · [graphnosis.ai](https://graphnosis.ai) (reserved)\n**Repo:** Graphnosis App (this monorepo) · **Engine:** [`@nehloo/graphnosis`](https://www.npmjs.com/package/@nehloo/graphnosis)\n\n---\n\n## Status\n\n**Private alpha.** This repository is private during foundational development. Source will be made available at public launch under the [Functional Source License 1.1 (FSL-1.1-Apache-2.0)](LICENSE) — both so users can verify the privacy promises (\"your memory never leaves your device\") and so the community can audit and contribute. The license converts to Apache 2.0 two years after each release.\n\nThe underlying engine, [`@nehloo/graphnosis`](https://github.com/nehloo/Graphnosis), is already open source under Apache 2.0.\n\n---\n\n## What it does\n\n1. You pick a folder (local or iCloud/Drive) where your encrypted memory lives.\n2. You feed it things worth remembering:\n   - **Files** from Finder (in place — files stay where they are)\n   - **Web pages or selected text** via Share Sheet / global hotkey\n   - **AI conversation notes** via \"remember this\" inside Claude / Cursor / Claude Code\n3. Anytime you talk to an MCP-aware AI, a relevant federated subgraph from your memory gets attached, within a tight token budget. The AI answers as if it knew you.\n4. You correct it in natural language (*\"the trip was September, not August\"*). A bundled local LLM produces a structured diff, you confirm, the graph updates — privately, on-device.\n5. Optionally, you enable **Non-Deterministic Aid**: five independently-toggleable LLM capabilities (recall enrichment, correction parsing, distillation, insights, edge prediction) each opt-in, each running entirely on your machine via Ollama.\n\nThe full `.gai` files never reach the AI. The AI only ever sees the scoped subgraph relevant to the current prompt — and that subgraph is hard-capped by per-graph **sensitivity tiers** (`public` / `personal` / `sensitive`) that the AI cannot override.\n\n---\n\n## Screenshots\n\nUnlock your cortex with a passphrase or Touch ID, then work across four tabs — daily check-ins, the 3D engram (grab to rotate, ⌘-drag to pan), deterministic consolidation, and the optional non-deterministic layer. The status bar shows live GLL/GNN overlay activity pills that pulse when an inference engine is running.\n\n![Graphnosis — unlock screen](apps/docs/public/screenshots/01-unlock.png)\n\n| | |\n|:--:|:--:|\n| ![Check-in tab](apps/docs/public/screenshots/02-check-in.png)\u003cbr\u003e**Check-in** — connect lonely memories | ![3D Engram tab](apps/docs/public/screenshots/03-3d-engram.png)\u003cbr\u003e**3D Engram** — explore the whole graph |\n| ![Deterministic Consolidation tab](apps/docs/public/screenshots/04-deterministic-consolidation.png)\u003cbr\u003e**Deterministic Consolidation** — vitality \u0026 memory health | ![Go Non-Deterministic tab](apps/docs/public/screenshots/05-go-non-deterministic.png)\u003cbr\u003e**Go Non-Deterministic** — the optional AI layer |\n\nAnd the recall / remember loop, working live with an AI client:\n\n| | |\n|:--:|:--:|\n| ![Saving a memory from an AI client](apps/docs/public/screenshots/06-remember.png)\u003cbr\u003e**remember** — your AI saves a memory; Graphnosis asks which engram first | ![Recalling a memory from an AI client](apps/docs/public/screenshots/07-recall.png)\u003cbr\u003e**recall** — any client pulls it back from your encrypted graph |\n\n\u003csub\u003eClaude is shown to demonstrate the MCP integration. Graphnosis is an independent product, not affiliated with or endorsed by Anthropic.\u003c/sub\u003e\n\n---\n\n## Architecture\n\n```\n┌────────────────────────────────────────────────────────────────────────────┐\n│  Tauri shell (Rust) — apps/desktop                                          │\n│  - menu bar, hotkeys, Share Sheet receiver                                 │\n│  - OS keychain (Touch ID / Windows Hello)                                  │\n│  - folder watcher + op-log sync engine                                     │\n│  - spawns and supervises the Node sidecar                                  │\n└────────────────────────────────┬───────────────────────────────────────────┘\n                                 │  Unix socket (newline JSON-RPC)\n                                 ▼\n┌────────────────────────────────────────────────────────────────────────────┐\n│  Node sidecar (TypeScript) — apps/desktop-sidecar                          │\n│  - GraphnosisHost: encryption at rest, op-log, source index                │\n│  - ingest (file / web / clip); large files chunked for responsiveness      │\n│  - correction pipeline (local LLM via Ollama → structured diff)            │\n│  - local embeddings via fastembed (BGE-small-en-v1.5, ONNX)                │\n│    → PDF parsing offloaded to a worker_threads Worker (pure JS, safe)      │\n│    → ONNX inference runs in a pool of forked child processes (N-API safe)  │\n│  - federated query across all user graphs with tier-capped budgets         │\n│  - MCP server over stdio: 35 tools in 9 categories (recall, remind,         │\n│    dig_deeper, remember, correct, apply, forget, stats, list_engrams,      │\n│    recall_with_citations, compare_engrams, audit_memory, llm_query, …      │\n│    see /reference/mcp-tools)                                                │\n└────────────────────────────────┬───────────────────────────────────────────┘\n                                 │\n                                 ▼\n┌────────────────────────────────────────────────────────────────────────────┐\n│  Embedding worker pool (forked child processes)                             │\n│  - 2 × node embed-worker.js, each with its own fastembed / ONNX session    │\n│  - Round-robin dispatch; parent event loop never blocked by inference      │\n│  - Pool size: GRAPHNOSIS_EMBED_WORKERS (default 2)                         │\n└────────────────────────────────────────────────────────────────────────────┘\n                                 │\n                                 ▼\n                  ┌─────────────────────────────┐\n                  │  @nehloo/graphnosis SDK     │\n                  │  (Apache 2.0, npm)          │\n                  └─────────────────────────────┘\n```\n\n---\n\n## Repo layout\n\n```\napps/\n  desktop/              Tauri app (Rust shell + minimal HTML/JS UI)\n  desktop-sidecar/      Node TypeScript sidecar (Graphnosis + MCP + IPC)\n    src/\n      index.ts          Entry point — boot, IPC, MCP, signal handling\n      host.ts           GraphnosisHost wrapper (ingest, ingestChunked, save, recover)\n      ingest.ts         File/web/clip ingest; PDF parsed in worker thread\n      pdf-parse-worker.ts  worker_threads PDF parser (pdfjs off the main thread)\n      local-embed.ts    Fork-based embedding pool (round-robin, 2 workers default)\n      embed-worker.ts   Forked child: owns one fastembed / ONNX session\n      embedding-queue.ts  Mutex: serializes ONNX calls between concurrent ingests\n      ipc.ts            Unix-socket JSON-RPC server for Tauri shell\n      mcp-server.ts     35 MCP tool definitions in 9 categories (recall, …)\npackages/\n  graphnosis-app-core/  Crypto, op-log, source index, federation,\n                        sensitivity tiers, embeddings cache, policy\n```\n\n---\n\n## MCP tools exposed to AI clients\n\nThe sidecar exposes **35 tools** in 9 functional categories. The desktop app\nships an in-app browser for them (left sidebar → **MCP Tools**), and the\nfull reference with parameters, return shapes, and example prompts lives\nat [graphnosis.com/reference/mcp-tools](https://graphnosis.com/reference/mcp-tools/).\n\n| Category | Tools |\n|---|---|\n| **Core memory** | `recall` · `remind` · `dig_deeper` · `remember` · `forget` · `apply` · `stats` · `vitality` |\n| **Engram discovery** | `list_engrams` · `suggest_engram` · `browse_engram` · `recent` · `get_engram_schema` |\n| **Structured recall** | `recall_structured` · `recall_with_citations` · `compare_engrams` · `cross_search` |\n| **Source operations** | `find_source` · `recall_source` · `transfer_source` |\n| **Engram operations** | `ingest_batch` · `engram_summary` |\n| **Brain maintenance** | `duplicate_pairs` · `healing_journal` · `gnn_status` · `confirm_data_access` |\n| **Approximate** (similarity, no LLM) | `audit_memory` · `check_duplicate` |\n| **Conditional** (deterministic by default, LLM-aware) | `correct` |\n| **Non-deterministic** (Local LLM required) | `develop` · `predict` · `insights` · `gnn_neighbors` · `llm_query` · `llm_distill` |\n\n`recall` has the hardest caps: `maxNodes ≤ 50`, `maxTokens ≤ 8000`,\nclamped further on sensitive engrams (≤ 5 nodes / 500 tokens). Every\nrecall returns an audit footer showing per-graph attribution.\n\n---\n\n## AI clients that read from your cortex\n\nAny MCP-aware AI client speaks Graphnosis natively — no API keys, no\ncustom plugin. The desktop app ships first-day-supported configuration\nflows for the four most common:\n\n| Client | Status | Setup |\n|---|---|---|\n| **Claude Desktop** | Supported (macOS + Windows) | Settings → AI clients → Configure Claude Desktop |\n| **Claude Code** | Supported (macOS + Windows) | Settings → AI clients → Configure Claude Code |\n| **Cursor** | Supported (macOS + Windows) | Settings → AI clients → Configure Cursor |\n| **Zed** | Supported | Standard MCP config — see docs |\n| **Any MCP-aware tool** | Supported | Standard MCP config — point at the relay |\n| **VS Code / Copilot Chat** | Supported (HTTP bridge) | Bundled Graphnosis VS Code extension |\n| **ChatGPT** | Coming soon | Browser extension |\n| **Gemini** | Coming soon | Browser extension |\n\nEvery connection sees the same 35 tools above; what each client can\nactually read is governed by the [consent gate](https://graphnosis.com/guides/ai-access-controls/)\n(silent for personal-tier engrams, one-click in-app modal for sensitive).\n\n---\n\n## Data sources (cloud auto-ingest)\n\nBuilt-in connectors poll or receive on a schedule and route incoming\ncontent into the engram of your choice. All credentials stay on-device,\nencrypted alongside your cortex.\n\n| Connector | What it pulls | Mode |\n|---|---|---|\n| **RSS** | Any RSS / Atom feed | Pull, configurable cadence |\n| **GitHub** | Issues, PRs, comments, commits | Pull |\n| **Slack** | Channel exports, DMs, threads | Pull |\n| **Trello** | Cards, comments, attachments | Pull |\n| **Linear** | Tickets, comments, project updates | Pull |\n| **Obsidian** | Watched vault — every note saves as it changes | Watch |\n| **GBrain** | Local Git repo of plain-text notes | Watch |\n| **AI Context Files** | `CLAUDE.md`, `AGENTS.md`, `CURSOR_RULES`, `GEMINI.md`, etc. | Watch |\n| **Webhook** | Generic HTTP endpoint — `POST` JSON, becomes a memory | Receive |\n\nEach connector has its own routing UI (target engram, sensitivity tier,\nschedule). Connectors are **incoming only** — they feed the cortex but\nnever read from it, so adding more never changes Graphnosis's output\nposture (still Standalone for MCP purposes). Full guide:\n[graphnosis.com/guides/connectors](https://graphnosis.com/guides/connectors/).\n\n---\n\n## Local \u0026 offline sources\n\nThe connectors above all talk to cloud SaaS. But Graphnosis itself runs\nentirely on-device, and so can the data feeding it. Anything that can\nwrite to a file or hit an HTTP webhook becomes a source — no API keys,\nno network round-trip, no data leaving your machine.\n\n| Category | Pattern |\n|---|---|\n| **Local files \u0026 folders** | Drag onto the app, or use Obsidian / AI Context Files / GBrain connectors above |\n| **NAS / network drives** | Mount as folder; watch the path |\n| **Scanned PDFs / paper records** | Drop the PDF — OCR runs locally, no cloud |\n| **Smart-home (Home Assistant, MQTT, Zigbee, Z-Wave)** | Bridge script subscribes to MQTT and POSTs to the Webhook connector |\n| **Sensors / IoT / lab instruments / agriculture** | Tiny reader script (serial, USB, network) POSTs to Webhook |\n| **Local databases (SQLite, Postgres on LAN, DuckDB)** | Cron-driven export to JSON/CSV + folder watch, or query-and-POST script |\n| **On-device notes apps (Apple Notes, Bear, Logseq, Notion local cache)** | App's CLI export → watched folder |\n| **Logs (router syslog, security cam DVR, audio recordings)** | Tail script → Webhook; for audio, transcribe locally with whisper.cpp first |\n| **Industrial protocols (OPC-UA, Modbus, LoRaWAN)** | Bridge script per protocol → Webhook |\n\nThe desktop app surfaces this whole set in the sidebar via the **Local \u0026\noffline** chip (next to Standalone), with an explainer modal listing the\ncategories. The full guide with copy-paste scripts and step-by-step\nsetup for each pattern lives at\n[graphnosis.com/guides/connect-offline-sources](https://graphnosis.com/guides/connect-offline-sources/).\n\n---\n\n## Local development\n\nPrerequisites:\n- **Node 20+** (use `nvm install 20 \u0026\u0026 nvm use 20`)\n- **pnpm 9+** (via `corepack enable \u0026\u0026 corepack prepare pnpm@9 --activate`)\n- **Rust toolchain** (`curl https://sh.rustup.rs -sSf | sh`) — only for the Tauri shell\n- **Ollama** + `llama3.2:3b-instruct-q4_K_M` — only for the `correct` tool\n\nSetup:\n\n```bash\npnpm install\npnpm -r build\n```\n\nSmoke test (no Tauri, no Claude, no LLM required — exercises the full encryption → ingest → recall → forget loop):\n\n```bash\npnpm --filter @graphnosis-app/desktop-sidecar smoke\n```\n\nRun the sidecar standalone for MCP wiring into Claude Desktop:\n\n```bash\nGRAPHNOSIS_CORTEX=\"$HOME/Graphnosis\" \\\nGRAPHNOSIS_PASSPHRASE=\"dev-passphrase-change-me\" \\\npnpm dev:sidecar\n```\n\nRun the full desktop app (requires Rust):\n\n```bash\npnpm dev:desktop\n```\n\n---\n\n## Wiring into Claude Desktop\n\nAdd to `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"Graphnosis\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/GraphnosisApp/apps/desktop-sidecar/dist/index.js\"],\n      \"env\": {\n        \"GRAPHNOSIS_CORTEX\": \"/Users/you/Graphnosis\",\n        \"GRAPHNOSIS_PASSPHRASE\": \"your-passphrase\",\n        \"GRAPHNOSIS_DEFAULT_GRAPH\": \"personal\",\n        \"GRAPHNOSIS_POLICY\": \"/Users/you/Graphnosis/policy.json\",\n        \"GRAPHNOSIS_LLM\": \"llama-3.2-3b\"\n      }\n    }\n  }\n}\n```\n\nOptional `policy.json` for per-graph sensitivity tiers:\n\n```json\n{\n  \"graphs\": [\n    { \"graphId\": \"personal\", \"tier\": \"personal\" },\n    { \"graphId\": \"health\",   \"tier\": \"sensitive\" },\n    { \"graphId\": \"work\",     \"tier\": \"public\" }\n  ]\n}\n```\n\nAfter saving, restart Claude Desktop. The MCP server appears as **Graphnosis** in the tool picker with 35 tools.\n\n---\n\n## Environment variables\n\n| Variable | Purpose | Default |\n|---|---|---|\n| `GRAPHNOSIS_CORTEX` | Folder where encrypted graphs + op-log + caches live | (required) |\n| `GRAPHNOSIS_PASSPHRASE` | cortex passphrase, used for Argon2id key derivation | (required) |\n| `GRAPHNOSIS_DEVICE_ID` | Stable device identifier (op-log attribution + sync) | `\u003chostname\u003e-\u003cpid\u003e` |\n| `GRAPHNOSIS_DEFAULT_GRAPH` | Graph ID for `remember` when none specified | `personal` |\n| `GRAPHNOSIS_POLICY` | Path to JSON with per-graph sensitivity tiers | (none — defaults apply) |\n| `GRAPHNOSIS_LLM` | Which catalog LLM to use for `correct` (`llama-3.2-3b`, `qwen-2.5-3b`, `llama-3.2-1b`) | recommended (`llama-3.2-3b`) |\n| `GRAPHNOSIS_EMBED_DISABLE` | Set to `1` to skip local embeddings (TF-IDF only) | unset |\n| `GRAPHNOSIS_EMBED_CACHE` | Override the model cache dir for fastembed | `~/Library/Caches/GraphnosisApp/models` |\n| `GRAPHNOSIS_EMBED_WORKERS` | Number of forked ONNX embedding child processes | `2` |\n| `GRAPHNOSIS_IPC_SOCKET` | Override the Unix socket path for Tauri ↔ sidecar IPC | `\u003ccortex\u003e/sidecar.sock` |\n\n---\n\n## Security model — short version\n\n- **At-rest encryption**: libsodium `crypto_secretstream_xchacha20poly1305`, key derived from the user's passphrase via Argon2id. Passphrase lives only in the OS keychain after first unlock. Stored `.gai` files are unreadable without the key — leaked files are inert.\n- **Recovery**: a 24-word phrase shown once at setup; can decrypt the data key without the passphrase. (Implementation in [`packages/graphnosis-app-core/src/crypto`](packages/graphnosis-app-core/src/crypto/index.ts) — currently library-side; UI wiring in Tauri shell pending.)\n- **AI exposure**: only the federated subgraph chosen for the current prompt, capped by sensitivity tier per graph. Full `.gai` never leaves the device. Every `recall` returns an audit footer showing per-graph attribution.\n- **Local LLM**: corrections run on a bundled small model (default Llama 3.2 3B via Ollama). Never call out to a remote AI for graph mutations.\n- **Op-log syncing**: append-only encrypted event log per device. Drive/iCloud syncs the log directory, not the `.gai` file, so concurrent edits across devices converge without lost data. (Reducer ready in [`packages/graphnosis-app-core/src/oplog`](packages/graphnosis-app-core/src/oplog/index.ts); materializer pass on load pending.)\n\n---\n\n## Embedding pipeline — why two layers of workers\n\n`onnxruntime-node` is an N-API native addon that calls V8 APIs without holding the V8 isolate lock. Running it inside a `worker_threads` Worker crashes Node with `HandleScope::HandleScope Entering the V8 API without proper locking in place`. To keep the main event loop free during inference, the sidecar uses **forked child processes** instead — each fork has its own V8 isolate and main thread, so the native addon runs safely. The parent dispatches texts round-robin and never blocks.\n\nPDF parsing (`pdfjs-dist` via `unpdf`) is pure JavaScript/WASM and has no lock requirements, so it runs in a **`worker_threads` Worker** (`pdf-parse-worker.ts`). This frees the main thread during the full parse phase of large documents — IPC connections, stats calls, and the UI stay responsive throughout.\n\nFor large documents the sidecar uses `ingestChunked()`: pages are embedded in batches separated by event-loop yields, but only a single `SourceRecord` is written at the end. This means chunked ingests appear as one source in the UI with the original file path.\n\n---\n\n## What's deliberately not here yet\n\n- **Mobile app** (Phase 2 — Capacitor capture + voice).\n- **Browser extension** for ChatGPT / Gemini (Phase 3).\n- **Op-log merge engine** materialization on load — sketched, not yet wired into `loadGraph`.\n- **Ambient capture connectors** (calendar, mail, Slack) — Phase 3, strictly opt-in.\n- **Recovery-phrase UI in the Tauri shell** — backend ready, frontend pending.\n- **Tauri shell completion** — autostart, global hotkey, Share Sheet receiver, prompt-context inspector all scaffolded but not implemented end-to-end.\n\nSee `~/.claude/plans/i-m-imagining-a-desktop-modular-sprout.md` for the full phased roadmap.\n\n---\n\n## License\n\n[Functional Source License, Version 1.1, Apache 2.0 Future License](LICENSE) — `FSL-1.1-Apache-2.0`.\n\nThis license lets anyone read, audit, fork, modify, and self-host the code, but prevents commercial \"Graphnosis as a service\" competitors during the 2-year exclusivity window. After that, each release automatically converts to Apache 2.0.\n\nIf you want to use Graphnosis App commercially (hosted, embedded, white-labeled) before that window expires, contact the author about a commercial license.\n\nThe Graphnosis engine itself ([`@nehloo/graphnosis`](https://github.com/nehloo/Graphnosis)) is and remains Apache 2.0.\n\n---\n\nMade by Nehloo Interactive LLC.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnehloo-interactive%2Fgraphnosis-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnehloo-interactive%2Fgraphnosis-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnehloo-interactive%2Fgraphnosis-app/lists"}