Skip to main content

Documentation Index

Fetch the complete documentation index at: https://ekso.dev/llms.txt

Use this file to discover all available pages before exploring further.

What ekso migrate is

ekso migrate is a built-in importer that moves projects, work items, comments, attachments, links, and time history from another platform into your Ekso tenant. One source picker, one set of commands, one cache format. It currently supports five sources:
SourceBranchRead
Atlassian Jiraekso migrate jiraMigrate from Jira
Linearekso migrate linearMigrate from Linear
Azure DevOpsekso migrate devopsMigrate from Azure DevOps
Zendeskekso migrate zendeskMigrate from Zendesk
Countersoft Geminiekso migrate geminiMigrate from Gemini
Every source uses the same workflow, the same flag surface, and the same destination shape on the Ekso side. Once you’ve migrated one source, you’ve migrated them all.

Two phases — collect and apply

The migrator splits cleanly into two commands:
ekso migrate <source> collect ...   # source platform → local SQLite cache
ekso migrate <source> apply   ...   # local SQLite cache → Ekso REST
Splitting the work is deliberate:
  • A 50,000-issue Jira collect can take an hour. A network blip during apply must not force re-fetching from the source.
  • apply --dry-run walks the cache and tells you exactly what would be created — no Ekso writes — before you commit.
  • apply is resumable. Every successful create writes the source-id → Ekso-id pair into a local IdMap table; a re-run skips already-applied rows.
  • The two phases can run on different machines. Collect on a workstation that can reach the source platform; copy the SQLite file; apply from a CI runner with Ekso credentials. This is the on-prem migration story.
The cache lives at ~/.ekso/migrate/<source>-<timestamp>.sqlite by default. Override with --working-dir.

What you get on the Ekso side

The migrator preserves authoring fidelity. Every comment, every worklog, every attachment is attributed to the user who created it on the source platform — not to the running CLI user.
Source conceptEkso shape
Project / Team / OrgDataContainer
Issue / Ticket / Work ItemDataItem
Comment / DiscussionDataAnnotation
AttachmentDataFile (multipart upload)
Worklog / Time entryDataItem.Time[] (in the same item POST)
Sprint / Cycle / Iteration / VersionDataCycle
Component / Area / Group / TagConfigLabel + DataItem.Tags
User / Agent / IdentityDataUser (matched by email or minted)
Issue link / SubtaskDataLink
Custom fieldDataItem.Field[] (via field-map) or Meta (lossless)
The mapping is the same across sources. Differences are in the source-specific quirks (Jira’s date format, Linear’s cursor pagination, Zendesk’s first-comment-as-description, DevOps’ WIQL chunking, Gemini’s dual-mode dispatch) — see the per-source pages.

Identity resolution — three strategies

External platforms attribute every comment, worklog, and item to a user. Ekso has to record those authors faithfully or the audit trail breaks. The CLI offers three strategies via --user-strategy:
StrategyWhat it does
match-or-create (default)Match each source user by email; if no Ekso user has that email, mint one (random password, no invite email sent).
match-onlyMatch by email only. Source users with no Ekso match fall back to --fallback-user (or the running CLI user).
migration-botForce every author to a single fallback user. Lossy, but simple if author fidelity isn’t important.
The default mints users without sending an invite email so production users don’t get a flood of “Welcome to Ekso” emails the day before a migration. See Identity resolution for the full mechanics and post-migration cleanup.

What does not migrate

Honest list:
  • Workflow definitions / state machines. The migrator snapshots the current state of each item. State-transition rules and screen layouts on the source platform don’t transfer — the customer’s destination process defines the new shape.
  • Permissions / role assignments. Source-platform ACLs don’t map. Configure access on Ekso’s side after the migration.
  • Brand customisations. Themes, logos, custom domains are platform-specific.
  • Source-platform automations (Jira automations, DevOps build pipelines, Zendesk macros, Gemini rules). Re-author them as Ekso rules.
  • Reverse migration. This is one-way — Ekso → source is not supported.
  • Ongoing sync. This is a one-shot migration tool, not an integration.
Each per-source page calls out additional source-specific gaps.

Before you run anything

Read Before you start — prerequisites, secrets policy, token rotation. Then pick your source.

Where to next