Overview
When enabled, the plugin:- Detects if a Jira issue has a parent (epic or parent task)
- Creates or finds an OmniFocus project named after the parent issue
- Places the task inside that project
- Optionally organizes projects into a folder structure
This feature is disabled by default. Enable it in Configure JIRA Sync → Project Organization.
How It Works
Parent Issue Detection
The plugin fetches theparent field from Jira issues:
- Parent key:
PROJ-123 - Parent summary: “Mobile App Redesign”
[PROJ-123] Mobile App Redesign
Project Creation
Projects are created automatically when needed:Create if Not Found
If no project exists, a new one is created with the name
[PARENT-KEY] Parent SummaryProject Naming Convention
Projects follow this naming pattern:[PROJ-123] Mobile App Redesign[ENG-456] Q2 Infrastructure Improvements[SUPPORT-789] Customer Onboarding Epic
The Jira key prefix allows the plugin to identify and reuse existing projects across syncs.
Configuration
Enable and configure Project Organization in Configure JIRA Sync:Enable Project Organization
Check the Enable Project Organization checkbox.Default Project Folder (Optional)
Specify a folder path using colon-separated notation:- Root Level
- Single Folder
- Nested Folders
Leave blank to create projects at the root level of your OmniFocus database.
Folder Path Syntax
Use colons (:) to separate folder levels:
Work:Jira:Projects
From the source code at jiraCommon.js:583-608:
Task Placement Logic
The plugin follows this logic when organizing tasks:Task With Parent Issue
Task With Parent Issue
- Check if parent issue exists as an OmniFocus project
- If yes, create task inside that project
- If no, create a new project and place task inside
- Apply configured tag to both project and task
Task Without Parent Issue
Task Without Parent Issue
- Create task at the root level (inbox)
- Task is not placed in any project
- Apply configured tag to task
Parent Removed From Jira
Parent Removed From Jira
- During sync, detect parent field is now empty
- Attempt to move task to inbox (root level)
- If task cannot be moved (OmniFocus limitation), leave in current project
- Log warning in console
Implementation Details
Finding Parent Container
The plugin uses indexed lookups for performance:The plugin prefers existing tasks over projects. If the parent issue exists as both a task and a project, the task takes precedence (creating a task group).
Project Index
For O(1) lookup performance, the plugin builds an index of all projects:Creating Projects
FromjiraCommon.js:611-646:
OmniFocus Limitations
Read-Only Project Property
FromjiraCommon.js:720-738:
- The plugin attempts to move the task
- If the move fails (typical), the task stays in its current project
- A warning is logged to the console
Workaround
To move a task to a different project:- Manually delete the task in OmniFocus
- Run a Full Sync to recreate it in the correct project
- Manually move the task in OmniFocus (drag and drop)
- The next sync will update the task content but preserve its location
Use Cases
Epic-Based Organization
Scenario: Your team uses Jira epics to group related work. Configuration:- Enable Project Organization: ✓
- Default Project Folder:
Work:Jira:Epics
Mixed Organization
Scenario: Some issues have parents (epics), others don’t. Result:Multi-Level Hierarchies
Scenario: Jira has sub-epics or nested parent-child relationships. Limitation: The plugin only looks at the immediate parent. Multi-level hierarchies are flattened. Example in Jira:ENG-200 and places ENG-201 inside. The top-level epic ENG-100 is not referenced.
Performance Considerations
Project organization adds minimal overhead:- Index building: O(n) where n = number of projects (typically < 100)
- Project lookup: O(1) using Map index
- Project creation: Rare (only when new parents appear)
- Folder navigation: O(d) where d = folder depth (typically 2-3)
Best Practices
- Keep It Simple
- Create Folders First
- Tag Everything
- Regular Cleanup
Use a shallow folder structure:✓ Good:
Work:Jira✗ Avoid: Work:Projects:Engineering:Jira:Epics:ActiveTroubleshooting
Projects Not Created
Issue: Tasks are created but not organized into projects. Solutions:- Verify Enable Project Organization is checked in configuration
- Check that issues have parent fields in Jira
- Run a Full Sync to rebuild project structure
- Review Console.app logs for errors
Folder Not Found Error
Issue: Console shows “Folder not found, creating project at root level” Solutions:- Create the folder structure manually in OmniFocus
- Verify folder path syntax:
Parent:Child:Grandchild - Check for typos in folder names (case-sensitive)
- Leave folder field blank to use root level
Tasks in Wrong Projects
Issue: Tasks appear in incorrect projects after parent changes. Cause: OmniFocus limitation - tasks cannot be moved between projects. Solutions:- Manually delete the task in OmniFocus
- Run a Full Sync to recreate it in the correct project
- Manually move the task in OmniFocus
- Accept the divergence from Jira’s structure
Duplicate Projects
Issue: Multiple projects with similar names. Cause: Manual project creation or project names without[JIRA-KEY] prefix.
Solutions:
- Delete duplicate projects manually
- Ensure plugin-created projects have
[KEY]prefix - Run a Full Sync to consolidate
Disabling Project Organization
To disable this feature:- Uncheck Enable Project Organization in Configure JIRA Sync
- Run a Full Sync
- New tasks will be created at root level (inbox)
- Existing projects and tasks remain unchanged
Disabling Project Organization does not delete existing projects or move existing tasks. It only affects new tasks created after disabling.