overview

yoınko is an AI-native knowledge base that runs on your own machine. You write in Markdown or HTML, organize pages into folders, and the AI lives in a chat drawer on the right — ready to draft new sections, summarize what you've written, generate checklists, or create images from a description. Everything saves to a local SQLite database. Nothing is locked away.

key features

  • Markdown & HTML pages — TipTap-based WYSIWYG editor with live preview for HTML
  • AI chat drawer — context-aware chat that knows your current page; apply replies directly
  • AI image generation — generate images via DALL-E, Imagen, or any compatible endpoint
  • Bring your own LLM — OpenAI, Google Gemini, Anthropic Claude, or any OpenAI-compatible endpoint (Ollama, LM Studio, OpenRouter)
  • Folder tree — nested folders, drag-free ordering, right-click context menus
  • Asset management — upload, preview, and delete files attached to any page
  • Light & dark mode

quick start

option A — one command (clone + setup)

Run this in any empty folder to clone the repo and set everything up:

curl -fsSL https://raw.githubusercontent.com/arena-code/yoinko.ai/main/scripts/setup.sh | bash

Or, if you've already cloned:

git clone https://github.com/arena-code/yoinko.ai.git
cd yoinko.ai
bash scripts/setup.sh

Then start the dev server:

npm run dev

Open http://localhost:4567— you're in.

option B — manual setup

Requirements: Node.js 20+, npm 9+

# 1. Clone
git clone https://github.com/arena-code/yoinko.ai.git
cd yoinko.ai

# 2. Install
npm install

# 3. Build client bundle
npm run build:client
npm run build:editor

# 4. Start
npm run dev        # development (hot reload)
npm start          # production (after npm run build)

installation

requirements

  • Node.js 20+
  • npm 9+
  • Any modern browser

updating

Already running yoınko and want to pull the latest changes:

# 1. Pull the latest code
git pull origin main

# 2. Install any new dependencies
npm install

# 3. Rebuild the client bundle
npm run build:client
npm run build:editor

# 4. Restart the server
npm run dev

Or as a one-liner:

git pull origin main && npm install && npm run build:client && npm run build:editor

Your data lives in ./data/ and is never touched by a pull or rebuild — your pages and settings are safe. Schema migrations run automatically on server start.

configuration

All settings are managed in-app via the ⚙️ Settings modal. No config files are required to get started.

LLM provider

Open Settings → pick your provider → paste your API key → Save.

ProviderWhat you need
OpenAIAPI key from platform.openai.com
Google GeminiAPI key from aistudio.google.com
Anthropic ClaudeAPI key from console.anthropic.com
OpenAI CompatibleSet Base URL to any OpenAI-compatible endpoint (Ollama, LM Studio, OpenRouter)

Local models: Choose OpenAI Compatible and set the Base URL to http://localhost:11434/v1 or wherever your instance runs.

environment variables (optional)

PORT=4567        # server port (default: 4567)

LLM credentials are stored in the local SQLite database and managed via the Settings modal — not environment variables.

usage

creating pages

Click + page/folder in the sidebar. Pages support Markdown and HTML with the TipTap WYSIWYG editor. Use numbered prefixes (e.g. 01 home) to control the order.

AI chat

Open the drawer on the right to chat with yoınko. It knows the current page as context — ask it to summarize, rewrite, or add sections. Click "Apply" to insert an AI reply directly into the page.

AI image generation

Describe an image in the chat and yoınko generates it via DALL-E, Imagen, or your configured endpoint. Images are saved as assets attached to the page.

development commands

CommandAction
npm run devStart server + file watcher with live reload
npm run buildFull production build (server + client + editor)
npm run build:clientRebuild client bundle only
npm run build:editorRebuild TipTap bundle only

The dev server runs on :4567 and the live-reload SSE channel on :4568.

API reference

tech stack

LayerTech
RuntimeNode.js 20+
ServerExpress
DatabaseSQLite (better-sqlite3)
ClientVanilla TypeScript
Bundleresbuild
EditorTipTap (ProseMirror)
StylingVanilla CSS

architecture

The client is vanilla TypeScript bundled with esbuild — no framework. SQLite stores pages, folder structure, assets, settings, and chat history in a single data/yoinko.db file. LLM calls are proxied server-side so your API key never reaches the browser.

project structure

yoinko.ai/
├── public/               # static assets served directly
│   ├── css/app.css       # all application styles
│   ├── js/               # compiled client bundles
│   └── index.html        # single-page app shell
├── src/
│   ├── client/           # frontend TypeScript
│   ├── server/           # backend Node.js/Express
│   │   ├── ai/           # unified LLM adapter
│   │   └── routes/       # pages, assets, ai, settings
│   └── shared/types.ts   # shared TypeScript types
├── scripts/              # setup, build, watch scripts
├── data/                 # runtime data (SQLite + uploads)
└── package.json

contributing

PRs are welcome. Please keep these in mind:

  1. Open an issue first for anything beyond typos — it saves everyone time
  2. Keep the stack simple — no new frameworks without a very good reason
  3. One concern per PR — easier to review, easier to revert
git clone https://github.com/arena-code/yoinko.ai.git
cd yoinko.ai
npm install
npm run dev
# make your change, open a PR

license

MIT — do whatever you want with it.

support

Need help? Here are your options:

FAQ

Can I use it without an LLM?

Yes. Without a configured provider the AI features (chat, AI sections, image generation) are disabled, but the editor, folders, and asset management work fine. The LLM is optional.

Where is my data stored?

Everything lives in ./data/. The SQLite database is data/yoinko.db and uploaded files are in data/uploads/. Back it up like any file.

Can I use local models?

Yes. Choose OpenAI Compatible in Settings and set the Base URL to your local endpoint (e.g. http://localhost:11434/v1 for Ollama). Set any model name you want.

Can I export my data?

Your pages are rows in the SQLite DB with plain Markdown/HTML content — readable without any special tooling. You can also copy the entire data/ directory anywhere.

Why not Electron / Tauri / desktop app?

A local web server is simpler to ship, easier to self-host on a VPS or NAS, and works in any browser. If there's enough demand for a native wrapper, it's on the list.