Kanban Boards Without the Subscription
Trello is convenient until it isn’t – until the free tier shrinks, the pricing jumps, or you realize all your team’s project data lives on someone else’s server. Planka is a self-hosted, open-source kanban board that replicates the Trello experience almost exactly, runs on your own hardware, and costs nothing beyond the server you already have.

What Planka Is and Why It Works
Planka is a React-based project management app built around the classic kanban model: projects, boards, lists, and cards. It supports drag-and-drop card movement, labels, due dates, checklists, file attachments, card comments, and member assignments. Visually, it is close enough to Trello that anyone who has used Trello will feel at home within minutes. The interface is clean and fast, with no ads, no upsells, and no feature paywalls.
The app runs as a Docker container, which makes deployment straightforward on any Linux server, home NAS, or VPS. It uses PostgreSQL for storage and handles authentication internally – no third-party login required unless you want to add it. If you are already running self-hosted infrastructure, Planka slots in without much friction. If this is your first self-hosted project, it is a good starting point because the setup is contained and well-documented.
One practical advantage of self-hosting a tool like Planka is data ownership. Every card, comment, and attachment lives on your server, in your database, under your backup schedule. For teams working on sensitive internal projects – product roadmaps, client deliverables, legal workflows – that matters more than most people acknowledge until something goes wrong with a cloud provider. The control is the feature.
Planka does not yet support public board sharing or a native mobile app, which are real limitations compared to Trello. A Progressive Web App (PWA) experience works reasonably well on mobile browsers, and development on the project moves steadily, but if your team relies heavily on mobile or needs guest-accessible public boards, factor that in before committing. For internal team use on desktop, it handles the job well.

Installing Planka with Docker Compose
The cleanest way to run Planka is with Docker Compose. Start by creating a project directory on your server – something like /opt/planka – and create a docker-compose.yml file inside it. Planka requires a PostgreSQL instance alongside the app container, so your Compose file will define both services.
A working docker-compose.yml looks like this:
- Define a postgres service using the official postgres:14-alpine image, set environment variables for POSTGRES_DB, POSTGRES_USER, and POSTGRES_PASSWORD, and mount a named volume for data persistence.
- Define a planka service using the image ghcr.io/plankanban/planka:latest, link it to the postgres service with depends_on, and map port 3000 on the host to port 1337 in the container.
- Set the required environment variables: BASE_URL (your domain or local IP including the port), DATABASE_URL (the PostgreSQL connection string using the credentials you defined), SECRET_KEY (a long random string – generate one with openssl rand -hex 64), and DEFAULT_ADMIN_EMAIL plus DEFAULT_ADMIN_PASSWORD to seed your first account.
- Mount a volume for /app/public/user-avatars, /app/public/project-background-images, and /app/private/attachments so uploaded files persist across container restarts.
Once the file is ready, run docker compose up -d from the project directory. Docker will pull the images, initialize the database, and start both containers. The first boot takes a minute or two as Planka runs database migrations. After that, open your browser to the server IP on port 3000 and log in with the admin credentials you set in the environment variables. The admin account is created automatically on first launch.
For production use, you will want to put Planka behind a reverse proxy rather than exposing port 3000 directly. Nginx or Caddy both work. With Caddy, the configuration is as minimal as pointing your domain at localhost:3000 and letting Caddy handle automatic HTTPS via Let’s Encrypt. With Nginx, you will write a standard proxy_pass block and handle SSL certificates separately through Certbot. Either way, the goal is serving Planka over HTTPS on port 443 with a real domain – not only for security but because some browser features behave differently on non-HTTPS origins. If you are already running an SSO solution like Authentik, you can place it in front of Planka to handle authentication for your whole infrastructure from one place.
User management in Planka is done through the admin panel at /users. You create accounts manually for each team member – there is no self-registration by default, which is actually a good security posture for internal tools. Each user gets assigned to specific boards rather than having organization-wide visibility. Board owners control who sees what, and guests can be limited to a single project. Permissions are simple but sufficient for small to medium teams.
Backups deserve attention before you go live. Since all data lives in PostgreSQL, a standard pg_dump cron job covers the database. Your attachment files live in the mounted volumes, so back those up separately using whatever method fits your server setup – rsync to a remote, a snapshot tool, or your NAS backup schedule. Running a self-hosted tool without a tested backup process is the one mistake that turns a good setup into an expensive lesson.

After the Setup
Once Planka is running, customization is mostly done through the UI. You can upload custom project background images, add board-specific labels with color coding, and set up card templates through repeated card structures – Planka does not yet have a native template feature, so teams typically keep a “template” card pinned at the top of a list and duplicate it manually. Notifications are handled in-app and by email if you configure an SMTP server in the environment variables using the EMAIL_FROM, EMAIL_HOST, and related settings.
Updates are straightforward with Docker: pull the new image with docker compose pull, then restart with docker compose up -d. Planka handles database migrations automatically on startup. The project releases updates regularly enough that checking monthly is a reasonable cadence, and the changelog on the GitHub repository is clear about what changed between versions – which is more than most open-source projects manage.





