A blazing-fast CLI tool for automating Jira/Git workflows. Stop context switching between Jira, Git, and GitHub/GitLab - manage your entire development workflow from the command line.
- Integrated Workflow: One command to fetch Jira tickets, create branches, and update statuses
- Smart Branch Naming: Automatically generates clean branch names from ticket summaries
- Automatic Commit Formatting: Links commits to Jira tickets automatically
- PR/MR Automation: Push, create pull/merge requests, and update Jira status in one command
- Fast & Lightweight: Written in Rust, single binary, no runtime dependencies
- Universal: Works with any Jira instance, GitHub, and GitLab
git clone https://github.com/Ilia01/devflow.git
cd devflow
cargo install --path .Make sure ~/.cargo/bin is in your PATH:
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.zshrc
source ~/.zshrcdevflow initThis will prompt you for:
- Jira URL and email
- Authentication method:
- Personal Access Token (for Jira Data Center/Server)
- API Token (for Jira Cloud)
- Git provider (GitHub/GitLab) and access token
- Workflow preferences (branch prefix, default transition)
Configuration Validation: DevFlow automatically tests your Jira connection during setup to ensure credentials are valid before saving.
Configuration is stored securely at ~/.devflow/config.toml with 600 permissions.
devflow start WAB-1234This will:
- Fetch the ticket from Jira
- Create a branch:
feat/WAB-1234/ticket_summary - Update Jira status to "In Progress"
devflow commit "Add user authentication"This creates a commit with automatic ticket reference:
Add user authentication
WAB-1234: https://jira.company.com/browse/WAB-1234
devflow doneThis will:
- Push your branch to remote
- Create a pull request (GitHub) or merge request (GitLab)
- Update Jira status to "In Review"
- Display the PR/MR URL
devflow list # All your tickets
devflow list --status "To Do" # Filter by status
devflow list --project WAB # Different project
devflow list --json # JSON output for scriptingShows all Jira tickets assigned to you with optional filtering.
devflow open # Opens current ticket in Jira
devflow open WAB-1234 # Opens specific ticket
devflow open --pr # Opens PR/MR for current branch
devflow open --board # Opens Jira boardQuick way to jump to tickets or pull requests without leaving the terminal.
devflow search "login bug" # Search by text
devflow search "auth" --assignee me # My tickets matching "auth"
devflow search "API" --status "To Do" # By status
devflow search "bug" --project WAB --limit 20 # Different project, more results
devflow search "auth" --interactive # Interactive mode - select ticket to start work
devflow search "bug" -i # Short form of --interactiveSearches ticket summaries and descriptions with optional filters. Use --interactive to select a ticket and immediately start working on it.
devflow statusShows your current branch and working directory status.
Configuration file location: ~/.devflow/config.toml
For Jira Cloud with GitLab:
[jira]
url = "https://your-company.atlassian.net"
email = "you@company.com"
project_key = "PROJ"
[jira.auth_method]
type = "api_token"
token = "your-api-token"
[git]
provider = "gitlab"
base_url = "https://git.company.com"
token = "your-gitlab-token"
[preferences]
branch_prefix = "feat"
default_transition = "In Progress"For Jira Data Center/Server with GitHub:
[jira]
url = "https://jira.company.com"
email = "you@company.com"
project_key = "PROJ"
[jira.auth_method]
type = "personal_access_token"
token = "your-personal-access-token"
[git]
provider = "github"
base_url = "https://api.github.com"
token = "your-github-token"
owner = "your-username"
repo = "your-repo"
[preferences]
branch_prefix = "feat"
default_transition = "In Progress"Jira Personal Access Token (Data Center/Server):
- Go to your Jira instance → Profile → Personal Access Tokens
- Click "Create token"
- Give it a name and set expiration
- Copy and use in
devflow init
Jira API Token (Cloud):
- Go to https://id.atlassian.com/manage-profile/security/api-tokens
- Click "Create API token"
- Give it a name
- Copy and use in
devflow init
GitLab Access Token:
- Go to GitLab → Settings → Access Tokens
- Create token with
apiscope - Copy and use in
devflow init
GitHub Personal Access Token:
- Go to GitHub → Settings → Developer settings → Personal access tokens → Generate new token
- Select
reposcope (full control of private repositories) - Copy and use in
devflow init
| Command | Description |
|---|---|
devflow init |
Set up configuration and credentials |
devflow start <ticket> |
Start work on a Jira ticket |
devflow status |
Show current branch and git status |
devflow list |
List all assigned Jira tickets |
devflow search <query> |
Search Jira tickets with filters |
devflow open [ticket] |
Open ticket or PR in browser |
devflow commit <message> |
Commit with automatic ticket reference |
devflow done |
Push, create MR, and update Jira |
devflow config <action> |
Manage configuration (show/set/validate/path) |
Instead of re-running devflow init to update your configuration, you can now use the config commands:
# View current configuration (with masked secrets)
devflow config show
# Update a specific value (e.g., if your Jira token expired)
devflow config set jira.token <new-token>
devflow config set jira.email <new-email>
devflow config set git.token <new-token>
# Validate your configuration by testing API connections
devflow config validate
# Get the path to your config file
devflow config pathAvailable config keys:
jira.url- Your Jira instance URLjira.email- Your Jira emailjira.token- Your Jira authentication tokenjira.project_key- Default project keygit.provider- Git provider (github/gitlab)git.base_url- Git instance URLgit.token- Git access tokengit.owner- GitHub repository ownergit.repo- GitHub repository namepreferences.branch_prefix- Default branch prefixpreferences.default_transition- Default Jira transition
DevFlow automatically creates branch names from ticket summaries:
- Format:
{prefix}/{TICKET-ID}/{description} - Uses underscores for spaces
- Filters special characters
- Limits to 5 words maximum
Examples:
- "Add user authentication" →
feat/WAB-1234/add_user_authentication - "Fix bug: login doesn't work!" →
fix/PROJ-999/fix_bug_login_doesnt_work
- Rust 1.70+
- Git 2.0+
cargo build --releasecargo testRun devflow init to set up your credentials.
Make sure you're inside a Git repository when running commands.
Ensure your SSH keys are set up and added to ssh-agent:
ssh-add ~/.ssh/id_rsa- Verify your API token is valid
- Check that your email matches your Jira account
- Ensure you have permissions to update ticket statuses
DevFlow works with both Jira Cloud and Jira Data Center/Server instances. The tool automatically uses the correct API version (/rest/api/latest/) which works with Personal Access Tokens on Data Center.
If you encounter API errors:
- For Jira Data Center/Server: Use Personal Access Token authentication
- For Jira Cloud: Use API Token authentication
- You can override the API version with:
JIRA_API_VERSION=2 devflow list
For troubleshooting API issues, enable debug logging with the --verbose flag:
devflow --verbose listOr use the environment variable:
DEVFLOW_DEBUG=1 devflow listThis shows detailed request/response information including:
- API URLs being called
- Request bodies (JQL queries, etc.)
- Response status codes
- Raw JSON responses (first 500 chars)
- Parsing errors with ticket data
- Credentials are stored in
~/.devflow/config.tomlwith 600 permissions - Never commit
config.tomlto version control - API tokens are used instead of passwords
- SSH keys are used for Git operations
Built by a developer tired of context switching between Jira tabs, Git commands, and GitLab UI. DevFlow brings the entire workflow into your terminal where you already spend most of your time.
Inspired by tools like ThePrimeagen's workflow automation philosophy: automate repetitive tasks and stay in the terminal.
MIT License - see LICENSE file for details
Contributions are welcome! Please feel free to submit a Pull Request.
Built with Rust by Ilia Goginashvili