GitHub Issues → Linear
Move projects, work items, hierarchy, statuses, users, comments, attachments, custom fields, automation, permissions, and reports from GitHub Issues into Linear with an explicit exception ledger and evidence-based cutover.
Should you make this move?
Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.
GitHub Issues
- Lightweight planning stays directly connected to code, pull requests, and releases
- Structured ownership, status, and workflow views improve operational visibility
- Cross-team planning, reporting, and workflow controls are intentionally limited
- Custom fields, automations, history, and reporting are difficult to reproduce exactly
Linear
- Fast, opinionated product-development workflows keep software teams focused
- Structured ownership, status, and workflow views improve operational visibility
- Non-software work and highly customized enterprise processes fit poorly
- Custom fields, automations, history, and reporting are difficult to reproduce exactly
Linear: Fast, opinionated product-development workflows keep software teams focused. This removes a major source-side concern: Cross-team planning, reporting, and workflow controls are intentionally limited.
What you lose: Lightweight planning stays directly connected to code, pull requests, and releases. What you inherit: Non-software work and highly customized enterprise processes fit poorly.
Jump to a section
Know the shape of the move.
This timeline assumes
- Up to 100 projects, 100,000 work items, and 500 users
- Only active work and explicitly approved history enter the destination.
- Users and guests are provisioned before assignment mapping.
- A representative project or board is imported before the full workspace.
- The migration team records evidence for every blocking verification check.
How do I connect observability to GitHub and Linear so issues are filed automatically?
Choose which system owns each incident before enabling issue creation. Use a supported integration or authenticated webhook workflow, mapping service, severity, owner, and source event ID. Deduplicate repeated alerts and test private-project access. Keep a backlink to the original event and verify closure behavior so parallel GitHub and Linear records remain understandable.
What survives the move.
“Partial” and “manual” are not footnotes. They are work that must be scheduled and verified.
| Item | Outcome | Impact | What happens | Mitigation |
|---|---|---|---|---|
| Projects, work items, hierarchy, owners, statuses, dates, and comments | partial | critical | Core projects, work items, hierarchy, owners, statuses, dates, and comments can move, but GitHub Issues and Linear use different models, limits, identifiers, and import behavior. | Pilot every feature class, preserve source IDs, and reconcile accepted, transformed, rejected, and excluded items. |
| Custom views, formulas, automation, permissions, dashboards, and history | manual | critical | GitHub Issues-specific runtime configuration and historical evidence do not become native Linear behavior through the core data transfer. | Inventory every active dependency, approve its destination disposition, and test the replacement before source writes stop. |
| Projects, boards, and active work | partial | critical | Core work items can move, but source and destination hierarchy differ. | Approve the destination hierarchy before importing tasks. |
| Task titles and descriptions | partial | high | Text transfers more reliably than rich blocks, embeds, and application-specific markup. | Compare a stratified sample containing every content type. |
| Statuses, sections, and workflow | partial | critical | Columns, sections, groups, and statuses can represent different business concepts. | Map each source value to one approved destination state. |
| Assignees, teams, and guests | partial | critical | User identities can map while roles, guest scope, and licensing change. | Provision users first and test internal and external access. |
| Dates, milestones, and dependencies | partial | high | Due dates may move while schedules, dependency types, and baseline behavior differ. | Rebuild critical dependencies and validate milestone ordering. |
| Comments and activity history | partial | high | Import coverage and author attribution vary by route. | Archive full history and verify every required collaboration type. |
| Attachments and external links | partial | high | Files can exceed limits or remain linked to source-only URLs. | Copy required binaries and test access as ordinary users. |
| Custom fields and calculated values | partial | high | Field types, options, formulas, and validation do not match exactly. | Create a signed field dictionary and preserve source values. |
| Recurring work and templates | manual | high | Recurrence and templates are runtime configuration rather than task data. | Rebuild only active schedules and test their next occurrence. |
| Automation and integrations | lost | critical | Rules, webhooks, API clients, and connected apps do not execute after import. | Inventory every writer and enable replacements one at a time. |
Where each thing goes.
| Source | Destination | Method | Notes |
|---|---|---|---|
| GitHub Issues project or board | Linear project, team, or container | transform | Approve hierarchy and ownership first. |
| Task or card | Task or issue | transform | Preserve source ID and URL. |
| Section, list, group, or status | Destination status or grouping | transform | Map business meaning, not visual position. |
| Assignee or member | Destination assignee | manual | Map inactive and guest users explicitly. |
| Due date or milestone | Destination date or milestone | transform | Normalize timezone and date-only values. |
| Dependency or relation | Destination dependency or relation | transform | Create after both work items exist. |
| Custom field | Destination field or label | transform | Map type, options, and null values. |
| Comment or update | Destination comment or archived context | transform | Preserve author and timestamp when supported. |
| Attachment | Destination attachment or durable link | transform | Copy the binary and verify ordinary-user access. |
Make the move recoverable.
Create the source-of-truth backup
Preserve GitHub Issues data, configuration, and operating evidence before any destination write.
- Export all available GitHub Issues projects, work items, comments, files, users, fields, and settings.
- Capture project structure, statuses, permissions, templates, automations, integrations, and active schedules.
- Record counts by project, state, owner, and item type.
- Hash raw exports and transform working copies only.
Proof to capture: A signed manifest reconciles every scoped record class, runtime dependency, export file, count, and hash.
Work hierarchy and state map
Preserve ownership and workflow meaning.
- Inventory source values and exceptions.
- Define explicit destination mappings.
- Reject unmapped critical records.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
Destination import files
Create deterministic users, work items, fields, and relationships.
- Normalize encoding, dates, identifiers, and blanks.
- Run a representative pilot.
- Reconcile accepted, rejected, and transformed rows.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
The things most likely to hurt.
These are operating limits. Treat every “Stop if” condition as a blocked migration, not a suggestion.
Hierarchy or status changes meaning
Work appears in the wrong team, project, or workflow state.
- Consequence
- Teams lose ownership and act on the wrong priorities.
- Mitigation
- Approve mappings with project owners before bulk import.
Stop if: A critical state or owner has no deterministic destination.
Private work becomes visible
Imported containers inherit broader destination access.
- Consequence
- Confidential projects or client work is exposed.
- Mitigation
- Create and test access before inviting users.
Stop if: An unauthorized test user can open restricted work.
Both tools create actions
Source rules and destination automations both notify or update work.
- Consequence
- Tasks drift and people receive duplicate actions.
- Mitigation
- Freeze source automations and enable replacements one at a time.
Stop if: Any unapproved source writer remains active.
Do the work in this order.
- Days 1–3 · inventory
Inventory and decisions
6–12 hours active2–3 days elapsedOwner review waiting- Inventory GitHub Issues data, features, users, domains, and integrations.
- Approve scope, owners, mappings, and exclusions.
Depends on: GitHub Issues and Linear administrator access
Stop / go checkpointExport?
Go when: Every critical item has an owner and disposition.
Stop when: Consent, billing, access, or system ownership is unclear.
- Days 3–5 · backup
Backup and reconcile
5–10 hours active1–3 days elapsedExport processing waiting- Create immutable exports and configuration evidence.
- Reconcile counts, totals, and hashes.
Depends on: Approved inventory
Stop / go checkpointTransform?
Go when: Source totals and export manifests agree.
Stop when: Any critical dataset or configuration is absent.
- Days 5–12 · pilot
Map and pilot
10–35 hours active3–8 days elapsedDestination processing and review waiting- Configure Linear and transform representative data.
- Run a pilot containing normal records and every critical edge case.
Depends on: Verified backup
Stop / go checkpointScale?
Go when: Pilot mappings, behavior, access, and evidence pass.
Stop when: Any critical check fails or produces unexplained variance.
- Days 10–20 · cutover
Final delta and switch
5–25 hours active1–5 days elapsedDNS, import, or sync propagation waiting- Freeze production writes in GitHub Issues.
- Apply the final delta, switch ownership, and run blocking checks.
Depends on: Passed pilot and approved rollback
Stop / go checkpointOpen production?
Go when: Counts reconcile and one destination system owns production.
Stop when: A source writer remains active or a blocking check fails.
- Days 12–40 · observe
Observe and close
3–18 hours active3–10 days elapsedOperating-cycle evidence waiting- Monitor one complete operating cycle.
- Sign the verification report and close rollback only after stability.
Depends on: Verified cutover
Stop / go checkpointClose rollback?
Go when: No trigger occurs during the agreed observation period.
Stop when: Data, access, delivery, routing, or business results regress.
Cut over with a way back.
Cutover
Make Linear the only production system without losing the final GitHub Issues delta.
- Freeze production writes and scheduled actions in GitHub Issues.
- Export, transform, and reconcile the final delta.
- Apply the approved delta to Linear.
- Switch domains, forms, integrations, sending, or sync ownership as applicable.
- Run every blocking verification check and keep the source intact.
Proof to capture: Linear owns production, totals reconcile, and every blocking check has durable evidence.
Rollback
Return production ownership to GitHub Issues without losing destination-era changes.
- Stop new writes and scheduled actions in Linear.
- Restore the prior GitHub Issues routing, forms, integrations, sending, or sync ownership.
- Export the Linear post-cutover delta.
- Review and apply safe destination-era changes to GitHub Issues.
- Run the same blocking checks against the restored source.
Proof to capture: GitHub Issues again owns production with current data and no duplicate destination action.
- Unexplained critical count or value variance
- Missing or exposed critical data
- Duplicate production action
- Failed access, routing, delivery, or integration check
- A critical feature has no safe destination replacement
Prove the migration worked.
Every blocking check must pass. Capture the evidence before cleanup begins.
| Pass | ID | Check | Method | Expected result | Evidence |
|---|---|---|---|---|---|
V-01Blocking | Work-item reconciliation | Compare counts by project, state, owner, and item type. | Every scoped item is accounted for. | Count ledger. | |
V-02Blocking | Project and workflow mapping | Inspect each destination team, project, grouping, and status. | All mappings match the signed model. | Hierarchy report. | |
V-03Blocking | Task value parity | Compare 30 stratified work items. | Critical text, fields, dates, and estimates match. | Field comparison. | |
V-04Blocking | Ownership and guests | Test active, inactive, internal, and external identities. | Assignments and access match policy. | User matrix. | |
V-05Blocking | Subtasks and dependencies | Query representative parent, child, blocked, and related work. | No unexplained orphan or flattened critical link. | Relationship report. | |
V-06Blocking | Attachment access | Open representative files as ordinary users. | Required files load without source-only access. | Attachment log. | |
V-07Blocking | Recurring and connected actions | Run controlled work through every approved rule. | One correct destination action with no source duplicate. | Automation log. | |
V-08Blocking | Single work system | Inspect source and destination writers and team process. | Linear alone owns active work. | Cutover checklist. |
Remove the scaffolding safely.
Safe after: One complete operating cycle, at least seven stable days, and owner sign-off on every blocking check.
- Create final GitHub Issues exports and archive verification evidence.
- Revoke temporary credentials, API keys, webhooks, and elevated roles.
- Remove obsolete embeds, forms, jobs, integrations, and DNS records.
- Keep the source intact through the approved retention window.
- Cancel paid plans only after billing, legal, and recovery review.
- Schedule the next Linear backup, access, and migration-playbook review.
Verify against the primary material.
Platform behavior changes. Check these sources and the review dates above before executing a production migration.
- GitHub Issues: official migration documentationAccessed 2026-07-19
- Linear: official migration documentationAccessed 2026-07-19