Automation9 min read

Migrate from Linear to Plane or Vikunja on a VPS

In February 2026, Linear reduced its free plan from 250 to 10 members. Teams exceeding that threshold must either migrate to a paid plan or find an alternative. Plane and Vikunja are two open-source project management tools you can host on your own VPS: the same data model, full ownership, no member limits. This guide shows you how to export your data from Linear, choose the right tool for your team, and complete the migration without losing your history.

Linear 250 → 10 members: why migrate now

In February 2026, Linear changed the terms of its free plan: the member limit dropped from 250 to 10. Teams already above that threshold received a notification and a grace period before the change took effect. Moving to Linear's paid plan, billed per seat.

The restriction is not limited to member count: cycles (sprints), some advanced integrations and analytics reports are gated behind a paid subscription. For a mid-sized team using Linear solely for issue tracking and sprints, the paid features do not always add value compared to what a well-configured self-hosted tool provides for free.

What self-hosting changes in practice

  • No member limit — add as many collaborators as your infrastructure can handle, without touching your billing.
  • Data under your control — tickets, comments, status history and attachments stay in your own database, on your own disk.
  • Updates on your schedule — you decide when to apply a new version; no vendor modifies your production environment without your consent.
  • Open integrations — connect your own tools (CI, webhooks, scripts) without going through a paid marketplace.
  • Predictable cost — a correctly sized VPS covers the entire team; cost does not scale with headcount.
  • Easier internal compliance — hosting data in your own infrastructure simplifies audits and internal security policies.

Plane or Vikunja? Choosing based on your needs

Both tools cover issue tracking and sprints, but their profiles differ. Plane is the natural successor to Linear for teams that want to find the same concepts — cycles, modules, inbox, wiki pages — in a familiar interface. Vikunja is lighter, task- and list-oriented, with a very low system footprint that makes it well suited to entry-level VPS instances or teams that do not need formal sprint management.

Plane vs Vikunja: comparison table

CriterionPlaneVikunja
Minimum RAM4 GB (AIO community)< 512 MB
LicenceAGPL-3.0GPL-3.0
Backlog managementIssues, custom statuses, priorities, labelsTasks, lists, buckets, priorities
Sprints / cyclesNative cycles (start date, end date, progress)No native sprints — simulate with lists
IntegrationsGitHub, GitLab, Slack, Jira (import), REST APIREST API, webhooks, CSV/JSON import
Learning curveMedium — rich interface, several concepts to masterLow — up and running in minutes
Import from LinearCSV imported manually via IssuesCSV or JSON via the import interface
Recommended use caseTech teams of 5–50, formal sprint managementSmall teams, personal use or lightweight projects

Exporting from Linear: exact procedure

Linear lets you export your issues as CSV from the workspace settings. The export covers active and archived issues, their statuses, priorities, labels, assignees and comments as plain text. Attachments (files uploaded directly to Linear) are not included in the CSV export — download them manually if they are critical.

Migrate from Linear to Plane or Vikunja in seven steps

01

Export your issues from Linear

In Linear, open Settings (gear icon bottom left) → WorkspaceExport. Select the CSV format and trigger the export. Linear sends an email with the download link within a few minutes. The CSV file contains: title, description, status, priority, assignee, labels, created_at, updated_at, completed_at, cycle, project, and comments in a dedicated column. Keep this file — it is your migration source.

02

Deploy Plane or Vikunja on your VPS

For Plane: a VPS with 2 vCPU and 4 GB of RAM is the minimum required by the official documentation for the AIO image. Start the container with docker run -d --name plane --restart unless-stopped --env-file /opt/plane/.env -v plane-data:/app/plane-data -p 127.0.0.1:8080:8080 makeplane/plane-aio-community:stable. See the full Plane VPS deployment guide for HTTPS reverse proxy details.

For Vikunja: a VPS with 1 vCPU and 512 MB of RAM is sufficient. Create a docker-compose.yml file with the vikunja service (image vikunja/vikunja:latest) and a database (MariaDB or PostgreSQL). Expose port 3456 behind your reverse proxy. Vikunja starts in under thirty seconds on a minimal host.

03

Prepare the CSV file for import

Before importing, open the CSV in a spreadsheet and check the status column: Linear uses its own status names (Backlog, Todo, In Progress, Done, Cancelled). Plane and Vikunja have their own default statuses. Either rename them in the CSV to match the target statuses, or create the corresponding statuses in your new tool before importing. An unrecognised status is typically ignored or assigned the default status — verify after the import.

