Migrate Linear issues to Fizzy cards with full metadata, labels, and comment history.
- Issue Migration: Transfer titles, descriptions, and metadata from Linear to Fizzy
- Label Conversion: Automatically creates Fizzy tags from Linear labels
- Comment Preservation: Maintains all comments with author attribution and timestamps
- Markdown Support: Descriptions are converted to HTML (with cmark or pandoc)
- Flexible Filtering: Filter by team, project, state, or labels
- Safety Options: Dry-run mode for previewing changes before execution
- Reference Tracking: Cards include links back to original Linear issues
Download and make executable:
curl -O https://raw.githubusercontent.com/robzolkos/linear2fizzy/main/linear2fizzy
chmod +x linear2fizzy
mv linear2fizzy /usr/local/bin/Or clone the repository:
git clone https://github.com/robzolkos/linear2fizzy.git
cd linear2fizzy
chmod +x linear2fizzy- Fizzy CLI (
fizzy) - Installation - jq - JSON processing utility
- curl - HTTP client (usually pre-installed)
- Linear API Key - Personal API key from Linear
- cmark or pandoc - For better markdown-to-HTML conversion
- Download from fizzy-cli releases
- Verify installation:
fizzy --version - Authenticate with your token:
fizzy auth login YOUR_TOKENGet your token from the Fizzy web app profile page. Verify authentication:
fizzy identity showOptionally set a default account:
export FIZZY_ACCOUNT="YOUR_ACCOUNT_ID"Get your API key from Linear Settings → API:
- Click Create key
- Give it a name (e.g., "linear2fizzy")
- Copy the key (starts with
lin_api_...)
Set the key via environment variable:
export LINEAR_API_KEY=lin_api_your_key_hereOr copy the sample env file and add your key:
cp .env.sample .env
# Edit .env with your actual keylinear2fizzy --board BOARD_ID [OPTIONS]
| Option | Description |
|---|---|
--board ID |
Fizzy board ID to migrate issues to |
| Option | Short | Description |
|---|---|---|
--team ID |
Filter by Linear team ID | |
--project ID |
Filter by Linear project ID | |
--state NAME |
Filter by state name (e.g., "Todo", "In Progress") | |
--label NAME |
-l |
Filter by label (can be repeated) |
--issue ID |
-i |
Migrate specific issue(s) by identifier (can be repeated) |
--include-archived |
Include archived issues | |
--limit N |
Maximum issues to migrate (default: 100) |
| Option | Description |
|---|---|
--account NAME |
Fizzy account name (if not default) |
--column NAME |
Target Fizzy column name |
| Option | Short | Description |
|---|---|---|
--dry-run |
Preview changes without executing | |
--verbose |
-v |
Show detailed output |
--quiet |
-q |
Suppress non-error output |
--help |
-h |
Show help message |
--version |
Show version |
linear2fizzy --board 12345 --team abc123linear2fizzy --board 12345 --team abc123 --dry-run --verboselinear2fizzy --board 12345 -i PROJ-123 -i PROJ-456 -i PROJ-789linear2fizzy --board 12345 --team abc123 -l bug -l urgentlinear2fizzy --board 12345 --team abc123 --column "Backlog"linear2fizzy --board 12345 --team abc123 --state "Todo"linear2fizzy --board 12345 --team abc123 --project proj_456In Linear, press Cmd/Ctrl + K and type "Copy model UUID" while viewing your team.
Or use the script to list teams (requires valid API key):
curl -s -X POST \
-H "Content-Type: application/json" \
-H "Authorization: $LINEAR_API_KEY" \
--data '{"query":"{ teams { nodes { id name key } } }"}' \
https://api.linear.app/graphql | jq '.data.teams.nodes'fizzy board listIssue identifiers look like PROJ-123 and are visible in the Linear UI and URLs.
| Code | Meaning |
|---|---|
| 0 | Success |
| 2 | Invalid arguments |
| 3 | Missing dependencies |
| 4 | Authentication failure |
| 5 | Partial failure during migration |
For each Linear issue, the following is transferred to Fizzy:
- Title: Prefixed with Linear identifier (e.g.,
[PROJ-123] Issue title) - Description: Full markdown description converted to HTML
- Labels: Converted to Fizzy tags
- Comments: All comments with author and timestamp attribution
- Metadata footer: Original state, assignee, and link back to Linear issue
MIT