{"id":45722124,"url":"https://github.com/nvandessel/frond","last_synced_at":"2026-03-02T04:00:32.884Z","repository":{"id":340491011,"uuid":"1164988412","full_name":"nvandessel/frond","owner":"nvandessel","description":"Agent-first CLI for managing stacked PRs with DAG dependencies on GitHub.","archived":false,"fork":false,"pushed_at":"2026-03-01T03:35:58.000Z","size":206,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-01T04:27:33.891Z","etag":null,"topics":["cli","dag","developer-tools","git","github","golang","pull-requests","stacked-prs"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nvandessel.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"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":"2026-02-23T17:49:41.000Z","updated_at":"2026-03-01T03:36:00.000Z","dependencies_parsed_at":"2026-03-01T03:03:59.762Z","dependency_job_id":null,"html_url":"https://github.com/nvandessel/frond","commit_stats":null,"previous_names":["nvandessel/frond"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/nvandessel/frond","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nvandessel%2Ffrond","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nvandessel%2Ffrond/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nvandessel%2Ffrond/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nvandessel%2Ffrond/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nvandessel","download_url":"https://codeload.github.com/nvandessel/frond/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nvandessel%2Ffrond/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29992286,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-02T01:47:34.672Z","status":"online","status_checked_at":"2026-03-02T02:00:07.342Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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","dag","developer-tools","git","github","golang","pull-requests","stacked-prs"],"created_at":"2026-02-25T06:25:20.343Z","updated_at":"2026-03-02T04:00:32.800Z","avatar_url":"https://github.com/nvandessel.png","language":"Go","readme":"# frond 🌴\n\n[![CI](https://github.com/nvandessel/frond/actions/workflows/ci.yml/badge.svg)](https://github.com/nvandessel/frond/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/nvandessel/frond/branch/main/graph/badge.svg)](https://codecov.io/gh/nvandessel/frond)\n[![Go Report Card](https://goreportcard.com/badge/github.com/nvandessel/frond)](https://goreportcard.com/report/github.com/nvandessel/frond)\n[![Release](https://img.shields.io/github/v/release/nvandessel/frond)](https://github.com/nvandessel/frond/releases/latest)\n\nMinimal, agent-first CLI for managing stacked PRs with DAG dependencies on GitHub. \n\nSingle binary. Zero config.\n\n## Install\n\n**Homebrew** (macOS/Linux):\n```bash\nbrew install nvandessel/frond/frond\n```\n\n**Binary download**: grab the latest from [GitHub Releases](https://github.com/nvandessel/frond/releases/latest).\n\n**From source**:\n```bash\ngo install github.com/nvandessel/frond@latest\n```\n\nRequires [git](https://git-scm.com/) and [gh](https://cli.github.com/) (authenticated).\n\n### Shell completions\n\n```bash\nfrond completion bash \u003e /etc/bash_completion.d/frond      # bash (Linux)\nfrond completion zsh \u003e \"${fpath[1]}/_frond\"                # zsh\nfrond completion fish \u003e ~/.config/fish/completions/frond.fish  # fish\n```\n\n## Usage\n\n```bash\nfrond new feature/auth                                        # create tracked branch\nfrond new auth/login --on feature/auth                        # child branch\nfrond new auth/e2e --on feature/auth --after auth/login       # with dependency\nfrond push -t \"Login flow\"                                    # push + create PR\nfrond status                                                  # show dependency graph\nfrond sync                                                    # fetch, cleanup merged, rebase\n```\n\n```\nmain\n├── feature/auth  #42\n│   ├── auth/login  #43  [ready]\n│   ├── auth/signup  #44  [ready]\n│   └── auth/e2e  (not pushed)  [blocked: auth/login, auth/signup]\n```\n\n## Commands\n\n| Command | Description |\n|---------|-------------|\n| `frond new \u003cname\u003e [--on \u003cparent\u003e] [--after \u003cdeps\u003e]` | Create tracked branch |\n| `frond push [-t title] [-b body] [--draft]` | Push + create/update PR |\n| `frond sync` | Fetch, detect merges, reparent, rebase |\n| `frond status [--json] [--fetch]` | Show dependency graph |\n| `frond track \u003cbranch\u003e --on \u003cparent\u003e [--after \u003cdeps\u003e]` | Track existing branch |\n| `frond untrack [\u003cbranch\u003e]` | Remove from tracking |\n\n`--json` on every command. Exit codes: 0 success, 1 error, 2 conflict.\n\n## Stacking patterns\n\n`--on` creates the git/PR hierarchy (deep stacking). `--after` creates logical dependencies (wide fan-out). Combine both for real-world use:\n\n```bash\nfrond new feature/payments        --on main\nfrond new pay/stripe-client       --on feature/payments\nfrond new pay/stripe-tests        --on pay/stripe-client                              # deep: stacks on stripe-client\nfrond new pay/db-schema           --on feature/payments\nfrond new pay/db-migrations       --on pay/db-schema                                  # deep: stacks on db-schema\nfrond new pay/api-handlers        --on feature/payments  --after pay/stripe-client,pay/db-schema    # wide: fan-out deps\nfrond new pay/e2e                 --on feature/payments  --after pay/api-handlers,pay/stripe-tests,pay/db-migrations\n```\n\n```\nmain\n└── feature/payments                        PR → main\n    ├── pay/stripe-client                   PR → feature/payments  [ready]\n    │   └── pay/stripe-tests                PR → pay/stripe-client  [ready]\n    ├── pay/db-schema                       PR → feature/payments  [ready]\n    │   └── pay/db-migrations               PR → pay/db-schema  [ready]\n    ├── pay/api-handlers                    PR → feature/payments  [blocked: stripe-client, db-schema]\n    └── pay/e2e                             PR → feature/payments  [blocked: api-handlers, stripe-tests, db-migrations]\n```\n\nWhen `pay/stripe-client` merges, `frond sync` reparents `pay/stripe-tests`, unblocks `pay/api-handlers`, and rebases what's ready.\n\n## Key concepts\n\n- **`--on`** sets the git parent (PR base). One per branch.\n- **`--after`** sets logical dependencies (merge ordering). Zero or more.\n- These are orthogonal — `--on` for PR targeting, `--after` for merge ordering.\n- State lives at `\u003cgit-common-dir\u003e/frond.json` — shared across worktrees, invisible to the working tree.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnvandessel%2Ffrond","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnvandessel%2Ffrond","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnvandessel%2Ffrond/lists"}