[{"data":1,"prerenderedAt":812},["ShallowReactive",2],{"navigation_docs":3,"-systems-serverless-registry":296,"-systems-serverless-registry-surround":807},[4,65,110],{"title":5,"path":6,"stem":7,"children":8,"icon":64},"Systems & Solutions","\u002Fsystems","1.systems\u002F0.index",[9,11,29,46],{"title":10,"path":6,"stem":7},"Overview",{"title":12,"path":13,"stem":14,"children":15},"Serverless Registry","\u002Fsystems\u002Fserverless-registry","1.systems\u002Fserverless-registry\u002F0.index",[16,17,21,25],{"title":10,"path":13,"stem":14},{"title":18,"path":19,"stem":20},"CloudFlare Worker","\u002Fsystems\u002Fserverless-registry\u002Fworker","1.systems\u002Fserverless-registry\u002F1.worker",{"title":22,"path":23,"stem":24},"sreg CLI","\u002Fsystems\u002Fserverless-registry\u002Fsreg-cli","1.systems\u002Fserverless-registry\u002F2.sreg-cli",{"title":26,"path":27,"stem":28},"GitHub Actions","\u002Fsystems\u002Fserverless-registry\u002Fgithub-actions","1.systems\u002Fserverless-registry\u002F3.github-actions",{"title":30,"path":31,"stem":32,"children":33},"Serverless Satis","\u002Fsystems\u002Fserverless-satis","1.systems\u002Fserverless-satis\u002F0.index",[34,35,39,43],{"title":10,"path":31,"stem":32},{"title":36,"path":37,"stem":38},"CLI generator","\u002Fsystems\u002Fserverless-satis\u002Fs3-satis","1.systems\u002Fserverless-satis\u002F1.s3-satis",{"title":40,"path":41,"stem":42},"GitHub Action","\u002Fsystems\u002Fserverless-satis\u002Fs3-satis-github-action","1.systems\u002Fserverless-satis\u002F2.s3-satis-github-action",{"title":18,"path":44,"stem":45},"\u002Fsystems\u002Fserverless-satis\u002Fcloudflare-worker","1.systems\u002Fserverless-satis\u002F3.cloudflare-worker",{"title":47,"path":48,"stem":49,"children":50},"WebPrint","\u002Fsystems\u002Fwebprint","1.systems\u002Fwebprint\u002F0.index",[51,52,56,60],{"title":10,"path":48,"stem":49},{"title":53,"path":54,"stem":55},"Server","\u002Fsystems\u002Fwebprint\u002Fserver","1.systems\u002Fwebprint\u002F1.server",{"title":57,"path":58,"stem":59},"Host Service","\u002Fsystems\u002Fwebprint\u002Fservice","1.systems\u002Fwebprint\u002F2.service",{"title":61,"path":62,"stem":63},"API","\u002Fsystems\u002Fwebprint\u002Fapi","1.systems\u002Fwebprint\u002F3.api","mdi:monitor",{"title":66,"path":67,"stem":68,"children":69,"icon":109},"Apps & Tools","\u002Fapps","2.apps\u002F0.index",[70,71,75,79,83,87,91],{"title":10,"path":67,"stem":68},{"title":72,"path":73,"stem":74},"File Hasher.NET","\u002Fapps\u002Ffile-hasher","2.apps\u002F1.file-hasher",{"title":76,"path":77,"stem":78},"GitFlow Tool","\u002Fapps\u002Fgit-flow","2.apps\u002F1.git-flow",{"title":80,"path":81,"stem":82},"NFC to RFID","\u002Fapps\u002Fnfc-to-rfid","2.apps\u002F1.nfc-to-rfid",{"title":84,"path":85,"stem":86},"PDF Scan Splitter","\u002Fapps\u002Fpdf-scan-splitter","2.apps\u002F1.pdf-scan-splitter",{"title":88,"path":89,"stem":90},"USB Scale Counter","\u002Fapps\u002Fusb-scale-counter","2.apps\u002F1.usb-scale-counter",{"title":92,"path":93,"stem":94,"children":95,"page":108},"Deprecated","\u002Fapps\u002Fdeprecated","2.apps\u002F9.deprecated",[96,100,104],{"title":97,"path":98,"stem":99},"Batch Comparator","\u002Fapps\u002Fdeprecated\u002Fcomparator","2.apps\u002F9.deprecated\u002Fcomparator",{"title":101,"path":102,"stem":103},"ContactBridge","\u002Fapps\u002Fdeprecated\u002Fcontact-bridge","2.apps\u002F9.deprecated\u002Fcontact-bridge",{"title":105,"path":106,"stem":107},"File Hasher.PY","\u002Fapps\u002Fdeprecated\u002Ffile-hasher-python","2.apps\u002F9.deprecated\u002Ffile-hasher-python",false,"teenyicons:terminal-outline",{"title":111,"path":112,"stem":113,"children":114,"icon":295},"Libraries & Packages","\u002Flibraries","3.libraries\u002F0.index",[115,116,173,214,227,239],{"title":10,"path":112,"stem":113},{"title":117,"path":118,"stem":119,"children":120,"page":108},"PHP & Laravel","\u002Flibraries\u002Fphp","3.libraries\u002F100.php",[121,125,129,133,137,141,145,149,153,157,161,165,169],{"title":122,"path":123,"stem":124},"Binary Tools","\u002Flibraries\u002Fphp\u002Fbinary-tools","3.libraries\u002F100.php\u002Fbinary-tools",{"title":126,"path":127,"stem":128},"Certificate Chain","\u002Flibraries\u002Fphp\u002Fcert-chain","3.libraries\u002F100.php\u002Fcert-chain",{"title":130,"path":131,"stem":132},"Eloquent Sluggable","\u002Flibraries\u002Fphp\u002Feloquent-sluggable","3.libraries\u002F100.php\u002Feloquent-sluggable",{"title":134,"path":135,"stem":136},"Eloquent Tokenable","\u002Flibraries\u002Fphp\u002Feloquent-tokenable","3.libraries\u002F100.php\u002Feloquent-tokenable",{"title":138,"path":139,"stem":140},"Eloquent ULID-able","\u002Flibraries\u002Fphp\u002Feloquent-ulidable","3.libraries\u002F100.php\u002Feloquent-ulidable",{"title":142,"path":143,"stem":144},"Eloquent UUID-able","\u002Flibraries\u002Fphp\u002Feloquent-uuidable","3.libraries\u002F100.php\u002Feloquent-uuidable",{"title":146,"path":147,"stem":148},"emSzmal Banking API wrapper","\u002Flibraries\u002Fphp\u002Femszmal","3.libraries\u002F100.php\u002Femszmal",{"title":150,"path":151,"stem":152},"EPC Tag Data Standard","\u002Flibraries\u002Fphp\u002Fepc-tds","3.libraries\u002F100.php\u002Fepc-tds",{"title":154,"path":155,"stem":156},"File Hasher.PHP","\u002Flibraries\u002Fphp\u002Ffile-hasher","3.libraries\u002F100.php\u002Ffile-hasher",{"title":158,"path":159,"stem":160},"Content Negotiable Responses for Laravel","\u002Flibraries\u002Fphp\u002Flaravel-content-negotiable-responses","3.libraries\u002F100.php\u002Flaravel-content-negotiable-responses",{"title":162,"path":163,"stem":164},"LPD Client and Server","\u002Flibraries\u002Fphp\u002Flpd","3.libraries\u002F100.php\u002Flpd",{"title":166,"path":167,"stem":168},"Partial Key Verification Library for PHP","\u002Flibraries\u002Fphp\u002Fpartial-key-verification","3.libraries\u002F100.php\u002Fpartial-key-verification",{"title":170,"path":171,"stem":172},"WebPrint.PHP","\u002Flibraries\u002Fphp\u002Fwebprint","3.libraries\u002F100.php\u002Fwebprint",{"title":174,"path":175,"stem":176,"children":177,"page":108},"Capacitor.JS","\u002Flibraries\u002Fcapacitor","3.libraries\u002F200.capacitor",[178,182,186,190,194,198,202,206,210],{"title":179,"path":180,"stem":181},"SPP Bluetooth Printer for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fbluetooth-printer","3.libraries\u002F200.capacitor\u002Fbluetooth-printer",{"title":183,"path":184,"stem":185},"Sunmi Camera Scanner for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fsunmi-camera-scanner","3.libraries\u002F200.capacitor\u002Fsunmi-camera-scanner",{"title":187,"path":188,"stem":189},"Sunmi Keyboard Handler for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fsunmi-keyboard-handler","3.libraries\u002F200.capacitor\u002Fsunmi-keyboard-handler",{"title":191,"path":192,"stem":193},"Sunmi Inner Printer SDK for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fsunmi-printer","3.libraries\u002F200.capacitor\u002Fsunmi-printer",{"title":195,"path":196,"stem":197},"Sunmi Scan Head  SDK for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fsunmi-scanhead","3.libraries\u002F200.capacitor\u002Fsunmi-scanhead",{"title":199,"path":200,"stem":201},"Sunmi Scan Head (lite) SDK for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fsunmi-scanhead-lite","3.libraries\u002F200.capacitor\u002Fsunmi-scanhead-lite",{"title":203,"path":204,"stem":205},"Sunmi UHF RFID SDK for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fsunmi-uhf","3.libraries\u002F200.capacitor\u002Fsunmi-uhf",{"title":207,"path":208,"stem":209},"Dymo M10 USB Scale driver for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fusb-scale","3.libraries\u002F200.capacitor\u002Fusb-scale",{"title":211,"path":212,"stem":213},"WebView WatchDog for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fwebview-watchdog","3.libraries\u002F200.capacitor\u002Fwebview-watchdog",{"title":215,"path":216,"stem":217,"children":218,"page":108},"JavaScript & TypeScript","\u002Flibraries\u002Fjs","3.libraries\u002F300.js",[219,223],{"title":220,"path":221,"stem":222},"Partial Key Verification Library for TS\u002FJS","\u002Flibraries\u002Fjs\u002Fpartial-key-verification","3.libraries\u002F300.js\u002Fpartial-key-verification",{"title":224,"path":225,"stem":226},"WebPrint.JS","\u002Flibraries\u002Fjs\u002Fwebprint","3.libraries\u002F300.js\u002Fwebprint",{"title":228,"path":229,"stem":230,"children":231,"page":108},".NET & C#","\u002Flibraries\u002Fnet","3.libraries\u002F400.net",[232,235],{"title":72,"path":233,"stem":234},"\u002Flibraries\u002Fnet\u002Ffile-hasher","3.libraries\u002F400.net\u002Ffile-hasher",{"title":236,"path":237,"stem":238},"Partial Key Verification Library for Compact Framework","\u002Flibraries\u002Fnet\u002Fpartial-key-verification","3.libraries\u002F400.net\u002Fpartial-key-verification",{"title":92,"path":240,"stem":241,"children":242,"page":108},"\u002Flibraries\u002Fdeprecated","3.libraries\u002F999.deprecated",[243,247,251,255,259,263,267,271,275,279,283,287,291],{"title":244,"path":245,"stem":246},"CoinHive API and Captcha","\u002Flibraries\u002Fdeprecated\u002Fcoinhive-api","3.libraries\u002F999.deprecated\u002Fcoinhive-api",{"title":248,"path":249,"stem":250},"Eloquent Encryptable","\u002Flibraries\u002Fdeprecated\u002Feloquent-encryptable","3.libraries\u002F999.deprecated\u002Feloquent-encryptable",{"title":252,"path":253,"stem":254},"Eloquent GUID-able","\u002Flibraries\u002Fdeprecated\u002Feloquent-guidable","3.libraries\u002F999.deprecated\u002Feloquent-guidable",{"title":256,"path":257,"stem":258},"Laravel Web Cron","\u002Flibraries\u002Fdeprecated\u002Flaravel-cron","3.libraries\u002F999.deprecated\u002Flaravel-cron",{"title":260,"path":261,"stem":262},"Laravel .env filler","\u002Flibraries\u002Fdeprecated\u002Flaravel-dotenv-filler","3.libraries\u002F999.deprecated\u002Flaravel-dotenv-filler",{"title":264,"path":265,"stem":266},"Laravel Permissions","\u002Flibraries\u002Fdeprecated\u002Flaravel-permissions","3.libraries\u002F999.deprecated\u002Flaravel-permissions",{"title":268,"path":269,"stem":270},"Polish Validator Rules for Laravel","\u002Flibraries\u002Fdeprecated\u002Flaravel-polish-validator","3.libraries\u002F999.deprecated\u002Flaravel-polish-validator",{"title":272,"path":273,"stem":274},"Laravel SMS Notification Channel","\u002Flibraries\u002Fdeprecated\u002Flaravel-sms","3.libraries\u002F999.deprecated\u002Flaravel-sms",{"title":276,"path":277,"stem":278},"Laravel SMS Notification Channel - JustSend.pl Driver","\u002Flibraries\u002Fdeprecated\u002Flaravel-sms-justsend","3.libraries\u002F999.deprecated\u002Flaravel-sms-justsend",{"title":280,"path":281,"stem":282},"Laravel SMS Notification Channel - SerwerSMS.pl Driver","\u002Flibraries\u002Fdeprecated\u002Flaravel-sms-serwersms","3.libraries\u002F999.deprecated\u002Flaravel-sms-serwersms",{"title":284,"path":285,"stem":286},"Diceware Generator","\u002Flibraries\u002Fdeprecated\u002Fpassphrase-generator","3.libraries\u002F999.deprecated\u002Fpassphrase-generator",{"title":288,"path":289,"stem":290},"Raw Printer tools for C#","\u002Flibraries\u002Fdeprecated\u002Fraw-printer","3.libraries\u002F999.deprecated\u002Fraw-printer",{"title":292,"path":293,"stem":294},"Signed Document","\u002Flibraries\u002Fdeprecated\u002Fsigned-document","3.libraries\u002F999.deprecated\u002Fsigned-document","charm:package",{"id":297,"title":298,"active":299,"body":300,"description":796,"extension":797,"featured":650,"featured_description":798,"featured_icon":799,"github":800,"layout":800,"links":800,"list_title":12,"meta":801,"navigation":802,"path":13,"platform":803,"seo":804,"stem":14,"system":800,"system_url":800,"type":805,"__hash__":806},"docs\u002F1.systems\u002Fserverless-registry\u002F0.index.md","Serverless Registry Solution",true,{"type":301,"value":302,"toc":786},"minimark",[303,311,316,319,335,339,365,379,383,407,414,418,492,496,546,550,619,681,687,691,752,756,759,782],[304,305,306,307,310],"p",{},"Serverless Registry is the successor of ",[308,309,30],"a",{"href":31},", which only handled Composer.",[312,313,315],"h2",{"id":314},"sample-use-cases","Sample Use Cases",[304,317,318],{},"Bellow are provided a few sample use cases:",[320,321,322,326,329,332],"ol",{},[323,324,325],"li",{},"Hosting a private registry with your company's internal packages, in every language you use, from a single place",[323,327,328],{},"Distributing commercial packages to your customers, with a separate read-only token (and set of packages) for each of them",[323,330,331],{},"Publishing from CI without any stored secrets, using GitHub Actions OIDC",[323,333,334],{},"Hosting binaries and installers as versioned generic packages",[312,336,338],{"id":337},"how-it-works","How it works",[304,340,341,344,345,352,353,358,359,364],{},[308,342,343],{"href":19},"Serverless Registry Worker"," runs on ",[308,346,351],{"href":347,":target":348,"rel":349},"https:\u002F\u002Fworkers.cloudflare.com\u002F","_blank",[350],"nofollow","CloudFlare Workers","\nand serves the native read protocols of the package managers, the publishing and administration API and a small admin panel.\nPackages are stored in a ",[308,354,357],{"href":355,":target":348,"rel":356},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fr2\u002F",[350],"CloudFlare R2"," bucket, credentials in\n",[308,360,363],{"href":361,":target":348,"rel":362},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fkv\u002F",[350],"CloudFlare KV",".",[304,366,367,368,375,376,378],{},"Versions are published with the ",[308,369,370,374],{"href":23},[371,372,373],"code",{},"sreg"," CLI",", usually from CI using\n",[308,377,26],{"href":27},". Archives go straight to and from R2 through presigned URLs\nand never pass through the Worker.",[312,380,382],{"id":381},"supported-ecosystems","Supported ecosystems",[384,385,386,389,392,395,398,401,404],"ul",{},[323,387,388],{},"Composer,",[323,390,391],{},"npm,",[323,393,394],{},"cargo (sparse index),",[323,396,397],{},"NuGet (V3),",[323,399,400],{},"Swift (package registry),",[323,402,403],{},"Maven \u002F Gradle,",[323,405,406],{},"generic files (JSON feed) - binaries, installers, anything else.",[304,408,409,410,413],{},"Only the ecosystems you need have to be enabled (",[371,411,412],{},"ECOSYSTEMS"," variable of the Worker).",[312,415,417],{"id":416},"features","Features",[384,419,420,443,452,458,468,474,480,486],{},[323,421,422,426,427,430,431,434,435,438,439,442],{},[423,424,425],"strong",{},"Credentials with grants"," - one named credential per consumer, pipeline or administrator, of exactly one kind (",[371,428,429],{},"read",", ",[371,432,433],{},"publish"," or ",[371,436,437],{},"admin","), with grants on packages (",[371,440,441],{},"acme\u002F*",") and version ranges.",[323,444,445,448,449,451],{},[423,446,447],{},"Transitive access"," - a ",[371,450,429],{}," grant also opens the versions of the registry's packages that the granted versions depend on.",[323,453,454,457],{},[423,455,456],{},"GitHub Actions OIDC"," - publish and install without stored secrets.",[323,459,460,463,464,467],{},[423,461,462],{},"Sign in through the browser"," - people use a login (password and optional one-time code) and ",[371,465,466],{},"sreg login"," to get short-lived tokens, approved per operation, instead of copying tokens around.",[323,469,470,473],{},[423,471,472],{},"Immutable versions"," - a published version never changes; an admin can yank or delete it.",[323,475,476,479],{},[423,477,478],{},"Admin panel"," - credentials, grants, packages, versions and settings, without any framework or external resources.",[323,481,482,485],{},[423,483,484],{},"Easy updates"," - a GitHub workflow in your own repository updates the Worker from upstream and keeps your bindings.",[323,487,488,491],{},[423,489,490],{},"Nothing to run"," - one Worker, one R2 bucket and one KV namespace; the free plan is enough for a small team.",[312,493,495],{"id":494},"requirements","Requirements",[384,497,498,511],{},[323,499,500,505,506,510],{},[308,501,504],{"href":502,":target":348,"rel":503},"https:\u002F\u002Fgithub.com\u002F",[350],"GitHub"," account - for the repository the Worker is deployed from and for publishing with ",[308,507,26],{"href":508,":target":348,"rel":509},"https:\u002F\u002Fgithub.com\u002Ffeatures\u002Factions",[350],",",[323,512,513,518,519],{},[308,514,517],{"href":515,":target":348,"rel":516},"https:\u002F\u002Fcloudflare.com\u002F",[350],"CloudFlare"," account:",[384,520,521,527,534],{},[323,522,523,524,510],{},"access to ",[308,525,351],{"href":347,":target":348,"rel":526},[350],[323,528,529,533],{},[308,530,532],{"href":355,":target":348,"rel":531},[350],"CloudFlare R2 Storage"," enabled,",[323,535,536,537,541,542,545],{},"optionally a domain configured and pointing to ",[308,538,540],{"href":515,":target":348,"rel":539},[350],"CloudFlare DNS"," servers (without one the registry runs on ",[371,543,544],{},"workers.dev",").",[312,547,549],{"id":548},"quick-start","Quick Start",[320,551,552,564,601,613],{},[323,553,554,557,558],{},[423,555,556],{},"Deploy"," the Worker using the button below. CloudFlare creates the Worker, the KV namespace and the R2 bucket for you.",[559,560,563],"u-button",{"href":561,"icon":562,"target":348},"https:\u002F\u002Fdeploy.workers.cloudflare.com\u002F?url=https:\u002F\u002Fgithub.com\u002Fkduma-OSS\u002Fserverless-registry-worker","simple-icons:cloudflare","Deploy to CloudFlare",[323,565,566,569,570,574,575,578,579,430,582,585,586,430,589,592,593,596,597,364],{},[423,567,568],{},"Configure"," it in the Worker's ",[571,572,573],"em",{},"Settings"," → ",[571,576,577],{},"Variables and Secrets",": ",[371,580,581],{},"PUBLIC_URL",[371,583,584],{},"S3_ENDPOINT",", and secrets ",[371,587,588],{},"S3_ACCESS_KEY_ID",[371,590,591],{},"S3_SECRET_ACCESS_KEY"," and ",[371,594,595],{},"SESSION_SECRET",". See ",[308,598,600],{"href":599},"\u002Fsystems\u002Fserverless-registry\u002Fworker#configuration","Worker configuration",[323,602,603,606,607,609,610,612],{},[423,604,605],{},"Open the registry"," in a browser and create the first admin: a password and, optionally, a one-time code for an authenticator app (shown once). Create a ",[371,608,433],{}," credential for each pipeline and a ",[371,611,429],{}," credential for each consumer.",[323,614,615,618],{},[423,616,617],{},"Publish"," a package:",[620,621,626],"pre",{"className":622,"code":623,"language":624,"meta":625,"style":625},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark monokai","export REGISTRY_URL=https:\u002F\u002Fpackages.example.com\nexport REGISTRY_TOKEN='ci-acme-sdk:…'\nsreg composer publish\n","bash","",[371,627,628,648,669],{"__ignoreMap":625},[629,630,633,637,641,645],"span",{"class":631,"line":632},"line",1,[629,634,636],{"class":635},"sTNss","export",[629,638,640],{"class":639},"ss--_"," REGISTRY_URL",[629,642,644],{"class":643},"sGXK2","=",[629,646,647],{"class":639},"https:\u002F\u002Fpackages.example.com\n",[629,649,651,653,656,658,662,666],{"class":631,"line":650},2,[629,652,636],{"class":635},[629,654,655],{"class":639}," REGISTRY_TOKEN",[629,657,644],{"class":643},[629,659,661],{"class":660},"siCPE","'",[629,663,665],{"class":664},"sLACW","ci-acme-sdk:…",[629,667,668],{"class":660},"'\n",[629,670,672,675,678],{"class":631,"line":671},3,[629,673,373],{"class":674},"sR7ES",[629,676,677],{"class":664}," composer",[629,679,680],{"class":664}," publish\n",[304,682,683,684,364],{},"Or, without a stored token, sign in through the browser: ",[371,685,686],{},"sreg composer publish --login",[312,688,690],{"id":689},"components","Components",[692,693,694,707],"table",{},[695,696,697],"thead",{},[698,699,700,704],"tr",{},[701,702,703],"th",{},"Component",[701,705,706],{},"Description",[708,709,710,721,730],"tbody",{},[698,711,712,718],{},[713,714,715],"td",{},[308,716,717],{"href":19},"Worker",[713,719,720],{},"CloudFlare Worker serving the registry and the admin panel",[698,722,723,727],{},[713,724,725],{},[308,726,22],{"href":23},[713,728,729],{},"Command line tool for publishing packages and writing credentials",[698,731,732,736],{},[713,733,734],{},[308,735,26],{"href":27},[713,737,738,430,740,430,743,592,746,749,750],{},[371,739,433],{},[371,741,742],{},"setup",[371,744,745],{},"auth",[371,747,748],{},"get"," actions built on ",[371,751,373],{},[312,753,755],{"id":754},"further-reading","Further reading",[304,757,758],{},"Detailed specifications are maintained next to the code:",[384,760,761,768,775],{},[323,762,763],{},[308,764,767],{"href":765,":target":348,"rel":766},"https:\u002F\u002Fgithub.com\u002Fkduma-OSS\u002Fserverless-registry-worker\u002Fblob\u002Fmain\u002Fdocs\u002Fspec.md",[350],"Specification",[323,769,770],{},[308,771,774],{"href":772,":target":348,"rel":773},"https:\u002F\u002Fgithub.com\u002Fkduma-OSS\u002Fserverless-registry-worker\u002Fblob\u002Fmain\u002Fdocs\u002Fapi.md",[350],"HTTP API contract",[323,776,777],{},[308,778,781],{"href":779,":target":348,"rel":780},"https:\u002F\u002Fgithub.com\u002Fkduma-OSS\u002Fserverless-registry-worker\u002Fblob\u002Fmain\u002Fdocs\u002Fdeployment.md",[350],"Deployment guide",[783,784,785],"style",{},"html pre.shiki code .sTNss, html code.shiki .sTNss{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .ss--_, html code.shiki .ss--_{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sGXK2, html code.shiki .sGXK2{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .siCPE, html code.shiki .siCPE{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sLACW, html code.shiki .sLACW{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sR7ES, html code.shiki .sR7ES{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}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 .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":625,"searchDepth":650,"depth":650,"links":787},[788,789,790,791,792,793,794,795],{"id":314,"depth":650,"text":315},{"id":337,"depth":650,"text":338},{"id":381,"depth":650,"text":382},{"id":416,"depth":650,"text":417},{"id":494,"depth":650,"text":495},{"id":548,"depth":650,"text":549},{"id":689,"depth":650,"text":690},{"id":754,"depth":650,"text":755},"Solution for hosting a private package registry for Composer, npm, cargo, NuGet, Swift, Maven and generic files without running any servers.","md","Private package registry for Composer, npm, cargo, NuGet, Swift, Maven and generic files hosted entirely on CloudFlare","mdi:package-variant-closed",null,{},{"title":10},"CloudFlare Worker & Rust & GitHub Actions",{"title":298,"description":796},"system","ua4Jtmg72DVxfjQ-YsYSYgifsHDKTGlyUG6tT3O_ESA",[808,810],{"title":10,"path":6,"stem":7,"description":809,"children":-1},"Solutions solving advanced problems in your business",{"title":18,"path":19,"stem":20,"description":811,"children":-1},"CloudFlare Worker serving a private package registry for Composer, npm, cargo, NuGet, Swift, Maven and generic files.",1793220971965]