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