Vikunja vs Plane: which self-hosted tool replaces Jira in 2026

Comparison12 min read13 steps

Atlassian has recently closed new subscriptions to Jira Software Data Center. Linear Enterprise has seen significant price increases this year. For agencies and technical teams looking to regain control of their project management tooling, Vikunja and Plane CE are two mature open-source alternatives you can host on your own VPS. This guide compares the two tools across nine criteria and provides precise installation steps to help you choose with confidence.

Contents· Why replace Jira in 20261/11
  1. 01Why replace Jira in 2026
  2. 02Vikunja vs Plane CE — comparison table
  3. 03Vikunja — lightweight and versatile
  4. 04Vikunja strengths
  5. 05Install Vikunja on a VPS with Docker Compose
  6. 06Plane CE — enterprise features in open source
  7. 07Plane CE strengths
  8. 08Install Plane CE on a VPS
  9. 09Security — how quickly both projects respond
  10. 10Decision guide — when to choose each tool
  11. 11ServOrbit agency resources

Why replace Jira in 2026

Atlassian has recently closed new subscriptions to Jira Software Data Center. Teams already under licence can renew, but any organisation without an existing contract must now use Jira Cloud — a SaaS model with per-seat billing that removes your infrastructure control. Linear Enterprise, another benchmark for tech teams, raised its prices earlier this year, affecting mid-sized teams using it for sprints and GitHub integration.

This context is pushing a growing number of agencies to evaluate self-hosted open-source alternatives. Two projects stand out: Vikunja, a lightweight Go single-binary task manager under the AGPL-3.0 licence, and Plane CE (Community Edition), a more fully-featured project management platform built around five Docker services, also under AGPL-3.0. The two have very different profiles: understanding their VPS requirements and functional limits is the first decision to make before migrating.

Vikunja vs Plane CE — comparison table

Scroll the table

CriterionVikunjaPlane CE
RAM required512 MB (light production)≥ 4 GB (8 GB recommended)
LicenceAGPL-3.0AGPL-3.0
KanbanNative (Kanban, list, Gantt views)Native (Board view, customisable states)
GanttNativeVia modules and due dates
Sprints / cyclesNot natively present — simulable with listsNative cycles (start, end, progress)
REST APIComplete, OpenAPI documentedComplete, OpenAPI documented
Git integrationsOutgoing webhooks, no native GitHub/GitLab integrationNative GitHub and GitLab integration in settings
Multi-tenant / workspacesYes — projects and teams separated by namespaceYes — distinct workspaces, members and roles per workspace
Mobile applicationOfficial native iOS and Android appsPWA only (no published native app)

Vikunja — lightweight and versatile

Vikunja strengths

  • Minimal memory footprint — 512 MB of RAM is sufficient for production; an entry-level VPS can run Vikunja without resizing.
  • Go single binary — one binary bundles the API server and background task service; the Docker deployment reduces to a single application service and a database.
  • Multiple native views — Kanban, list, Gantt and summary table are available with no additional extension or plugin.
  • Complete REST API — every entity (task, list, project, user, label) is exposed via an OpenAPI-documented API, making agency workflow automation straightforward.
  • Native mobile applications — official iOS and Android apps are published in the stores, which is rare among open-source task management tools.
  • AGPL-3.0 licence — the source code is public, and community contributions are fast, particularly on security patches.

