{"_id":"@ant.sh/colony","_rev":"2-f069a9505d7f73d052051ff933d85d71","name":"@ant.sh/colony","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@ant.sh/colony","version":"0.1.0","keywords":["config","configuration","settings","environment","scope-based","rules","interpolation","multi-environment","cli"],"author":{"name":"Zaxuhe"},"license":"MIT","_id":"@ant.sh/colony@0.1.0","maintainers":[{"name":"zaxuhe","email":"zaxuhe@gmail.com"}],"homepage":"https://colony.ant.sh","bugs":{"url":"https://github.com/Zaxuhe/colony/issues"},"bin":{"colony":"src/cli.js"},"dist":{"shasum":"c099ed69d2daf48175c21673971fa62c76ff9f51","tarball":"https://registry.npmjs.org/@ant.sh/colony/-/colony-0.1.0.tgz","fileCount":62,"integrity":"sha512-tUX5ZW3GpvxYCu9FqcPzShJgehecT1iYDZcZ7uaI+3axb6NNAnn3Brz44CJ8ioFKh2fZOoebVr+oniEmAlpWjw==","signatures":[{"sig":"MEUCIQClLpg6U6sdGvKzJyuh+JusP0att1ijUjWABuPGkRRcWAIgS1IPIOh3RHQxYXLJfzhHpkgkOhi4/A/9fYDh4As9PSQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":422477},"main":"./dist/cjs/index.js","type":"module","types":"./dist/esm/index.d.ts","module":"./dist/esm/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"gitHead":"21e3fddd4f058c74bcafa086e43dd579b2bc4dad","scripts":{"lint":"node ./src/cli.js lint --entry ./examples/config/app.colony","test":"node --test test/*.test.js","build":"node build.js","test:watch":"node --test --watch test/*.test.js","prepublishOnly":"npm run build && npm test","build:playground":"node scripts/build-playground.js"},"_npmUser":{"name":"zaxuhe","email":"zaxuhe@gmail.com"},"repository":{"url":"git+https://github.com/Zaxuhe/colony.git","type":"git"},"_npmVersion":"11.6.2","description":"Scope-based config loader for Node.js with rules, interpolation, and multi-environment support","directories":{},"_nodeVersion":"23.11.0","dependencies":{"json5":"^2.2.3","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.27.2"},"_npmOperationalInternal":{"tmp":"tmp/colony_0.1.0_1766904236738_0.3408344698591652","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@ant.sh/colony","version":"0.1.1","description":"Scope-based config loader for Node.js with rules, interpolation, and multi-environment support","type":"module","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"bin":{"colony":"src/cli.js"},"scripts":{"build":"node build.js","build:playground":"node scripts/build-playground.js","test":"node --test test/*.test.js","test:watch":"node --test --watch test/*.test.js","lint":"node ./src/cli.js lint --entry ./examples/config/app.colony","prepublishOnly":"npm run build && npm test"},"keywords":["config","configuration","settings","environment","scope-based","rules","interpolation","multi-environment","cli"],"author":{"name":"Zaxuhe"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Zaxuhe/colony.git"},"homepage":"https://colony.ant.sh","bugs":{"url":"https://github.com/Zaxuhe/colony/issues"},"engines":{"node":">=18.0.0"},"dependencies":{"fast-glob":"^3.3.2","json5":"^2.2.3"},"devDependencies":{"esbuild":"^0.27.2"},"gitHead":"05c35279ee2417e330cf0177a3950655a5c3d4ef","_id":"@ant.sh/colony@0.1.1","_nodeVersion":"23.11.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-Z6QQN3Bnl+RiJuM4oqWm3mX8e4E85bbTWZxOZcHwIO7119U5+JwFqPOnzP4gxOa0dl+RCWCX23unihyHXMmzzQ==","shasum":"e2356ea70054db98503e30cc392cba7f97a0dd5e","tarball":"https://registry.npmjs.org/@ant.sh/colony/-/colony-0.1.1.tgz","fileCount":67,"unpackedSize":443892,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIC7ekNICsXdYlx/eDGtULrhGTJbh+VrJEajrEwmM2l9rAiB+5K2/X4kh+I5HvY+imb1LvXzEXjoIm6u/bhKfxMHkGw=="}]},"_npmUser":{"name":"zaxuhe","email":"zaxuhe@gmail.com"},"directories":{},"maintainers":[{"name":"zaxuhe","email":"zaxuhe@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/colony_0.1.1_1768112274749_0.12266039973904608"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-28T06:43:56.649Z","modified":"2026-01-11T06:17:55.163Z","0.1.0":"2025-12-28T06:43:56.900Z","0.1.1":"2026-01-11T06:17:54.918Z"},"bugs":{"url":"https://github.com/Zaxuhe/colony/issues"},"author":{"name":"Zaxuhe"},"license":"MIT","homepage":"https://colony.ant.sh","keywords":["config","configuration","settings","environment","scope-based","rules","interpolation","multi-environment","cli"],"repository":{"type":"git","url":"git+https://github.com/Zaxuhe/colony.git"},"description":"Scope-based config loader for Node.js with rules, interpolation, and multi-environment support","maintainers":[{"name":"zaxuhe","email":"zaxuhe@gmail.com"}],"readme":"# Colony\n\n**Environment-aware config for Node.js. One file, multiple environments.**\n\n[![npm version](https://img.shields.io/npm/v/@ant.sh/colony.svg)](https://www.npmjs.com/package/@ant.sh/colony)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n\n**[Try it in the Playground](https://colony.ant.sh)**\n\n```\n# config/app.colony\n*.database.host = \"localhost\";\nprod.database.host = \"prod-db.example.com\";\n```\n\n```js\nimport { loadColony } from \"@ant.sh/colony\";\n\nconst config = await loadColony({\n  entry: \"./config/app.colony\",\n  ctx: { env: \"prod\" }\n});\n\nconfig.database.host // => \"prod-db.example.com\"\n```\n\n## Features\n\n- **Single config file** for all environments (dev, staging, prod)\n- **Wildcard matching** - `*` sets defaults, specific rules override\n- **Multiple dimensions** - env, region, feature flags, anything\n- **Secret management** - AWS Secrets Manager, Vault, OpenBao\n- **Interpolation** - `${ENV:VAR}`, `${ctx.region}`, `${VAR:custom}`\n- **CLI tools** - validate, diff, lint, print\n- **TypeScript** - Full type definitions included\n- **Zero runtime deps** - Only `fast-glob` and `json5`\n\n## Installation\n\n```bash\nnpm install @ant.sh/colony\n```\n\n## Quick Start\n\n**1. Create `config/app.colony`**\n\n```\n@dims env;\n\n# Defaults\n*.app.name = \"MyApp\";\n*.database.host = \"localhost\";\n*.database.port = 5432;\n\n# Production overrides\nprod.database.host = \"prod-db.example.com\";\n```\n\n**2. Load in your app**\n\n```js\nimport { loadColony } from \"@ant.sh/colony\";\n\nconst config = await loadColony({\n  entry: \"./config/app.colony\",\n  ctx: { env: process.env.NODE_ENV || \"dev\" }\n});\n\nconsole.log(config.database.host);\n// dev:  \"localhost\"\n// prod: \"prod-db.example.com\"\n```\n\n## Multiple Dimensions\n\n```\n@dims env, region;\n\n*.*.database.host = \"localhost\";\nprod.*.database.host = \"prod-db.example.com\";\nprod.eu.database.host = \"prod-db-eu.example.com\";\n```\n\n```js\nconst config = await loadColony({\n  entry: \"./config/app.colony\",\n  ctx: { env: \"prod\", region: \"eu\" }\n});\n// => \"prod-db-eu.example.com\"\n```\n\n## Secrets Integration\n\n```\n*.db.password = \"${AWS:myapp/db#password}\";\n*.api.key = \"${OPENBAO:secret/data/app#api_key}\";\n```\n\n```js\nimport { loadColony, AwsSecretsProvider, OpenBaoProvider } from \"@ant.sh/colony\";\n\nconst config = await loadColony({\n  entry: \"./config/app.colony\",\n  secrets: {\n    providers: [\n      new AwsSecretsProvider({ region: \"us-east-1\" }),\n      new OpenBaoProvider(),\n    ],\n  },\n});\n```\n\n**Built-in providers:** AWS Secrets Manager, HashiCorp Vault, OpenBao\n\n## CLI\n\n```bash\ncolony print --entry ./config/app.colony --ctx \"env=prod\"\ncolony diff --entry ./config/app.colony --ctx1 \"env=dev\" --ctx2 \"env=prod\"\ncolony validate --entry ./config/app.colony\ncolony lint --entry ./config/app.colony\n```\n\n## package.json Setup\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"NODE_ENV=dev node src/index.js\",\n    \"prod\": \"NODE_ENV=prod node src/index.js\",\n    \"start\": \"node src/index.js\",\n    \"config:validate\": \"colony validate --entry ./config/app.colony\",\n    \"config:lint\": \"colony lint --entry ./config/app.colony\",\n    \"config:diff\": \"colony diff --entry ./config/app.colony --ctx1 \\\"env=dev\\\" --ctx2 \\\"env=prod\\\"\"\n  }\n}\n```\n\n```bash\nnpm run dev    # Run with dev config\nnpm run prod   # Run with prod config\n```\n\nYour app picks up the environment automatically:\n\n```js\n// src/index.js\nimport { loadColony } from \"@ant.sh/colony\";\n\nconst config = await loadColony({\n  entry: \"./config/app.colony\",\n  ctx: { env: process.env.NODE_ENV || \"dev\" }\n});\n\nconsole.log(`Running in ${process.env.NODE_ENV} mode`);\nconsole.log(`Database: ${config.database.host}`);\n```\n\n## Documentation\n\n- **[Interactive Playground](https://colony.ant.sh)** - Try Colony in your browser\n- **[Online Docs](https://colony.ant.sh/docs.html)** - Full documentation\n- **[DOCS.md](./DOCS.md)** - Local documentation file\n\nTopics covered:\n- Config syntax reference\n- All operators (`=`, `:=`, `+=`, `-=`, `|=`)\n- Interpolation patterns\n- Secret providers\n- Security sandbox options\n- Framework integrations (Express, Fastify, Next.js)\n- API reference\n- TypeScript types\n\n## License\n\nMIT\n","readmeFilename":"README.md"}