[{"data":1,"prerenderedAt":628},["ShallowReactive",2],{"navigation_en":3,"-docs-uxd-guides-review-a-pull-request":150,"-docs-uxd-guides-review-a-pull-request-surround":623},{"docs":4},[5,41,86,121],{"title":6,"icon":7,"path":8,"stem":9,"children":10,"page":7},"Getting Started",false,"\u002Fdocs\u002Fuxd\u002Fgetting-started","docs\u002Fuxd\u002Fgetting-started",[11,16,21,26,31,36],{"title":12,"path":13,"stem":14,"icon":15},"Introduction","\u002Fdocs\u002Fuxd\u002Fgetting-started\u002Fintroduction","docs\u002Fuxd\u002Fgetting-started\u002F01.introduction","i-lucide-house",{"title":17,"path":18,"stem":19,"icon":20},"Installation","\u002Fdocs\u002Fuxd\u002Fgetting-started\u002Finstallation","docs\u002Fuxd\u002Fgetting-started\u002F02.installation","i-lucide-download",{"title":22,"path":23,"stem":24,"icon":25},"Quick Start","\u002Fdocs\u002Fuxd\u002Fgetting-started\u002Fquick-start","docs\u002Fuxd\u002Fgetting-started\u002F03.quick-start","i-lucide-zap",{"title":27,"path":28,"stem":29,"icon":30},"How It Works","\u002Fdocs\u002Fuxd\u002Fgetting-started\u002Fhow-it-works","docs\u002Fuxd\u002Fgetting-started\u002F04.how-it-works","i-lucide-workflow",{"title":32,"path":33,"stem":34,"icon":35},"Refs","\u002Fdocs\u002Fuxd\u002Fgetting-started\u002Frefs","docs\u002Fuxd\u002Fgetting-started\u002F05.refs","i-lucide-git-branch",{"title":37,"path":38,"stem":39,"icon":40},"Workspaces & Worktrees","\u002Fdocs\u002Fuxd\u002Fgetting-started\u002Fworkspaces","docs\u002Fuxd\u002Fgetting-started\u002F06.workspaces","i-lucide-folder-tree",{"title":42,"icon":7,"path":43,"stem":44,"children":45,"page":7},"Guides","\u002Fdocs\u002Fuxd\u002Fguides","docs\u002Fuxd\u002Fguides",[46,51,56,61,66,71,76,81],{"title":47,"path":48,"stem":49,"icon":50},"Review a Pull Request","\u002Fdocs\u002Fuxd\u002Fguides\u002Freview-a-pull-request","docs\u002Fuxd\u002Fguides\u002F01.review-a-pull-request","i-lucide-git-pull-request",{"title":52,"path":53,"stem":54,"icon":55},"Run Dev Servers in Parallel","\u002Fdocs\u002Fuxd\u002Fguides\u002Frun-dev-servers-in-parallel","docs\u002Fuxd\u002Fguides\u002F02.run-dev-servers-in-parallel","i-lucide-plug",{"title":57,"path":58,"stem":59,"icon":60},"Seed Local Files","\u002Fdocs\u002Fuxd\u002Fguides\u002Fseed-local-files","docs\u002Fuxd\u002Fguides\u002F03.seed-local-files","i-lucide-sprout",{"title":62,"path":63,"stem":64,"icon":65},"Refresh a Workspace","\u002Fdocs\u002Fuxd\u002Fguides\u002Frefresh-a-workspace","docs\u002Fuxd\u002Fguides\u002F04.refresh-a-workspace","i-lucide-refresh-cw",{"title":67,"path":68,"stem":69,"icon":70},"Clean Up Workspaces","\u002Fdocs\u002Fuxd\u002Fguides\u002Fclean-up-workspaces","docs\u002Fuxd\u002Fguides\u002F05.clean-up-workspaces","i-lucide-trash-2",{"title":72,"path":73,"stem":74,"icon":75},"Script with uxd","\u002Fdocs\u002Fuxd\u002Fguides\u002Fscript-with-uxd","docs\u002Fuxd\u002Fguides\u002F06.script-with-uxd","i-lucide-braces",{"title":77,"path":78,"stem":79,"icon":80},"Install Shell Completions","\u002Fdocs\u002Fuxd\u002Fguides\u002Fshell-completions","docs\u002Fuxd\u002Fguides\u002F07.shell-completions","i-lucide-keyboard",{"title":82,"path":83,"stem":84,"icon":85},"Troubleshooting","\u002Fdocs\u002Fuxd\u002Fguides\u002Ftroubleshooting","docs\u002Fuxd\u002Fguides\u002F08.troubleshooting","i-lucide-stethoscope",{"title":87,"icon":7,"path":88,"stem":89,"children":90,"page":7},"CLI Reference","\u002Fdocs\u002Fuxd\u002Fcli","docs\u002Fuxd\u002Fcli",[91,96,101,106,111,116],{"title":92,"path":93,"stem":94,"icon":95},"Command Grammar","\u002Fdocs\u002Fuxd\u002Fcli\u002Foverview","docs\u002Fuxd\u002Fcli\u002F01.overview","i-lucide-terminal",{"title":97,"path":98,"stem":99,"icon":100},"Workspace Verbs","\u002Fdocs\u002Fuxd\u002Fcli\u002Fworkspace-verbs","docs\u002Fuxd\u002Fcli\u002F02.workspace-verbs","i-lucide-folder-git-2",{"title":102,"path":103,"stem":104,"icon":105},"Project Verbs","\u002Fdocs\u002Fuxd\u002Fcli\u002Fproject-verbs","docs\u002Fuxd\u002Fcli\u002F03.project-verbs","i-lucide-boxes",{"title":107,"path":108,"stem":109,"icon":110},"Top-Level Verbs","\u002Fdocs\u002Fuxd\u002Fcli\u002Ftop-level-verbs","docs\u002Fuxd\u002Fcli\u002F04.top-level-verbs","i-lucide-wrench",{"title":112,"path":113,"stem":114,"icon":115},"Global Flags","\u002Fdocs\u002Fuxd\u002Fcli\u002Fglobal-flags","docs\u002Fuxd\u002Fcli\u002F05.global-flags","i-lucide-flag",{"title":117,"path":118,"stem":119,"icon":120},"Exit Codes","\u002Fdocs\u002Fuxd\u002Fcli\u002Fexit-codes","docs\u002Fuxd\u002Fcli\u002F06.exit-codes","i-lucide-circle-alert",{"title":122,"icon":7,"path":123,"stem":124,"children":125,"page":7},"Configuration","\u002Fdocs\u002Fuxd\u002Fconfiguration","docs\u002Fuxd\u002Fconfiguration",[126,131,136,141,145],{"title":127,"path":128,"stem":129,"icon":130},"Overview","\u002Fdocs\u002Fuxd\u002Fconfiguration\u002Foverview","docs\u002Fuxd\u002Fconfiguration\u002F01.overview","i-lucide-settings",{"title":132,"path":133,"stem":134,"icon":135},"Project File","\u002Fdocs\u002Fuxd\u002Fconfiguration\u002Fproject-file","docs\u002Fuxd\u002Fconfiguration\u002F02.project-file","i-lucide-file-code",{"title":137,"path":138,"stem":139,"icon":140},"Commands & Hooks","\u002Fdocs\u002Fuxd\u002Fconfiguration\u002Fcommands-and-hooks","docs\u002Fuxd\u002Fconfiguration\u002F03.commands-and-hooks","i-lucide-play",{"title":142,"path":143,"stem":144,"icon":75},"Environment & Templates","\u002Fdocs\u002Fuxd\u002Fconfiguration\u002Fenvironment-and-templates","docs\u002Fuxd\u002Fconfiguration\u002F04.environment-and-templates",{"title":146,"path":147,"stem":148,"icon":149},"Editors","\u002Fdocs\u002Fuxd\u002Fconfiguration\u002Feditors","docs\u002Fuxd\u002Fconfiguration\u002F05.editors","i-lucide-app-window",{"id":151,"title":47,"body":152,"description":615,"extension":616,"links":617,"meta":618,"navigation":619,"path":48,"seo":620,"stem":49,"__hash__":622},"docs_docs\u002Fdocs\u002Fuxd\u002Fguides\u002F01.review-a-pull-request.md",{"type":153,"value":154,"toc":606},"minimark",[155,164,176,576,580,589,602],[156,157,158,159,163],"p",{},"Reading a diff tells you what changed. Running the branch tells you whether it\nworks. This is the workflow ",[160,161,162],"code",{},"uxd"," was built for.",[156,165,166,167,171,172,175],{},"You need a ",[168,169,170],"a",{"href":128},"configured project"," with a\n",[160,173,174],{},"[commands.dev]"," entry, and the PR number.",[177,178,180,185,213,220,223,237,246,250,269,283,291,294,318,326,330,361,379,385,392,410,414,485,503,507,510,526,546,550,567],"steps",{"level":179},"2",[181,182,184],"h2",{"id":183},"open-the-pr-in-your-editor","Open the PR in your editor",[186,187,192],"pre",{"className":188,"code":189,"language":190,"meta":191,"style":191},"language-bash shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","uxd my-project 42 code\n","bash","",[160,193,194],{"__ignoreMap":191},[195,196,199,202,206,210],"span",{"class":197,"line":198},"line",1,[195,200,162],{"class":201},"szw1H",[195,203,205],{"class":204},"semJd"," my-project",[195,207,209],{"class":208},"ssYy9"," 42",[195,211,212],{"class":204}," code\n",[156,214,215,216,219],{},"This resolves ",[160,217,218],{},"42"," as a pull request, materializes the worktree if it does not\nexist, and launches your configured editor. Running it again is cheap — the\nworkspace is reused.",[156,221,222],{},"Have a link rather than a number? Paste the whole URL:",[186,224,226],{"className":188,"code":225,"language":190,"meta":191,"style":191},"uxd https:\u002F\u002Fgithub.com\u002Fmy-org\u002Fmy-project\u002Fpull\u002F42 code\n",[160,227,228],{"__ignoreMap":191},[195,229,230,232,235],{"class":197,"line":198},[195,231,162],{"class":201},[195,233,234],{"class":204}," https:\u002F\u002Fgithub.com\u002Fmy-org\u002Fmy-project\u002Fpull\u002F42",[195,236,212],{"class":204},[156,238,239,241,242,245],{},[160,240,162],{}," matches the URL to the project by host, owner, and repository name, and\nconsumes the ",[160,243,244],{},"\u002Fpull\u002F42"," segment as the ref.",[181,247,249],{"id":248},"run-it","Run it",[186,251,253],{"className":188,"code":252,"language":190,"meta":191,"style":191},"uxd my-project 42 run dev\n",[160,254,255],{"__ignoreMap":191},[195,256,257,259,261,263,266],{"class":197,"line":198},[195,258,162],{"class":201},[195,260,205],{"class":204},[195,262,209],{"class":208},[195,264,265],{"class":204}," run",[195,267,268],{"class":204}," dev\n",[156,270,271,272,274,275,278,279,282],{},"Same workspace. ",[160,273,162],{}," runs ",[160,276,277],{},"[setup]"," first — installing dependencies only if\nthe files in ",[160,280,281],{},"setup.cache_key"," changed — then starts your dev server on the\nworkspace's own port.",[186,284,289],{"className":285,"code":287,"language":288},[286],"language-text","→ worktree ready (reused)\n→ running setup\n...\nlistening on 3053\n","text",[160,290,287],{"__ignoreMap":191},[156,292,293],{},"Need a different port for this run only?",[186,295,297],{"className":188,"code":296,"language":190,"meta":191,"style":191},"uxd my-project 42 run dev --port 6000\n",[160,298,299],{"__ignoreMap":191},[195,300,301,303,305,307,309,312,315],{"class":197,"line":198},[195,302,162],{"class":201},[195,304,205],{"class":204},[195,306,209],{"class":208},[195,308,265],{"class":204},[195,310,311],{"class":204}," dev",[195,313,314],{"class":208}," --port",[195,316,317],{"class":208}," 6000\n",[319,320,321,322,325],"tip",{},"Two PRs open at once? Run both. Each workspace holds its own port block, so the\nservers do not collide. See\n",[168,323,324],{"href":53},"Run dev servers in parallel",".",[181,327,329],{"id":328},"read-the-diff","Read the diff",[186,331,333],{"className":188,"code":332,"language":190,"meta":191,"style":191},"uxd my-project 42 diff\nuxd my-project 42 diff --stat\n",[160,334,335,346],{"__ignoreMap":191},[195,336,337,339,341,343],{"class":197,"line":198},[195,338,162],{"class":201},[195,340,205],{"class":204},[195,342,209],{"class":208},[195,344,345],{"class":204}," diff\n",[195,347,349,351,353,355,358],{"class":197,"line":348},2,[195,350,162],{"class":201},[195,352,205],{"class":204},[195,354,209],{"class":208},[195,356,357],{"class":204}," diff",[195,359,360],{"class":208}," --stat\n",[156,362,363,364,367,368,371,372,374,375,378],{},"With ",[160,365,366],{},"gh"," installed and authenticated, this renders ",[160,369,370],{},"gh pr diff"," against the\ntrue PR base. Without ",[160,373,366],{},", it falls back to ",[160,376,377],{},"git diff \u003Cmerge-base>...HEAD","\ninside the worktree.",[186,380,383],{"className":381,"code":382,"language":288},[286]," login.txt | 1 +\n 1 file changed, 1 insertion(+)\n",[160,384,382],{"__ignoreMap":191},[156,386,387,388,391],{},"Prefer your difftool? ",[160,389,390],{},"--tool"," always runs locally:",[186,393,395],{"className":188,"code":394,"language":190,"meta":191,"style":191},"uxd my-project 42 diff --tool\n",[160,396,397],{"__ignoreMap":191},[195,398,399,401,403,405,407],{"class":197,"line":198},[195,400,162],{"class":201},[195,402,205],{"class":204},[195,404,209],{"class":208},[195,406,357],{"class":204},[195,408,409],{"class":208}," --tool\n",[181,411,413],{"id":412},"poke-at-it","Poke at it",[186,415,417],{"className":188,"code":416,"language":190,"meta":191,"style":191},"uxd my-project 42 shell                      # interactive shell, uxd env exported\nuxd my-project 42 exec -- pnpm test          # one-off command\nuxd my-project 42 exec --no-setup -- git log --oneline -5\n",[160,418,419,434,457],{"__ignoreMap":191},[195,420,421,423,425,427,430],{"class":197,"line":198},[195,422,162],{"class":201},[195,424,205],{"class":204},[195,426,209],{"class":208},[195,428,429],{"class":204}," shell",[195,431,433],{"class":432},"sq92B","                      # interactive shell, uxd env exported\n",[195,435,436,438,440,442,445,448,451,454],{"class":197,"line":348},[195,437,162],{"class":201},[195,439,205],{"class":204},[195,441,209],{"class":208},[195,443,444],{"class":204}," exec",[195,446,447],{"class":208}," --",[195,449,450],{"class":204}," pnpm",[195,452,453],{"class":204}," test",[195,455,456],{"class":432},"          # one-off command\n",[195,458,460,462,464,466,468,471,473,476,479,482],{"class":197,"line":459},3,[195,461,162],{"class":201},[195,463,205],{"class":204},[195,465,209],{"class":208},[195,467,444],{"class":204},[195,469,470],{"class":208}," --no-setup",[195,472,447],{"class":208},[195,474,475],{"class":204}," git",[195,477,478],{"class":204}," log",[195,480,481],{"class":208}," --oneline",[195,483,484],{"class":208}," -5\n",[156,486,487,490,491,494,495,498,499,502],{},[160,488,489],{},"shell"," exports the full uxd environment — ",[160,492,493],{},"$UXD_PORT",", ",[160,496,497],{},"$UXD_PATH",",\n",[160,500,501],{},"$UXD_DATA_DIR"," — so anything you run by hand sees the same values your\nconfigured commands do.",[181,504,506],{"id":505},"pick-up-new-commits","Pick up new commits",[156,508,509],{},"The author pushed a fix. Bring the workspace up to date:",[186,511,513],{"className":188,"code":512,"language":190,"meta":191,"style":191},"uxd my-project 42 sync\n",[160,514,515],{"__ignoreMap":191},[195,516,517,519,521,523],{"class":197,"line":198},[195,518,162],{"class":201},[195,520,205],{"class":204},[195,522,209],{"class":208},[195,524,525],{"class":204}," sync\n",[156,527,528,531,532,494,535,538,539,542,543,325],{},[160,529,530],{},"sync"," refuses to touch a dirty tree. If you have local edits, decide what\nhappens to them: ",[160,533,534],{},"--stash",[160,536,537],{},"--discard",", or ",[160,540,541],{},"--fresh"," to rebuild from scratch.\nSee ",[168,544,545],{"href":63},"Refresh a workspace",[181,547,549],{"id":548},"clean-up-after-the-merge","Clean up after the merge",[186,551,553],{"className":188,"code":552,"language":190,"meta":191,"style":191},"uxd my-project clean --merged\n",[160,554,555],{"__ignoreMap":191},[195,556,557,559,561,564],{"class":197,"line":198},[195,558,162],{"class":201},[195,560,205],{"class":204},[195,562,563],{"class":204}," clean",[195,565,566],{"class":208}," --merged\n",[156,568,569,572,573,325],{},[160,570,571],{},"clean"," prints a plan and asks before deleting. Run it whenever your workspace\nlist gets long — or make it a habit on Fridays. See\n",[168,574,575],{"href":68},"Clean up workspaces",[181,577,579],{"id":578},"reviewing-a-fork-pr","Reviewing a fork PR",[156,581,582,583,585,586,588],{},"Fork pull requests work the same way. When ",[160,584,366],{}," is available, ",[160,587,162],{}," wires\npush-back for you, so commits you make in the workspace can be pushed to the\ncontributor's branch.",[156,590,591,592,594,595,598,599,325],{},"Without ",[160,593,366],{},", checkout of ",[160,596,597],{},"refs\u002Fpull\u002F\u003Cn>\u002Fhead"," still works against GitHub and\nGitHub Enterprise — you just lose the PR metadata and push-back wiring. Check\nwhat you have with ",[160,600,601],{},"uxd doctor",[603,604,605],"style",{},"html pre.shiki code .szw1H, html code.shiki .szw1H{--shiki-light:#702C00;--shiki-default:#702C00;--shiki-dark:#FFB757}html pre.shiki code .semJd, html code.shiki .semJd{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#ADDCFF}html pre.shiki code .ssYy9, html code.shiki .ssYy9{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#91CBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sq92B, html code.shiki .sq92B{--shiki-light:#66707B;--shiki-default:#66707B;--shiki-dark:#BDC4CC}",{"title":191,"searchDepth":348,"depth":348,"links":607},[608,609,610,611,612,613,614],{"id":183,"depth":348,"text":184},{"id":248,"depth":348,"text":249},{"id":328,"depth":348,"text":329},{"id":412,"depth":348,"text":413},{"id":505,"depth":348,"text":506},{"id":548,"depth":348,"text":549},{"id":578,"depth":348,"text":579},"Take a PR from a link to a running app you can click through, then dispose of it when it merges.","md",null,{},{"icon":50},{"title":47,"description":621},"Use uxd to materialize a pull request into a runnable workspace — open it in your editor, run its dev server, read its diff, and clean up after merge.","P5qvh9Ge1xdONAwzBbGaBrHdpDdP86Be2k0dekuyXB8",[624,626],{"title":37,"path":38,"stem":39,"description":625,"icon":40,"children":-1},"What a uxd workspace is, how ports keep them isolated, and the git worktree sharp edges worth knowing before you hit them.",{"title":52,"path":53,"stem":54,"description":627,"icon":55,"children":-1},"Configure ports so several workspaces can run at the same time without colliding.",1789131074426]