{"id":40968910,"url":"https://github.com/eddieland/twig","last_synced_at":"2026-02-10T04:02:24.078Z","repository":{"id":310586006,"uuid":"989752577","full_name":"eddieland/twig","owner":"eddieland","description":"A Git-based developer productivity tool that enhances workflows by integrating git repository management with Jira issue tracking and GitHub pull request workflows.","archived":false,"fork":false,"pushed_at":"2026-02-06T23:15:24.000Z","size":7239,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-07T00:49:56.346Z","etag":null,"topics":["cli","devtools","git","jira","rust"],"latest_commit_sha":null,"homepage":"https://github.com/eddieland/twig","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eddieland.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-05-24T18:51:21.000Z","updated_at":"2026-02-06T23:15:28.000Z","dependencies_parsed_at":"2025-08-26T16:45:22.751Z","dependency_job_id":"b75591f5-707c-49f1-ab55-fccf72604afc","html_url":"https://github.com/eddieland/twig","commit_stats":null,"previous_names":["eddieland/twig"],"tags_count":39,"template":false,"template_full_name":null,"purl":"pkg:github/eddieland/twig","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddieland%2Ftwig","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddieland%2Ftwig/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddieland%2Ftwig/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddieland%2Ftwig/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eddieland","download_url":"https://codeload.github.com/eddieland/twig/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddieland%2Ftwig/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29290464,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-10T03:42:42.660Z","status":"ssl_error","status_checked_at":"2026-02-10T03:42:41.897Z","response_time":65,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","devtools","git","jira","rust"],"created_at":"2026-01-22T06:31:19.375Z","updated_at":"2026-02-10T04:02:24.072Z","avatar_url":"https://github.com/eddieland.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Twig\n\n[![CI](https://github.com/eddieland/twig/actions/workflows/ci.yml/badge.svg)](https://github.com/eddieland/twig/actions/workflows/ci.yml)\n[![Latest Release](https://img.shields.io/github/v/release/eddieland/twig?display_name=tag\u0026sort=semver)](https://github.com/eddieland/twig/releases/latest)\n\nTwig is a Git-first productivity tool that keeps branches, issues, and pull requests aligned across everything you are building. It was shaped around stacked pull-request workflows: make a change on one branch, and Twig will help you carry it forward to each dependent branch by rebasing in sequence. Multi-repo management, worktrees, and Jira or GitHub integrations sit on top of that core experience so you can keep related work in sync without babysitting each branch.\n\n## Overview\n\nTwig coordinates branch management, issue tracking, and review work across one or many repositories. The CLI standardizes branch naming, keeps metadata alongside each repo, and offers batch operations when you need to run the same Git command everywhere.\n\n## Highlights\n\n- Multi-repository management keeps related projects marching together.\n- Worktree helpers make it easy to hop between branches without disturbing your main checkout.\n- Jira integration links branches to issues and can transition cards as work progresses.\n- GitHub integration surfaces pull-request status and review information alongside your local state.\n- Batch commands let you fetch, execute shell commands, or check repository health in one go.\n- Credential helpers set up API access using familiar `.netrc` entries.\n\n## Platform notes\n\nTwig is written in Rust (Edition 2024). The minimum supported Rust version is 1.91.0. We develop primarily on Ubuntu 24.04, with macOS and Windows builds available as well.\n\n## Installation\n\n### Pre-built Binaries (Recommended)\n\nThe easiest way to install Twig is to download a pre-built binary from the [GitHub Releases](https://github.com/eddieland/twig/releases) page.\n\n1. Navigate to the [latest release](https://github.com/eddieland/twig/releases/latest)\n2. Download the appropriate binary for your platform:\n   - `twig-linux-x86_64-v*.tar.gz` for Linux\n   - `twig-macos-x86_64-v*.tar.gz` for macOS\n   - `twig-windows-x86_64-v*.zip` for Windows\n3. Verify the download (recommended):\n\n   ```bash\n   # Verify checksum (Linux/macOS)\n   sha256sum -c twig-*-v*.tar.gz.sha256\n   ```\n\n4. Extract and install:\n\n**Linux/macOS:**\n\n```bash\ntar -xzf twig-*-v*.tar.gz\nchmod +x twig\nsudo mv twig /usr/local/bin/\n```\n\n**Windows:**\n\n```powershell\n# Extract the zip file, then move to a PATH location\nMove-Item -Path twig.exe -Destination \"$env:LOCALAPPDATA\\Microsoft\\WindowsApps\\\"\n```\n\n### Build from Source\n\nIf you want to build Twig from source:\n\n```bash\n# Clone the repository\ngit clone https://github.com/eddieland/twig.git\ncd twig\n\n# Build with Cargo\ncargo build --release\n\n# Install locally\ncargo install --path twig-cli\n```\n\n**Requirements:**\n\n- Rust 1.91.0 or later\n- Git\n\n### Verify Installation\n\n```bash\ntwig --version\ntwig --help\n```\n\n### For Contributors\n\nIf you want to contribute to Twig, please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) file for detailed development setup instructions.\n\n## Basic Usage\n\nInitialize Twig in a working directory, then point it at the repositories you want to manage:\n\n```bash\ntwig init\ntwig git add /path/to/repo\ntwig git list\n```\n\nCreating worktrees keeps your stacks tidy while you iterate:\n\n```bash\ntwig worktree create feature/new-thing\ntwig worktree list\n```\n\nBatch commands help you stay current everywhere:\n\n```bash\ntwig git fetch --all\ntwig github pr status\n```\n\n### Managing a stack of pull requests\n\nWhen you open a Jira issue or decide to split a change across several branches, Twig can record the order of those branches and keep them synchronized. Suppose you start a branch from a Jira ticket and later build on top of it:\n\n```bash\ntwig switch PROJ-123\ntwig commit\n\ntwig switch feature/new-ui\ngit commit -am \"Implement UI\"\n```\n\nIf you need to update the base branch after review feedback, run:\n\n```bash\ntwig cascade\n```\n\nTwig will walk the dependency chain, rebasing `feature/new-ui` on top of the refreshed PROJ-123 branch. Each pull request stays reviewable, and your local branches reflect the order you intended.\n\n## Command Structure\n\n```\ntwig\n├── branch (br)             # Manage custom branch dependencies\n│   ├── depend\n│   ├── remove-dep\n│   └── root\n│       ├── add\n│       ├── list (ls)\n│       └── remove (rm)\n├── cascade (casc)          # Rebase the current branch stack\n├── commit                  # Create Jira-backed commits\n├── creds                   # Credential management\n│   ├── check\n│   └── setup\n├── dashboard (dash, v)     # Unified view of branches, PRs, and issues\n├── fixup (fix)             # Interactive fixup commit selector\n├── git (g)                 # Git repository registry\n│   ├── add\n│   ├── exec\n│   ├── fetch\n│   ├── list (ls)\n│   ├── remove (rm)\n│   └── stale-branches (stale)\n├── github (gh)             # GitHub integration\n│   ├── check\n│   ├── checks (ci)\n│   ├── open\n│   └── pr\n│       ├── link\n│       ├── list (ls)\n│       └── status (st)\n├── init                    # Initialize Twig configuration\n├── jira (j)                # Jira integration\n│   ├── open\n│   ├── create-branch\n│   ├── link-branch\n│   ├── transition\n│   ├── view\n│   └── config\n├── rebase (rb)             # Rebase current branch onto its parents\n├── self                    # Twig maintenance utilities\n│   ├── update (upgrade)\n│   ├── diagnose (diag)\n│   ├── completion\n│   └── plugins (list-plugins)\n├── switch (sw)             # Intelligent branch switching\n├── sync                    # Auto-link branches to Jira issues and PRs\n├── tree (t)                # Visualize the dependency tree\n└── worktree (wt)           # Git worktree management\n    ├── clean\n    ├── create (new)\n    └── list (ls)\n```\n\n## Environment Variables\n\nTwig supports several environment variables to customize its behavior. For the best experience, we recommend setting these variables in your shell profile file (`.bashrc`, `.zshrc`, or equivalent).\n\n### Jira Integration\n\n#### JIRA_HOST\n\nSpecifies the URL of your Jira instance.\n\n- **Example**: `export JIRA_HOST=\"https://your-company.atlassian.net\"`\n\n**Authentication**: When `JIRA_HOST` is set, Twig will look for credentials in your `.netrc` file matching this hostname first. If not found, it falls back to looking for `atlassian.net` credentials.\n\n**API Requests**: All Jira API requests will be sent to this host, allowing you to:\n\n- View issues: `twig jira view PROJ-123`\n- Create branches from issues: `twig jira create-branch PROJ-123`\n- Transition issues: `twig jira transition PROJ-123 \"In Progress\"`\n- Link branches: `twig jira link-branch PROJ-123 feature/some-work`\n\nWe recommend setting this in your shell profile to ensure it's always available:\n\n```bash\n# Add to your .bashrc, .zshrc, or equivalent\nexport JIRA_HOST=\"https://your-company.atlassian.net\"\n```\n\n### XDG Base Directory Specification\n\nTwig follows the [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) for storing configuration and data files. You can customize these locations with the following variables:\n\n#### XDG_CONFIG_HOME\n\nSpecifies the base directory for configuration files.\n\n- **Default**: `$HOME/.config`\n- **Example**: `export XDG_CONFIG_HOME=\"$HOME/.my-config\"`\n\n#### XDG_DATA_HOME\n\nSpecifies the base directory for data files.\n\n- **Default**: `$HOME/.local/share`\n- **Example**: `export XDG_DATA_HOME=\"$HOME/.my-data\"`\n\n#### XDG_CACHE_HOME\n\nSpecifies the base directory for cache files.\n\n- **Default**: `$HOME/.cache`\n- **Example**: `export XDG_CACHE_HOME=\"$HOME/.my-cache\"`\n\n## Aliases\n\n```bash\n# Top-level command aliases\nalias tt='twig tree'           # Show branch tree\nalias tsw='twig switch'        # Magic branch switching\nalias td='twig dashboard'      # Show dashboard\n\n# Git subcommand aliases\nalias tgf='twig git fetch --all' # Fetch all repositories\n\n# Worktree subcommand aliases\nalias twl='twig worktree list'   # List worktrees\n\n# Jira subcommand aliases\nalias tjv='twig jira view'     # View Jira issue\n\n# GitHub subcommand aliases\nalias tgps='twig github pr status' # Check PR status\n```\n\nThese aliases can significantly reduce typing and make common twig operations more convenient.\n\n## Development Resources\n\nFor information about development workflows, Makefile usage, and snapshot testing, please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) file.\n\n## Windows Usage\n\nWhile Twig primarily targets Linux and macOS, it can also be used on Windows with some considerations:\n\n### File Path Handling\n\nWindows uses different path normalization techniques compared to Unix-based systems, which can sometimes cause issues:\n\n- Windows uses backslashes (`\\`) as path separators, while Unix uses forward slashes (`/`)\n- Windows paths may include drive letters (e.g., `C:\\`)\n- Case sensitivity differs between Windows (case-insensitive) and Unix (case-sensitive)\n\nThese differences can lead to unexpected behavior when working with paths across different platforms, especially in a Git context where repositories might be accessed from multiple operating systems.\n\n### Troubleshooting Windows-Specific Issues\n\nIf you encounter issues when using Twig on Windows:\n\n1. **Enable verbose logging**: Run commands with the `--verbose` flag to get more detailed output\n\n   ```\n   twig --verbose git list\n   ```\n\n2. **Provide crash reports**: If Twig crashes, it will generate a crash report. Please include this when reporting issues:\n\n   ```\n   # Location of crash reports\n   %USERPROFILE%\\.local\\share\\twig\\crash-reports\\\n   ```\n\n3. **Include panic dumps**: If you encounter a panic, the error message contains valuable information for debugging. Copy the entire output when reporting issues.\n\n4. **Check path normalization**: If you're experiencing path-related issues, try using forward slashes even on Windows, as Git often works better with Unix-style paths.\n\nProviding these details when reporting Windows-specific issues will help us identify and fix problems more effectively.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feddieland%2Ftwig","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feddieland%2Ftwig","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feddieland%2Ftwig/lists"}