Language: English | ζ₯ζ¬θͺ
Zero-Friction Knowledge Network
An AI-native knowledge app that expands your thinking like the universe
Features β’ Demo β’ Getting Started β’ Tech Stack β’ Roadmap β’ Contributing
Zedi is a knowledge app that frees you from the stress of writing and the obligation to organize.
Traditional note apps force you to classify information into folders and create links by hand. Zedi uses AI scaffolding and a WikiLink network so your thinking can grow naturally.
- Speed & Flow β Zero startup delay, no manual save. Write at the speed of thought
- Context over Folder β No folders. Organize naturally through time and links
- Atomic & Constraint β One idea per page. Connect small pieces
- Scaffolding by AI β AI automatically builds scaffolding for your knowledge
- Dormant Seeds β Unorganized notes are allowed as seeds waiting to sprout
Pages grouped by date in a grid view. See at a glance when you wrote what.
Link pages with [[Page Title]] syntax. Autocomplete helps you reach existing pages quickly.
Select a keyword and let AI generate an explanation with related topic links inserted automatically. Your knowledge network grows on its own.
Enter a URL to extract the page body automatically. Link keywords at your own pace later.
Press Cmd+K / Ctrl+K for full-text search. Find pages containing your keywords instantly.
Related pages appear at the bottom of each page:
- Outgoing Links β Pages this page links to
- Backlinks β Pages that link here
- 2-hop Links β Follow links from linked pages
Cmd/Ctrl + Kβ Global searchCmd/Ctrl + Nβ Create new pageCmd/Ctrl + Hβ Go homeCmd/Ctrl + /β Shortcut list
Tiptap-based rich editor with seamless Markdown shortcuts:
#β Heading-β Bullet list>β Blockquote**text**β Bold`β Code block
π§ Coming Soon β Screenshots and demo video are in preparation
- Bun v1.0 or later (required)
- Node.js v24 or later (optional; used by CI and some scripts β see
.nvmrc/engines.node)
# Clone the repository
git clone https://github.com/otomatty/zedi.git
cd zedi
# Run setup (install deps + Git hooks + verification)
bash scripts/setup.sh
# Start the dev server
bun run devgit clone https://github.com/otomatty/zedi.git
cd zedi
bun install
bun run devOpen http://localhost:30000 in your browser (default port).
When running multiple app instances in parallel, you can change the port:
# Option 1: environment variable
VITE_PORT=30001 bun run dev
# Option 2: .env.local file
echo "VITE_PORT=30001" > .env.local
bun run devIf the port is in use, the next available port is chosen automatically.
To run multiple application instances in parallel:
# Build Docker image
bun run docker:build
# Start all instances (3 at once)
bun run docker:up
# Start in background
bun run docker:up:d
# Stop
bun run docker:down
# View logs
bun run docker:logsAfter startup, access:
- Instance 1: http://localhost:30000
- Instance 2: http://localhost:30001
- Instance 3: http://localhost:30002
When running multiple Docker instances, offset ports as needed (share the procedure within your team).
Note: Docker requires at least 8 GB RAM (16 GB+ recommended). For lightweight parallel dev, port configuration via environment variables is simpler.
Zedi can also run as a desktop app via Tauri 2.0.
- Rust (install stable via rustup)
- Windows: Microsoft C++ Build Tools + Windows 11 SDK
- macOS: Xcode Command Line Tools (
xcode-select --install) - Linux:
libwebkit2gtk-4.1-dev,build-essential,libssl-dev, etc. (details)
# Dev mode (Vite dev server + Tauri WebView)
bun run tauri:dev
# Production build (generates installer)
bun run tauri:build- Claude Code sidecar (Issue #456): Tauri bundles a compiled helper under
src-tauri/binaries/(externalBin). On firstbun run tauri:dev, a missing binary is built automatically; runbun run sidecar:buildmanually if needed.
Windows + Git Bash: If MSVC build tools are not on PATH, run from Developer Command Prompt for VS 2022 or set
LIB,INCLUDE, andPATHin.bashrc. See Issue #49.Note: The desktop edition is currently Phase D (in development). Storage temporarily uses IndexedDB; Tauri-native storage (SQLite) is planned in #50.
For AI features, authentication, and API integration, create .env.local. See .env.example.
# REST API (Hono on Bun: server/api). Base URL the frontend calls.
VITE_API_BASE_URL=http://localhost:3000
# Real-time collaboration (Hocuspocus / Y.js: server/hocuspocus)
VITE_REALTIME_URL=ws://localhost:1234 # Production: wss://realtime.zedi-note.app etc.
# Pro plan billing (Polar, optional)
# VITE_POLAR_PRO_MONTHLY_PRODUCT_ID=...
# VITE_POLAR_PRO_YEARLY_PRODUCT_ID=...On the server (server/api), configure Better Auth (BETTER_AUTH_SECRET / BETTER_AUTH_URL), PostgreSQL, Polar POLAR_ACCESS_TOKEN, email RESEND_API_KEY, etc. See .env.example.
Note: The frontend runs locally without env vars (some data in IndexedDB). AI features can use provider API keys entered in the app settings.
| Category | Technology |
|---|---|
| Frontend | React 19 + TypeScript 6 / React Router v7 |
| Build Tool | Vite 8 (@vitejs/plugin-react-swc) / Bun |
| Desktop | Tauri 2.0 (Rust) β src-tauri/ |
| Editor | Tiptap 3 (ProseMirror) β tables / math (KaTeX) / code (lowlight) / collaboration (Y.js) |
| Styling | Tailwind CSS v4 + shadcn/ui (Radix UI primitives) / next-themes |
| State / Data | Zustand 5 + TanStack Query 5 / React Hook Form + Zod |
| i18n | i18next + react-i18next |
| Visualization | Recharts / @xyflow/react (React Flow) / Mermaid / KaTeX / Tesseract.js (OCR) |
| Auth | Better Auth (OAuth / session cookies) |
| API | server/api β Hono on Bun + Drizzle ORM (PostgreSQL) |
| Database | PostgreSQL (Drizzle migrations: server/api/drizzle/) / IndexedDB (local browser) |
| Realtime | server/hocuspocus β Hocuspocus (Y.js) real-time collaboration |
| MCP | server/mcp β Claude Code integration (stdio / HTTP; see server/mcp/README.md) |
| Storage | AWS S3 (upload via API, @aws-sdk/client-s3) |
| Billing | Polar (@polar-sh/sdk) β Pro plan |
| Resend | |
| AI | OpenAI / Anthropic / Google Gemini (pricing via OpenRouter) |
| Browser Ext. | extension/ β Manifest v3 (Chrome extension) |
| Admin | admin/ β separate Vite + React app |
| Workspaces | Bun workspaces: packages/ui (shadcn), packages/claude-sidecar / admin |
| Deploy | Cloudflare Pages (frontend) + Railway (server/api, hocuspocus, mcp) / Terraform (Cloudflare) |
| CI/CD | GitHub Actions (lint / typecheck / test / mutation / deploy) |
| Testing | Vitest 4 + Testing Library / Playwright / Stryker (mutation testing) |
| Tooling | ESLint 9 / Prettier / Husky + lint-staged / commitlint / Knip |
- React + Vite foundation
- Page CRUD
- Date Grid UI
- WikiLinks (with suggestions)
- AI Wiki Generator
- Web Clipper
- Global Search
- Keyboard shortcuts
- Better Auth (OAuth / session cookies)
- Markdown export
- Backlinks / 2-hop Links
- Linked Pages cards
See Issues / Discussions for roadmap details.
# Unit tests
bun run test
# E2E tests
bun run test:e2e
# Coverage
bun run test:coverage
# Mutation testing (Stryker; mutation score is the primary quality metric)
bun run test:mutation:dry
bun run test:mutationQuality metrics, testing policy, and how to write specifications: AGENTS.md and SPECIFICATION_POLICY.md.
src/ # Frontend (React + Vite)
βββ components/ # React components (editor / page / search / layout / ui etc.)
βββ hooks/ # Custom hooks
βββ lib/ # Utilities (`claudeCode/` = TauriβClaude Code bridge)
βββ pages/ # Route page components (React Router v7)
βββ stores/ # Zustand stores
βββ types/ # TypeScript types
src-tauri/ # Tauri 2.0 desktop backend (Rust)
βββ src/
β βββ main.rs # Desktop entry point
β βββ lib.rs # Tauri app + command definitions
β βββ claude_sidecar.rs # Claude Code sidecar process (Issue #456)
βββ binaries/ # externalBin (`bun run sidecar:build`, gitignored)
βββ capabilities/ # Security capability definitions
βββ icons/ # App icons (per OS)
βββ Cargo.toml # Rust dependencies
βββ tauri.conf.json # Tauri config
server/ # Bun projects deployed separately on Railway
βββ api/ # REST / Auth API (Hono on Bun + Better Auth + Drizzle ORM)
βββ hocuspocus/ # Real-time collaboration (Hocuspocus / Y.js)
βββ mcp/ # MCP server β Claude Code (stdio / HTTP). See [server/mcp/README.md](server/mcp/README.md)
packages/ # Bun workspaces (shared libraries)
βββ ui/ # `@zedi/ui` β shadcn/ui shared components
βββ claude-sidecar/ # Claude Code client for Tauri sidecar
admin/ # Admin SPA (separate Vite + React + Tailwind / `@zedi/ui`)
extension/ # Browser extension (Manifest v3, Web Clipper)
server/api/drizzle/ # PostgreSQL migrations (drizzle-kit source of truth)
terraform/cloudflare/ # Cloudflare infrastructure
e2e/ # Playwright E2E tests
scripts/ # Setup / sidecar build / Stryker / extension build scripts
.github/workflows/ # GitHub Actions (lint / typecheck / test / mutation / deploy)
Contributions are welcome!
- Fork this repository
- Create a feature branch from
develop(git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request against
develop
See CONTRIBUTING.md and AGENTS.md (branch, PR, and merge policy).
This project is released under the Business Source License 1.1 (BSL 1.1) (source-available). Commercial competing services are restricted; personal use, internal use, modification, and redistribution are allowed. It automatically converts to Mozilla Public License 2.0 (MPL 2.0) four years after first publication. See LICENSE.
- Tiptap β Editor framework (ProseMirror)
- shadcn/ui / Radix UI β UI components
- Hocuspocus / Y.js β Real-time collaboration
- Better Auth β Authentication (OAuth / session cookies)
- Hono β API framework (on Bun)
- Drizzle ORM β TypeScript ORM
- Polar β Pro plan billing
- Tauri β Cross-platform desktop
- Cloudflare Pages / Railway β Hosting
Made with β€οΈ by Saedgewell