Install Vikunja on a VPS with Docker Compose

  1. Create the working directory

    Connect to your VPS and create a dedicated directory: mkdir -p /opt/vikunja && cd /opt/vikunja. This directory will hold the docker-compose.yml file, the config.yml configuration file, and persistent data.

  2. Write the docker-compose.yml file

    Create a docker-compose.yml file with two services: the database and Vikunja itself. Minimal example with PostgreSQL:

    services:
      db:
        image: postgres:16
        restart: unless-stopped
        environment:
          POSTGRES_USER: vikunja
          POSTGRES_PASSWORD: changeme
          POSTGRES_DB: vikunja
        volumes:
          - vikunja-db:/var/lib/postgresql/data
      vikunja:
        image: vikunja/vikunja:latest
        restart: unless-stopped
        ports:
          - "127.0.0.1:3456:3456"
        environment:
          VIKUNJA_DATABASE_TYPE: postgres
          VIKUNJA_DATABASE_HOST: db
          VIKUNJA_DATABASE_USER: vikunja
          VIKUNJA_DATABASE_PASSWORD: changeme
          VIKUNJA_DATABASE_DATABASE: vikunja
          VIKUNJA_SERVICE_PUBLICURL: https://vikunja.your-domain.com
        volumes:
          - vikunja-files:/app/vikunja/files
        depends_on:
          - db
    volumes:
      vikunja-db:
      vikunja-files:
  3. Start the services

    Start the stack with docker compose up -d. On first start, Vikunja applies database migrations automatically. The interface is available on port 3456 within seconds — Vikunja starts very quickly thanks to its Go binary.

  4. Configure the HTTPS reverse proxy

    Point Nginx or Caddy to 127.0.0.1:3456. With Caddy, the configuration is:

    vikunja.your-domain.com {
        reverse_proxy 127.0.0.1:3456
    }

    Caddy manages the Let's Encrypt certificate automatically. With Nginx, add Upgrade and Connection headers to proxy WebSockets correctly if you use real-time notifications.

  5. Create the first administrator account

    Open your subdomain in a browser. Vikunja displays a registration screen: the first account created automatically receives administrator rights. Then enable two-factor authentication (TOTP) from the account settings — essential if the instance is publicly exposed.

  6. Verify backups

    Schedule a daily backup of the PostgreSQL volume and the vikunja-files volume. A sufficient command: docker exec vikunja-db-1 pg_dump -U vikunja vikunja | gzip > /backup/vikunja-$(date +%Y%m%d).sql.gz. Test restoration on a test environment before migrating your production data.

Plane CE — enterprise features in open source

Plane CE strengths

  • Native cycles (sprints) — create cycles with start and end dates, track progress by points or issues, and archive completed cycles without losing history.
  • Modules and cross-project groupings — group issues from different projects in a thematic module, useful for agencies managing multiple clients in parallel.
  • Native Jira importer — Plane CE includes a Jira import connector in Settings > Importers, transferring issues, statuses, priorities, comments and members in a few clicks.
  • Native GitHub and GitLab integrations — link your repositories directly from workspace settings; commits and pull requests appear in the related issues.
  • Clear Docker architecture — five documented services (web, API, worker, PostgreSQL, Redis) and optional MinIO for file storage; each service scales independently.
  • Integrated wiki pages — each project has a structured documentation space, available without an external module.
  • Complete REST API — all Plane entities are accessible via a versioned API; Python and JavaScript SDKs are maintained by the community.
  • AGPL-3.0 licence — the source code is auditable, and the GitHub community counts several thousand active contributors.

Install Plane CE on a VPS

  1. Check system requirements

    Plane CE requires at least 4 vCPU and 8 GB of RAM for a comfortable production deployment. Below this threshold, Celery workers compete for memory with PostgreSQL and Redis, causing unexpected restarts. Verify that Docker Engine ≥ 24 and Docker Compose ≥ 2.20 are installed: docker --version && docker compose version.

  2. Download the official deployment script

    Plane CE provides an installation script that generates the docker-compose.yml and .env files with random secrets:

    curl -fsSL https://raw.githubusercontent.com/makeplane/plane/master/deploy/selfhost/install.sh | bash

    The script creates an /opt/plane directory and places all required files there. Review the generated .env before continuing: SECRET_KEY, DATABASE_URL and REDIS_URL variables are pre-filled with secure random values.

  3. Configure the domain in the .env file

    Open /opt/plane/.env and set WEB_URL=https://plane.your-domain.com. If you use MinIO for file storage, also set AWS_S3_ENDPOINT_URL, AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY. Disable MinIO storage if you prefer to store files on the local volume — set USE_MINIO=0.

  4. Start the five Docker services

    From /opt/plane, run docker compose up -d. The five main services start: web (React interface), api (Django REST), worker (Celery), beat (Celery periodic tasks), and db (PostgreSQL). Redis is included as a sixth service for caching and message queuing. Wait approximately two to three minutes for Django migrations to complete before opening the interface.

  5. Configure the HTTPS reverse proxy

    Plane exposes the web service on port 3000 and the API on port 8000 internally. Your reverse proxy must route both: the React interface on / and API requests on /api/ and /auth/. With Nginx, use two location blocks in the same server block pointing to 127.0.0.1:3000 and 127.0.0.1:8000 respectively. WebSockets are used for real-time updates — forward the Upgrade and Connection headers.

  6. Create the first workspace

    Open your domain in a browser. Plane displays a registration screen: create an administrator account, then follow the workspace creation wizard. Import your first project from Jira or create a blank project to validate the installation. Invite members from Settings > Members > Invite Members — each member receives an email invitation link.

  7. Plan backups for the five stateful services

    Plane has five stateful services to back up: PostgreSQL (volume pgdata), Redis (volume redisdata), and MinIO if enabled (volume uploads). Schedule daily PostgreSQL dumps (pg_dump from the db container), and archive Docker volumes with your preferred backup tool. Systematically test restoration on a test VPS before putting the main instance into production.

