Lightweight Trello JSON to mJSON converter for team workflows.
mj.sh converts large Trello board exports (30+ MB) into compact, analyzable mJSON format (~100 KB). Built for Httplab's product management workflows.
Key features:
- 300x compression (34MB → 106KB, or 600x with --compact)
- Filter by team member, status
- Extracts custom fields (Project, Effort, Priority)
- Extracts GitHub PR links, attachments, linked cards
- Unified activity timeline (comments, status changes, etc.)
- Single bash script, only requires
jq
# Install
curl -o mj.sh https://raw.githubusercontent.com/olga-demchuk/mj/main/mj.sh
chmod +x mj.sh
mv mj.sh /usr/local/bin/mj.sh
# Verify
mj.sh --version # v0.4.2
# Use
mj.sh --output board.json- macOS or Linux
- bash 4.0+
- jq (
brew install jqorapt install jq)
# All active cards
mj.sh --output board.json
# Filter by team member
mj.sh --member slavaaq --output slava.json
# Filter by status (partial match, case-insensitive)
mj.sh --status "In Progress" --output in_progress.json
mj.sh --status todo --output todo.json
# Combine filters
mj.sh --member petrovmichael1 --status "In Progress"
# Compact output (faster analysis, smaller files)
mj.sh --compact --output board_compact.json
# Specific input file
mj.sh --input ~/Downloads/board.json --output result.json- Open your Trello board
- Board menu → Print and Export → Export as JSON
- Save to Desktop
- Run
mj.sh
{
"id": "67053c24b2e398461bb5e3fc",
"name": "LV-6401 Mark photographs",
"url": "https://trello.com/c/Dw8Y7j2C",
"status": "Testing",
"description": "Full markdown description...",
"checklists": [
{
"name": "Notes",
"items": [{"text": "Fix bug", "checked": true}]
}
],
"attachments": [
{"name": "image.png", "url": "...", "addedBy": "slavaaq"}
],
"linkedCards": [
{"name": "Related task", "url": "https://trello.com/c/..."}
],
"activity": [
{"type": "updateCard", "user": "slavaaq", "data": {"from": "ToDo", "to": "In Progress"}},
{"type": "commentCard", "user": "mike", "data": {"text": "Looks good!"}}
],
"assignees": ["slavaaq", "sergeykovalevsky"],
"labels": ["In Test"],
"project": "LV",
"effort": "a day",
"priority": "High",
"pr": ["https://github.com/trafficrunners/gmbmanager/pull/5243"],
"created": "2024-10-08T10:23:45.120Z",
"updated": "2024-11-25T09:15:33.840Z",
"due": null,
"archived": false,
"isMirror": false
}Excludes: description, checklists, attachments, linkedCards, activity. Only critical fields for quick status analysis.
| Type | Description |
|---|---|
| commentCard | Comments |
| updateCard | Status changes |
| updateCheckItemStateOnCard | Checklist item changes |
| addMemberToCard / removeMemberFromCard | Member changes |
| addAttachmentToCard / deleteAttachmentFromCard | Attachment changes |
| addChecklistToCard | Checklist added |
| updateCustomFieldItem | Custom field changes |
| moveCardFromBoard | Card moved from another board |
| createCard | Card created |
- Full Specification - Detailed field descriptions, technical details
- Changelog - Version history
brew install jq # macOS
apt install jq # LinuxUse --input to specify file location, or export Trello board to Desktop.
Ensure your Trello board has custom fields named exactly "Project", "Effort", "Priority" (case-sensitive).
--labels <names>- Filter by labels--project <n>- Filter by project--unassigned- Show unassigned tasks
--include-archived- Include archived cards--archived-days N- Archived within N days
- Full feature set
- Migration guide from makejson.sh
MIT License - see LICENSE file.
Created by Olya Demchuk for Httplab team workflows.