04

Import issues into Plane or Vikunja

In Plane: open your project → SettingsImportsCSV. Upload the file and map the columns: title → Name, description → Description, status → State, priority → Priority, assignee → Assignee, labels → Labels. Plane creates issues in bulk and preserves creation dates if the created_at column is mapped.

In Vikunja: open your list → import icon → CSV. Vikunja expects the columns Title, Description, Done (boolean), Due Date, Priority. If your Linear CSV uses different names, rename the column headers before importing. Vikunja also offers a JSON import for a more precise migration via the API.

05

Verify integrity after import

After the import, compare the number of imported issues to the number in your CSV export. If issues are missing, they likely had an unrecognised status or priority. Filter issues by status in your new tool to spot anomalies. Also verify that issues assigned to members have an assignee — members must exist in the target tool before the import, otherwise the field is silently left empty.

06

Invite team members

In Plane: open SettingsMembers of your workspace → Invite Members. Send invitations by email. Members accept the invitation and create their account on your instance. Assign them the appropriate roles (Admin, Member, Viewer) at the project level.

In Vikunja: open SettingsUsers (from the admin interface) → New User, or let members register directly if you have enabled open registration. Then share lists or projects with each member from the sharing settings.

07

Configure integrations and test

If your team used Linear's GitHub integration, connect the equivalent in your new tool: Plane offers a GitHub integration under SettingsIntegrationsGitHub. Vikunja exposes a REST API and webhooks — connect your CI pipeline via incoming webhooks. Run an end-to-end test: create an issue from your CI pipeline, verify it appears in the tool, change its status, and verify the notification (email or webhook) arrives correctly.

Start with a pilot project

Do not migrate the entire team at once. Choose a secondary project or a volunteer team to test the import, validate the status mapping and onboard a first group of users. Once the pilot project is stable — one to two weeks — migrate the remaining projects. This progressive approach lets you catch mapping or integration issues without blocking production.

Troubleshooting: common migration issues

Plane does not start with less than 4 GB of RAM. The AIO image groups Django, Celery, PostgreSQL and Redis into a single container. Below 4 GB, the Celery worker competes with PostgreSQL for available memory and the container restarts in a loop. Check with docker stats plane: if RSS memory exceeds 90% of available RAM at startup, increase the VPS size before investigating further.

The CSV import in Plane completes without error but issues do not appear. Plane validates the CSV silently: if a required column (title) is empty on a row, the entire row is skipped. Open the CSV in a spreadsheet and filter rows with an empty title — these are typically Linear sub-task rows that have no title of their own in the export.

Vikunja resets priorities to zero after import. Vikunja expects numeric values for priority (0 = none, 1 = low, 2 = medium, 3 = high, 4 = urgent). The Linear export uses text labels (Low, Medium, High, Urgent, No priority). Replace these labels with the corresponding numeric values in the CSV before importing — a simple find-and-replace in a spreadsheet is sufficient.

Invited members do not receive the invitation email. Verify that the outgoing email variables are correctly set in your .env file (EMAIL_HOST, EMAIL_PORT, EMAIL_HOST_USER, EMAIL_HOST_PASSWORD). On Plane, test with docker exec plane python manage.py sendtestemail [email protected]. On Vikunja, the SMTP configuration is in config.yml under the mailer key.

Managing your project management on your own infrastructure

Linear's free plan reduction illustrates a structural risk of SaaS tools: terms change, limits drop, and teams that have built their workflow around a third-party tool find themselves having to pay or migrate under pressure. Plane and Vikunja both offer a stable alternative, with a data model comparable to Linear and open-source licences that guarantee data longevity. The choice between the two depends primarily on the RAM available on your VPS and the need for formal sprint management — Plane for workflows close to Linear, Vikunja for a lighter setup. To go further in consolidating your management tools, see the guide on Huly (issues, docs and chat in one tool) and the guide on migrating from SaaS to self-hosting.

Host your project management tools on your own infrastructure

Plane and Vikunja run on a Linux VPS with Docker. ServOrbit offers VPS instances with full root access, sized from 2 vCPU and 4 GB RAM — the recommended baseline for Plane AIO. Your data stays in your infrastructure, with no member limits.

Need help?

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