Security — how quickly both projects respond

The question of security maturity in open-source tools is legitimate, and both projects offer concrete answers. Both projects have shown a quick patch turnaround, with fixes published within days of disclosure. A fix was integrated in Vikunja within ten days of public disclosure, demonstrating the fast-response capability of a well-organised open-source community. The practical lesson: keep Vikunja up to date via docker compose pull && docker compose up -d on a weekly cycle, and enable security notifications on the GitHub repository (Watch > Security alerts).

Plane CE follows a monthly release cycle with a detailed public changelog. Security issues are handled in a private channel before publication, following a documented responsible disclosure process in the repository. For both tools, the audit trail of user actions (who changed what, when) is available in application logs — exportable to meet internal compliance requirements.

To import from Jira into Plane CE: back up your Plane database before starting (docker exec plane-db-1 pg_dump -U plane plane > backup-before-import.sql). Then, in Plane, go to Settings > Importers > Jira. The importer asks for your Jira URL, a Jira Personal Access Token, and the project name to import. Issues, statuses, priorities, comments and members are transferred in a single operation. Also back up your database after the import and verify the total number of imported issues before revoking Jira access.

Decision guide — when to choose each tool

Choose Vikunja if your team manages primarily tasks and lists without a formalised sprint process, if your VPS is limited to 1 or 2 GB of RAM, if you need native mobile applications for teams on the move, or if you prefer a simple architecture to maintain (a single binary, a single database). Vikunja is also an excellent choice if you host multiple client projects on the same instance thanks to its namespace system.

Choose Plane CE if your team is coming from Jira and wants to find familiar concepts — cycles (sprints), customisable states, and a native Jira importer. Plane CE is better suited to agencies managing cross-functional workflows (multi-project modules), needing GitHub or GitLab integration directly in issues, or wanting a tool whose interface will be immediately recognisable to developers used to Linear or Jira. The 4 to 8 GB RAM requirement is the main constraint: verify your VPS before choosing.

In all cases, start with a pilot project on a separate instance before migrating production. The effort of migrating a project management tool is rarely neutral for a team — planning two weeks of cohabitation between the old and new tool allows validation of status mapping, workflow habits and CI integrations without blocking deliveries.

ServOrbit agency resources

ServOrbit offers Linux VPS with full root access, sized from 1 vCPU / 1 GB RAM (sufficient for Vikunja) to 8 vCPU / 32 GB RAM (comfortable for Plane CE with several dozen users). All VPS come with a Docker-ready image, secure SSH access, and high-bandwidth connectivity on internal traffic. For agencies managing multiple clients, our VPS offers include the ability to provision isolated instances per client from a centralised console.

To go further with your migration from Atlassian or Linear tools, consult our related guides: migrating from Jira to OpenProject or Plane, the context of Jira Data Center's closure and its implications for existing teams, and our full comparison of self-hosted project management tools including Huly.

Host Vikunja or Plane CE on a ServOrbit VPS

Our VPS are sized to accommodate both tools: from 512 MB for Vikunja to 8 GB for Plane CE. Root access, Docker image included, generous bandwidth. Your project management data stays in your infrastructure, with no member limits and no seat fees.

Need help?

Browse our help center and FAQ, or reach our team — callback, WhatsApp or email. Support in French, English and Arabic.

Message us on WhatsAppopens in a new tab