Moving from Linear

Export issues as CSV from any view, rename three columns, import with a preview. Issues, projects, labels, due dates, priorities and sub-issues come across; cycles, estimates and workflow states do not.

Linear's export checked on ; the import path is that of OpenTodo v0.6.0

What comes across

  • Issues, with their descriptions
  • Projects, as projects (a team can be a parent project)
  • Labels
  • Due dates
  • Priorities, after converting the words
  • Sub-issues, through the parent issue column
  • Statuses, as sections if you keep the column

What does not

  • Cycles, estimates, SLAs, milestones and initiatives
  • Assignees (dropped with a warning; assign again once the people have accounts)
  • Comments and attachments
  • Workflow automations, GitHub links and integrations

Before you start

At the time of checking, Linear exports issues as CSV from any view, project or issue list (open the command menu with Ctrl/⌘+K and choose Export issues as CSV…), with columns including ID, Team, Title, Description, Status, Estimate, Priority, Project, Assignee, Labels, Due Date and Parent issue. Members can export up to 250 issues at a time; admins more. Trust your own file over this page.

OpenTodo reads a CSV with a header row and a title column; header names are case-insensitive and spaces count as underscores, so Title, Description, Project, Labels and Due Date are read as they are. The columns it understands are in the import reference.

Export from Linear

  1. Open the view or project to move, press Ctrl/⌘+K and choose Export issues as CSV…. Repeat per team or project if you have more than the limit. Import formats
  2. Open the file in a spreadsheet. Import formats

Tidy the file

  1. Rename Parent issue to parent. Its value is the parent’s ID, which OpenTodo matches against the id column, so rename ID to id as well. Sub-issues become subtasks. Mapping rules
  2. Convert Priority. Replace Urgent with 1, High with 2, Medium with 3, Low with 4, and clear No priority. CSV columns
  3. Decide what Status becomes. Rename it section and your board has the same columns as Linear’s (Todo, In Progress, Done). Or add a completed column with yes on done issues and drop the status. You can do both. Sections
  4. Delete Estimate, Cycle, Assignee and the other columns you do not need. Unknown columns are listed as ignored in the preview; Assignee is recognised as unsupported and dropped with a warning on each row. CSV columns

Import into OpenTodo

  1. Open Settings → Data → Import data… and choose the file. Import from another app
  2. In the preview, pick the target project for rows without one (a project per team works well), check the time zone, and read the row list: created, skipped with the reason, or error with the row number. Nothing is written yet. Import from another app
  3. Select Import. The tasks reach every member’s devices once the project is shared. An import can be undone. Undo an import

Your first week

Linear words, OpenTodo words

How Linear's terms map to OpenTodo's
In LinearIn OpenTodoNote
IssueTask
ProjectProject
TeamParent projectOpenTodo has no teams; a project per team with sub-projects works for a team of five.
Status (Todo, In Progress, Done)Section, and CompletedSections show as board columns; a done issue is a completed task.
LabelLabel
Priority Urgent, High, Medium, LowPriority P1, P2, P3, P4
Sub-issueSubtask
AssigneeAssignee
CycleNo equivalentA saved view "due <= 14 days" is the nearest thing.
Custom viewSaved view
TriageInbox

Linear is named only to identify it; this page is not affiliated with it. The glossary maps the words of all four apps.

Bring your tasks over at your own pace.

Import into the demo first if you like: the sandbox is private and deleted after two hours. Then do it for real on your server.

OpenTodo is free and open source, with no paid tier. If it helps you, a star on GitHub helps other people find it, and a coffee helps keep it going.

Buy me a coffee