Credential Storage
macOS Keychain
Your Jira credentials are stored securely using the macOS Keychain via the OmniFocus Credentials API:- Account ID: Your Jira account identifier (email)
- API Token: Your Jira API authentication token
- Encrypted at rest by macOS
- Protected by your system password or Touch ID/Face ID
- Never transmitted to any third party
- Only accessible by OmniFocus on your Mac
com.omnifocus.plugin.jira-sync
You can view or delete these credentials using the Keychain Access app:
- Open Keychain Access (Applications → Utilities)
- Search for:
com.omnifocus.plugin.jira-sync - Double-click to view details or right-click to delete
API Token Generation
To generate a Jira API token:- Go to https://id.atlassian.com/manage-profile/security/api-tokens
- Click Create API token
- Give it a descriptive name (e.g., “OmniFocus Sync”)
- Copy the token immediately (you won’t be able to see it again)
- Enter it in the OmniFocus Configure JIRA Sync dialog
- Create a dedicated token for OmniFocus (don’t reuse tokens across tools)
- Name tokens descriptively so you can identify them later
- Rotate tokens periodically (e.g., every 6-12 months)
- Revoke tokens immediately if you suspect compromise
Credential Security
The plugin implements several security measures: Safe Logging: All console logs automatically redact sensitive information:- Passwords and API tokens
- Authorization headers
- Email addresses
- Access tokens
*** in logs to prevent accidental credential leakage.
No External Transmission: Credentials are only sent to your configured Jira instance. The plugin:
- Never sends data to third-party servers
- Never reports usage telemetry
- Never shares credentials with external services
- Encoded in Base64 format
- Transmitted over HTTPS (encrypted in transit)
- Included only in the
Authorizationheader
btoa() is not available in the OmniFocus JavaScript environment.
Settings Storage
OmniFocus Preferences
Non-sensitive configuration settings are stored in OmniFocus Preferences:- Jira URL: Your Atlassian instance URL (e.g.,
https://company.atlassian.net) - JQL Query: Your issue filter query
- Tag Name: The tag to apply to synced tasks
- Last Sync Time: Timestamp of the last successful sync
- Status Mappings: Custom status-to-state mappings (if configured)
- Project Organization Settings: Folder paths and parent issue handling
jiraSync.settings
These settings are stored in JSON format in OmniFocus preferences and are not encrypted, but they contain no sensitive information.
Data Privacy
What Data is Synced
The plugin fetches the following fields from Jira issues:- Summary: Issue title
- Description: Issue description (converted from Atlassian Document Format to Markdown)
- Status: Current issue status
- Due Date: Issue due date
- Updated: Last modified timestamp
- Parent: Parent issue/Epic reference
Read-Only Access
The plugin has read-only access to your Jira instance:- It never modifies Jira issues
- It never creates new issues or comments
- It never changes issue status, assignees, or any other fields
- It only performs GET requests to the Jira API
Data Minimization
The plugin only fetches data required for task synchronization:- Uses JQL queries to filter issues (only syncs what you specify)
- Fetches only necessary fields (not all issue data)
- Implements pagination to avoid overwhelming API calls
- Uses incremental sync by default (fetches only recently updated issues)
Local Processing
All data processing happens locally on your Mac:- Description conversion (Atlassian Document Format → Markdown)
- Task deduplication
- Status mapping
- Project organization
Network Security
HTTPS Only
All communication with Jira uses HTTPS:- Credentials are encrypted in transit
- API responses are encrypted
- Man-in-the-middle attacks are prevented by TLS
https:// protocol.
Retry Logic
The plugin implements intelligent retry logic to handle transient network failures:- Maximum Attempts: 3 retries per request
- Exponential Backoff: 1s, 2s, 4s delays between retries
- Rate Limit Handling: Respects Jira’s
Retry-Afterheader (up to 60s) - Retryable Errors: 429 (rate limit), 500, 502, 503, 504 (server errors)
- Non-Retryable Errors: 400, 401, 403, 404 (configuration issues)
Cellular Access
The plugin allows requests over cellular connections when Wi-Fi is unavailable. If you prefer to restrict sync to Wi-Fi only, you can:- Disable cellular data for OmniFocus in System Settings → Cellular
- Run sync only when connected to Wi-Fi
Permissions
OmniFocus Permissions
The plugin uses these OmniFocus APIs:- Credentials API: To securely store and retrieve Jira credentials
- Preferences API: To store non-sensitive settings
- Task API: To create and update tasks
- Tag API: To assign tags to synced tasks
- Project API: To organize tasks into projects (if enabled)
- Alert API: To display success/error messages
- Form API: To show the configuration dialog
Jira Permissions
The plugin requires these Jira permissions (granted to the user whose API token is used):- Browse Projects: View issues in projects
- View Issues: Read issue details
- Search Issues: Execute JQL queries
- Edit Issues
- Create Issues
- Delete Issues
- Administer Projects
Privacy Policy
OmniFocus Jira Sync:- Does not collect personal information
- Does not track usage or analytics
- Does not transmit data to third parties
- Does not use cookies or tracking technologies
Compliance
GDPR Compliance
For users subject to GDPR:- All data is stored locally on your device (data controller is you)
- No data is shared with third parties
- You can delete all plugin data by:
- Removing credentials from Keychain Access
- Deleting synced tasks in OmniFocus
- Removing the plugin directory
SOC 2 / ISO 27001
If your organization requires SOC 2 or ISO 27001 compliance:- The plugin relies on macOS Keychain (Apple-certified secure storage)
- All communication uses industry-standard TLS encryption
- No data is processed by third-party services
- Audit logs are available in Console.app
Security Best Practices
For Users
-
Protect Your API Token:
- Never share your API token with others
- Don’t commit tokens to version control
- Revoke tokens immediately if compromised
-
Use Strong Passwords:
- Protect your Mac with a strong password or passphrase
- Enable FileVault for full-disk encryption
- Use Touch ID/Face ID for additional security
-
Keep Software Updated:
- Update macOS regularly for security patches
- Keep OmniFocus updated
- Check for plugin updates periodically
-
Review JQL Queries:
- Only sync issues you need access to
- Avoid overly broad queries (e.g.,
project = *) - Test queries in Jira before using in the plugin
-
Monitor Sync Activity:
- Review sync statistics after each run
- Check for unexpected task changes
- Use Console.app to audit API requests
For Administrators
-
Jira Access Control:
- Grant read-only permissions to sync accounts
- Use project-level permissions to restrict access
- Monitor API token usage in Jira audit logs
-
Network Security:
- Ensure Jira instance uses HTTPS
- Use VPN if required by organizational policy
- Monitor network traffic for anomalies
-
Device Management:
- Require device encryption (FileVault)
- Implement device passcode policies
- Use Mobile Device Management (MDM) to enforce security settings
Reporting Security Issues
If you discover a security vulnerability:- Do not open a public GitHub issue
- Email the maintainer directly (check README for contact info)
- Include:
- Description of the vulnerability
- Steps to reproduce
- Potential impact
- Suggested fix (if available)
Transparency
This plugin is open source under the MIT License:- All code is publicly auditable on GitHub
- No obfuscation or hidden functionality
- Community contributions are welcome
- Security improvements are encouraged