[{"data":1,"prerenderedAt":769},["ShallowReactive",2],{"navigation_en":3,"-docs-configuration-project-file":153,"-docs-configuration-project-file-surround":764},{"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":135,"body":155,"description":755,"extension":756,"links":757,"meta":758,"navigation":759,"path":136,"seo":760,"stem":137,"__hash__":763},"docs_configuration\u002Fdocs\u002Fconfiguration\u002F02.project-file.md",{"type":156,"value":157,"toc":748},"minimark",[158,167,172,351,355,440,454,458,531,548,553,567,614,683,700,706,710,721,741,744],[159,160,161,162,166],"p",{},"One file per project at ",[163,164,165],"code",{},"\u003Cconfig-dir>\u002F\u003Cproject>.toml",". The filename is the\nproject name.",[168,169,171],"h2",{"id":170},"a-complete-example","A complete example",[173,174,180],"pre",{"className":175,"code":176,"filename":177,"language":178,"meta":179,"style":179},"language-toml shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","repo = \"git@github.com:my-org\u002Fmy-project.git\"\ndefault_branch = \"main\"\neditor = \"zed\"\nports = 2\nbase_port = 5700\n\n[setup]\nrun = \"pnpm install --frozen-lockfile\"\ncache_key = [\"pnpm-lock.yaml\", \"**\u002Fpackage.json\"]\nseed_files = [\".env.local\"]\n\n[env]\nPORT = \"{port}\"\nAPI_PORT = \"{port+1}\"\n\n[commands.dev]\nrun = \"pnpm dev\"\n","~\u002F.uxd\u002Fmy-project.toml","toml","",[163,181,182,195,204,213,223,232,239,252,261,278,289,294,304,313,322,327,343],{"__ignoreMap":179},[183,184,187,191],"span",{"class":185,"line":186},"line",1,[183,188,190],{"class":189},"s7iLA","repo = ",[183,192,194],{"class":193},"semJd","\"git@github.com:my-org\u002Fmy-project.git\"\n",[183,196,198,201],{"class":185,"line":197},2,[183,199,200],{"class":189},"default_branch = ",[183,202,203],{"class":193},"\"main\"\n",[183,205,207,210],{"class":185,"line":206},3,[183,208,209],{"class":189},"editor = ",[183,211,212],{"class":193},"\"zed\"\n",[183,214,216,219],{"class":185,"line":215},4,[183,217,218],{"class":189},"ports = ",[183,220,222],{"class":221},"ssYy9","2\n",[183,224,226,229],{"class":185,"line":225},5,[183,227,228],{"class":189},"base_port = ",[183,230,231],{"class":221},"5700\n",[183,233,235],{"class":185,"line":234},6,[183,236,238],{"emptyLinePlaceholder":237},true,"\n",[183,240,242,245,249],{"class":185,"line":241},7,[183,243,244],{"class":189},"[",[183,246,248],{"class":247},"szw1H","setup",[183,250,251],{"class":189},"]\n",[183,253,255,258],{"class":185,"line":254},8,[183,256,257],{"class":189},"run = ",[183,259,260],{"class":193},"\"pnpm install --frozen-lockfile\"\n",[183,262,264,267,270,273,276],{"class":185,"line":263},9,[183,265,266],{"class":189},"cache_key = [",[183,268,269],{"class":193},"\"pnpm-lock.yaml\"",[183,271,272],{"class":189},", ",[183,274,275],{"class":193},"\"**\u002Fpackage.json\"",[183,277,251],{"class":189},[183,279,281,284,287],{"class":185,"line":280},10,[183,282,283],{"class":189},"seed_files = [",[183,285,286],{"class":193},"\".env.local\"",[183,288,251],{"class":189},[183,290,292],{"class":185,"line":291},11,[183,293,238],{"emptyLinePlaceholder":237},[183,295,297,299,302],{"class":185,"line":296},12,[183,298,244],{"class":189},[183,300,301],{"class":247},"env",[183,303,251],{"class":189},[183,305,307,310],{"class":185,"line":306},13,[183,308,309],{"class":189},"PORT = ",[183,311,312],{"class":193},"\"{port}\"\n",[183,314,316,319],{"class":185,"line":315},14,[183,317,318],{"class":189},"API_PORT = ",[183,320,321],{"class":193},"\"{port+1}\"\n",[183,323,325],{"class":185,"line":324},15,[183,326,238],{"emptyLinePlaceholder":237},[183,328,330,332,335,338,341],{"class":185,"line":329},16,[183,331,244],{"class":189},[183,333,334],{"class":247},"commands",[183,336,337],{"class":189},".",[183,339,340],{"class":247},"dev",[183,342,251],{"class":189},[183,344,346,348],{"class":185,"line":345},17,[183,347,257],{"class":189},[183,349,350],{"class":193},"\"pnpm dev\"\n",[168,352,354],{"id":353},"repository","Repository",[356,357,358,374],"table",{},[359,360,361],"thead",{},[362,363,364,368,371],"tr",{},[365,366,367],"th",{},"Key",[365,369,370],{},"Type",[365,372,373],{},"Default",[375,376,377,395,410,424],"tbody",{},[362,378,379,385,388],{},[380,381,382],"td",{},[163,383,384],{},"repo",[380,386,387],{},"string",[380,389,390,394],{},[391,392,393],"strong",{},"required"," — ssh or https URL",[362,396,397,402,405],{},[380,398,399],{},[163,400,401],{},"repo_path",[380,403,404],{},"path",[380,406,407],{},[163,408,409],{},"{root}\u002F{project}\u002Frepo",[362,411,412,417,419],{},[380,413,414],{},[163,415,416],{},"worktrees_path",[380,418,404],{},[380,420,421],{},[163,422,423],{},"{root}\u002F{project}\u002Ftrees",[362,425,426,431,433],{},[380,427,428],{},[163,429,430],{},"default_branch",[380,432,387],{},[380,434,435,436,439],{},"auto-detected from ",[163,437,438],{},"origin"," HEAD",[159,441,442,445,446,449,450,453],{},[163,443,444],{},"{root}"," comes from ",[163,447,448],{},"defaults.root",". Path values support a leading ",[163,451,452],{},"~"," only —\nno other expansion.",[168,455,457],{"id":456},"behavior","Behavior",[356,459,460,470],{},[359,461,462],{},[362,463,464,466,468],{},[365,465,367],{},[365,467,370],{},[365,469,373],{},[375,471,472,487,502,518],{},[362,473,474,479,481],{},[380,475,476],{},[163,477,478],{},"editor",[380,480,387],{},[380,482,483,486],{},[163,484,485],{},"defaults.editor"," — a preset name or a template",[362,488,489,494,496],{},[380,490,491],{},[163,492,493],{},"default_command",[380,495,387],{},[380,497,498,501],{},[163,499,500],{},"defaults.default_command"," — a verb or a configured command name",[362,503,504,509,512],{},[380,505,506],{},[163,507,508],{},"ports",[380,510,511],{},"integer 1–10",[380,513,514,517],{},[163,515,516],{},"1"," — contiguous ports allocated per workspace",[362,519,520,525,528],{},[380,521,522],{},[163,523,524],{},"base_port",[380,526,527],{},"integer 1024–65000",[380,529,530],{},"derived per project",[159,532,533,534,537,538,541,542,544,545,547],{},"See ",[535,536,149],"a",{"href":150}," for the preset list, and\n",[535,539,540],{"href":54},"Run dev servers in parallel"," for how\n",[163,543,508],{}," and ",[163,546,524],{}," interact.",[168,549,550],{"id":248},[163,551,552],{},"[setup]",[159,554,555,556,272,559,562,563,566],{},"Runs after checkout and before ",[163,557,558],{},"run",[163,560,561],{},"exec"," or ",[163,564,565],{},"shell",". Omit the table\nentirely and no setup happens.",[173,568,570],{"className":175,"code":569,"language":178,"meta":179,"style":179},"[setup]\nrun = \"pnpm install --frozen-lockfile\"\ncache_key = [\"pnpm-lock.yaml\", \"**\u002Fpackage.json\"]\nseed_files = [\".env.local\"]\nseed_from = \"~\u002Fdev\u002Fmy-project\"\n",[163,571,572,580,586,598,606],{"__ignoreMap":179},[183,573,574,576,578],{"class":185,"line":186},[183,575,244],{"class":189},[183,577,248],{"class":247},[183,579,251],{"class":189},[183,581,582,584],{"class":185,"line":197},[183,583,257],{"class":189},[183,585,260],{"class":193},[183,587,588,590,592,594,596],{"class":185,"line":206},[183,589,266],{"class":189},[183,591,269],{"class":193},[183,593,272],{"class":189},[183,595,275],{"class":193},[183,597,251],{"class":189},[183,599,600,602,604],{"class":185,"line":215},[183,601,283],{"class":189},[183,603,286],{"class":193},[183,605,251],{"class":189},[183,607,608,611],{"class":185,"line":225},[183,609,610],{"class":189},"seed_from = ",[183,612,613],{"class":193},"\"~\u002Fdev\u002Fmy-project\"\n",[356,615,616,627],{},[359,617,618],{},[362,619,620,622,624],{},[365,621,367],{},[365,623,370],{},[365,625,626],{},"Meaning",[375,628,629,640,654,668],{},[362,630,631,635,637],{},[380,632,633],{},[163,634,558],{},[380,636,387],{},[380,638,639],{},"The setup command, templated. Skipped entirely when absent",[362,641,642,647,651],{},[380,643,644],{},[163,645,646],{},"cache_key",[380,648,387,649],{},[183,650],{},[380,652,653],{},"Globs; setup re-runs when their hash changes",[362,655,656,661,665],{},[380,657,658],{},[163,659,660],{},"seed_files",[380,662,387,663],{},[183,664],{},[380,666,667],{},"Relative paths copied into a new worktree",[362,669,670,675,677],{},[380,671,672],{},[163,673,674],{},"seed_from",[380,676,404],{},[380,678,679,680],{},"An extra seed source, checked before ",[163,681,682],{},"seeds\u002F\u003Cproject>\u002F",[684,685,687,690,691,693,694,696,697,699],"note",{"title":686},"cache_key is why the second checkout is fast",[163,688,689],{},"uxd"," hashes the files matched by ",[163,692,646],{},". If the hash is unchanged since\nthe last successful setup for that workspace, ",[163,695,558],{}," is skipped. Without a\n",[163,698,646],{},", setup runs every time.",[159,701,702,703,337],{},"Seeding is covered in ",[535,704,705],{"href":59},"Seed local files",[168,707,709],{"id":708},"strictness","Strictness",[159,711,712,713,716,717,720],{},"The schema is ",[391,714,715],{},"strict"," — an unknown key is an error, not a warning. That\ncatches typos like ",[163,718,719],{},"worktree_path"," immediately instead of silently ignoring\nthem.",[173,722,726],{"className":723,"code":724,"language":725,"meta":179,"style":179},"language-bash shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","uxd config validate my-project\n","bash",[163,727,728],{"__ignoreMap":179},[183,729,730,732,735,738],{"class":185,"line":186},[183,731,689],{"class":247},[183,733,734],{"class":193}," config",[183,736,737],{"class":193}," validate",[183,739,740],{"class":193}," my-project\n",[159,742,743],{},"Errors are reported in aggregate, so one run shows you every problem in the\nfile.",[745,746,747],"style",{},"html pre.shiki code .s7iLA, html code.shiki .s7iLA{--shiki-light:#0E1116;--shiki-default:#0E1116;--shiki-dark:#F0F3F6}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 pre.shiki code .szw1H, html code.shiki .szw1H{--shiki-light:#702C00;--shiki-default:#702C00;--shiki-dark:#FFB757}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);}",{"title":179,"searchDepth":197,"depth":197,"links":749},[750,751,752,753,754],{"id":170,"depth":197,"text":171},{"id":353,"depth":197,"text":354},{"id":456,"depth":197,"text":457},{"id":248,"depth":197,"text":552},{"id":708,"depth":197,"text":709},"Every key a uxd project TOML accepts — repository, behavior, setup — with types, defaults, and what happens when you omit them.","md",null,{},{"icon":138},{"title":761,"description":762},"uxd Project File Reference","Reference for ~\u002F.uxd\u002F\u003Cproject>.toml — repo, repo_path, worktrees_path, default_branch, editor, default_command, ports, base_port, and the [setup] table.","EHrfxZq7O9UIqdJYAWVqVa3Yf1wn6h_d079U2d-mOfI",[765,767],{"title":130,"path":131,"stem":132,"description":766,"icon":133,"children":-1},"Where uxd looks for configuration, what lives in the config directory, and how defaults.toml relates to a project file.",{"title":140,"path":141,"stem":142,"description":768,"icon":143,"children":-1},"Define named commands for uxd run, give them their own cwd and env, and attach the four lifecycle hooks.",1784975262646]