Import

Bring your plan with you.

The CLI reads Linear or GitHub on your machine and sends the data to your selected workspace. Your Linear or GitHub token never leaves your computer. No workspace yet? Run todos try first, and the import goes into your new trial workspace.

From Linear

export LINEAR_API_KEY=lin_api_...
todos import linear --teams ENG,OPS

Create a personal API key in Linear under Settings → Security & access. Leave out --teams to import every team.

From GitHub

todos import github owner/repo --team API

The CLI uses GITHUB_TOKEN, GH_TOKEN, or gh auth token. Public repositories also work without a token, within GitHub’s lower rate limit. Leave out --team to use a key made from the repository name, such as MAS from my-api-server. Milestones become projects. Pull requests are not imported.

What stays the same

  • Issue keys and numbers, such as ENG-42.
  • Titles, descriptions, and comments, with their original dates.
  • State changes such as closes and reopens, with their dates and the people who made them. A change with no known person shows as made by GitHub or Linear.
  • Workflow states, labels, projects, priorities, estimates, and due dates.
  • Sub-issues from Linear.
  • Authors and assignees, when they are members of your workspace. People match by email, or by their linked GitHub account. Other people keep their names on the work they created.

Before you import

  • Only workspace admins can import.
  • Each team needs a free key. An empty team with the same key is used, and a team that already has issues stops the import.
  • Add --dry-run to count what the CLI finds without sending anything.
  • Imports send no webhooks and no notifications. If an import stops, run the same command again. Records that arrived are skipped.