A command-line tool that exports Jira Cloud issues into clean, portable Markdown files with all attachments.
Jarkdown bridges the gap between Jira and your local development environment. It makes it easy to archive tickets, share them with others, or work with issues offline.
Full documentation is available at jarkdown.readthedocs.io, including:
- Getting Started for Beginners - Step-by-step guide for new users
- Installation Guide
- Usage Guide
- Configuration
- Contributing
- Complete Export: Fetches all issue metadata, descriptions, comments, and downloads all attachments locally.
- Rich Metadata: Exports comprehensive metadata in YAML frontmatter including labels, components, versions, parent issues, and more.
- Comment Support: Exports all issue comments with author, date, and formatted content, including support for Atlassian Document Format (ADF).
- Preserves Formatting: Converts Jira's HTML to GitHub-flavored Markdown, keeping headings, lists, code blocks, and tables intact.
- Embeds Local Links: Automatically references downloaded attachments with local links in the Markdown file.
- Simple and Fast: A command-line tool that is easy to script and integrate into your workflow.
Install directly from PyPI with a single command:
pip install jarkdownAfter installation, you need to set up your Jira credentials. Create a file named .env in the directory where you'll run the jarkdown command:
- Create the
.envfile with the following content:
JIRA_DOMAIN=your-company.atlassian.net
JIRA_EMAIL=your-email@example.com
JIRA_API_TOKEN=your-api-token-here
- Replace the values with your actual Jira information:
JIRA_DOMAIN: Your Atlassian domain (e.g., company.atlassian.net)JIRA_EMAIL: The email address you use to log into JiraJIRA_API_TOKEN: Your personal API token (see below)
- Go to https://id.atlassian.com/manage-profile/security/api-tokens
- Click "Create API token"
- Give it a name (e.g., "jarkdown")
- Copy the token and paste it into your
.envfile
If you want to contribute to the project or need the latest development version:
- Clone the repository:
git clone https://github.com/chrisbyboston/jarkdown.git
cd jarkdown- Create a virtual environment and install dependencies:
On macOS/Linux:
python3 -m venv venv
source venv/bin/activate
pip install -e ".[dev]"On Windows:
python -m venv venv
venv\Scripts\activate
pip install -e ".[dev]"- Set up your
.envfile as described above
Basic usage:
jarkdown ISSUE-KEYExamples:
# Download an issue to the current directory
jarkdown PROJ-123
# Download to a specific directory
jarkdown PROJ-123 --output ~/Documents/jira-exports
# Enable verbose logging
jarkdown PROJ-123 --verbose
# Show version
jarkdown --versionThe tool creates a directory named after the issue key containing:
- A markdown file with the issue content
- All attachments downloaded from the issue
Example:
PROJ-123/
├── PROJ-123.md # Issue content in markdown
├── diagram.png # Downloaded attachments
├── report.pdf
└── ...
The generated markdown includes:
---
key: PROJ-123
summary: Issue title
type: Bug
status: In Progress
priority: High
assignee: John Doe
reporter: Jane Smith
labels:
- backend
- performance
components:
- API
- Database
parent_key: PROJ-100
created_at: 2025-01-15T10:30:00.000+0000
updated_at: 2025-01-20T14:45:00.000+0000
---- Issue title with link to Jira
- Description with preserved formatting
- Comments section with all comments (author, date, and content)
- Attachments section with all files
Images are embedded inline, other files are linked.
- Python 3.8+
- Jira Cloud instance
- Jira API token with read permissions
requests- HTTP client for API callsmarkdownify- HTML to Markdown conversionpython-dotenv- Environment variable managementPyYAML- YAML frontmatter generation
- Currently supports single issue export only
- Requires Jira Cloud (not Server/Data Center)
- Export multiple issues with JQL queries
- Support for bulk export
- Hierarchical export (epics with stories)
- Better ADF format handling
- Custom field support
We welcome contributions! Here's how to get started:
- Fork and clone the repository:
git clone https://github.com/YOUR-USERNAME/jarkdown.git
cd jarkdown- Create a virtual environment and install dependencies:
python3 -m venv venv
source venv/bin/activate
pip install -e ".[dev]"- Install pre-commit hooks:
pre-commit install- Create a feature branch:
git checkout -b feature/your-feature-name- Make your changes and ensure tests pass:
pytest
pytest --cov=src/jarkdown --cov-report=term-missing- Commit your changes (pre-commit hooks will run automatically):
git add .
git commit -m "feat: describe your change"- Push and create a pull request:
git push origin feature/your-feature-nameThen open a pull request on GitHub.
- We use
rufffor linting and formatting - Pre-commit hooks ensure code quality
- Write clear, descriptive commit messages
- Add tests for new functionality
- Update documentation as needed
Run the test suite:
# Run all tests
pytest
# Run with coverage
pytest --cov=src/jarkdown --cov-report=term-missing
# Run specific test file
pytest tests/test_cli.pyPlease use the GitHub issue tracker to report bugs or request features.
This project is licensed under the MIT License - see the LICENSE file for details.