Returns true if the file or directory denoted by this path exists.Note that accessing this field does not cause the path to be watched. If you’d like the repo rule or module extension to be sensitive to the path’s existence, use the watch() method on the context object.
Returns true if this path points to a directory.Note that accessing this field does not cause the path to be watched. If you’d like the repo rule or module extension to be sensitive to whether the path is a directory or a file, use the watch() method on the context object.
string; default is 'auto' whether Bazel should watch the list of entries in this directory and refetch the repository or re-evaluate the module extension next time when any changes are detected. Changes to detect include entry creation, deletion, and renaming. Note that this doesn’t watch the contents of any entries in the directory. Can be the string ‘yes’, ‘no’, or ‘auto’. If set to ‘auto’, Bazel will only watch this directory when it is legal to do so (see repository_ctx.watch() docs for more information).
Returns the canonical path for this path by repeatedly replacing all symbolic links with their referents.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Bazel Documentation","colors":{"primary":"#44a047","light":"#77d275","dark":"#004300"},"logo":{"light":"https://mintcdn.com/bazel/h7ma40U5Tjz5Hf-j/logo/light.svg?fit=max\u0026auto=format\u0026n=h7ma40U5Tjz5Hf-j\u0026q=85\u0026s=fe755972fa71b3fc4db1ccda7a78cb9d","dark":"https://mintcdn.com/bazel/h7ma40U5Tjz5Hf-j/logo/Bazel_logo.svg?fit=max\u0026auto=format\u0026n=h7ma40U5Tjz5Hf-j\u0026q=85\u0026s=78e05337ead4a8dc5dabb4819732eb25"},"favicon":"https://mintcdn.com/bazel/ZgDLXOcGz0vxy0Ai/favicon.png?fit=max\u0026auto=format\u0026n=ZgDLXOcGz0vxy0Ai\u0026q=85\u0026s=80c032647b8ae1fba9de31dfc428994e","navbar":{"links":[{"icon":"book-open-cover","href":"https://registry.bazel.build","label":"Module Registry"},{"icon":"newspaper","href":"https://blog.bazel.build/","label":"Blog"},{"icon":"github","href":"https://github.com/bazelbuild/bazel","label":"Github"}]},"footer":{"socials":{"x":"https://x.com/bazelbuild","github":"https://github.com/bazelbuild","reddit":"https://reddit.com/r/bazel"},"links":[{"header":"About","items":[{"label":"Who's using Bazel","href":"https://bazel.build/community/users"},{"label":"Contribute","href":"https://bazel.build/contribute"},{"label":"Governance model","href":"https://bazel.build/contribute/policy"},{"label":"Release model","href":"https://bazel.build/release"},{"label":"Brand guidelines","href":"https://bazel.build/brand"}]},{"header":"Stay Connected","items":[{"label":"Blog","href":"https://blog.bazel.build/"},{"label":"GitHub","href":"https://github.com/bazelbuild/bazel"},{"label":"Twitter","href":"https://twitter.com/bazelbuild"},{"label":"YouTube","href":"https://youtube.com/user/googleOSPO"}]},{"header":"Support","items":[{"label":"Support","href":"https://bazel.build/help"},{"label":"Issue tracker","href":"https://github.com/bazelbuild/bazel/issues"},{"label":"Slack","href":"https://slack.bazel.build/"},{"label":"Stack Overflow","href":"https://stackoverflow.com/questions/tagged/bazel"}]},{"header":"Legal","items":[{"label":"Privacy Policy","href":"https://policies.google.com/privacy"},{"label":"Terms of Service","href":"https://policies.google.com/terms"}]}]},"integrations":{"ga4":{"measurementId":"G-V5WZVG5WF1"}},"banner":{"content":"Please take the [Bazel user survey](/survey) to help us improve Bazel.","dismissible":true},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"bazel","hasAudioNarration":false,"actualSubdomain":"bazel","customDomains":["bazel.build"],"gitSource":{"type":"github","owner":"bazel-contrib","repo":"bazel-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad9a9444202d185a73a5083","collectionId":"2f6a0829-7024-40c3-94b8-015d04fcbbc1","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad9a9444202d185a73a5083"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ad9a9444202d185a73a5083","clientVersion":"0.0.3939","searchFilterCounts":[{"language":"en","tag":"Extending","count":937},{"language":"en","tag":"User guide","count":663},{"language":"en","tag":"Getting started","count":301},{"language":"en","tag":"Community","count":264},{"language":"en","tag":"Starlark Builtins","count":250},{"language":"en","tag":"Remote Execution","count":240},{"language":"en","tag":"Reference","count":203},{"language":"en","tag":"Contributing","count":168},{"language":"en","tag":"About Bazel","count":164},{"language":"en","tag":"Install","count":151}],"searchSettings":{"isFiltersEnabled":true,"maxResults":15}},"assistantConfig":{},"hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"rules/lib/builtins/path","slug":"/rules/lib/builtins/path","pageMetadata":{"title":"path","description":null,"href":"/rules/lib/builtins/path"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`A structure representing a file to be used inside a repository.`}),`\n`,_jsx(Heading,{level:`2`,id:`members`,children:`Members`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`#basename`,children:`basename`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`#dirname`,children:`dirname`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`#exists`,children:`exists`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`#get_child`,children:`get_child`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`#is_dir`,children:`is_dir`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`#readdir`,children:`readdir`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`#realpath`,children:`realpath`})}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`basename`,children:`basename`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`string path.basename`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`A string giving the basename of the file.`}),`\n`,_jsx(Heading,{level:`2`,id:`dirname`,children:`dirname`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`path path.dirname`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`The parent directory of this file, or None if this file does not have a parent.\nMay return `,_jsx(_components.code,{children:`None`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`exists`,children:`exists`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`bool path.exists`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Returns true if the file or directory denoted by this path exists.`}),`\n`,_jsxs(_components.p,{children:[`Note that accessing this field does `,_jsx(_components.em,{children:`not`}),` cause the path to be watched. If you’d like the repo rule or module extension to be sensitive to the path’s existence, use the `,_jsx(_components.code,{children:`watch()`}),` method on the context object.`]}),`\n`,_jsx(Heading,{level:`2`,id:`get_child`,children:`get_child`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`path path.get_child(*relative_paths)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Returns the path obtained by joining this path with the given relative paths.`}),`\n`,_jsx(Heading,{level:`3`,id:`parameters`,children:`Parameters`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Parameter`}),_jsx(_components.th,{children:`Description`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`relative_paths`})}),_jsx(_components.td,{children:`required Zero or more relative path strings to append to this path with path separators added as needed.`})]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`is_dir`,children:`is_dir`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`bool path.is_dir`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Returns true if this path points to a directory.`}),`\n`,_jsxs(_components.p,{children:[`Note that accessing this field does `,_jsx(_components.em,{children:`not`}),` cause the path to be watched. If you’d like the repo rule or module extension to be sensitive to whether the path is a directory or a file, use the `,_jsx(_components.code,{children:`watch()`}),` method on the context object.`]}),`\n`,_jsx(Heading,{level:`2`,id:`readdir`,children:`readdir`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`list path.readdir(*, watch='auto')`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Returns the list of entries in the directory denoted by this path. Each entry is a `,_jsx(_components.code,{children:`path`}),` object itself.`]}),`\n`,_jsx(Heading,{level:`3`,id:`parameters-2`,children:`Parameters`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Parameter`}),_jsx(_components.th,{children:`Description`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`watch`})}),_jsxs(_components.td,{children:[_jsx(_components.a,{href:`/rules/lib/core/string`,children:`string`}),`; default is `,_jsx(_components.code,{children:`'auto'`}),` whether Bazel should watch the list of entries in this directory and refetch the repository or re-evaluate the module extension next time when any changes are detected. Changes to detect include entry creation, deletion, and renaming. Note that this doesn’t watch the `,_jsx(_components.em,{children:`contents`}),` of any entries in the directory. Can be the string ‘yes’, ‘no’, or ‘auto’. If set to ‘auto’, Bazel will only watch this directory when it is legal to do so (see `,_jsx(_components.a,{href:`repository_ctx#watch`,children:_jsx(_components.code,{children:`repository_ctx.watch()`})}),` docs for more information).`]})]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`realpath`,children:`realpath`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`path path.realpath`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Returns the canonical path for this path by repeatedly replacing all symbolic links with their referents.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"path","description":null,"href":"/rules/lib/builtins/path"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Members","slug":"members","depth":2,"children":[]},{"title":"basename","slug":"basename","depth":2,"children":[]},{"title":"dirname","slug":"dirname","depth":2,"children":[]},{"title":"exists","slug":"exists","depth":2,"children":[]},{"title":"get_child","slug":"get_child","depth":2,"children":[{"title":"Parameters","slug":"parameters","depth":3,"children":[]}]},{"title":"is_dir","slug":"is_dir","depth":2,"children":[]},{"title":"readdir","slug":"readdir","depth":2,"children":[{"title":"Parameters","slug":"parameters-2","depth":3,"children":[]}]},{"title":"realpath","slug":"realpath","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"bazel","siteName":"Bazel Documentation","title":"path - Bazel Documentation","navMaps":{"firstHrefInVersion":{"HEAD":{"href":"/rules/lib/builtins/path","matchLevel":0},"9.3":{"href":"/versions/9.3.0/rules/errors/read-only-variable","matchLevel":2},"9.2":{"href":"/versions/9.2.0/rules/errors/read-only-variable","matchLevel":2},"9.1":{"href":"/versions/9.1.0/about/intro","matchLevel":4},"9.0":{"href":"/versions/9.0.0/about/intro","matchLevel":4},"8.8":{"href":"/versions/8.8.1/rules/errors/read-only-variable","matchLevel":2},"8.7":{"href":"/versions/8.7.0/about/intro","matchLevel":4},"8.6":{"href":"/versions/8.6.0/about/intro","matchLevel":4},"8.5":{"href":"/versions/8.5.1/about/intro","matchLevel":4},"8.4":{"href":"/versions/8.4.2/about/intro","matchLevel":4},"8.3":{"href":"/versions/8.3.1/about/intro","matchLevel":4},"8.2":{"href":"/versions/8.2.1/about/intro","matchLevel":4},"8.1":{"href":"/versions/8.1.1/about/intro","matchLevel":4},"8.0":{"href":"/versions/8.0.1/about/intro","matchLevel":4},"7.7":{"href":"/versions/7.7.1/about/intro","matchLevel":4}},"firstHrefInLanguage":{"en":{"href":"/rules/lib/builtins/path","matchLevel":0}}},"lastModified":"2026-10-20T15:33:42.474Z","originalFileLocation":"rules/lib/builtins/path.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"Bazel Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/bazel/PruV1ugoTEmyjX-1/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/bazel/PruV1ugoTEmyjX-1/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/bazel/PruV1ugoTEmyjX-1/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/bazel/PruV1ugoTEmyjX-1/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/bazel/PruV1ugoTEmyjX-1/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/bazel/PruV1ugoTEmyjX-1/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/bazel/PruV1ugoTEmyjX-1/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/bazel/PruV1ugoTEmyjX-1/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/bazel/PruV1ugoTEmyjX-1/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"path - Bazel Documentation\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Bazel Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://bazel.build/rules/lib/builtins/path\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://bazel.mintlify.app/_mintlify/api/og/v2?division=Starlark+Builtins\u0026amp;title=path\u0026amp;theme=c4f9ed0ca1d4c4cca7055fd0\u0026amp;signature=3d75b671c2d838b90d8322a0975d19eb45322d28c791021e49c1a696c85da42a\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"path - Bazel Documentation\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://bazel.mintlify.app/_mintlify/api/og/v2?division=Starlark+Builtins\u0026amp;title=path\u0026amp;theme=c4f9ed0ca1d4c4cca7055fd0\u0026amp;signature=3d75b671c2d838b90d8322a0975d19eb45322d28c791021e49c1a696c85da42a\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/bazel/PruV1ugoTEmyjX-1/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Bazel Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#44a047\">\u003clink data-mint-head rel=\"canonical\" href=\"https://bazel.build/rules/lib/builtins/path\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/rules/lib/builtins/path.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://bazel.build/#organization\",\"name\":\"Bazel Documentation\",\"url\":\"https://bazel.build\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/bazel/h7ma40U5Tjz5Hf-j/logo/light.svg?fit=max\u0026auto=format\u0026n=h7ma40U5Tjz5Hf-j\u0026q=85\u0026s=fe755972fa71b3fc4db1ccda7a78cb9d\"}},{\"@type\":\"WebSite\",\"@id\":\"https://bazel.build#website\",\"name\":\"Bazel Documentation\",\"url\":\"https://bazel.build\",\"publisher\":{\"@id\":\"https://bazel.build/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://bazel.build/rules/lib/builtins/path#webpage\",\"url\":\"https://bazel.build/rules/lib/builtins/path\",\"name\":\"path\",\"dateModified\":\"2026-10-20T15:33:42.474Z\",\"isPartOf\":{\"@id\":\"https://bazel.build#website\"},\"breadcrumb\":{\"@id\":\"https://bazel.build/rules/lib/builtins/path#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://bazel.build/rules/lib/builtins/path#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Starlark Builtins\",\"item\":\"https://bazel.build/rules/errors/read-only-variable\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"path\",\"item\":\"https://bazel.build/rules/lib/builtins/path\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://bazel.build/rules/lib/builtins/path#article\",\"headline\":\"path\",\"name\":\"path\",\"url\":\"https://bazel.build/rules/lib/builtins/path\",\"mainEntityOfPage\":{\"@id\":\"https://bazel.build/rules/lib/builtins/path#webpage\"},\"dateModified\":\"2026-10-20T15:33:42.474Z\",\"publisher\":{\"@id\":\"https://bazel.build/#organization\"},\"isPartOf\":{\"@id\":\"https://bazel.build#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Bazel Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Bazel Documentation","nav":{"global":null,"versions":[{"version":"HEAD","languages":[{"language":"en","tabs":[{"tab":"About Bazel","pages":[{"title":"About Bazel","href":"/about/intro"}]},{"tab":"Getting started","pages":[{"title":"Getting started","href":"/install"}]},{"tab":"User guide","pages":[{"title":"User guide","href":"/release"}]},{"tab":"Reference","pages":[{"title":"Reference","href":"/reference/be/overview"}]},{"tab":"Extending","groups":[{"group":"Concepts","pages":[{"title":"Extension Overview","href":"/extending/concepts"},{"title":"Depsets","href":"/extending/depsets"},{"title":"Macros","href":"/extending/macros"},{"title":"Legacy Macros","href":"/extending/legacy-macros"},{"title":"Aspects","href":"/extending/aspects"},{"title":"Rules","href":"/extending/rules"},{"title":"Configurations","href":"/extending/config"},{"title":"Execution Groups","href":"/extending/exec-groups"},{"title":"Automatic Execution Groups (AEGs)","href":"/extending/auto-exec-groups"}]},{"group":"Writing rules","pages":[{"title":"Rules Tutorial","href":"/rules/rules-tutorial"},{"title":"Creating a Symbolic Macro","href":"/rules/macro-tutorial"},{"title":"Creating a Legacy Macro","href":"/rules/legacy-macro-tutorial"},{"title":"Using Macros to Create Custom Verbs","href":"/rules/verbs-tutorial"},{"title":"Starlark Language","href":"/rules/language"},{"title":".bzl style guide","href":"/rules/bzl-style"},{"title":"Challenges of Writing Rules","href":"/rules/challenges"},{"title":"Writing Rules on Windows","href":"/rules/windows"}]},{"group":"Distributing rules","pages":[{"title":"Testing","href":"/rules/testing"},{"title":"Optimizing Performance","href":"/rules/performance"},{"title":"Deploying Rules","href":"/rules/deploying"}]},{"group":"Platforms \u0026 toolchains","pages":[{"title":"Platforms","href":"/concepts/platforms"},{"title":"Toolchains","href":"/extending/toolchains"}]},{"group":"API Reference Overview","pages":[{"title":"One-Page Overview","href":"/rules/lib/overview"},{"title":"Rules","href":"/rules/index"},{"title":"Frequently Asked Questions","href":"/rules/faq"}]},{"group":"Starlark Builtins","pages":[{"title":"Error: Variable x is read only","href":"/rules/errors/read-only-variable"},{"title":"Built-in Types","href":"/rules/lib/builtins"},{"title":"Action","href":"/rules/lib/builtins/Action"},{"title":"actions","href":"/rules/lib/builtins/actions"},{"title":"Args","href":"/rules/lib/builtins/Args"},{"title":"Aspect","href":"/rules/lib/builtins/Aspect"},{"title":"Attribute","href":"/rules/lib/builtins/Attribute"},{"title":"BuildSetting","href":"/rules/lib/builtins/BuildSetting"},{"title":"CcCompilationOutputs","href":"/rules/lib/builtins/CcCompilationOutputs"},{"title":"CcLinkingOutputs","href":"/rules/lib/builtins/CcLinkingOutputs"},{"title":"CompilationContext","href":"/rules/lib/builtins/CompilationContext"},{"title":"DirectoryExpander","href":"/rules/lib/builtins/DirectoryExpander"},{"title":"DottedVersion","href":"/rules/lib/builtins/DottedVersion"},{"title":"ExecGroupCollection","href":"/rules/lib/builtins/ExecGroupCollection"},{"title":"ExecGroupContext","href":"/rules/lib/builtins/ExecGroupContext"},{"title":"ExecTransitionFactory","href":"/rules/lib/builtins/ExecTransitionFactory"},{"title":"ExpandedDirectory","href":"/rules/lib/builtins/ExpandedDirectory"},{"title":"Facts","href":"/rules/lib/builtins/Facts"},{"title":"FeatureConfiguration","href":"/rules/lib/builtins/FeatureConfiguration"},{"title":"File","href":"/rules/lib/builtins/File"},{"title":"Label","href":"/rules/lib/builtins/Label"},{"title":"LateBoundDefault","href":"/rules/lib/builtins/LateBoundDefault"},{"title":"LibraryToLink","href":"/rules/lib/builtins/LibraryToLink"},{"title":"License","href":"/rules/lib/builtins/License"},{"title":"LinkerInput","href":"/rules/lib/builtins/LinkerInput"},{"title":"LinkingContext","href":"/rules/lib/builtins/LinkingContext"},{"title":"Provider","href":"/rules/lib/builtins/Provider"},{"title":"Subrule","href":"/rules/lib/builtins/Subrule"},{"title":"SymlinkEntry","href":"/rules/lib/builtins/SymlinkEntry"},{"title":"Target","href":"/rules/lib/builtins/Target"},{"title":"TemplateDict","href":"/rules/lib/builtins/TemplateDict"},{"title":"ToolchainContext","href":"/rules/lib/builtins/ToolchainContext"},{"title":"apple_platform","href":"/rules/lib/builtins/apple_platform"},{"title":"bazel_module","href":"/rules/lib/builtins/bazel_module"},{"title":"bazel_module_tags","href":"/rules/lib/builtins/bazel_module_tags"},{"title":"configuration","href":"/rules/lib/builtins/configuration"},{"title":"ctx","href":"/rules/lib/builtins/ctx"},{"title":"depset","href":"/rules/lib/builtins/depset"},{"title":"exec_result","href":"/rules/lib/builtins/exec_result"},{"title":"extension_metadata","href":"/rules/lib/builtins/extension_metadata"},{"title":"fragments","href":"/rules/lib/builtins/fragments"},{"title":"java_annotation_processing","href":"/rules/lib/builtins/java_annotation_processing"},{"title":"java_output","href":"/rules/lib/builtins/java_output"},{"title":"macro","href":"/rules/lib/builtins/macro"},{"title":"mapped_root","href":"/rules/lib/builtins/mapped_root"},{"title":"module_ctx","description":null,"href":"/rules/lib/builtins/module_ctx"},{"title":"path","href":"/rules/lib/builtins/path"},{"title":"propagation_ctx","description":null,"href":"/rules/lib/builtins/propagation_ctx"},{"title":"repo_metadata","href":"/rules/lib/builtins/repo_metadata"},{"title":"repository_ctx","href":"/rules/lib/builtins/repository_ctx"},{"title":"repository_os","href":"/rules/lib/builtins/repository_os"},{"title":"repository_rule","href":"/rules/lib/builtins/repository_rule"},{"title":"root","href":"/rules/lib/builtins/root"},{"title":"rule","href":"/rules/lib/builtins/rule"},{"title":"rule_attributes","href":"/rules/lib/builtins/rule_attributes"},{"title":"runfiles","href":"/rules/lib/builtins/runfiles"},{"title":"struct","href":"/rules/lib/builtins/struct"},{"title":"subrule_ctx","href":"/rules/lib/builtins/subrule_ctx"},{"title":"tag_class","href":"/rules/lib/builtins/tag_class"},{"title":"template_ctx","href":"/rules/lib/builtins/template_ctx"},{"title":"toolchain_type","href":"/rules/lib/builtins/toolchain_type"},{"title":"transition","href":"/rules/lib/builtins/transition"},{"title":"wasm_exec_result","href":"/rules/lib/builtins/wasm_exec_result"},{"title":"wasm_module","href":"/rules/lib/builtins/wasm_module"}]},{"group":"Core Types","pages":[{"title":"Core Starlark data types","href":"/rules/lib/core"},{"title":"bool","href":"/rules/lib/core/bool"},{"title":"builtin_function_or_method","href":"/rules/lib/core/builtin_function_or_method"},{"title":"dict","href":"/rules/lib/core/dict"},{"title":"float","href":"/rules/lib/core/float"},{"title":"function","href":"/rules/lib/core/function"},{"title":"int","href":"/rules/lib/core/int"},{"title":"json","href":"/rules/lib/core/json"},{"title":"list","href":"/rules/lib/core/list"},{"title":"range","href":"/rules/lib/core/range"},{"title":"set","href":"/rules/lib/core/set"},{"title":"string","href":"/rules/lib/core/string"},{"title":"tuple","href":"/rules/lib/core/tuple"}]},{"group":"Providers","pages":[{"title":"Providers","href":"/rules/lib/providers"},{"title":"AnalysisTestResultInfo","href":"/rules/lib/providers/AnalysisTestResultInfo"},{"title":"CcInfo","href":"/rules/lib/providers/CcInfo"},{"title":"CcToolchainConfigInfo","href":"/rules/lib/providers/CcToolchainConfigInfo"},{"title":"CcToolchainInfo","href":"/rules/lib/providers/CcToolchainInfo"},{"title":"ConstraintCollection","href":"/rules/lib/providers/ConstraintCollection"},{"title":"ConstraintSettingInfo","href":"/rules/lib/providers/ConstraintSettingInfo"},{"title":"ConstraintValueInfo","href":"/rules/lib/providers/ConstraintValueInfo"},{"title":"DebugPackageInfo","href":"/rules/lib/providers/DebugPackageInfo"},{"title":"DefaultInfo","href":"/rules/lib/providers/DefaultInfo"},{"title":"ExecutionInfo","href":"/rules/lib/providers/ExecutionInfo"},{"title":"FeatureFlagInfo","href":"/rules/lib/providers/FeatureFlagInfo"},{"title":"FilesToRunProvider","href":"/rules/lib/providers/FilesToRunProvider"},{"title":"IncompatiblePlatformProvider","href":"/rules/lib/providers/IncompatiblePlatformProvider"},{"title":"InstrumentedFilesInfo","href":"/rules/lib/providers/InstrumentedFilesInfo"},{"title":"JavaInfo","href":"/rules/lib/providers/JavaInfo"},{"title":"JavaPluginInfo","href":"/rules/lib/providers/JavaPluginInfo"},{"title":"JavaRuntimeInfo","href":"/rules/lib/providers/JavaRuntimeInfo"},{"title":"JavaToolchainInfo","href":"/rules/lib/providers/JavaToolchainInfo"},{"title":"MaterializedDepsInfo","href":"/rules/lib/providers/MaterializedDepsInfo"},{"title":"ObjcProvider","href":"/rules/lib/providers/ObjcProvider"},{"title":"OutputGroupInfo","href":"/rules/lib/providers/OutputGroupInfo"},{"title":"PackageSpecificationInfo","href":"/rules/lib/providers/PackageSpecificationInfo"},{"title":"PlatformInfo","href":"/rules/lib/providers/PlatformInfo"},{"title":"RunEnvironmentInfo","href":"/rules/lib/providers/RunEnvironmentInfo"},{"title":"TemplateVariableInfo","href":"/rules/lib/providers/TemplateVariableInfo"},{"title":"ToolchainInfo","href":"/rules/lib/providers/ToolchainInfo"},{"title":"ToolchainTypeInfo","href":"/rules/lib/providers/ToolchainTypeInfo"},{"title":"file_provider","href":"/rules/lib/providers/file_provider"},{"title":"java_compilation_info","href":"/rules/lib/providers/java_compilation_info"},{"title":"java_output_jars","href":"/rules/lib/providers/java_output_jars"}]},{"group":"Global Functions","pages":[{"title":"Global functions","href":"/rules/lib/globals"},{"title":"All Bazel files","href":"/rules/lib/globals/all"},{"title":"BUILD files","href":"/rules/lib/globals/build"},{"title":"REPO.bazel files","href":"/rules/lib/globals/repo"},{"title":"VENDOR.bazel files","href":"/rules/lib/globals/vendor"},{"title":".bzl files","href":"/rules/lib/globals/bzl"},{"title":"MODULE.bazel files","href":"/rules/lib/globals/module"}]},{"group":"Configuration Fragments","pages":[{"title":"Configuration Fragments","href":"/rules/lib/fragments"},{"title":"apple","href":"/rules/lib/fragments/apple"},{"title":"bazel_android","href":"/rules/lib/fragments/bazel_android"},{"title":"coverage","href":"/rules/lib/fragments/coverage"},{"title":"cpp","href":"/rules/lib/fragments/cpp"},{"title":"java","href":"/rules/lib/fragments/java"},{"title":"objc","href":"/rules/lib/fragments/objc"},{"title":"platform","href":"/rules/lib/fragments/platform"},{"title":"proto","href":"/rules/lib/fragments/proto"}]},{"group":"Toplevel APIs","pages":[{"title":"Top-level Modules","href":"/rules/lib/toplevel"},{"title":"apple_common","href":"/rules/lib/toplevel/apple_common"},{"title":"attr","href":"/rules/lib/toplevel/attr"},{"title":"cc_common","href":"/rules/lib/toplevel/cc_common"},{"title":"config","href":"/rules/lib/toplevel/config"},{"title":"config_common","href":"/rules/lib/toplevel/config_common"},{"title":"coverage_common","href":"/rules/lib/toplevel/coverage_common"},{"title":"java_common","href":"/rules/lib/toplevel/java_common"},{"title":"native","href":"/rules/lib/toplevel/native"},{"title":"platform_common","href":"/rules/lib/toplevel/platform_common"},{"title":"proto","href":"/rules/lib/toplevel/proto"},{"title":"testing","href":"/rules/lib/toplevel/testing"}]},{"group":"Repo rules","pages":[{"title":"Repository Rules","href":"/rules/lib/repo/index"},{"title":"cache repository rules","href":"/rules/lib/repo/cache"},{"title":"git repository rules","href":"/rules/lib/repo/git"},{"title":"http repository rules","href":"/rules/lib/repo/http"},{"title":"local repository rules","href":"/rules/lib/repo/local"},{"title":"utils repository rules","href":"/rules/lib/repo/utils"}]},{"group":"Module system","pages":[{"title":"External dependencies overview","href":"/external/overview"},{"title":"Bazel modules","href":"/external/module"},{"title":"Module extensions","href":"/external/extension"},{"title":"Bazel registries","href":"/external/registry"},{"title":"Bazel Lockfile","href":"/external/lockfile"},{"title":"Vendor Mode","href":"/external/vendor"},{"title":"Repository Rules","href":"/external/repo"},{"title":null,"href":"/external/mod-command"},{"title":"Bzlmod Migration Guide","href":"/external/migration"},{"title":null,"href":"/external/migration_tool"},{"title":"Frequently asked questions","href":"/external/faq"}]}]},{"tab":"Community","pages":[{"title":"Community","href":"/contribute"}]}]}]},{"version":"9.3","pages":[{"title":"9.3","href":"/versions/9.3.0/rules/errors/read-only-variable"}]},{"version":"9.2","pages":[{"title":"9.2","href":"/versions/9.2.0/rules/errors/read-only-variable"}]},{"version":"9.1","pages":[{"title":"9.1","href":"/versions/9.1.0/about/intro"}]},{"version":"9.0","pages":[{"title":"9.0","href":"/versions/9.0.0/about/intro"}]},{"version":"8.8","pages":[{"title":"8.8","href":"/versions/8.8.1/rules/errors/read-only-variable"}]},{"version":"8.7","pages":[{"title":"8.7","href":"/versions/8.7.0/about/intro"}]},{"version":"8.6","pages":[{"title":"8.6","href":"/versions/8.6.0/about/intro"}]},{"version":"8.5","pages":[{"title":"8.5","href":"/versions/8.5.1/about/intro"}]},{"version":"8.4","pages":[{"title":"8.4","href":"/versions/8.4.2/about/intro"}]},{"version":"8.3","pages":[{"title":"8.3","href":"/versions/8.3.1/about/intro"}]},{"version":"8.2","pages":[{"title":"8.2","href":"/versions/8.2.1/about/intro"}]},{"version":"8.1","pages":[{"title":"8.1","href":"/versions/8.1.1/about/intro"}]},{"version":"8.0","pages":[{"title":"8.0","href":"/versions/8.0.1/about/intro"}]},{"version":"7.7","pages":[{"title":"7.7","href":"/versions/7.7.1/about/intro"}]}]},"title":"path - Bazel Documentation","buildId":"dpl_5UDDZ9hnigTkoV7QtvQ39eUp84nu","deploymentId":"dpl_5UDDZ9hnigTkoV7QtvQ39eUp84nu","dynamics":["10e4515597"],"chunks":["BannerMarkdown-DDchecE6.js","dist-Bv80vOZR.js","lib--scc4DXi.js","lib-B8HbPgcC.js","clsx-BLvOhwI7.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js"]}