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