Note
Doska is in active development. Report bugs and request features.
Why
I wanted a kanban app that is quick, Markdown-first, minimal, and still feature-rich. I couldn't find all of that in one app, so I made Doska.
Doska keeps everything in IndexedDB first, because it's fast and persistent. Then it syncs to a destination of your choice, a folder or a server, shortly after every change.
When the destination is a server, you also get multiple users with live updates, public boards, SSO, and MCP.
Doska never makes you wait on the server, doesn't keep features behind a paywall, and aims to have everything necessary without looking bloated.
Features
- Offline-first, local-first
- Markdown editor: syntax highlighting, tasks with a counter, slash menu
- Server to sync boards across devices
- Accounts: members, shared boards, public boards
- Local folder sync: boards and columns as folders, cards as Markdown files
- Attachments: files, images
- SSO: OIDC-compatible auth provider
- Deadlines, priorities and sorting for cards on the board
- MCP server
- Cross-board deadlines view
- Quick note window: always on top, opened with a keyboard shortcut
- Tags
- Assign users to cards
- Activity history view
Apps
Desktop builds are on Releases, or on macOS via Homebrew:
brew install romenkova/tap/doska
- Web: PWA, mobile-friendly layout.
- macOS: universal build, signed and notarized.
- Windows (beta): NSIS installer, unsigned. See desktop docs.
- Linux (beta): AppImage, deb and rpm.
Self-hosting guide
The easiest way to self-host is to use the script:
curl -fsSL https://raw.githubusercontent.com/romenkova/doska/main/install.sh -o install.sh && sh install.shFor manual setup:
- Copy docker-compose.selfhost.yml
- Copy .env.selfhost.example to
.envnext to it - Fill in
AUTH_LOGIN,AUTH_PASSWORD,AUTH_SECRETandBASE_URL - Run
docker compose -f docker-compose.selfhost.yml up -d
Then open http://<your-host>:8080 and sign in with the credentials you gave it.
Environment variables, HTTPS, attachments and backups: doska.sh/docs/self-hosting.
What the compose file contains:
- Sync server
- Web interface server
- Database: pass a database URL, or the bundled Postgres is used.
- File storage: pass S3 credentials, or files are stored on the server.
Updating
The same script updates an existing install, and the useful part is that it takes a backup first.
curl -fsSL https://raw.githubusercontent.com/romenkova/doska/main/install.sh -o install.sh && sh install.shOr, for a manual update, back up your instance and then rerun compose.
The desktop app follows whatever version its server runs, so update the server first. The app's settings modal then has a button to check for updates and install them.
MCP
The server exposes your boards to an MCP client at /mcp:
claude mcp add --transport http doska https://your-server/mcp
Tools are listed in packages/mcp/README.md; setup is at doska.sh/docs/mcp.
Development
pnpm install pnpm dev # web client + server, in watch mode pnpm desktop # native desktop shell (Tauri)
Requirements, the full command list and the repository layout: doska.sh/docs/development.
License
MIT, see LICENSE.
