{"id":46922712,"url":"https://github.com/veloxico/wikso","last_synced_at":"2026-04-02T17:23:58.519Z","repository":{"id":343601295,"uuid":"1175464686","full_name":"veloxico/wikso","owner":"veloxico","description":"Open-source, self-hosted alternative to Confluence — real-time collaboration, page trees, full-text search, version history","archived":false,"fork":false,"pushed_at":"2026-03-29T03:11:35.000Z","size":1663,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-29T04:06:33.450Z","etag":null,"topics":["collaborative-editing","confluence","docker","knowledge-base","nestjs","nextjs","self-hosted","tiptap","typescript","wiki"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/u/veloxico","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/veloxico.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"veloxico"}},"created_at":"2026-03-07T18:44:44.000Z","updated_at":"2026-03-29T03:11:38.000Z","dependencies_parsed_at":"2026-03-29T03:05:00.015Z","dependency_job_id":null,"html_url":"https://github.com/veloxico/wikso","commit_stats":null,"previous_names":["veloxico/wikso"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/veloxico/wikso","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veloxico%2Fwikso","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veloxico%2Fwikso/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veloxico%2Fwikso/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veloxico%2Fwikso/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/veloxico","download_url":"https://codeload.github.com/veloxico/wikso/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veloxico%2Fwikso/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31311382,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["collaborative-editing","confluence","docker","knowledge-base","nestjs","nextjs","self-hosted","tiptap","typescript","wiki"],"created_at":"2026-03-11T03:07:10.584Z","updated_at":"2026-04-02T17:23:58.510Z","avatar_url":"https://github.com/veloxico.png","language":"TypeScript","funding_links":["https://github.com/sponsors/veloxico","https://ko-fi.com/alexkoss"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/logo.svg\" width=\"80\" alt=\"Wikso logo\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eWikso\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  Open-source, self-hosted alternative to Confluence.\u003cbr/\u003e\n  Real-time collaborative editing, page trees, spaces, full-text search, version history, AI assistant, and more.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/veloxico/wikso/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/veloxico/wikso?style=flat\u0026logo=github\" alt=\"GitHub Release\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/r/veloxico/wikso-be\"\u003e\u003cimg src=\"https://img.shields.io/docker/pulls/veloxico/wikso-be?style=flat\u0026logo=docker\u0026label=pulls%20(backend)\" alt=\"Docker Pulls BE\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/r/veloxico/wikso-fe\"\u003e\u003cimg src=\"https://img.shields.io/docker/pulls/veloxico/wikso-fe?style=flat\u0026logo=docker\u0026label=pulls%20(frontend)\" alt=\"Docker Pulls FE\" /\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/veloxico/wikso?style=flat\" alt=\"License\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/sponsors/veloxico\"\u003e\u003cimg src=\"https://img.shields.io/github/sponsors/veloxico?style=flat\u0026logo=githubsponsors\u0026label=Sponsor\" alt=\"GitHub Sponsors\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://ko-fi.com/alexkoss\"\u003e\u003cimg src=\"https://img.shields.io/badge/Ko--fi-Support-ff5e5b?style=flat\u0026logo=ko-fi\" alt=\"Ko-fi\" /\u003e\u003c/a\u003e\n  \u003ca href=\"#support-the-project\"\u003e\u003cimg src=\"https://img.shields.io/badge/Crypto-Donate-blue?style=flat\u0026logo=bitcoin\" alt=\"Crypto Donate\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003e **Live Demo:** [wikso.veloxico.com](https://wikso.veloxico.com)\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| **Frontend** | Next.js 16, React 19, TailwindCSS 4, shadcn/ui, TipTap, Yjs |\n| **Backend** | NestJS 11, Prisma 6, PostgreSQL 16 |\n| **Real-time** | Hocuspocus (Yjs WebSocket server) |\n| **Search** | Meilisearch |\n| **File Storage** | S3 / MinIO |\n| **Cache \u0026 Queues** | Redis |\n| **AI** | Anthropic Claude, OpenAI, Google Gemini, Ollama — API key or subscription OAuth |\n| **Auth** | JWT + Refresh tokens, Google OAuth, GitHub OAuth, SAML SSO |\n| **Monorepo** | pnpm workspaces + Turborepo |\n| **Containerization** | Docker Compose |\n\n## Features\n\n### Content \u0026 Editing\n- **Spaces \u0026 Page Trees** — organize content in workspaces with nested page hierarchies\n- **Real-time Collaboration** — multiple users can edit the same page simultaneously (Yjs + Hocuspocus)\n- **Rich Text Editor** — TipTap-based editor with tables, code blocks, callouts, images, mentions, task lists, Mermaid diagrams, and Excalidraw drawings\n- **Version History** — automatic snapshots every 5 minutes + manual save, with diff view and one-click restore\n- **Full-text Search** — powered by Meilisearch with instant results and command palette (Ctrl+K)\n- **Favorites \u0026 Recent Pages** — quick access to your most-used content\n- **Comments \u0026 Reactions** — threaded discussions on any page with emoji reactions\n- **Drag \u0026 Drop** — reorder pages in the tree via drag and drop\n- **Templates** — create pages from predefined templates\n- **Page Export** — export pages to PDF / Markdown\n- **File Attachments** — upload and attach files to pages (S3 / MinIO), configurable size limit (up to 100 MB)\n- **Confluence Import** — migrate from Confluence Cloud with a single ZIP upload (Beta)\n\n### AI Assistant\n- **AI Text Transformations** — select text in the editor and apply AI operations: expand, summarize, fix grammar, change tone\n- **Custom Prompts** — write your own instruction to transform selected text with AI\n- **Streaming Responses** — real-time SSE streaming shows AI output as it generates\n- **7 AI Providers** — Claude (Subscription), OpenAI (Subscription), Gemini (Subscription), Anthropic (API Key), OpenAI (API Key), Google Gemini (API Key), Ollama (Self-hosted)\n- **Subscription-based Auth** — connect your Claude, ChatGPT, or Google account via OAuth — no API key needed\n- **Admin AI Configuration** — enable/disable AI, switch providers, test connections, disconnect accounts\n\n\u003e **Note:** Subscription-based providers (Claude, OpenAI, Gemini) use unofficial OAuth flows and may be subject to rate limits or changes by the vendor. For production use, API key-based providers are recommended.\n\n### Admin Panel\n- **Dashboard** — system stats with 30-day activity charts (pages, views, users)\n- **User Management** — create, invite, suspend, delete users; bulk operations; last login \u0026 IP tracking\n- **Group Management** — organize users into groups with member management\n- **Space Administration** — search, filter by type, edit properties, transfer ownership\n- **Trash** — restore or permanently delete pages; bulk operations; filter by space\n- **Audit Log** — filterable activity log with CSV export\n- **Security \u0026 Access** — registration control, domain whitelist, email verification, password policy\n- **Auth Providers** — Google OAuth, GitHub OAuth, SAML SSO configuration status\n- **Email Configuration** — SMTP setup with provider presets and test email\n- **Webhooks** — full CRUD: create, edit, delete, enable/disable webhook integrations\n- **System Health** — live service status, uptime, memory usage, Node.js version\n- **AI Provider Settings** — configure AI providers (API keys, OAuth connections, models), test connections, set active provider\n- **Confluence Import** — upload Confluence Cloud XML export ZIP with real-time progress tracking (Beta)\n\n### Platform\n- **Multi-language** — UI available in English, Russian, Belarusian, Spanish, Spanish (AR), Portuguese, Portuguese (BR), Polish, Ukrainian, Chinese, Turkish\n- **Dark Mode** — full dark theme support with system preference detection\n- **Responsive** — works on desktop, tablet, and mobile\n- **SSO** — Google, GitHub, SAML authentication\n- **Notifications** — in-app notifications for page changes\n- **Avatar Upload** — profile photo with built-in image cropping\n- **Keyboard Shortcuts** — editor shortcuts, command palette, global navigation\n- **Multi-arch Docker** — images available for amd64 and arm64\n\n## Quick Start (Docker)\n\nThe fastest way to run Wikso — a single command, no build required. Pre-built images are pulled from Docker Hub. Works on **Linux**, **macOS**, and **Windows (WSL2)**.\n\n### Requirements\n\n- [**Docker**](https://docs.docker.com/get-docker/) \u003e= 20.10 and **Docker Compose** v2 (`docker compose` — no hyphen)\n\n### Launch\n\n```bash\ngit clone https://github.com/veloxico/wikso.git \u0026\u0026 cd wikso\ndocker compose up -d\n```\n\nThat's it. Docker Compose pulls pre-built images from Docker Hub (`veloxico/wikso-be`, `veloxico/wikso-fe`) and starts all 6 services with health-check ordering. No local build, no Node.js, no pnpm required.\n\n### Docker Hub Images\n\n| Image | Architectures | Description |\n|-------|---------------|-------------|\n| [`veloxico/wikso-be`](https://hub.docker.com/r/veloxico/wikso-be) | amd64, arm64 | Backend — NestJS API + Hocuspocus WS |\n| [`veloxico/wikso-fe`](https://hub.docker.com/r/veloxico/wikso-fe) | amd64, arm64 | Frontend — Next.js application |\n\n### Service URLs\n\n| Service | URL |\n|---------|-----|\n| **Frontend** | [http://localhost:3001](http://localhost:3001) |\n| **Backend API** | [http://localhost:3000/api/v1](http://localhost:3000/api/v1) |\n| **MinIO Console** | [http://localhost:9001](http://localhost:9001) |\n| **Meilisearch** | [http://localhost:7700](http://localhost:7700) |\n\n### What happens automatically\n\n1. **PostgreSQL, Redis, MinIO, Meilisearch** start and pass health checks\n2. **Backend** image is pulled from Docker Hub (no local build)\n3. **Backend** runs Prisma migrations (`prisma migrate deploy`) on first boot\n4. **Backend** auto-creates the MinIO S3 bucket (`wikso-uploads`) if it doesn't exist\n5. **Frontend** image is pulled from Docker Hub and starts after the backend is healthy\n6. **Setup Wizard** — on first launch, open the frontend URL and you'll be guided through creating your admin account. No default credentials or manual seeding required.\n\n### Useful commands\n\n```bash\ndocker compose up -d          # Start all services (pulls images on first run)\ndocker compose down            # Stop all services (data is preserved in volumes)\ndocker compose down -v         # Stop and delete all data (clean slate)\ndocker compose pull            # Pull latest images from Docker Hub\ndocker compose logs backend    # View backend logs\ndocker compose logs frontend   # View frontend logs\n```\n\n## Local Development\n\n### Prerequisites\n\n- **Node.js** \u003e= 20\n- **pnpm** \u003e= 9.15 (`corepack enable \u0026\u0026 corepack prepare pnpm@9.15.0 --activate`)\n- **Docker** (for PostgreSQL, Redis, MinIO, Meilisearch)\n\n### 1. Start infrastructure\n\n```bash\n# Start only the databases / services (without app containers)\ndocker compose up postgres redis minio meilisearch -d\n```\n\n### 2. Install dependencies\n\n```bash\npnpm install\n```\n\n### 3. Configure environment\n\n```bash\n# Backend\ncp apps/backend/.env.example apps/backend/.env\n# Edit apps/backend/.env — update DATABASE_URL host from \"postgres\" to \"localhost\":\n#   DATABASE_URL=\"postgresql://postgres:password@localhost:5432/wikso\"\n# Also update S3_ENDPOINT, REDIS_HOST, MEILISEARCH_HOST to use localhost\n\n# Frontend\ncp apps/frontend/.env.example apps/frontend/.env.local\n# Usually no changes needed — defaults point to localhost\n```\n\n### 4. Setup database\n\n```bash\ncd apps/backend\nnpx prisma db push           # Apply schema to database\nnpx prisma generate          # Generate Prisma client\ncd ../..\n```\n\n### 5. Run development servers\n\n```bash\n# Start both frontend and backend in parallel\npnpm dev\n\n# Or start them separately:\npnpm dev:backend   # Backend on http://localhost:3000 + Hocuspocus on ws://localhost:1234\npnpm dev:frontend  # Frontend on http://localhost:3001\n```\n\n### Building \u0026 publishing Docker images\n\n```bash\n# Build locally\ndocker compose build\n\n# Tag and push to Docker Hub\ndocker tag wikso-backend veloxico/wikso-be:latest\ndocker tag wikso-frontend veloxico/wikso-fe:latest\ndocker push veloxico/wikso-be:latest\ndocker push veloxico/wikso-fe:latest\n```\n\n## Environment Variables\n\n### Backend (`apps/backend/.env`)\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `PORT` | HTTP server port | `3000` |\n| `DATABASE_URL` | PostgreSQL connection string | — |\n| `JWT_SECRET` | Secret for access tokens | — |\n| `JWT_REFRESH_SECRET` | Secret for refresh tokens | — |\n| `JWT_EXPIRES_IN` | Access token TTL | `15m` |\n| `JWT_REFRESH_EXPIRES_IN` | Refresh token TTL | `7d` |\n| `EMAIL_VERIFICATION_REQUIRED` | Require email verification | `false` |\n| `REDIS_HOST` | Redis hostname | `redis` |\n| `REDIS_PORT` | Redis port | `6379` |\n| `S3_ENDPOINT` | S3/MinIO endpoint | `http://minio:9000` |\n| `S3_ACCESS_KEY` | S3 access key | `minioadmin` |\n| `S3_SECRET_KEY` | S3 secret key | `minioadmin` |\n| `S3_BUCKET` | S3 bucket name | `wikso-uploads` |\n| `MEILISEARCH_HOST` | Meilisearch URL | `http://meilisearch:7700` |\n| `MEILISEARCH_API_KEY` | Meilisearch API key | `masterKey` |\n| `HOCUSPOCUS_PORT` | WebSocket server port | `1234` |\n| `GOOGLE_CLIENT_ID` | Google OAuth client ID | — |\n| `GITHUB_CLIENT_ID` | GitHub OAuth client ID | — |\n| `SAML_ENTRY_POINT` | SAML IdP entry point | — |\n| `ENCRYPTION_KEY` | Key for encrypting stored credentials (32+ chars) | falls back to `JWT_SECRET` |\n\n### Frontend (`apps/frontend/.env.local`)\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `NEXT_PUBLIC_API_URL` | Backend API URL (browser) | `http://localhost:3000` |\n| `NEXT_PUBLIC_WS_URL` | Hocuspocus WebSocket URL | `ws://localhost:1234` |\n\n## Architecture\n\n```mermaid\ngraph LR\n    FE[\"🖥 Frontend\u003cbr/\u003eNext.js 16 · React 19\u003cbr/\u003eTailwindCSS 4 · shadcn/ui\"]\n    BE[\"⚙ Backend\u003cbr/\u003eNestJS 11 · Prisma 6\u003cbr/\u003eHocuspocus · Yjs\"]\n\n    FE --\u003e BE\n\n    BE --\u003e PG[\"🐘 PostgreSQL 16\"]\n    BE --\u003e RD[\"⚡ Redis 7\"]\n    BE --\u003e MS[\"🔍 Meilisearch\"]\n    BE --\u003e S3[\"📦 MinIO / S3\"]\n    BE --\u003e AI[\"🤖 AI Providers\u003cbr/\u003eClaude · OpenAI · Gemini · Ollama\"]\n```\n\n## Project Structure\n\n```\nwikso/\n  apps/\n    backend/           # NestJS API + Hocuspocus WS server\n      src/\n        auth/          # JWT, OAuth, SAML authentication\n        ai/            # AI providers, text transformations, SSE streaming\n        admin/         # Admin panel APIs (users, spaces, AI settings, trash, audit)\n        pages/         # Pages CRUD, versions, tree\n        spaces/        # Spaces management\n        comments/      # Threaded comments\n        search/        # Meilisearch integration\n        notifications/ # In-app notifications\n        webhooks/      # External webhook events\n        users/         # User profiles, avatars\n        hocuspocus/    # Real-time collaboration server\n        prisma/        # Database schema \u0026 migrations\n    frontend/          # Next.js application\n      src/\n        app/           # App router pages \u0026 layouts\n        components/    # UI \u0026 feature components\n          ui/          # shadcn/ui primitives\n          features/    # Business logic components\n            editor/    # AI menu, editor extensions\n        hooks/         # Custom React hooks\n        store/         # Zustand stores (auth, sidebar, language)\n        i18n/          # Translations (en, ru, be, es, esAR, pt, ptBR, pl, uk, zh, tr)\n        lib/           # Utilities, API client\n  docker-compose.yml   # Full-stack containerized setup\n  package.json         # Monorepo root (Turborepo)\n```\n\n## Available Scripts\n\n```bash\npnpm dev              # Start all apps in dev mode\npnpm build            # Build all apps\npnpm lint             # Lint all apps\npnpm test             # Run all tests\npnpm dev:backend      # Start only backend\npnpm dev:frontend     # Start only frontend\npnpm format           # Format code with Prettier\n```\n\n## Support the Project\n\nIf you find Wikso useful, consider supporting its development:\n\n[![GitHub Sponsors](https://img.shields.io/badge/GitHub_Sponsors-Support-ea4aaa?style=for-the-badge\u0026logo=githubsponsors)](https://github.com/sponsors/veloxico)\n[![Ko-fi](https://img.shields.io/badge/Ko--fi-Buy_me_a_coffee-ff5e5b?style=for-the-badge\u0026logo=ko-fi)](https://ko-fi.com/alexkoss)\n\n| Network | Address |\n|---------|---------|\n| **BTC** | `bc1qt5zu44m43f2ca07tedwgund0dxhtpcqkl92afz` |\n| **ETH** | `0xaAbcc0B714742525BB97d0594bc4d1DD90Ef5601` |\n| **USDT (TRC-20)** | `TAhDQw64uCDdCXKLUmfyjAe1comFPVDj99` |\n| **USDT (ERC-20)** | `0xaAbcc0B714742525BB97d0594bc4d1DD90Ef5601` |\n| **TON** | `UQA5Z9Lasm_Ke61wYLSuXy7wQnrX7Pefd4RNbDyzBWY9VFjj` |\n\n## License\n\nApache License 2.0 — see [LICENSE](LICENSE) for details.\n\n© 2025-2026 Aleks Koss / Veloxico\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveloxico%2Fwikso","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fveloxico%2Fwikso","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveloxico%2Fwikso/lists"}