Wikso — open-source, self-hosted alternative to Confluence. Real-time collaborative editing, page trees, spaces, full-text search, version history, and more.
Live Demo: wikso.veloxico.com
| Layer | Technology |
|---|---|
| Frontend | Next.js 16, React 19, TailwindCSS 4, shadcn/ui, TipTap, Yjs |
| Backend | NestJS 11, Prisma 6, PostgreSQL 16 |
| Real-time | Hocuspocus (Yjs WebSocket server) |
| Search | Meilisearch |
| File Storage | S3 / MinIO |
| Cache & Queues | Redis |
| Auth | JWT + Refresh tokens, Google OAuth, GitHub OAuth, SAML SSO |
| Monorepo | pnpm workspaces + Turborepo |
| Containerization | Docker Compose |
- Spaces & Page Trees — organize content in workspaces with nested page hierarchies
- Real-time Collaboration — multiple users can edit the same page simultaneously (Yjs + Hocuspocus)
- Rich Text Editor — TipTap-based editor with tables, code blocks, callouts, images, mentions, task lists, Mermaid diagrams, and Excalidraw drawings
- Version History — automatic snapshots every 5 minutes + manual save, with diff view and one-click restore
- Full-text Search — powered by Meilisearch with instant results and command palette (Ctrl+K)
- Favorites & Recent Pages — quick access to your most-used content
- Comments & Reactions — threaded discussions on any page with emoji reactions
- Drag & Drop — reorder pages in the tree via drag and drop
- Templates — create pages from predefined templates
- Page Export — export pages to PDF / Markdown
- File Attachments — upload and attach files to pages (S3 / MinIO), configurable size limit (up to 100 MB)
- Confluence Import — migrate from Confluence with a single ZIP upload (Beta)
- Dashboard — system stats with 30-day activity charts (pages, views, users)
- User Management — create, invite, suspend, delete users; bulk operations; last login & IP tracking
- Group Management — organize users into groups with member management
- Space Administration — search, filter by type, edit properties, transfer ownership
- Trash — restore or permanently delete pages; bulk operations; filter by space
- Audit Log — filterable activity log with CSV export
- Security & Access — registration control, domain whitelist, email verification, password policy
- Auth Providers — Google OAuth, GitHub OAuth, SAML SSO configuration status
- Email Configuration — SMTP setup with provider presets and test email
- Webhooks — full CRUD: create, edit, delete, enable/disable webhook integrations
- System Health — live service status, uptime, memory usage, Node.js version
- Confluence Import — upload Confluence XML export ZIP with real-time progress tracking (Beta)
- Multi-language — UI available in English, Russian, Belarusian, Spanish, Spanish (AR), Portuguese, Portuguese (BR), Polish, Ukrainian, Chinese
- Dark Mode — full dark theme support with system preference detection
- Responsive — works on desktop, tablet, and mobile
- SSO — Google, GitHub, SAML authentication
- Notifications — in-app notifications for page changes
- Avatar Upload — profile photo with built-in image cropping
- Keyboard Shortcuts — editor shortcuts, command palette, global navigation
- Multi-arch Docker — images available for amd64 and arm64
The 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).
- Docker >= 20.10 and Docker Compose v2 (
docker compose— no hyphen)
git clone https://github.com/veloxico/wikso.git && cd wikso
docker compose up -dThat'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.
| Image | Architectures | Description |
|---|---|---|
veloxico/wikso-be |
amd64, arm64 | Backend — NestJS API + Hocuspocus WS |
veloxico/wikso-fe |
amd64, arm64 | Frontend — Next.js application |
| Service | URL |
|---|---|
| Frontend | http://localhost:3001 |
| Backend API | http://localhost:3000/api/v1 |
| MinIO Console | http://localhost:9001 |
| Meilisearch | http://localhost:7700 |
- PostgreSQL, Redis, MinIO, Meilisearch start and pass health checks
- Backend image is pulled from Docker Hub (no local build)
- Backend runs Prisma migrations (
prisma migrate deploy) on first boot - Backend auto-creates the MinIO S3 bucket (
wikso-uploads) if it doesn't exist - Frontend image is pulled from Docker Hub and starts after the backend is healthy
- 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.
docker compose up -d # Start all services (pulls images on first run)
docker compose down # Stop all services (data is preserved in volumes)
docker compose down -v # Stop and delete all data (clean slate)
docker compose pull # Pull latest images from Docker Hub
docker compose logs backend # View backend logs
docker compose logs frontend # View frontend logs- Node.js >= 20
- pnpm >= 9.15 (
corepack enable && corepack prepare pnpm@9.15.0 --activate) - Docker (for PostgreSQL, Redis, MinIO, Meilisearch)
# Start only the databases / services (without app containers)
docker compose up postgres redis minio meilisearch -dpnpm install# Backend
cp apps/backend/.env.example apps/backend/.env
# Edit apps/backend/.env — update DATABASE_URL host from "postgres" to "localhost":
# DATABASE_URL="postgresql://postgres:password@localhost:5432/wikso"
# Also update S3_ENDPOINT, REDIS_HOST, MEILISEARCH_HOST to use localhost
# Frontend
cp apps/frontend/.env.example apps/frontend/.env.local
# Usually no changes needed — defaults point to localhostcd apps/backend
npx prisma db push # Apply schema to database
npx prisma generate # Generate Prisma client
cd ../..# Start both frontend and backend in parallel
pnpm dev
# Or start them separately:
pnpm dev:backend # Backend on http://localhost:3000 + Hocuspocus on ws://localhost:1234
pnpm dev:frontend # Frontend on http://localhost:3001# Build locally
docker compose build
# Tag and push to Docker Hub
docker tag wikso-backend veloxico/wikso-be:latest
docker tag wikso-frontend veloxico/wikso-fe:latest
docker push veloxico/wikso-be:latest
docker push veloxico/wikso-fe:latest| Variable | Description | Default |
|---|---|---|
PORT |
HTTP server port | 3000 |
DATABASE_URL |
PostgreSQL connection string | — |
JWT_SECRET |
Secret for access tokens | — |
JWT_REFRESH_SECRET |
Secret for refresh tokens | — |
JWT_EXPIRES_IN |
Access token TTL | 15m |
JWT_REFRESH_EXPIRES_IN |
Refresh token TTL | 7d |
EMAIL_VERIFICATION_REQUIRED |
Require email verification | false |
REDIS_HOST |
Redis hostname | redis |
REDIS_PORT |
Redis port | 6379 |
S3_ENDPOINT |
S3/MinIO endpoint | http://minio:9000 |
S3_ACCESS_KEY |
S3 access key | minioadmin |
S3_SECRET_KEY |
S3 secret key | minioadmin |
S3_BUCKET |
S3 bucket name | wikso-uploads |
MEILISEARCH_HOST |
Meilisearch URL | http://meilisearch:7700 |
MEILISEARCH_API_KEY |
Meilisearch API key | masterKey |
HOCUSPOCUS_PORT |
WebSocket server port | 1234 |
GOOGLE_CLIENT_ID |
Google OAuth client ID | — |
GITHUB_CLIENT_ID |
GitHub OAuth client ID | — |
SAML_ENTRY_POINT |
SAML IdP entry point | — |
| Variable | Description | Default |
|---|---|---|
NEXT_PUBLIC_API_URL |
Backend API URL (browser) | http://localhost:3000 |
NEXT_PUBLIC_WS_URL |
Hocuspocus WebSocket URL | ws://localhost:1234 |
wikso/
apps/
backend/ # NestJS API + Hocuspocus WS server
src/
auth/ # JWT, OAuth, SAML authentication
pages/ # Pages CRUD, versions, tree
spaces/ # Spaces management
comments/ # Threaded comments
search/ # Meilisearch integration
notifications/ # In-app notifications
webhooks/ # External webhook events
users/ # User profiles, avatars
hocuspocus/ # Real-time collaboration server
prisma/ # Database schema & migrations
frontend/ # Next.js application
src/
app/ # App router pages & layouts
components/ # UI & feature components
ui/ # shadcn/ui primitives
features/ # Business logic components
hooks/ # Custom React hooks
store/ # Zustand stores (auth, sidebar, language)
i18n/ # Translations (en, ru, be, es, esAR, pt, ptBR, pl, uk, zh)
lib/ # Utilities, API client
docker-compose.yml # Full-stack containerized setup
package.json # Monorepo root (Turborepo)
pnpm dev # Start all apps in dev mode
pnpm build # Build all apps
pnpm lint # Lint all apps
pnpm test # Run all tests
pnpm dev:backend # Start only backend
pnpm dev:frontend # Start only frontend
pnpm format # Format code with PrettierIf you find Wikso useful, consider supporting its development:
| Network | Address |
|---|---|
| BTC | bc1qt5zu44m43f2ca07tedwgund0dxhtpcqkl92afz |
| ETH | 0xaAbcc0B714742525BB97d0594bc4d1DD90Ef5601 |
| USDT (TRC-20) | TAhDQw64uCDdCXKLUmfyjAe1comFPVDj99 |
| USDT (ERC-20) | 0xaAbcc0B714742525BB97d0594bc4d1DD90Ef5601 |
| TON | UQA5Z9Lasm_Ke61wYLSuXy7wQnrX7Pefd4RNbDyzBWY9VFjj |
Apache License 2.0 — see LICENSE for details.
© 2025-2026 Aleks Koss / Veloxico