[{"data":1,"prerenderedAt":2145},["ShallowReactive",2],{"categories":3,"projects":157},[4,27,41,55,76,89,105,118,131,144],{"id":5,"title":6,"body":7,"description":18,"extension":19,"kind":20,"meta":21,"navigation":22,"path":23,"seo":24,"stem":25,"__hash__":26},"categories\u002Fcategories\u002Fdarvaza.md","Darvaza",{"type":8,"value":9,"toc":14},"minimark",[10],[11,12,13],"p",{},"A family of Go libraries for building proxies and networking\ninfrastructure. An open-source project by Apptly Software.",{"title":15,"searchDepth":16,"depth":16,"links":17},"",2,[],"Go proxy and networking libraries.","md","umbrella",{},true,"\u002Fcategories\u002Fdarvaza",{"title":6,"description":18},"categories\u002Fdarvaza","LsPVpZAnH3RQcxeTw_b2V7YftItUdHiv_U46ek7GiI0",{"id":28,"title":29,"body":30,"description":34,"extension":19,"kind":35,"meta":36,"navigation":22,"path":37,"seo":38,"stem":39,"__hash__":40},"categories\u002Fcategories\u002Fgo.md","Go",{"type":8,"value":31,"toc":32},[],{"title":15,"searchDepth":16,"depth":16,"links":33},[],"Projects written in Go.","language",{},"\u002Fcategories\u002Fgo",{"title":29,"description":34},"categories\u002Fgo","ULWwBCwYo0s0dltCZKbfhGL3VDGzmJrIYgPF0aD381E",{"id":42,"title":43,"body":44,"description":48,"extension":19,"kind":49,"meta":50,"navigation":22,"path":51,"seo":52,"stem":53,"__hash__":54},"categories\u002Fcategories\u002Finfrastructure.md","Infrastructure",{"type":8,"value":45,"toc":46},[],{"title":15,"searchDepth":16,"depth":16,"links":47},[],"Deployment, orchestration, and platform tooling.",null,{},"\u002Fcategories\u002Finfrastructure",{"title":43,"description":48},"categories\u002Finfrastructure","4zhV0rSeRtvnzmBjj4hYBqXGoRGJ-HXglMTzbbeNURY",{"id":56,"title":57,"body":58,"description":70,"extension":19,"kind":20,"meta":71,"navigation":22,"path":72,"seo":73,"stem":74,"__hash__":75},"categories\u002Fcategories\u002Fkagal.md","Kagal",{"type":8,"value":59,"toc":68},[60],[11,61,62,63,67],{},"Named after the Sumerian ",[64,65,66],"em",{},"Ká.Gal"," (𒆍𒃲, \"Great Gate\"), Kagal is a\ncollection of TypeScript libraries for Cloudflare edge infrastructure\nand related tooling. An open-source project by Apptly Software.",{"title":15,"searchDepth":16,"depth":16,"links":69},[],"TypeScript libraries for Cloudflare edge infrastructure.",{},"\u002Fcategories\u002Fkagal",{"title":57,"description":70},"categories\u002Fkagal","9lgG7kCfdjUFD8pusQnAwcVCHU0EFn1W_8C33k4-xH0",{"id":77,"title":78,"body":79,"description":83,"extension":19,"kind":49,"meta":84,"navigation":22,"path":85,"seo":86,"stem":87,"__hash__":88},"categories\u002Fcategories\u002Fnetworking.md","Networking",{"type":8,"value":80,"toc":81},[],{"title":15,"searchDepth":16,"depth":16,"links":82},[],"Protocols, transports, and connectivity.",{},"\u002Fcategories\u002Fnetworking",{"title":78,"description":83},"categories\u002Fnetworking","Z3wIzhHCRt3IO9IPRDGzAkEGtYm13UdbarFAC_j9R-E",{"id":90,"title":91,"body":92,"description":99,"extension":19,"kind":20,"meta":100,"navigation":22,"path":101,"seo":102,"stem":103,"__hash__":104},"categories\u002Fcategories\u002Fpoupe.md","Poupe",{"type":8,"value":93,"toc":97},[94],[11,95,96],{},"Material Design component library for Vue. An open-source project\nby Apptly Software.",{"title":15,"searchDepth":16,"depth":16,"links":98},[],"Material Design component library for Vue.",{},"\u002Fcategories\u002Fpoupe",{"title":91,"description":99},"categories\u002Fpoupe","3HdL090wyXtyiBZLconBhol5p15dj1LZIfdqk5VGGuA",{"id":106,"title":107,"body":108,"description":112,"extension":19,"kind":49,"meta":113,"navigation":22,"path":114,"seo":115,"stem":116,"__hash__":117},"categories\u002Fcategories\u002Fsecurity.md","Security",{"type":8,"value":109,"toc":110},[],{"title":15,"searchDepth":16,"depth":16,"links":111},[],"Cryptography, authentication, and PKI.",{},"\u002Fcategories\u002Fsecurity",{"title":107,"description":112},"categories\u002Fsecurity","-vhE3ktjZGJKeNDg9ZbKoF6sRqhmnbaH8fZZYlCvdRc",{"id":119,"title":120,"body":121,"description":125,"extension":19,"kind":49,"meta":126,"navigation":22,"path":127,"seo":128,"stem":129,"__hash__":130},"categories\u002Fcategories\u002Ftooling.md","Tooling",{"type":8,"value":122,"toc":123},[],{"title":15,"searchDepth":16,"depth":16,"links":124},[],"Developer tools, build utilities, and CLI helpers.",{},"\u002Fcategories\u002Ftooling",{"title":120,"description":125},"categories\u002Ftooling","5syL8Jir-4gLAe_4IimZ6zP9SKf-N5XcWHE1-He2YbU",{"id":132,"title":133,"body":134,"description":138,"extension":19,"kind":35,"meta":139,"navigation":22,"path":140,"seo":141,"stem":142,"__hash__":143},"categories\u002Fcategories\u002Ftypescript.md","TypeScript",{"type":8,"value":135,"toc":136},[],{"title":15,"searchDepth":16,"depth":16,"links":137},[],"Projects written in TypeScript.",{},"\u002Fcategories\u002Ftypescript",{"title":133,"description":138},"categories\u002Ftypescript","ZvMEwtpsv0uX1pC0zKQ55ZHChbxJHDqfJXP3XS138pE",{"id":145,"title":146,"body":147,"description":151,"extension":19,"kind":49,"meta":152,"navigation":22,"path":153,"seo":154,"stem":155,"__hash__":156},"categories\u002Fcategories\u002Fui.md","UI",{"type":8,"value":148,"toc":149},[],{"title":15,"searchDepth":16,"depth":16,"links":150},[],"User interface components and design systems.",{},"\u002Fcategories\u002Fui",{"title":146,"description":151},"categories\u002Fui","9pERIpNBwMqn40vshxSDv8QA4NeK9JZrH-ysMGHUzP8",[158,183,208,291,320,343,432,466,501,537,579,611,642,822,843,1008,1255,1442,1515,1575,1655,1795,1884,1944,2053],{"id":159,"title":160,"body":161,"category":171,"description":175,"extension":19,"go":49,"licence":176,"meta":177,"navigation":22,"npm":160,"path":178,"repo":179,"seo":180,"stem":181,"__hash__":182},"projects\u002Fprojects\u002Fkagal-acme.md","@kagal\u002Facme",{"type":8,"value":162,"toc":169},[163,166],[11,164,165],{},"Platform-neutral ACME protocol library implementing both client and\nserver as resumable state machines with JSON-serialisable state and\ninjected dependencies — the machine owns protocol logic, the consumer\nowns persistence, key material, and policy. Works on any platform\nwith WebCrypto.",[11,167,168],{},"Extensions supported from day one: ARI (RFC 9773) and Profiles\n(draft-ietf-acme-profiles).",{"title":15,"searchDepth":16,"depth":16,"links":170},[],[172,173,174],"kagal","security","typescript","Platform-neutral ACME protocol library (RFC 8555) — client and server state machines.","MIT",{},"\u002Fprojects\u002Fkagal-acme","github:kagal-dev\u002Fpki\u002Fpackages\u002F@kagal-acme",{"title":160,"description":175},"projects\u002Fkagal-acme","vXkWbnq8WBkP8y2_omLgqT34CQ3Yg10we5kjKGePavw",{"id":184,"title":185,"body":186,"category":200,"description":201,"extension":19,"go":49,"licence":176,"meta":202,"navigation":22,"npm":185,"path":203,"repo":204,"seo":205,"stem":206,"__hash__":207},"projects\u002Fprojects\u002Fkagal-ca.md","@kagal\u002Fca",{"type":8,"value":187,"toc":198},[188,195],[11,189,190,191,194],{},"Private certificate authority running as a single Durable Object per\nCA with SQLite storage. Challenge-less and EAB-driven — standard ACME\nclients (certbot, acme.sh) talk to it over HTTPS. All ACME protocol\nlogic lives in ",[192,193],"npm-pkg",{"pkg":160},"; the CA handles HTTP parsing, SQLite\npersistence, dependency wiring, and DO alarm scheduling.",[11,196,197],{},"Beyond the ACME surface: management RPC plane (EAB provisioning,\nidentity enrollment, direct issuance, revocation), CRL distribution,\nand Certificate Transparency log (RFC 6962) with SCT embedding.",{"title":15,"searchDepth":16,"depth":16,"links":199},[],[172,173,174],"Challenge-less, EAB-driven private CA engine for Cloudflare Workers.",{},"\u002Fprojects\u002Fkagal-ca","github:kagal-dev\u002Fpki\u002Fpackages\u002F@kagal-ca",{"title":185,"description":201},"projects\u002Fkagal-ca","BlKOemBA1QqYNcyVCcBW7thP3-IEQMepf070onBehF0",{"id":209,"title":210,"body":211,"category":282,"description":284,"extension":19,"go":49,"licence":176,"meta":285,"navigation":22,"npm":210,"path":286,"repo":287,"seo":288,"stem":289,"__hash__":290},"projects\u002Fprojects\u002Fkagal-cross-test.md","@kagal\u002Fcross-test",{"type":8,"value":212,"toc":280},[213,229],[11,214,215,216,220,221,224,225,228],{},"A zero-dependency CLI that brings Unix-like ",[217,218,219],"code",{},"test"," (or ",[217,222,223],{},"[ ]",")\nconditions to any platform. Write conditional logic in ",[217,226,227],{},"package.json","\nscripts that works identically on Windows, macOS, and Linux.",[11,230,231,232,235,236,235,239,235,242,245,246,235,249,235,252,235,255,258,259,235,262,235,265,268,269,235,272,275,276,279],{},"Supports file tests (",[217,233,234],{},"-f",", ",[217,237,238],{},"-d",[217,240,241],{},"-e",[217,243,244],{},"-s","), string comparisons\n(",[217,247,248],{},"=",[217,250,251],{},"!=",[217,253,254],{},"-n",[217,256,257],{},"-z","), logical operators (",[217,260,261],{},"!",[217,263,264],{},"-a",[217,266,267],{},"-o","), and\ngrouping with parentheses. Variables (",[217,270,271],{},"$VAR",[217,273,274],{},"${VAR}",") are expanded\nfrom ",[217,277,278],{},"process.env"," before parsing.",{"title":15,"searchDepth":16,"depth":16,"links":281},[],[172,283,174],"tooling","Cross-platform shell conditions and file tests for npm scripts.",{},"\u002Fprojects\u002Fkagal-cross-test","github:kagal-dev\u002Fcross-test",{"title":210,"description":284},"projects\u002Fkagal-cross-test","bETXwIU9yBaw8vcK-kKR81PNuucKSZfO7ap0jpz4ZnY",{"id":292,"title":293,"body":294,"category":312,"description":313,"extension":19,"go":49,"licence":176,"meta":314,"navigation":22,"npm":293,"path":315,"repo":316,"seo":317,"stem":318,"__hash__":319},"projects\u002Fprojects\u002Fkagal-json-template.md","@kagal\u002Fjson-template",{"type":8,"value":295,"toc":310},[296,307],[11,297,298,299,302,303,306],{},"A compile-once, render-to-native-objects template engine for JSON\ndocuments. Variables use shell-style ",[217,300,301],{},"${var:-default}"," syntax; types\nare preserved (numbers stay numbers, booleans stay booleans) — no\nstring concatenation of JSON, no ",[217,304,305],{},"JSON.parse"," at render time.",[11,308,309],{},"Supports dotted key paths for nested context traversal, strict mode\nfor missing variables, and static analysis of variable metadata\nwithout requiring valid JSON input.",{"title":15,"searchDepth":16,"depth":16,"links":311},[],[172,283,174],"JSON template engine with shell-style ${var:-default} variable substitution.",{},"\u002Fprojects\u002Fkagal-json-template","github:kagal-dev\u002Fjson-template",{"title":293,"description":313},"projects\u002Fkagal-json-template","La0lTHQYHE610b11IRrQKkRAAxeLklh5LDAr2u4cfAM",{"id":321,"title":322,"body":323,"category":333,"description":336,"extension":19,"go":49,"licence":176,"meta":337,"navigation":22,"npm":322,"path":338,"repo":339,"seo":340,"stem":341,"__hash__":342},"projects\u002Fprojects\u002Fpoupe-css.md","@poupe\u002Fcss",{"type":8,"value":324,"toc":331},[325,328],[11,326,327],{},"Shared foundation for all CSS output in the Poupe stack, but\nframework-agnostic — usable standalone in any TypeScript project.",[11,329,330],{},"Converts between camelCase and kebab-case property names, builds\nand merges CSS declaration objects, formats nested rule blocks into\nflat CSS strings, and provides type-safe helpers for common\nshorthand expansions.",{"title":15,"searchDepth":16,"depth":16,"links":332},[],[334,335,174],"poupe","ui","TypeScript utility library for CSS property manipulation, formatting, and CSS-in-JS operations.",{},"\u002Fprojects\u002Fpoupe-css","github:poupe-ui\u002Fpoupe\u002Fpackages\u002F@poupe-css",{"title":322,"description":336},"projects\u002Fpoupe-css","DxLATTTOgyv1_42RcneyAub-dhw3SR672Ppu64k2FAM",{"id":344,"title":345,"body":346,"category":424,"description":425,"extension":19,"go":49,"licence":176,"meta":426,"navigation":22,"npm":345,"path":427,"repo":428,"seo":429,"stem":430,"__hash__":431},"projects\u002Fprojects\u002Fpoupe-eslint-config.md","@poupe\u002Feslint-config",{"type":8,"value":347,"toc":422},[348,375],[11,349,350,351,355,356,360,361,364,365,369,370,374],{},"Opinionated ",[192,352],{"pkg":353,"label":354},"eslint","ESLint"," 9\nflat-config preset used across all Poupe and Apptly repositories.\nLayers ",[192,357],{"pkg":358,"label":359},"@stylistic\u002Feslint-plugin","@stylistic","\nformatting,\n",[192,362],{"pkg":363},"typescript-eslint"," strict rules,\n",[192,366],{"pkg":367,"label":368},"eslint-plugin-unicorn","unicorn"," best-practices,\nand ",[192,371],{"pkg":372,"label":373},"eslint-plugin-perfectionist","perfectionist","\nimport sorting into a single shareable config.",[11,376,377,378,382,383,387,388,392,393,397,398,401,402,406,407,410,411,235,414,417,418,421],{},"Framework-aware: ",[192,379],{"pkg":380,"label":381},"vue","Vue"," SFC support,\n",[192,384],{"pkg":385,"label":386},"eslint-plugin-tsdoc","tsdoc"," enforcement,\n",[192,389],{"pkg":390,"label":391},"eslint-plugin-markdownlint","markdownlint"," for\nprose files, ",[192,394],{"pkg":395,"label":396},"eslint-plugin-jsonc","jsonc"," for\nconfig files, and ",[192,399],{"pkg":400},"@eslint\u002Fcss"," with\n",[192,403],{"pkg":404,"label":405},"tailwindcss","Tailwind CSS"," v4 ",[217,408,409],{},"@theme","\nsyntax validation. Provides ",[217,412,413],{},"defineConfig",[217,415,416],{},"withPoupe",", and\n",[217,419,420],{},"withConfig"," helpers for composing project-specific overrides on\ntop of the preset.",{"title":15,"searchDepth":16,"depth":16,"links":423},[],[334,283,174],"Shareable ESLint flat-config preset for TypeScript, Vue, and Tailwind CSS projects.",{},"\u002Fprojects\u002Fpoupe-eslint-config","github:poupe-ui\u002Feslint-config",{"title":345,"description":425},"projects\u002Fpoupe-eslint-config","yXz5q3Wazg8TnerlT21lcHIAhoQ_qFHdaa81kdpA6tw",{"id":433,"title":434,"body":435,"category":458,"description":459,"extension":19,"go":49,"licence":176,"meta":460,"navigation":22,"npm":434,"path":461,"repo":462,"seo":463,"stem":464,"__hash__":465},"projects\u002Fprojects\u002Fpoupe-eslint-plugin-tailwindcss.md","@poupe\u002Feslint-plugin-tailwindcss",{"type":8,"value":436,"toc":456},[437,453],[11,438,439,440,442,443,445,446,448,449,452],{},"Twenty ",[192,441],{"label":354,"pkg":353}," rules purpose-built\nfor ",[192,444],{"label":405,"pkg":404}," v4's native\nCSS syntax — ",[217,447,409],{}," functions, ",[217,450,451],{},"@apply"," directives, modifier\nchains, and utility class patterns. Catches conflicting utilities, arbitrary\nvalue overuse, and spacing inconsistencies at lint time.",[11,454,455],{},"Ships minimal, recommended, and strict presets. Also exports a CSS\nparser API so teams can write their own Tailwind-aware rules without\nreimplementing the tokenisation layer.",{"title":15,"searchDepth":16,"depth":16,"links":457},[],[334,283,174],"ESLint plugin for Tailwind CSS v4 — syntax validation, best practices, and auto-fix.",{},"\u002Fprojects\u002Fpoupe-eslint-plugin-tailwindcss","github:poupe-ui\u002Feslint-plugin-tailwindcss",{"title":434,"description":459},"projects\u002Fpoupe-eslint-plugin-tailwindcss","n_n_I24IJPykPgV9caZlrCLEa3lPx1SOiZNuEtq09Hc",{"id":467,"title":468,"body":469,"category":492,"description":493,"extension":19,"go":49,"licence":494,"meta":495,"navigation":22,"npm":468,"path":496,"repo":497,"seo":498,"stem":499,"__hash__":500},"projects\u002Fprojects\u002Fpoupe-material-color-utilities.md","@poupe\u002Fmaterial-color-utilities",{"type":8,"value":470,"toc":490},[471,479],[11,472,473,474,478],{},"Fork of Google's ",[192,475],{"label":476,"pkg":477},"material-color-utilities","@material\u002Fmaterial-color-utilities",".\nThe upstream library implements the HCT colour space, tonal palette\ngeneration, dynamic colour schemes, and image-to-seed extraction\nthat power Material Design 3 — but Google rarely publishes the\nTypeScript package to npm.",[11,480,481,482,485,486,489],{},"This fork carries no functional changes. It re-scopes to ",[217,483,484],{},"@poupe",",\nfixes bare ESM import specifiers (missing ",[217,487,488],{},".js"," extensions), and\npublishes timely releases so downstream packages can depend on a\nstable npm artefact.",{"title":15,"searchDepth":16,"depth":16,"links":491},[],[334,335,174],"Fork of Google's Material Design 3 colour algorithms — timely npm releases with ESM packaging fixes.","Apache-2.0",{},"\u002Fprojects\u002Fpoupe-material-color-utilities","github:poupe-ui\u002Fmaterial-color-utilities",{"title":468,"description":493},"projects\u002Fpoupe-material-color-utilities","R29M9xMkzMohV612agAPaCabk016Eg1PdrBf9Z1Z9A8",{"id":502,"title":503,"body":504,"category":529,"description":530,"extension":19,"go":49,"licence":176,"meta":531,"navigation":22,"npm":503,"path":532,"repo":533,"seo":534,"stem":535,"__hash__":536},"projects\u002Fprojects\u002Fpoupe-nuxt.md","@poupe\u002Fnuxt",{"type":8,"value":505,"toc":527},[506,524],[11,507,508,509,513,514,516,517,519,520,523],{},"Drop-in ",[192,510],{"pkg":511,"label":512},"nuxt","Nuxt"," integration for the\nfull Poupe UI stack. Add the module, provide a seed colour, and\neverything else is wired automatically —\n",[192,515],{"pkg":404,"label":405}," plugin, theme\nCSS injection, ",[192,518],{"pkg":380,"label":381}," component\nregistration,\nand ",[192,521],{"pkg":522},"@nuxtjs\u002Fcolor-mode"," integration.",[11,525,526],{},"Handles SSR-safe colour-scheme hydration, tree-shakes unused\ncomponents via the auto-import resolver, and exposes module options\nfor overriding theme tokens, icon sets, and scrollbar styling\nwithout ejecting from the defaults.",{"title":15,"searchDepth":16,"depth":16,"links":528},[],[334,335,174],"Nuxt module that auto-configures Poupe UI — theme CSS, component registration, and colour-mode support.",{},"\u002Fprojects\u002Fpoupe-nuxt","github:poupe-ui\u002Fpoupe\u002Fpackages\u002F@poupe-nuxt",{"title":503,"description":530},"projects\u002Fpoupe-nuxt","KLBb_hkRwUvYmyi431kb6igQYTD7-G6ZHWwbPYhDtW0",{"id":538,"title":539,"body":540,"category":571,"description":572,"extension":19,"go":49,"licence":176,"meta":573,"navigation":22,"npm":539,"path":574,"repo":575,"seo":576,"stem":577,"__hash__":578},"projects\u002Fprojects\u002Fpoupe-tailwindcss.md","@poupe\u002Ftailwindcss",{"type":8,"value":541,"toc":569},[542,566],[11,543,544,545,548,549,551,552,554,555,558,559,235,562,565],{},"Bridges ",[192,546],{"pkg":547},"@poupe\u002Ftheme-builder"," tokens into\n",[192,550],{"pkg":404,"label":405}," v4's ",[217,553,409],{},"\nlayer. Colour roles, typography scales, elevation levels,\nand shape tokens are registered as CSS custom properties so they\nparticipate in Tailwind's utility generation — ",[217,556,557],{},"bg-primary",",\n",[217,560,561],{},"text-on-surface",[217,563,564],{},"rounded-lg"," all resolve to the active theme.",[11,567,568],{},"Supports light\u002Fdark mode switching through the token layer, custom\nbreakpoints, and composing multiple theme sources into a single\nTailwind configuration.",{"title":15,"searchDepth":16,"depth":16,"links":570},[],[334,335,174],"Tailwind CSS v4 plugin that injects Poupe theme tokens as design tokens and utility classes.",{},"\u002Fprojects\u002Fpoupe-tailwindcss","github:poupe-ui\u002Fpoupe\u002Fpackages\u002F@poupe-tailwindcss",{"title":539,"description":572},"projects\u002Fpoupe-tailwindcss","cIdCxNj-mfJbAz9b6YYhQ_sXnAG0JH7hyppmjXZFVnY",{"id":580,"title":547,"body":581,"category":603,"description":604,"extension":19,"go":49,"licence":176,"meta":605,"navigation":22,"npm":547,"path":606,"repo":607,"seo":608,"stem":609,"__hash__":610},"projects\u002Fprojects\u002Fpoupe-theme-builder.md",{"type":8,"value":582,"toc":601},[583,589],[11,584,585,586,588],{},"Takes a seed colour and runs it through the Material Design 3\ntonal algorithm (via ",[192,587],{"pkg":468},") to produce\na complete colour scheme — primary, secondary, tertiary, error,\nsurface variants, and their on-colour counterparts in both light\nand dark modes.",[11,590,591,592,558,594,597,598,600],{},"The output is a structured token tree that downstream\npackages (",[192,593],{"pkg":539},[192,595],{"pkg":596},"@poupe\u002Fvue",") consume directly. Supports custom\ncolour overrides, additional palette sources, and serialisation\nto CSS custom properties via ",[192,599],{"pkg":322},".",{"title":15,"searchDepth":16,"depth":16,"links":602},[],[334,335,174],"Design token management and theme generation for Material Design 3 colour schemes.",{},"\u002Fprojects\u002Fpoupe-theme-builder","github:poupe-ui\u002Fpoupe\u002Fpackages\u002F@poupe-theme-builder",{"title":547,"description":604},"projects\u002Fpoupe-theme-builder","yKj3jtdSFc8Qh0yN0BfyYQHOXwU8LKL4xeSzeJjZJ38",{"id":612,"title":596,"body":613,"category":634,"description":635,"extension":19,"go":49,"licence":176,"meta":636,"navigation":22,"npm":596,"path":637,"repo":638,"seo":639,"stem":640,"__hash__":641},"projects\u002Fprojects\u002Fpoupe-vue.md",{"type":8,"value":614,"toc":632},[615,629],[11,616,617,618,621,622,625,626,628],{},"Built on ",[192,619],{"pkg":620},"reka-ui"," headless primitives for accessibility, styled with\n",[192,623],{"pkg":624},"tailwind-variants"," for token-driven theming. Each component resolves\nits colours and spacing from ",[192,627],{"pkg":539}," tokens, so\nswitching the seed colour re-themes the entire UI automatically.",[11,630,631],{},"Ships a component resolver for bundler auto-imports, composables\nfor reactive theme state, a colour-scheme manager (light \u002F dark \u002F\nsystem), and a story viewer for developing components in isolation.",{"title":15,"searchDepth":16,"depth":16,"links":633},[],[334,335,174],"Vue 3 component library with themed, accessible UI components built on reka-ui.",{},"\u002Fprojects\u002Fpoupe-vue","github:poupe-ui\u002Fpoupe\u002Fpackages\u002F@poupe-vue",{"title":596,"description":635},"projects\u002Fpoupe-vue","hpjLjekBvL004hZcL4kNRXIZEU3lLb_SxoIcBIhtroI",{"id":643,"title":644,"body":645,"category":812,"description":815,"extension":19,"go":644,"licence":176,"meta":816,"navigation":22,"npm":49,"path":817,"repo":818,"seo":819,"stem":820,"__hash__":821},"projects\u002Fprojects\u002Fdarvaza-cache.md","darvaza.org\u002Fcache",{"type":8,"value":646,"toc":808},[647,695,700,788,792],[11,648,649,650,653,654,659,660,235,663,666,667,670,671,674,675,678,679,682,683,686,687,690,691,694],{},"Generic cache abstraction keyed by any ",[217,651,652],{},"comparable"," type. The\n",[655,656],"go-pkg",{"mod":644,":short":657,"sym":658},"true","Cache"," interface\nprovides ",[217,661,662],{},"Get",[217,664,665],{},"Set",", and ",[217,668,669],{},"Remove"," with per-entry expiration. Data\nflows through a ",[217,672,673],{},"Sink"," abstraction — ",[217,676,677],{},"ByteSink"," for raw bytes,\n",[217,680,681],{},"GobSink[T]"," for Gob-encoded objects, or a custom ",[217,684,685],{},"SinkFn[T]"," built\nfrom user-supplied encode\u002Fdecode functions.\nA ",[655,688],{"mod":644,":short":657,"sym":689},"Store"," manages named\ncache namespaces with size limits and pluggable data loaders\n(",[217,692,693],{},"Getter[K]",").",[696,697,699],"h2",{"id":698},"backends","Backends",[701,702,703,719],"table",{},[704,705,706],"thead",{},[707,708,709,713,716],"tr",{},[710,711,712],"th",{},"Backend",[710,714,715],{},"Module",[710,717,718],{},"Description",[720,721,722,737,754,772],"tbody",{},[707,723,724,728,734],{},[725,726,727],"td",{},"simplelru",[725,729,730],{},[731,732],"badge-version-go",{"mod":733},"darvaza.org\u002Fcache\u002Fx\u002Fsimplelru",[725,735,736],{},"Non-thread-safe LRU with TTL; evicts expired entries first",[707,738,739,742,747],{},[725,740,741],{},"memcache",[725,743,744],{},[731,745],{"mod":746},"darvaza.org\u002Fcache\u002Fx\u002Fmemcache",[725,748,749,750,753],{},"Thread-safe in-memory cache with ",[217,751,752],{},"SingleFlight"," stampede prevention",[707,755,756,759,764],{},[725,757,758],{},"groupcache",[725,760,761],{},[731,762],{"mod":763},"darvaza.org\u002Fcache\u002Fx\u002Fgroupcache",[725,765,766,767,771],{},"Distributed caching via ",[655,768],{"mod":769,"label":770},"github.com\u002Fmailgun\u002Fgroupcache\u002Fv2","mailgun\u002Fgroupcache"," with HTTP peer discovery",[707,773,774,777,782],{},[725,775,776],{},"protosink",[725,778,779],{},[731,780],{"mod":781},"darvaza.org\u002Fcache\u002Fx\u002Fprotosink",[725,783,784,787],{},[217,785,786],{},"TSink[T]"," implementation using Protocol Buffers encoding",[696,789,791],{"id":790},"see-also","See also",[793,794,795,802],"ul",{},[796,797,798,799],"li",{},"DNS resolver (uses simplelru) — ",[655,800],{"mod":801},"darvaza.org\u002Fresolver",[796,803,804,805],{},"Structured logging — ",[655,806],{"mod":807},"darvaza.org\u002Fslog",{"title":15,"searchDepth":16,"depth":16,"links":809},[810,811],{"id":698,"depth":16,"text":699},{"id":790,"depth":16,"text":791},[813,814],"darvaza","go","Generic cache abstraction with TTL, stampede control, and pluggable backends.",{},"\u002Fprojects\u002Fdarvaza-cache","github:darvaza-proxy\u002Fcache",{"title":644,"description":815},"projects\u002Fdarvaza-cache","4imr3BxK5fU3oaiGTW2dq4CYXU0xDl83UclUMBPLpes",{"id":823,"title":824,"body":825,"category":835,"description":836,"extension":19,"go":824,"licence":176,"meta":837,"navigation":22,"npm":49,"path":838,"repo":839,"seo":840,"stem":841,"__hash__":842},"projects\u002Fprojects\u002Fdarvaza-core.md","darvaza.org\u002Fcore",{"type":8,"value":826,"toc":833},[827,830],[11,828,829],{},"Fundamental set of helpers used across Darvaza projects. Zero external\ndependencies — only Go's standard library is allowed.",[11,831,832],{},"Covers type constraints, context utilities, network helpers, generic\nslice\u002Fmap operations, error handling with compound errors, stack\ntracing, synchronisation primitives, and testing assertions.",{"title":15,"searchDepth":16,"depth":16,"links":834},[],[813,814],"Fundamental helpers for Darvaza projects — type constraints, context utilities, error handling, and more.",{},"\u002Fprojects\u002Fdarvaza-core","github:darvaza-proxy\u002Fcore",{"title":824,"description":836},"projects\u002Fdarvaza-core","FIcWYd4gEEmc4lDnr4PYxU5Tw7aSJBg_ImzikVlz6WY",{"id":844,"title":845,"body":846,"category":999,"description":1001,"extension":19,"go":845,"licence":176,"meta":1002,"navigation":22,"npm":49,"path":1003,"repo":1004,"seo":1005,"stem":1006,"__hash__":1007},"projects\u002Fprojects\u002Fdarvaza-penne.md","darvaza.org\u002Fpenne",{"type":8,"value":847,"toc":992},[848,853,857,860,881,885,916,920,923,927,930,974,976],[11,849,850,851,600],{},"Config-driven, pipeline-oriented DNS resolver that allows complex\nworkflows to be defined simply. Built using the Darvaza sidecar\nengine and ",[655,852],{"mod":801},[696,854,856],{"id":855},"architecture","Architecture",[11,858,859],{},"Penne uses a pipeline\u002Fmiddleware design with three resolver modes:",[793,861,862,869,875],{},[796,863,864,868],{},[865,866,867],"strong",{},"Iterative"," — performs iterative DNS resolution from root servers.",[796,870,871,874],{},[865,872,873],{},"Forwarder"," — forwards queries to upstream resolvers.",[796,876,877,880],{},[865,878,879],{},"Chained"," — chains multiple resolver strategies together.",[696,882,884],{"id":883},"key-features","Key features",[793,886,887,893,906],{},[796,888,889,892],{},[865,890,891],{},"Horizons"," — named CIDR sets that route, annotate, or filter DNS\nrequests based on the client's IP address, enabling split-horizon DNS.",[796,894,895,898,899,902,903,694],{},[865,896,897],{},"Pattern matching"," — uses globbing (via\n",[655,900],{"mod":901},"github.com\u002Fgobwas\u002Fglob",") instead of regex for suffix\nmatching and name rewrites, with capture group replacements\n(",[217,904,905],{},"${n}",[796,907,908,911,912,915],{},[865,909,910],{},"Capabilities"," — domain-specific resolver restriction, record\nfiltering (e.g., dropping ",[217,913,914],{},"AAAA"," records), and request\u002Fresponse\nrewriting.",[696,917,919],{"id":918},"configuration","Configuration",[11,921,922],{},"Penne is designed to be config-driven, with YAML or JSON\nconfiguration files defining resolver pipelines, horizons,\nand transformation rules. This allows complex DNS workflows to\nbe declared without writing code.",[696,924,926],{"id":925},"planned-features","Planned features",[11,928,929],{},"Future versions of Penne will adopt a plugin architecture — each\ncapability below is planned as a standalone plugin, so you only\ninstall the pieces you need. The planned plugins are:",[793,931,932,938,944,950,956,962,968],{},[796,933,934,937],{},[865,935,936],{},"Authoritative DNS"," — host your own DNS zones with persistent\nstorage, turning Penne into a full network DNS server.",[796,939,940,943],{},[865,941,942],{},"DHCP server"," — integrated DHCP lease management alongside DNS,\nkeeping address assignment and name resolution under one roof.",[796,945,946,949],{},[865,947,948],{},"IPAM server"," — IP Address Management for tracking address\nusage, planning subnets, and managing allocations across the\nnetwork.",[796,951,952,955],{},[865,953,954],{},"Security licence (Protective DNS)"," — threat protection at the\nDNS layer, blocking known malicious domains, phishing sites, and\nmalware command-and-control servers.",[796,957,958,961],{},[865,959,960],{},"Enhanced reporting"," — richer analytics and reporting on DNS\nactivity across the network.",[796,963,964,967],{},[865,965,966],{},"Blocklists"," — network-wide domain blocking, similar to ad-blockers\nbut applied at the server level for all clients.",[796,969,970,973],{},[865,971,972],{},"HA clustering"," — high-availability mode with multiple Penne nodes\nstaying in sync to provide failover if one node goes down.",[696,975,791],{"id":790},[793,977,978,983,988],{},[796,979,980,981],{},"DNS resolver library — ",[655,982],{"mod":801},[796,984,985,986],{},"Core helpers — ",[655,987],{"mod":824},[796,989,804,990],{},[655,991],{"mod":807},{"title":15,"searchDepth":16,"depth":16,"links":993},[994,995,996,997,998],{"id":855,"depth":16,"text":856},{"id":883,"depth":16,"text":884},{"id":918,"depth":16,"text":919},{"id":925,"depth":16,"text":926},{"id":790,"depth":16,"text":791},[813,1000,814],"networking","Config-driven, pipeline-oriented DNS resolver that allows complex workflows to be defined simply, with split-horizon DNS support built on the Darvaza sidecar engine and resolver interface.",{},"\u002Fprojects\u002Fdarvaza-penne","github:darvaza-proxy\u002Fpenne",{"title":845,"description":1001},"projects\u002Fdarvaza-penne","tm-DcdVgV96VIrOQX_JnJaLGU9KIgOxYccdmHiEDeoo",{"id":1009,"title":801,"body":1010,"category":1247,"description":1248,"extension":19,"go":801,"licence":176,"meta":1249,"navigation":22,"npm":49,"path":1250,"repo":1251,"seo":1252,"stem":1253,"__hash__":1254},"projects\u002Fprojects\u002Fdarvaza-resolver.md",{"type":8,"value":1011,"toc":1241},[1012,1031,1051,1055,1110,1113,1117,1182,1186,1222,1224],[11,1013,1014,1015,1019,1020,558,1023,1026,1027,1030],{},"Pluggable DNS resolver library built on ",[655,1016],{"mod":1017,"label":1018},"github.com\u002Fmiekg\u002Fdns","miekg\u002Fdns",".\nDefines the ",[655,1021],{"mod":801,"sym":1022,":short":657},"Resolver",[655,1024],{"mod":801,"sym":1025,":short":657},"Lookuper",",\nand ",[655,1028],{"mod":801,"sym":1029,":short":657},"Exchanger","\ninterfaces that decouple DNS consumers from the transport and\nresolution strategy.",[11,1032,1033,1034,1037,1038,558,1041,1044,1045,1026,1047,1050],{},"Three resolver constructors cover the common cases:\n",[217,1035,1036],{},"SystemResolver"," wraps ",[655,1039],{"mod":1040,"sym":1022},"net",[217,1042,1043],{},"NewResolver"," delegates to any ",[217,1046,1025],{},[217,1048,1049],{},"NewRootResolver"," performs iterative resolution from the\nroot servers.",[696,1052,1054],{"id":1053},"lookuper-implementations","Lookuper implementations",[701,1056,1057,1065],{},[704,1058,1059],{},[707,1060,1061,1063],{},[710,1062,1025],{},[710,1064,718],{},[720,1066,1067,1081,1091,1101],{},[707,1068,1069,1074],{},[725,1070,1071],{},[655,1072],{"mod":801,"sym":1073,":short":657},"SingleLookuper",[725,1075,1076,1077],{},"Forwards queries to a single ",[655,1078],{"mod":801,"sym":1079,":short":657,"dir":1080},"Client","pkg\u002Fclient",[707,1082,1083,1088],{},[725,1084,1085],{},[655,1086],{"mod":801,"sym":1087,":short":657},"MultiLookuper",[725,1089,1090],{},"Fans out to multiple lookupers, returns the first response",[707,1092,1093,1098],{},[725,1094,1095],{},[655,1096],{"mod":801,"sym":1097,":short":657},"RootLookuper",[725,1099,1100],{},"Iterative resolution from root nameservers",[707,1102,1103,1107],{},[725,1104,1105],{},[655,1106],{"mod":801,"sym":752,":short":657},[725,1108,1109],{},"Deduplicates identical concurrent queries",[11,1111,1112],{},"Well-known recursive resolvers (Google, Cloudflare, Quad9) are\navailable as one-liner constructors.",[696,1114,1116],{"id":1115},"client-middleware","Client middleware",[701,1118,1119,1128],{},[704,1120,1121],{},[707,1122,1123,1126],{},[710,1124,1125],{},"Middleware",[710,1127,718],{},[720,1129,1130,1150,1159,1169],{},[707,1131,1132,1137],{},[725,1133,1134],{},[655,1135],{"mod":801,"sym":1136,":short":657,"dir":1080},"Auto",[725,1138,1139,1140,235,1143,235,1146,1149],{},"Selects protocol by server prefix (",[217,1141,1142],{},"udp:\u002F\u002F",[217,1144,1145],{},"tcp:\u002F\u002F",[217,1147,1148],{},"tls:\u002F\u002F","), retries truncated UDP as TCP",[707,1151,1152,1156],{},[725,1153,1154],{},[655,1155],{"mod":801,"sym":752,":short":657,"dir":1080},[725,1157,1158],{},"Per-server deduplication with short-lived caching",[707,1160,1161,1166],{},[725,1162,1163],{},[655,1164],{"mod":801,"sym":1165,":short":657,"dir":1080},"WorkerPool",[725,1167,1168],{},"Concurrency limiter for exchange calls",[707,1170,1171,1176],{},[725,1172,1173],{},[655,1174],{"mod":801,"sym":1175,":short":657,"dir":1080},"NoAAAA",[725,1177,1178,1179,1181],{},"Strips ",[217,1180,914],{}," records for IPv4-only environments",[696,1183,1185],{"id":1184},"additional-packages","Additional packages",[793,1187,1188,1200,1208],{},[796,1189,1190,1191,1194,1195,1197,1198,600],{},"The ",[655,1192],{"mod":801,"dir":1193},"pkg\u002Fserver"," package\nprovides a DNS server handler on top of any ",[217,1196,1025],{},"\nor ",[217,1199,1029],{},[796,1201,1190,1202,1205,1206,600],{},[655,1203],{"mod":801,"dir":1204},"pkg\u002Freflect"," package\nprovides optional logging middleware\nusing ",[655,1207],{"mod":807},[796,1209,1190,1210,1213,1214,1217,1218,1221],{},[655,1211],{"mod":801,"dir":1212},"pkg\u002Ferrors"," package\nprovides standard ",[655,1215],{"mod":1040,"sym":1216},"DNSError"," wrappers\nwith ",[655,1219],{"mod":1017,"sym":1220},"Msg"," conversion.",[696,1223,791],{"id":790},[793,1225,1226,1232,1236],{},[796,1227,1228,1229],{},"Network helpers — ",[655,1230],{"mod":1231},"darvaza.org\u002Fx\u002Fnet",[796,1233,804,1234],{},[655,1235],{"mod":807},[796,1237,1238,1239],{},"DNS library — ",[655,1240],{"mod":1017,"label":1018},{"title":15,"searchDepth":16,"depth":16,"links":1242},[1243,1244,1245,1246],{"id":1053,"depth":16,"text":1054},{"id":1115,"depth":16,"text":1116},{"id":1184,"depth":16,"text":1185},{"id":790,"depth":16,"text":791},[813,1000,814],"Pluggable DNS resolver library with forwarding, iterative, and parallel lookup strategies built on miekg\u002Fdns.",{},"\u002Fprojects\u002Fdarvaza-resolver","github:darvaza-proxy\u002Fresolver",{"title":801,"description":1248},"projects\u002Fdarvaza-resolver","og1_FOOfW4QdL3Wa8JriKQYoTyQV_tNmXM68AUHxR8s",{"id":1256,"title":807,"body":1257,"category":1434,"description":1435,"extension":19,"go":807,"licence":176,"meta":1436,"navigation":22,"npm":49,"path":1437,"repo":1438,"seo":1439,"stem":1440,"__hash__":1441},"projects\u002Fprojects\u002Fdarvaza-slog.md",{"type":8,"value":1258,"toc":1430},[1259,1266,1270,1278,1360,1364],[11,1260,1261,1262,1265],{},"A backend-agnostic interface for structured logging. Libraries import\n",[217,1263,1264],{},"slog"," to emit structured logs without forcing a specific backend on\ntheir users. Features method chaining (fluent API), six log levels,\ncontext integration, and immutable loggers safe for concurrent use.",[696,1267,1269],{"id":1268},"adapters","Adapters",[11,1271,1272,1273,1275,1276,600],{},"Bidirectional adapters convert in both directions — use the external\nlogger as an ",[217,1274,1264],{}," backend, or create an external logger backed by\n",[217,1277,1264],{},[701,1279,1280,1291],{},[704,1281,1282],{},[707,1283,1284,1287,1289],{},[710,1285,1286],{},"Handler",[710,1288,715],{},[710,1290,718],{},[720,1292,1293,1310,1326,1342],{},[707,1294,1295,1298,1303],{},[725,1296,1297],{},"logr",[725,1299,1300],{},[731,1301],{"mod":1302},"darvaza.org\u002Fslog\u002Fhandlers\u002Flogr",[725,1304,1305,1306],{},"Bidirectional adapter for ",[655,1307],{"label":1308,"mod":1309},"go-logr\u002Flogr","github.com\u002Fgo-logr\u002Flogr",[707,1311,1312,1315,1320],{},[725,1313,1314],{},"logrus",[725,1316,1317],{},[731,1318],{"mod":1319},"darvaza.org\u002Fslog\u002Fhandlers\u002Flogrus",[725,1321,1305,1322],{},[655,1323],{"label":1324,"mod":1325},"sirupsen\u002FLogrus","github.com\u002Fsirupsen\u002Flogrus",[707,1327,1328,1331,1336],{},[725,1329,1330],{},"zap",[725,1332,1333],{},[731,1334],{"mod":1335},"darvaza.org\u002Fslog\u002Fhandlers\u002Fzap",[725,1337,1305,1338],{},[655,1339],{"label":1340,"mod":1341},"Uber's zap","go.uber.org\u002Fzap",[707,1343,1344,1347,1352],{},[725,1345,1346],{},"zerolog",[725,1348,1349],{},[731,1350],{"mod":1351},"darvaza.org\u002Fslog\u002Fhandlers\u002Fzerolog",[725,1353,1354,1355,1359],{},"Wraps ",[655,1356],{"label":1357,"mod":1358},"rs\u002Fzerolog","github.com\u002Frs\u002Fzerolog"," as an slog backend",[696,1361,1363],{"id":1362},"utility-handlers","Utility handlers",[701,1365,1366,1376],{},[704,1367,1368],{},[707,1369,1370,1372,1374],{},[710,1371,1286],{},[710,1373,715],{},[710,1375,718],{},[720,1377,1378,1391,1404,1417],{},[707,1379,1380,1383,1388],{},[725,1381,1382],{},"cblog",[725,1384,1385],{},[731,1386],{"mod":1387},"darvaza.org\u002Fslog\u002Fhandlers\u002Fcblog",[725,1389,1390],{},"Channel-based handler for custom log processing",[707,1392,1393,1396,1401],{},[725,1394,1395],{},"filter",[725,1397,1398],{},[731,1399],{"mod":1400},"darvaza.org\u002Fslog\u002Fhandlers\u002Ffilter",[725,1402,1403],{},"Middleware to filter and transform log entries",[707,1405,1406,1409,1414],{},[725,1407,1408],{},"discard",[725,1410,1411],{},[731,1412],{"mod":1413},"darvaza.org\u002Fslog\u002Fhandlers\u002Fdiscard",[725,1415,1416],{},"No-op handler for optional logging",[707,1418,1419,1422,1427],{},[725,1420,1421],{},"mock",[725,1423,1424],{},[731,1425],{"mod":807,"dir":1426},"handlers\u002Fmock",[725,1428,1429],{},"Records log entries for testing assertions",{"title":15,"searchDepth":16,"depth":16,"links":1431},[1432,1433],{"id":1268,"depth":16,"text":1269},{"id":1362,"depth":16,"text":1363},[813,814],"Backend-agnostic structured logging interface with adapter handlers for popular Go loggers.",{},"\u002Fprojects\u002Fdarvaza-slog","github:darvaza-proxy\u002Fslog",{"title":807,"description":1435},"projects\u002Fdarvaza-slog","cuTK_qS2-1ESzFidLvSYLN43SJT5itNfkQK3-QmzTCg",{"id":1443,"title":1444,"body":1445,"category":1507,"description":1508,"extension":19,"go":1444,"licence":176,"meta":1509,"navigation":22,"npm":49,"path":1510,"repo":1511,"seo":1512,"stem":1513,"__hash__":1514},"projects\u002Fprojects\u002Fdarvaza-x-cmp.md","darvaza.org\u002Fx\u002Fcmp",{"type":8,"value":1446,"toc":1505},[1447,1474],[11,1448,1449,1450,1453,1454,1457,1458,558,1461,235,1464,235,1467,1470,1471,1473],{},"Generic ",[217,1451,1452],{},"CompFunc[T]"," (three-way) and ",[217,1455,1456],{},"CondFunc[T]"," (boolean)\ntypes with conversion functions between the two styles — ",[217,1459,1460],{},"AsLess",[217,1462,1463],{},"AsCmp",[217,1465,1466],{},"AsEqual",[217,1468,1469],{},"Reverse",". Works with any type via custom\ncomparators, or directly\nwith ",[217,1472,652],{},"\u002F:go-pkg{mod=\"darvaza.org\u002Fcore\" sym=\"Ordered\"}\ntypes.",[11,1475,1476,1477,1480,1481,235,1484,666,1487,1490,1491,235,1494,558,1497,1500,1501,1504],{},"The composable ",[217,1478,1479],{},"Matcher[T]"," interface chains predicates with\n",[217,1482,1483],{},"And",[217,1485,1486],{},"Or",[217,1488,1489],{},"Not",". Factory functions (",[217,1492,1493],{},"MatchEq",[217,1495,1496],{},"MatchLt",[217,1498,1499],{},"MatchGtEq",", …) produce matchers from values or comparators, and\n",[217,1502,1503],{},"Compose"," transforms across types — e.g. match on a struct field\nwithout unwrapping manually.",{"title":15,"searchDepth":16,"depth":16,"links":1506},[],[813,814],"Generic helpers to compare and match values.",{},"\u002Fprojects\u002Fdarvaza-x-cmp","github:darvaza-proxy\u002Fx\u002Fcmp",{"title":1444,"description":1508},"projects\u002Fdarvaza-x-cmp","jnsVGl5lqtS5M8Hk99Vmiekf932m1HBlTx-f7rrNh6U",{"id":1516,"title":1517,"body":1518,"category":1567,"description":1568,"extension":19,"go":1517,"licence":176,"meta":1569,"navigation":22,"npm":49,"path":1570,"repo":1571,"seo":1572,"stem":1573,"__hash__":1574},"projects\u002Fprojects\u002Fdarvaza-x-config.md","darvaza.org\u002Fx\u002Fconfig",{"type":8,"value":1519,"toc":1565},[1520,1538],[11,1521,1522,1523,1526,1527,1530,1531,1533,1534,600],{},"Format-agnostic configuration loader. A generic ",[217,1524,1525],{},"Loader[T]","\ntries candidate filenames in order, decodes via a user-supplied\n",[217,1528,1529],{},"Decoder"," (TOML, YAML, JSON — any format works), applies struct-tag\ndefaults, expands shell-style ",[217,1532,274],{}," variables, and validates\nthe result with ",[655,1535],{"label":1536,"mod":1537},"go-playground\u002Fvalidator","github.com\u002Fgo-playground\u002Fvalidator\u002Fv10",[11,1539,1540,1541,1545,1546,1550,1551,1555,1556,558,1559,235,1562,694],{},"Subpackage ",[655,1542],{"label":1543,"mod":1517,"dir":1544},"config\u002Fexpand","expand","\nprovides ",[655,1547],{"label":1548,"mod":1549},"mvdan.cc\u002Fsh","mvdan.cc\u002Fsh\u002Fv3","-powered\nvariable substitution from any source.\nSubpackage ",[655,1552],{"label":1553,"mod":1517,"dir":1554},"config\u002Fappdir","appdir","\nhandles XDG\u002FFHS-aware directory discovery (",[217,1557,1558],{},"UserConfigDir",[217,1560,1561],{},"SysConfigDir",[217,1563,1564],{},"AllConfigDir",{"title":15,"searchDepth":16,"depth":16,"links":1566},[],[813,814],"Helpers for handling config structs — decoding, defaults, and validation.",{},"\u002Fprojects\u002Fdarvaza-x-config","github:darvaza-proxy\u002Fx\u002Fconfig",{"title":1517,"description":1568},"projects\u002Fdarvaza-x-config","GQkN0iK91D1SLL_ecWKQp7s7kS6nZcCHgewCgln2oOc",{"id":1576,"title":1577,"body":1578,"category":1647,"description":1648,"extension":19,"go":1577,"licence":176,"meta":1649,"navigation":22,"npm":49,"path":1650,"repo":1651,"seo":1652,"stem":1653,"__hash__":1654},"projects\u002Fprojects\u002Fdarvaza-x-container.md","darvaza.org\u002Fx\u002Fcontainer",{"type":8,"value":1579,"toc":1645},[1580,1603],[11,1581,1582,1583,1586,1587,1590,1591,1594,1595,1598,1599,1602],{},"Three generic collection types. ",[217,1584,1585],{},"container\u002Flist"," wraps\n",[655,1588],{"mod":1585,"sym":1589},"List"," as a type-safe ",[217,1592,1593],{},"List[T]","\nwith match, filter, and move operations. ",[217,1596,1597],{},"container\u002Fset"," provides a hash-bucketed,\nthread-safe ",[217,1600,1601],{},"Set[K,H,T]"," keyed by user-supplied hash and match\nfunctions.",[11,1604,1605,1608,1609,1612,1613,1616,1617,1620,1621,235,1624,235,1626,235,1629,235,1632,1635,1636,235,1639,235,1642,694],{},[217,1606,1607],{},"container\u002Fslices"," implements sorted-slice-backed sets —\n",[217,1610,1611],{},"CustomSet[T]"," for any type with a custom comparator, and\n",[217,1614,1615],{},"OrderedSet[T]"," as a convenience for ",[655,1618],{"mod":824,"sym":1619},"Ordered","\ntypes. All\nsets support ",[217,1622,1623],{},"Add",[217,1625,669],{},[217,1627,1628],{},"Contains",[217,1630,1631],{},"ForEach",[217,1633,1634],{},"Clone",",\nand capacity management (",[217,1637,1638],{},"Reserve",[217,1640,1641],{},"Grow",[217,1643,1644],{},"Trim",{"title":15,"searchDepth":16,"depth":16,"links":1646},[],[813,814],"Generic data structure implementations extending Go's standard containers.",{},"\u002Fprojects\u002Fdarvaza-x-container","github:darvaza-proxy\u002Fx\u002Fcontainer",{"title":1577,"description":1648},"projects\u002Fdarvaza-x-container","bGwwX6s6XNu_nkCjqVcdlfiEAS4xO45FKRLJ3nzGiIM",{"id":1656,"title":1657,"body":1658,"category":1787,"description":1788,"extension":19,"go":1657,"licence":176,"meta":1789,"navigation":22,"npm":49,"path":1790,"repo":1791,"seo":1792,"stem":1793,"__hash__":1794},"projects\u002Fprojects\u002Fdarvaza-x-fs.md","darvaza.org\u002Fx\u002Ffs",{"type":8,"value":1659,"toc":1785},[1660,1704,1738],[11,1661,1662,1663,1666,1667,1670,1671,235,1674,235,1677,558,1680,235,1683,235,1686,235,1689,558,1692,235,1695,235,1698,666,1701,600],{},"Shadow of Go's ",[655,1664],{"mod":1665},"io\u002Ffs"," package that re-exports\nstandard types and adds write-side interfaces mirroring\n",[655,1668],{"mod":1669},"os"," — ",[217,1672,1673],{},"ChmodFS",[217,1675,1676],{},"ChtimesFS",[217,1678,1679],{},"MkdirFS",[217,1681,1682],{},"MkdirAllFS",[217,1684,1685],{},"MkdirTempFS",[217,1687,1688],{},"ReadlinkFS",[217,1690,1691],{},"RemoveFS",[217,1693,1694],{},"RemoveAllFS",[217,1696,1697],{},"RenameFS",[217,1699,1700],{},"SymlinkFS",[217,1702,1703],{},"WriteFileFS",[11,1705,1706,1707,1710,1711,1714,1715,1718,1719,1722,1723,1726,1727,1730,1731,1726,1734,1737],{},"File globbing compiles patterns\nvia ",[655,1708],{"mod":901,"label":1709},"gobwas\u002Fglob"," with\nfull ",[217,1712,1713],{},"**"," support for recursive matching. ",[217,1716,1717],{},"Glob"," walks\nan ",[655,1720],{"mod":1665,"sym":1721},"FS"," and returns all matches;\n",[217,1724,1725],{},"GlobCompile"," and ",[217,1728,1729],{},"Match"," separate compilation from traversal\nfor reuse. ",[217,1732,1733],{},"Clean",[217,1735,1736],{},"Split"," extend the standard path\nutilities with validity reporting.",[11,1739,1190,1740,1743,1744,235,1747,1750,1751,1754,1755,1758,1759,1762,1763,235,1766,235,1769,1772,1773,1776,1777,1780,1781,1784],{},[655,1741],{"mod":1657,"dir":1742},"fssyscall"," sub-package\nprovides cross-platform advisory file locking —\n",[217,1745,1746],{},"LockEx",[217,1748,1749],{},"UnlockEx",", and non-blocking ",[217,1752,1753],{},"TryLockEx"," — backed\nby ",[217,1756,1757],{},"flock(2)"," on Linux and ",[217,1760,1761],{},"LockFileEx"," on Windows. Convenience\nwrappers (",[217,1764,1765],{},"FLockEx",[217,1767,1768],{},"FUnlockEx",[217,1770,1771],{},"FTryLockEx",") accept\nan ",[217,1774,1775],{},"*os.File"," directly.\nThe ",[655,1778],{"mod":1657,"dir":1779},"flock"," sub-package wraps\nthese into a single ",[217,1782,1783],{},"LockEx(filename)"," call.",{"title":15,"searchDepth":16,"depth":16,"links":1786},[],[813,814],"Helpers for working with fs.FS — globbing, extended interfaces, and file locking.",{},"\u002Fprojects\u002Fdarvaza-x-fs","github:darvaza-proxy\u002Fx\u002Ffs",{"title":1657,"description":1788},"projects\u002Fdarvaza-x-fs","lHiTC6EFr0OxvX1mfSXhbEm5L4CIkQ_ElHl1wKs46Os",{"id":1796,"title":1231,"body":1797,"category":1876,"description":1877,"extension":19,"go":1231,"licence":176,"meta":1878,"navigation":22,"npm":49,"path":1879,"repo":1880,"seo":1881,"stem":1882,"__hash__":1883},"projects\u002Fprojects\u002Fdarvaza-x-net.md",{"type":8,"value":1798,"toc":1873},[1799,1812,1830,1853,1855],[11,1800,1801,1802,1804,1805,1808,1809,600],{},"Network helpers extending Go's standard ",[655,1803],{"mod":1040}," package.\nTop-level utilities validate and split host\u002Fport pairs, and define\na ",[655,1806],{"mod":1231,":short":657,"sym":1807},"Dialer"," interface\ncompatible with ",[217,1810,1811],{},"*net.Dialer",[11,1813,1190,1814,1817,1818,1821,1822,1825,1826,1829],{},[655,1815],{"mod":1231,"dir":1816},"bind"," sub-package\nprovides advanced port binding — multi-interface and multi-address\nlistening, automatic port retry with configurable attempts,\n",[217,1819,1820],{},"SO_REUSEADDR","\u002F",[217,1823,1824],{},"SO_REUSEPORT"," control, and a context-aware\n",[217,1827,1828],{},"ListenConfig"," that creates TCP listeners and UDP connections\nin bulk.",[11,1831,1190,1832,1835,1836,235,1839,558,1842,235,1845,1848,1849,1852],{},[655,1833],{"mod":1231,"dir":1834},"reconnect"," sub-package\nimplements a generic reconnecting client for TCP and Unix domain\nsockets. Lifecycle callbacks (",[217,1837,1838],{},"OnConnect",[217,1840,1841],{},"OnSession",[217,1843,1844],{},"OnDisconnect",[217,1846,1847],{},"OnError",") drive application logic, while\nconfigurable backoff and context-based cancellation manage retries.\nA generic ",[217,1850,1851],{},"StreamSession[Input, Output]"," adds message-oriented\nI\u002FO with pluggable codecs and stampede-safe send\u002Freceive channels.",[696,1854,791],{"id":790},[793,1856,1857,1863,1869],{},[796,1858,1859,1860],{},"TLS certificate management — ",[655,1861],{"mod":1862},"darvaza.org\u002Fx\u002Ftls",[796,1864,1865,1866],{},"HTTP handler utilities — ",[655,1867],{"mod":1868},"darvaza.org\u002Fx\u002Fweb",[796,1870,980,1871],{},[655,1872],{"mod":801},{"title":15,"searchDepth":16,"depth":16,"links":1874},[1875],{"id":790,"depth":16,"text":791},[813,1000,814],"Generic network helpers — port binding with retry, reconnecting TCP clients.",{},"\u002Fprojects\u002Fdarvaza-x-net","github:darvaza-proxy\u002Fx\u002Fnet",{"title":1231,"description":1877},"projects\u002Fdarvaza-x-net","h0stwFFIZemYOdR58No0AKswJMVNpWOqVP_KS7LuUVw",{"id":1885,"title":1886,"body":1887,"category":1936,"description":1937,"extension":19,"go":1886,"licence":176,"meta":1938,"navigation":22,"npm":49,"path":1939,"repo":1940,"seo":1941,"stem":1942,"__hash__":1943},"projects\u002Fprojects\u002Fdarvaza-x-sync.md","darvaza.org\u002Fx\u002Fsync",{"type":8,"value":1888,"toc":1934},[1889,1910],[11,1890,1891,1892,235,1895,1898,1899,235,1902,1905,1906,1909],{},"Defines ",[217,1893,1894],{},"Mutex",[217,1896,1897],{},"RWMutex",", and their context-aware variants as\ninterfaces, with panic-safe wrappers (",[217,1900,1901],{},"SafeLock",[217,1903,1904],{},"SafeUnlock",", …)\nthat recover panics\nvia ",[655,1907],{"mod":824,"func":1908},"Catch"," and aggregate\nerrors. Multi-mutex operations acquire locks in order and\nreverse-unlock on failure.",[11,1911,1912,1913,1916,1917,1920,1921,1924,1925,1928,1929,1933],{},"Higher-level primitives: ",[217,1914,1915],{},"SpinLock"," (atomic CAS), channel-based\n",[217,1918,1919],{},"Semaphore"," (concurrent readers, exclusive writers), ",[217,1922,1923],{},"Barrier"," and\n",[217,1926,1927],{},"Count"," condition variables,\nand ",[655,1930],{"mod":1886,"dir":1931,"sym":1932},"workgroup","Group"," —\na context-aware goroutine manager with cancellation propagation and\npanic recovery.",{"title":15,"searchDepth":16,"depth":16,"links":1935},[],[813,814],"Synchronisation primitive interfaces with panic-safe cleanup.",{},"\u002Fprojects\u002Fdarvaza-x-sync","github:darvaza-proxy\u002Fx\u002Fsync",{"title":1886,"description":1937},"projects\u002Fdarvaza-x-sync","7_ZeXjEruKoEpQYW1UiuTAWhUf7bPLXFREpKibey8BU",{"id":1945,"title":1862,"body":1946,"category":2045,"description":2046,"extension":19,"go":1862,"licence":176,"meta":2047,"navigation":22,"npm":49,"path":2048,"repo":2049,"seo":2050,"stem":2051,"__hash__":2052},"projects\u002Fprojects\u002Fdarvaza-x-tls.md",{"type":8,"value":1947,"toc":2042},[1948,1967,1984,1994,2013,2030,2032],[11,1949,1950,1951,1954,1955,235,1957,235,1960,666,1963,1966],{},"TLS certificate management utilities extending Go's ",[655,1952],{"mod":1953},"crypto\u002Ftls",".\nDefines ",[217,1956,689],{},[217,1958,1959],{},"StoreReader",[217,1961,1962],{},"StoreWriter",[217,1964,1965],{},"StoreX509Writer","\ninterfaces that decouple certificate lookup from storage backend.",[11,1968,1190,1969,1972,1973,1976,1977,1980,1981,1983],{},[655,1970],{"mod":1862,":short":657,"sym":1971},"Bundler"," builds\nverified certificate chains from a set of roots and intermediates,\nselecting the shortest (or custom-ranked) chain and returning a\nready-to-use ",[217,1974,1975],{},"tls.Certificate",".\n",[217,1978,1979],{},"Verify"," validates a\n",[217,1982,1975],{}," end-to-end — leaf parsing, validity period,\nkey-pair match, and optional chain verification against roots.",[11,1985,1190,1986,1989,1990,1993],{},[655,1987],{"mod":1862,"dir":1988},"sni"," sub-package parses\nraw ClientHello packets to extract the server name without a full\nTLS handshake.\nA ",[655,1991],{"mod":1862,"dir":1988,":short":657,"sym":1992},"Dispatcher","\nroutes incoming connections by SNI to per-host handlers, with\ngraceful shutdown and structured logging.",[11,1995,1996,1997,2000,2001,2004,2005,2008,2009,2012],{},"Three store backends live\nunder ",[655,1998],{"mod":1862,"dir":1999},"store",":\n",[217,2002,2003],{},"basic"," (simple programmatic store), ",[217,2006,2007],{},"buffer"," (PEM file\u002Fdirectory\ndecoder that collects keys and certificates), and ",[217,2010,2011],{},"config","\n(path-based loading helpers for certs, keys, and CA roots).",[11,2014,1190,2015,2018,2019,1726,2022,2025,2026,2029],{},[655,2016],{"mod":1862,"dir":2017},"x509utils"," sub-package\nadds ",[217,2020,2021],{},"PrivateKey",[217,2023,2024],{},"PublicKey"," interfaces, PEM read\u002Fwrite,\nPKCS#1\u002FPKCS#8 key parsing, SPKI hashing (SHA-1\u002FSHA-256), name\nsanitisation, and wildcard-pattern extraction. Its ",[217,2027,2028],{},"certpool","\nsub-package provides a thread-safe, BLAKE3-deduplicated certificate\npool with name\u002Fpattern indexing and system root loading.",[696,2031,791],{"id":790},[793,2033,2034,2038],{},[796,2035,1228,2036],{},[655,2037],{"mod":1231},[796,2039,1865,2040],{},[655,2041],{"mod":1868},{"title":15,"searchDepth":16,"depth":16,"links":2043},[2044],{"id":790,"depth":16,"text":791},[813,1000,173,814],"Dynamic TLS certificate management — runtime store, SNI routing, chain bundling.",{},"\u002Fprojects\u002Fdarvaza-x-tls","github:darvaza-proxy\u002Fx\u002Ftls",{"title":1862,"description":2046},"projects\u002Fdarvaza-x-tls","8SIitS2XEQ-SSLLFSEq4ulcsY1oXkDjSMgOSRjMZPq0",{"id":2054,"title":1868,"body":2055,"category":2137,"description":2138,"extension":19,"go":1868,"licence":176,"meta":2139,"navigation":22,"npm":49,"path":2140,"repo":2141,"seo":2142,"stem":2143,"__hash__":2144},"projects\u002Fprojects\u002Fdarvaza-x-web.md",{"type":8,"value":2056,"toc":2134},[2057,2075,2095,2112,2122,2124],[11,2058,2059,2060,1924,2063,2066,2067,2070,2071,2074],{},"Helpers for implementing HTTP handlers. ",[217,2061,2062],{},"MiddlewareFunc",[217,2064,2065],{},"MiddlewareErrorFunc"," compose handler chains, while\n",[655,2068],{"mod":1868,":short":657,"sym":2069},"HTTPError"," wraps status\ncodes as Go errors with ",[217,2072,2073],{},"handler"," semantics — factory functions\ncover common statuses (301, 302, 400, 404, 500, …).",[11,2076,1190,2077,2080,2081,235,2084,2087,2088,2091,2092,600],{},[655,2078],{"mod":1868,"dir":2079},"qlist"," sub-package parses\nRFC 7231 quality-value lists (",[217,2082,2083],{},"Accept",[217,2085,2086],{},"Accept-Encoding",") and\nselects the best match\nvia ",[655,2089],{"mod":1868,"dir":2079,":short":657,"func":2090},"BestQuality","\nand ",[655,2093],{"mod":1868,"dir":2079,":short":657,"func":2094},"BestEncoding",[11,2096,2097,2098,235,2101,558,2104,2107,2108,2111],{},"Header utilities set ",[217,2099,2100],{},"Cache-Control",[217,2102,2103],{},"Retry-After",[217,2105,2106],{},"Last-Modified",", and evaluate ",[217,2109,2110],{},"If-Modified-Since"," for conditional\nresponses. A path resolver middleware cleans and attaches the\nrequest path to the context.",[11,2113,1190,2114,2117,2118,2121],{},[655,2115],{"mod":1868,"dir":2116},"resource"," sub-package\ndefines a generic ",[217,2119,2120],{},"Resource[T]"," interface for RESTful endpoints.",[696,2123,791],{"id":790},[793,2125,2126,2130],{},[796,2127,1228,2128],{},[655,2129],{"mod":1231},[796,2131,1859,2132],{},[655,2133],{"mod":1862},{"title":15,"searchDepth":16,"depth":16,"links":2135},[2136],{"id":790,"depth":16,"text":791},[813,1000,814],"Helpers for HTTP handlers — content negotiation, middleware, and error management.",{},"\u002Fprojects\u002Fdarvaza-x-web","github:darvaza-proxy\u002Fx\u002Fweb",{"title":1868,"description":2138},"projects\u002Fdarvaza-x-web","kCITazBSUUV0FK-kP1xq3MZzhlEZN1ibROi6mSjJKBk",1775810536766]