[{"data":1,"prerenderedAt":1043},["ShallowReactive",2],{"navigation_docs":3,"-guide":72,"-guide-surround":1040},[4,40],{"title":5,"path":6,"stem":7,"children":8,"icon":39},"Guide","\u002Fguide","1.guide\u002F1.index",[9,11,15,19,23,27,31,35],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"PURLs","\u002Fguide\u002Fpurl","1.guide\u002F2.purl",{"title":16,"path":17,"stem":18},"Lookups","\u002Fguide\u002Flookups","1.guide\u002F3.lookups",{"title":20,"path":21,"stem":22},"Caching","\u002Fguide\u002Fcache","1.guide\u002F4.cache",{"title":24,"path":25,"stem":26},"CLI","\u002Fguide\u002Fcli","1.guide\u002F5.cli",{"title":28,"path":29,"stem":30},"Agents","\u002Fguide\u002Fagents","1.guide\u002F6.agents",{"title":32,"path":33,"stem":34},"Custom Registries","\u002Fguide\u002Fcustom","1.guide\u002F7.custom",{"title":36,"path":37,"stem":38},"Explorer","\u002Fguide\u002Fexplorer","1.guide\u002F8.explorer","i-lucide-book-open",{"title":41,"path":42,"stem":43,"children":44,"icon":71},"Registries","\u002Fregistries","2.registries\u002F0.index",[45,47,51,55,59,63,67],{"title":46,"path":42,"stem":43},"Overview",{"title":48,"path":49,"stem":50},"npm","\u002Fregistries\u002Fnpm","2.registries\u002F01.npm",{"title":52,"path":53,"stem":54},"crates.io","\u002Fregistries\u002Fcargo","2.registries\u002F02.cargo",{"title":56,"path":57,"stem":58},"PyPI","\u002Fregistries\u002Fpypi","2.registries\u002F03.pypi",{"title":60,"path":61,"stem":62},"RubyGems","\u002Fregistries\u002Frubygems","2.registries\u002F04.rubygems",{"title":64,"path":65,"stem":66},"Packagist","\u002Fregistries\u002Fpackagist","2.registries\u002F05.packagist",{"title":68,"path":69,"stem":70},"Arch Linux","\u002Fregistries\u002Falpm","2.registries\u002F06.alpm","i-lucide-library",{"id":73,"title":10,"body":74,"description":1034,"extension":1035,"links":1036,"meta":1037,"navigation":246,"path":6,"seo":1038,"stem":7,"__hash__":1039},"docs\u002F1.guide\u002F1.index.md",{"type":75,"value":76,"toc":1024},"minimark",[77,85,92,97,106,135,139,164,178,195,199,352,381,385,476,484,488,616,622,626,632,794,817,821,986,992,996,1020],[78,79,80,84],"warning",{},[81,82,83],"strong",{},"Pre-1.0."," The public API, the adapter list and the CLI flags can still change. Pin exact versions if you build on it now.",[86,87,88,91],"caution",{},[81,89,90],{},"Registry metadata is data, never instructions."," Descriptions, keywords, README URLs and maintainer names come from a public API that anyone can publish to. Show them, index them, compare them. Do not let an agent treat them as a message to itself.",[93,94,96],"h2",{"id":95},"why-this-exists","Why this exists",[98,99,100,101,105],"p",{},"Every registry has its own idea of a package document. npm keeps everything in one JSON with ",[102,103,104],"code",{},"dist-tags",", crates.io splits crate, versions and dependencies across three endpoints, PyPI has a JSON API for metadata and a Simple API for files, RubyGems answers versions and owners separately, Packagist nests versions under a vendor, and Arch Linux is two registries in one PURL type. Pulling one client per registry into a project means six response shapes and six ways to misread a license.",[98,107,108,111,112,119,120,123,124,123,127,130,131,134],{},[102,109,110],{},"@agntn\u002Fregistries"," puts six registries behind one class shape and one addressing scheme, the ",[113,114,118],"a",{"href":115,"rel":116},"https:\u002F\u002Fgithub.com\u002Fpackage-url\u002Fpurl-spec",[117],"nofollow","package URL"," of ECMA-427. Same calls, same ",[102,121,122],{},"Package",", ",[102,125,126],{},"Version",[102,128,129],{},"Dependency"," and ",[102,132,133],{},"Maintainer"," types everywhere. The adapter decides how to ask; you decide what to ask for.",[93,136,138],{"id":137},"install","Install",[140,141,146],"pre",{"className":142,"code":143,"language":144,"meta":145,"style":145},"language-bash shiki shiki-themes github-light github-light poimandres","pnpm add @agntn\u002Fregistries\n","bash","",[102,147,148],{"__ignoreMap":145},[149,150,153,157,161],"span",{"class":151,"line":152},"line",1,[149,154,156],{"class":155},"sseY5","pnpm",[149,158,160],{"class":159},"sX7Zv"," add",[149,162,163],{"class":159}," @agntn\u002Fregistries\n",[98,165,166,167,170,171,130,174,177],{},"The AI SDK tool on the ",[102,168,169],{},"\u002Fai"," subpath needs ",[102,172,173],{},"ai",[102,175,176],{},"zod"," next to it:",[140,179,181],{"className":142,"code":180,"language":144,"meta":145,"style":145},"pnpm add ai zod\n",[102,182,183],{"__ignoreMap":145},[149,184,185,187,189,192],{"class":151,"line":152},[149,186,156],{"class":155},[149,188,160],{"class":159},[149,190,191],{"class":159}," ai",[149,193,194],{"class":159}," zod\n",[93,196,198],{"id":197},"first-lookup","First lookup",[140,200,205],{"className":201,"code":202,"filename":203,"language":204,"meta":145,"style":145},"language-ts shiki shiki-themes github-light github-light poimandres","import { fetchPackageFromPURL } from \"@agntn\u002Fregistries\";\n\nconst pkg = await fetchPackageFromPURL(\"pkg:npm\u002Flodash\");\n\npkg.name; \u002F\u002F \"lodash\"\npkg.latestVersion; \u002F\u002F \"4.18.1\"\npkg.licenses; \u002F\u002F \"MIT\", normalized to SPDX\npkg.repository; \u002F\u002F \"https:\u002F\u002Fgithub.com\u002Flodash\u002Flodash\"\n","lookup.ts","ts",[102,206,207,241,248,282,287,307,322,337],{"__ignoreMap":145},[149,208,209,213,217,221,224,228,232,235,238],{"class":151,"line":152},[149,210,212],{"class":211},"sP0CR","import",[149,214,216],{"class":215},"sKlNE"," {",[149,218,220],{"class":219},"snHMy"," fetchPackageFromPURL",[149,222,223],{"class":215}," }",[149,225,227],{"class":226},"stCPd"," from",[149,229,231],{"class":230},"scVjq"," \"",[149,233,110],{"class":234},"sQ7BG",[149,236,237],{"class":230},"\"",[149,239,240],{"class":215},";\n",[149,242,244],{"class":151,"line":243},2,[149,245,247],{"emptyLinePlaceholder":246},true,"\n",[149,249,251,255,259,262,266,269,272,274,277,279],{"class":151,"line":250},3,[149,252,254],{"class":253},"s1TYA","const",[149,256,258],{"class":257},"saoiD"," pkg",[149,260,261],{"class":253}," =",[149,263,265],{"class":264},"sZW6a"," await",[149,267,220],{"class":268},"sULi6",[149,270,271],{"class":215},"(",[149,273,237],{"class":230},[149,275,276],{"class":234},"pkg:npm\u002Flodash",[149,278,237],{"class":230},[149,280,281],{"class":215},");\n",[149,283,285],{"class":151,"line":284},4,[149,286,247],{"emptyLinePlaceholder":246},[149,288,290,294,297,300,303],{"class":151,"line":289},5,[149,291,293],{"class":292},"spVlQ","pkg",[149,295,296],{"class":215},".",[149,298,299],{"class":292},"name",[149,301,302],{"class":215},"; ",[149,304,306],{"class":305},"sjhu3","\u002F\u002F \"lodash\"\n",[149,308,310,312,314,317,319],{"class":151,"line":309},6,[149,311,293],{"class":292},[149,313,296],{"class":215},[149,315,316],{"class":292},"latestVersion",[149,318,302],{"class":215},[149,320,321],{"class":305},"\u002F\u002F \"4.18.1\"\n",[149,323,325,327,329,332,334],{"class":151,"line":324},7,[149,326,293],{"class":292},[149,328,296],{"class":215},[149,330,331],{"class":292},"licenses",[149,333,302],{"class":215},[149,335,336],{"class":305},"\u002F\u002F \"MIT\", normalized to SPDX\n",[149,338,340,342,344,347,349],{"class":151,"line":339},8,[149,341,293],{"class":292},[149,343,296],{"class":215},[149,345,346],{"class":292},"repository",[149,348,302],{"class":215},[149,350,351],{"class":305},"\u002F\u002F \"https:\u002F\u002Fgithub.com\u002Flodash\u002Flodash\"\n",[98,353,354,355,357,358,123,360,123,363,123,366,123,369,372,373,376,377,380],{},"Importing ",[102,356,110],{}," registers the six built-in adapters as a side effect. From then on any PURL whose type is ",[102,359,48],{},[102,361,362],{},"cargo",[102,364,365],{},"pypi",[102,367,368],{},"gem",[102,370,371],{},"composer"," or ",[102,374,375],{},"alpm"," resolves through ",[102,378,379],{},"create()"," without a switch statement anywhere.",[93,382,384],{"id":383},"same-call-any-registry","Same call, any registry",[140,386,388],{"className":201,"code":387,"language":204,"meta":145,"style":145},"await fetchPackageFromPURL(\"pkg:cargo\u002Fserde\");\nawait fetchPackageFromPURL(\"pkg:pypi\u002Fflask\");\nawait fetchPackageFromPURL(\"pkg:gem\u002Frails\");\nawait fetchPackageFromPURL(\"pkg:composer\u002Flaravel\u002Fframework\");\nawait fetchPackageFromPURL(\"pkg:alpm\u002Faur\u002Fparu\");\n",[102,389,390,408,425,442,459],{"__ignoreMap":145},[149,391,392,395,397,399,401,404,406],{"class":151,"line":152},[149,393,394],{"class":264},"await",[149,396,220],{"class":268},[149,398,271],{"class":215},[149,400,237],{"class":230},[149,402,403],{"class":234},"pkg:cargo\u002Fserde",[149,405,237],{"class":230},[149,407,281],{"class":215},[149,409,410,412,414,416,418,421,423],{"class":151,"line":243},[149,411,394],{"class":264},[149,413,220],{"class":268},[149,415,271],{"class":215},[149,417,237],{"class":230},[149,419,420],{"class":234},"pkg:pypi\u002Fflask",[149,422,237],{"class":230},[149,424,281],{"class":215},[149,426,427,429,431,433,435,438,440],{"class":151,"line":250},[149,428,394],{"class":264},[149,430,220],{"class":268},[149,432,271],{"class":215},[149,434,237],{"class":230},[149,436,437],{"class":234},"pkg:gem\u002Frails",[149,439,237],{"class":230},[149,441,281],{"class":215},[149,443,444,446,448,450,452,455,457],{"class":151,"line":284},[149,445,394],{"class":264},[149,447,220],{"class":268},[149,449,271],{"class":215},[149,451,237],{"class":230},[149,453,454],{"class":234},"pkg:composer\u002Flaravel\u002Fframework",[149,456,237],{"class":230},[149,458,281],{"class":215},[149,460,461,463,465,467,469,472,474],{"class":151,"line":289},[149,462,394],{"class":264},[149,464,220],{"class":268},[149,466,271],{"class":215},[149,468,237],{"class":230},[149,470,471],{"class":234},"pkg:alpm\u002Faur\u002Fparu",[149,473,237],{"class":230},[149,475,281],{"class":215},[98,477,478,479,483],{},"The ",[113,480,482],{"href":481},"\u002Flookup","Lookup"," explorer runs exactly these calls against the docs worker.",[93,485,487],{"id":486},"what-ships","What ships",[489,490,491,510],"table",{},[492,493,494],"thead",{},[495,496,497,501,504,507],"tr",{},[498,499,500],"th",{},"Ecosystem",[498,502,503],{},"PURL type",[498,505,506],{},"Class",[498,508,509],{},"Registry",[511,512,513,531,548,565,582,599],"tbody",{},[495,514,515,518,523,528],{},[516,517,48],"td",{},[516,519,520],{},[102,521,522],{},"pkg:npm\u002F…",[516,524,525],{},[102,526,527],{},"NpmRegistry",[516,529,530],{},"registry.npmjs.org",[495,532,533,536,541,546],{},[516,534,535],{},"Cargo",[516,537,538],{},[102,539,540],{},"pkg:cargo\u002F…",[516,542,543],{},[102,544,545],{},"CargoRegistry",[516,547,52],{},[495,549,550,552,557,562],{},[516,551,56],{},[516,553,554],{},[102,555,556],{},"pkg:pypi\u002F…",[516,558,559],{},[102,560,561],{},"PyPIRegistry",[516,563,564],{},"pypi.org",[495,566,567,569,574,579],{},[516,568,60],{},[516,570,571],{},[102,572,573],{},"pkg:gem\u002F…",[516,575,576],{},[102,577,578],{},"RubyGemsRegistry",[516,580,581],{},"rubygems.org",[495,583,584,586,591,596],{},[516,585,64],{},[516,587,588],{},[102,589,590],{},"pkg:composer\u002F…",[516,592,593],{},[102,594,595],{},"PackagistRegistry",[516,597,598],{},"packagist.org",[495,600,601,603,608,613],{},[516,602,68],{},[516,604,605],{},[102,606,607],{},"pkg:alpm\u002F…",[516,609,610],{},[102,611,612],{},"AlpmRegistry",[516,614,615],{},"archlinux.org, aur.archlinux.org",[98,617,618,619,621],{},"Each registry has its own page under ",[113,620,41],{"href":42}," with the endpoints, the name rules and the traps.",[93,623,625],{"id":624},"the-four-lookups","The four lookups",[98,627,628,629,631],{},"Every adapter answers the same four questions. ",[113,630,16],{"href":17}," covers each in detail.",[140,633,635],{"className":201,"code":634,"language":204,"meta":145,"style":145},"import {\n  fetchPackageFromPURL,\n  fetchVersionsFromPURL,\n  fetchDependenciesFromPURL,\n  fetchMaintainersFromPURL,\n} from \"@agntn\u002Fregistries\";\n\nconst pkg = await fetchPackageFromPURL(\"pkg:npm\u002Flodash\");\nconst versions = await fetchVersionsFromPURL(\"pkg:cargo\u002Fserde\");\nconst deps = await fetchDependenciesFromPURL(\"pkg:pypi\u002Fflask@3.1.1\"); \u002F\u002F a version is required\nconst maintainers = await fetchMaintainersFromPURL(\"pkg:gem\u002Frails\");\n",[102,636,637,644,652,659,666,673,688,692,714,739,769],{"__ignoreMap":145},[149,638,639,641],{"class":151,"line":152},[149,640,212],{"class":211},[149,642,643],{"class":215}," {\n",[149,645,646,649],{"class":151,"line":243},[149,647,648],{"class":219},"  fetchPackageFromPURL",[149,650,651],{"class":215},",\n",[149,653,654,657],{"class":151,"line":250},[149,655,656],{"class":219},"  fetchVersionsFromPURL",[149,658,651],{"class":215},[149,660,661,664],{"class":151,"line":284},[149,662,663],{"class":219},"  fetchDependenciesFromPURL",[149,665,651],{"class":215},[149,667,668,671],{"class":151,"line":289},[149,669,670],{"class":219},"  fetchMaintainersFromPURL",[149,672,651],{"class":215},[149,674,675,678,680,682,684,686],{"class":151,"line":309},[149,676,677],{"class":215},"}",[149,679,227],{"class":226},[149,681,231],{"class":230},[149,683,110],{"class":234},[149,685,237],{"class":230},[149,687,240],{"class":215},[149,689,690],{"class":151,"line":324},[149,691,247],{"emptyLinePlaceholder":246},[149,693,694,696,698,700,702,704,706,708,710,712],{"class":151,"line":339},[149,695,254],{"class":253},[149,697,258],{"class":257},[149,699,261],{"class":253},[149,701,265],{"class":264},[149,703,220],{"class":268},[149,705,271],{"class":215},[149,707,237],{"class":230},[149,709,276],{"class":234},[149,711,237],{"class":230},[149,713,281],{"class":215},[149,715,717,719,722,724,726,729,731,733,735,737],{"class":151,"line":716},9,[149,718,254],{"class":253},[149,720,721],{"class":257}," versions",[149,723,261],{"class":253},[149,725,265],{"class":264},[149,727,728],{"class":268}," fetchVersionsFromPURL",[149,730,271],{"class":215},[149,732,237],{"class":230},[149,734,403],{"class":234},[149,736,237],{"class":230},[149,738,281],{"class":215},[149,740,742,744,747,749,751,754,756,758,761,763,766],{"class":151,"line":741},10,[149,743,254],{"class":253},[149,745,746],{"class":257}," deps",[149,748,261],{"class":253},[149,750,265],{"class":264},[149,752,753],{"class":268}," fetchDependenciesFromPURL",[149,755,271],{"class":215},[149,757,237],{"class":230},[149,759,760],{"class":234},"pkg:pypi\u002Fflask@3.1.1",[149,762,237],{"class":230},[149,764,765],{"class":215},"); ",[149,767,768],{"class":305},"\u002F\u002F a version is required\n",[149,770,772,774,777,779,781,784,786,788,790,792],{"class":151,"line":771},11,[149,773,254],{"class":253},[149,775,776],{"class":257}," maintainers",[149,778,261],{"class":253},[149,780,265],{"class":264},[149,782,783],{"class":268}," fetchMaintainersFromPURL",[149,785,271],{"class":215},[149,787,237],{"class":230},[149,789,437],{"class":234},[149,791,237],{"class":230},[149,793,281],{"class":215},[98,795,796,797,800,801,804,805,808,809,812,813,816],{},"A package that does not exist throws ",[102,798,799],{},"NotFoundError","; a PURL that cannot be parsed throws ",[102,802,803],{},"InvalidPURLError","; a type nobody registered throws ",[102,806,807],{},"UnknownEcosystemError",". All of them extend ",[102,810,811],{},"PkioError",", so one ",[102,814,815],{},"instanceof"," catches the lot.",[93,818,820],{"id":819},"one-package-shape","One package shape",[140,822,824],{"className":201,"code":823,"language":204,"meta":145,"style":145},"interface Package {\n  name: string;\n  description: string;\n  homepage: string;\n  documentation: string; \u002F\u002F docs.rs, readthedocs, rubydoc, or empty\n  repository: string; \u002F\u002F canonical https URL\n  licenses: string; \u002F\u002F SPDX expression\n  keywords: string[];\n  namespace: string; \u002F\u002F \"@vue\" on npm, \"laravel\" on Packagist, \"arch\" or \"aur\" on Arch\n  latestVersion: string;\n  metadata: Record\u003Cstring, unknown>; \u002F\u002F whatever else the registry knew\n}\n",[102,825,826,837,852,863,874,888,902,916,928,942,953,980],{"__ignoreMap":145},[149,827,828,831,835],{"class":151,"line":152},[149,829,830],{"class":253},"interface",[149,832,834],{"class":833},"sCrqT"," Package",[149,836,643],{"class":215},[149,838,839,843,846,850],{"class":151,"line":243},[149,840,842],{"class":841},"s0VbO","  name",[149,844,845],{"class":253},":",[149,847,849],{"class":848},"s8yaW"," string",[149,851,240],{"class":215},[149,853,854,857,859,861],{"class":151,"line":250},[149,855,856],{"class":841},"  description",[149,858,845],{"class":253},[149,860,849],{"class":848},[149,862,240],{"class":215},[149,864,865,868,870,872],{"class":151,"line":284},[149,866,867],{"class":841},"  homepage",[149,869,845],{"class":253},[149,871,849],{"class":848},[149,873,240],{"class":215},[149,875,876,879,881,883,885],{"class":151,"line":289},[149,877,878],{"class":841},"  documentation",[149,880,845],{"class":253},[149,882,849],{"class":848},[149,884,302],{"class":215},[149,886,887],{"class":305},"\u002F\u002F docs.rs, readthedocs, rubydoc, or empty\n",[149,889,890,893,895,897,899],{"class":151,"line":309},[149,891,892],{"class":841},"  repository",[149,894,845],{"class":253},[149,896,849],{"class":848},[149,898,302],{"class":215},[149,900,901],{"class":305},"\u002F\u002F canonical https URL\n",[149,903,904,907,909,911,913],{"class":151,"line":324},[149,905,906],{"class":841},"  licenses",[149,908,845],{"class":253},[149,910,849],{"class":848},[149,912,302],{"class":215},[149,914,915],{"class":305},"\u002F\u002F SPDX expression\n",[149,917,918,921,923,925],{"class":151,"line":339},[149,919,920],{"class":841},"  keywords",[149,922,845],{"class":253},[149,924,849],{"class":848},[149,926,927],{"class":215},"[];\n",[149,929,930,933,935,937,939],{"class":151,"line":716},[149,931,932],{"class":841},"  namespace",[149,934,845],{"class":253},[149,936,849],{"class":848},[149,938,302],{"class":215},[149,940,941],{"class":305},"\u002F\u002F \"@vue\" on npm, \"laravel\" on Packagist, \"arch\" or \"aur\" on Arch\n",[149,943,944,947,949,951],{"class":151,"line":741},[149,945,946],{"class":841},"  latestVersion",[149,948,845],{"class":253},[149,950,849],{"class":848},[149,952,240],{"class":215},[149,954,955,958,960,963,966,969,971,974,977],{"class":151,"line":771},[149,956,957],{"class":841},"  metadata",[149,959,845],{"class":253},[149,961,962],{"class":833}," Record",[149,964,965],{"class":215},"\u003C",[149,967,968],{"class":848},"string",[149,970,123],{"class":215},[149,972,973],{"class":848},"unknown",[149,975,976],{"class":215},">; ",[149,978,979],{"class":305},"\u002F\u002F whatever else the registry knew\n",[149,981,983],{"class":151,"line":982},12,[149,984,985],{"class":215},"}\n",[98,987,988,991],{},[102,989,990],{},"metadata"," is the escape hatch: crates.io download counts, AUR votes, Arch repo and architecture. Everything above it means the same thing on every registry.",[93,993,995],{"id":994},"next","Next",[997,998,999,1005,1010,1015],"ul",{},[1000,1001,1002,1004],"li",{},[113,1003,12],{"href":13},": the addressing scheme, scopes, namespaces and qualifiers.",[1000,1006,1007,1009],{},[113,1008,20],{"href":21},": the cache on unstorage and its lockfile.",[1000,1011,1012,1014],{},[113,1013,24],{"href":25},": the same lookups from a shell.",[1000,1016,1017,1019],{},[113,1018,28],{"href":29},": the AI SDK tool.",[1021,1022,1023],"style",{},"html pre.shiki code .sseY5, html code.shiki .sseY5{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#91B4D5}html pre.shiki code .sX7Zv, html code.shiki .sX7Zv{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#ADD7FF}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 .sP0CR, html code.shiki .sP0CR{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7}html pre.shiki code .sKlNE, html code.shiki .sKlNE{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#A6ACCD}html pre.shiki code .snHMy, html code.shiki .snHMy{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#ADD7FF}html pre.shiki code .stCPd, html code.shiki .stCPd{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#A6ACCD}html pre.shiki code .scVjq, html code.shiki .scVjq{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#A6ACCD}html pre.shiki code .sQ7BG, html code.shiki .sQ7BG{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#5DE4C7}html pre.shiki code .s1TYA, html code.shiki .s1TYA{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#91B4D5}html pre.shiki code .saoiD, html code.shiki .saoiD{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#E4F0FB}html pre.shiki code .sZW6a, html code.shiki .sZW6a{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7C0}html pre.shiki code .sULi6, html code.shiki .sULi6{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#E4F0FBD0}html pre.shiki code .spVlQ, html code.shiki .spVlQ{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E4F0FB}html pre.shiki code .sjhu3, html code.shiki .sjhu3{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#767C9DB0;--shiki-dark-font-style:italic}html pre.shiki code .sCrqT, html code.shiki .sCrqT{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#A6ACCDC0}html pre.shiki code .s0VbO, html code.shiki .s0VbO{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#A6ACCD}html pre.shiki code .s8yaW, html code.shiki .s8yaW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#A6ACCDC0}",{"title":145,"searchDepth":243,"depth":243,"links":1025},[1026,1027,1028,1029,1030,1031,1032,1033],{"id":95,"depth":243,"text":96},{"id":137,"depth":243,"text":138},{"id":197,"depth":243,"text":198},{"id":383,"depth":243,"text":384},{"id":486,"depth":243,"text":487},{"id":624,"depth":243,"text":625},{"id":819,"depth":243,"text":820},{"id":994,"depth":243,"text":995},"Install the package, resolve one PURL, and get the same package shape from six registries.","md",null,{"icon":39},{"title":10,"description":1034},"fqZcXn43D03_xqBu3mi8ed3icJNVcxv1IWD45RSPFOI",[1036,1041],{"title":12,"path":13,"stem":14,"description":1042,"children":-1},"The package URL is the only address the library takes. Parse it, build it, and know what each ecosystem does with the namespace.",1788462724332]