{"id":25858543,"url":"https://github.com/nyxblabs/zyro","last_synced_at":"2026-05-14T02:35:56.519Z","repository":{"id":167904631,"uuid":"643531155","full_name":"nyxblabs/zyro","owner":"nyxblabs","description":"🚀 Unleash the power of command-line with our intuitive CLI development tool - your gateway to automation! 🛠️🎉","archived":false,"fork":false,"pushed_at":"2023-05-21T18:13:43.000Z","size":457,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-22T08:42:01.437Z","etag":null,"topics":["cli","command-line","developer-tools","development"],"latest_commit_sha":null,"homepage":"https://nyxb.zip","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nyxblabs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["nyxb"]}},"created_at":"2023-05-21T13:13:19.000Z","updated_at":"2025-10-03T22:29:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"2dea8a2c-f786-4eda-9d19-0bd89478e70d","html_url":"https://github.com/nyxblabs/zyro","commit_stats":null,"previous_names":["nyxblabs/zyro"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/nyxblabs/zyro","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nyxblabs%2Fzyro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nyxblabs%2Fzyro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nyxblabs%2Fzyro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nyxblabs%2Fzyro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nyxblabs","download_url":"https://codeload.github.com/nyxblabs/zyro/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nyxblabs%2Fzyro/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33008279,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"online","status_checked_at":"2026-05-14T02:00:06.663Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","command-line","developer-tools","development"],"created_at":"2025-03-01T20:20:48.983Z","updated_at":"2026-05-14T02:35:56.513Z","avatar_url":"https://github.com/nyxblabs.png","language":"TypeScript","funding_links":["https://github.com/sponsors/nyxb"],"categories":[],"sub_categories":[],"readme":"[![cover][cover-src]][cover-href]\n[![npm version][npm-version-src]][npm-version-href] \n[![npm downloads][npm-downloads-src]][npm-downloads-href] \n[![bundle][bundle-src]][bundle-href] [![JSDocs][jsdocs-src]][jsdocs-href]\n[![License][license-src]][license-href]\n\n\u003e 🚀 Unleash the power of command-line with our intuitive CLI development tool - your gateway to automation! 🛠️🎉\n\n### Features\n- Minimal API surface\n- Powerful flag (luminar) parsing\n- Strongly typed parameters and flags (luminars)\n- Command support\n- Help documentation generation (customizable too!)\n\n➡️ [Try it out online](https://stackblitz.com/edit/zyro-demo?devtoolsheight=50\u0026file=examples/greet.ts\u0026view=editor)\n\n#### Support this project by starring and sharing it. [Follow me](https://github.com/privatenumber) to see what other cool projects I'm working on.\n\n## 📥 Install: \n\n```bash\n# nyxi\nnyxi zyro\n\n# pnpm\npnpm add zyro\n\n# npm\nnpm i zyro\n\n# yarn\nyarn add zyro\n```\n\n## ℹ️ About\n\n_zyro_ makes it very easy to develop command-line scripts in Node.js. It handles argv parsing to give you strongly typed parameters + flags (luminars) and generates `--help` documentation based on the provided information.\n\nHere's an example script that simply logs: `Good morning/evening \u003cname\u003e!`:\n\n_greet.js:_\n```ts\nimport { cli } from 'zyro'\n\n// Parse argv\nconst argv = cli({\n   name: 'greet.js',\n\n   // Define parameters\n   parameters: [\n      '\u003cfirst name\u003e', // First name is required\n      '[last name]' // Last name is optional\n   ],\n\n   // Define luminars/options\n   luminars: {\n\n      // Parses `--time` as a string\n      time: {\n         type: String,\n         description: 'Time of day to greet (morning or evening)',\n         default: 'morning'\n      }\n   }\n})\n\nconst name = [argv._.firstName, argv._.lastName].filter(Boolean).join(' ')\n\nif (argv.luminars.time === 'morning')\n   console.log(`Good morning ${name}!`)\n\nelse\n   console.log(`Good evening ${name}!`)\n```\n\n🛠 In development, type hints are provided on parsed flags (luminars) and parameters:\n\u003cp align=\"center\"\u003e\n    \u003cbr\u003e\n    \u003cimg src=\".github/luminar.png\" width=\"600\"\u003e\n    \u003cbr\u003e\n    \u003ci\u003eType hints for Zyro's output are very verbose and readable\u003c/i\u003e\n    \u003cbr\u003e\n    \u003cbr\u003e\n\u003c/p\u003e\n\n📖 Generated help documentation can be viewed with the `--help` flag (luminar):\n\n```sh\n$ node greet.js --help\n\ngreet.js\n\nUsage:\n  greet.js [luminars...] \u003cfirst name\u003e [last name]\n\nLuminars:\n  -h, --help                 Show help\n      --time \u003cstring\u003e        Time of day to greet (morning or evening) (default: \"morning\")\n```\n\n🏃 Run the script to see it in action:\n\n```sh\n$ node greet.js John Doe --time evening\n\nGood evening John Doe!\n```\n\n## 🔥 Examples\n\nWant to dive right into some code? Check out some of these examples:\n\n- ✨ **greet.js**: Working example from above\n- 📦 **npm install**: Reimplementation of [`npm install`](https://docs.npmjs.com/cli/install/)'s CLI\n- 🚀 **tsc**: Reimplementation of TypeScript [`tsc`](https://www.typescriptlang.org/docs/handbook/compiler-options.html)'s CLI\n- 🐦 **snap-tweet**: Reimplementation of [`snap-tweet`](https://github.com/privatenumber/snap-tweet)'s CLI\n- 📏 **pkg-size**: Reimplementation of [`pkg-size`](https://github.com/pkg-size/pkg-size)'s CLI\n\n## 📚 Usage\n\n### 🛠️ Arguments\n\nArguments are values passed into the script that are not associated with any luminars/options.\n\nFor example, in the following command, the first argument is `file-a.txt` and the second is `file-b.txt`:\n\n```\n$ my-script file-a.txt file-b.txt\n```\n\nArguments can be accessed from the `_` array-property of the returned object.\n\nExample:\n\n```ts\nconst argv = cli({ /* ... */ })\n\n// $ my-script file-a.txt file-b.txt\n\nargv._ // =\u003e [\"file-a.txt\", \"file-b.txt\"] (string[])\n```\n\n#### 🧩 Parameters\n\nParameters (aka _positional arguments_) are the names that map against argument values. Think of parameters as variable names and arguments as values associated with the variables.\n\nParameters can be defined in the `parameters` array-property to make specific arguments accessible by name. This is useful for writing more readable code, enforcing validation, and generating help documentation.\n\nParameters are defined in the following formats:\n-  🌟 **Required parameters** are indicated by angle brackets (e.g., `\u003cparameter name\u003e`).\n- 🌈 **Optional parameters** are indicated by square brackets (e.g., `[parameter name]`).\n- 🚀 **Spread parameters** are indicated by the `...` suffix (e.g., `\u003cparameter name...\u003e` or `[parameter name...]`).\n\nNote, required parameters cannot come after optional parameters, and spread parameters must be last.\n\nParameters can be accessed in camelCase on the `_` property of the returned object.\n\n🌟 Example:\n\n```ts\nconst argv = cli({\n   parameters: [\n      '\u003crequired parameter\u003e',\n      '[optional parameter]',\n      '[optional spread...]'\n   ]\n})\n\n// $ my-script a b c d\n\nargv._.requiredParameter // =\u003e \"a\" (string)\nargv._.optionalParameter // =\u003e \"b\" (string | undefined)\nargv._.optionalSpread // =\u003e [\"c\", \"d\"] (string[])\n```\n\n🏁 End-of-flags (luminars)\n\nEnd-of-flags (luminars) (`--`) (aka _end-of-options_) allows users to pass in a subset of arguments. This is useful for passing in arguments that should be parsed separately from the rest of the arguments or passing in arguments that look like flags (luminars).\n\nAn example of this is [`npm run`](https://docs.npmjs.com/cli/v8/commands/npm-run-script):\n```sh\n$ npm run \u003cscript\u003e -- \u003cscript arguments\u003e\n```\nThe `--` indicates that all arguments afterwards should be passed into the _script_ rather than _npm_.\n\nAll end-of-luminar arguments will be accessible from `argv._['--']`.\n\nAdditionally, you can specify `--` in the `parameters` array to parse end-of-luminars arguments.\n\nExample:\n\n```ts\nconst argv = cli({\n   name: 'npm-run',\n   parameters: [\n      '\u003cscript\u003e',\n      '--',\n      '[arguments...]'\n   ]\n})\n\n// $ npm-run echo -- hello world\n\nargv._.script // =\u003e \"echo\" (string)\nargv._.arguments // =\u003e [\"hello\", \"world] (string[])\n```\n\n\n🚩 Flags (Luminars)\n\nFlags (Luminars) (aka Options) are key-value pairs passed into the script in the format `--luminar-name \u003cvalue\u003e`.\n\nFor example, in the following command, `--file-a` has value `data.json` and `--file-b` has value `file.txt`:\n\n```\n$ my-script --file-a data.json --file-b=file.txt\n```\n\n#### 🔍 Parsing features\n_Zyro_'s flag (luminar) parsing is powered by [`luminar`](https://github.com/nyxblabs/luminar) and comes with many features:\n\n- 🔢 Array \u0026 Custom types\n- 🚩 Flag (Luminar) delimiters: `--luminar value`, `--luminar=value`, `--luminar:value`, and `--luminar.value`\n- 🔄 Combined aliases: `-abcd 2` → `-a -b -c -d 2`\n- ⏹️ [End of flags (luminars)](https://unix.stackexchange.com/a/11382): Pass in `--` to end flag (luminar) parsing\n- ❓ Unknown flags (luminars): Unexpected flags (luminars) stored in `unknownLuminars`\n\n\nRead the [_luminar_ docs](https://github.com/nyxblabs/luminar) to learn more.\n\n#### 🚩 Defining flags (luminars)\n\nFlags (Luminars) can be specified in the `luminar` object-property, where the key is the luminar name, and the value is a flag (luminar) type function or an object that describes the luminar.\n\nThe flag (luminar) name is recommended to be in camelCase as it will be interpreted to parse kebab-case equivalents.\n\nThe flag (luminar) type function can be any function that accepts a string and returns the parsed value. Default JavaScript constructors should cover most use-cases: [String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/String), [Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/Number), [Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/Boolean), etc.\n\nThe flag (luminar) description object can be used to store additional information about the flag (luminar), such as `alias`, `default`, and `description`. To accept multiple values for a flag (luminar), wrap the type function in an array.\n\nAll of the provided information will be used to generate better help documentation.\n\n🌟 Example:\n\n```ts\nconst argv = cli({\n   luminars: {\n      someBoolean: Boolean,\n\n      someString: {\n         type: String,\n         description: 'Some string flag (luminar)',\n         default: 'n/a'\n      },\n\n      someNumber: {\n         // Wrap the type function in an array to allow multiple values\n         type: [Number],\n         alias: 'n',\n         description: 'Array of numbers. (eg. -n 1 -n 2 -n 3)'\n      }\n   }\n})\n\n// $ my-script --some-boolean --some-string hello --some-number 1 -n 2\n\nargv.luminars.someBoolean // =\u003e true (boolean | undefined)\nargv.luminars.someString // =\u003e \"hello\" (string)\nargv.luminars.someNumber // =\u003e [1, 2] (number[])\n```\n\n#### 🚩 Custom flag (luminar) types \u0026 validation\n\nCustom flag (luminar) types can be created to validate flags (luminars) and narrow types. Simply create a new function that accepts a string and returns the parsed value.\n\nHere's an example with a custom `Size` type that narrows the flag (luminar) type to `\"small\" | \"medium\" | \"large\"`:\n\n```ts\nconst possibleSizes = ['small', 'medium', 'large'] as const\n\ntype Sizes = typeof possibleSizes[number] // =\u003e \"small\" | \"medium\" | \"large\"\n\n// Custom type function\nfunction Size(size: Sizes) {\n   if (!possibleSizes.includes(size))\n      throw new Error(`Invalid size: \"${size}\"`)\n\n   return size\n}\n\nconst argv = cli({\n   luminars: {\n      size: {\n         type: Size,\n         description: 'Size of the pizza (small, medium, large)'\n      }\n   }\n})\n\n// $ my-script --size large\n\nargv.luminars.size // =\u003e \"large\" (\"small\" | \"medium\" | \"large\")\n```\n\n🏁 Default flags (luminars)\n\nBy default, _Zyro_ will try to handle the `--help, -h` and `--version` flags (luminars).\n\n##### ℹ️ Help flag (luminar)\n\nHandling `--help, -h` is enabled by default.\n\nTo disable it, set `help` to `false`. The help documentation can still be manually displayed by calling `.showHelp(helpOptions)` on the returned object.\n\n##### 📋 Version flag (luminar)\n\nTo enable handling `--version`, specify the `version` property.\n\n```ts\ncli({\n   version: '1.2.3'\n})\n```\n\n```sh\n$ my-script --version\n1.2.3\n```\n\nThe version is also shown in the help documentation. To opt out of handling `--version` while still showing the version in `--help`, pass the version into `help.version`.\n\n### 💡 Commands\nCommands allow organizing multiple \"scripts\" into a single script. An example of this is the [`npm install`](https://docs.npmjs.com/cli/install/) command, which is essentially an \"install\" script inside the \"npm\" script, adjacent to other commands like [`npm run`](https://docs.npmjs.com/cli/run-script/).\n\n#### 💡 Defining commands\nA command can be created by importing the `command` function and initializing it with a name. The rest of the options are the same as the `cli` function.\n\nPass the created command into `cli` option's `commands` array-property to register it:\n\n_npm.js_\n```ts\nimport { cli, command } from 'zyro'\n\nconst argv = cli({\n   name: 'npm',\n\n   version: '1.2.3',\n\n   commands: [\n      command({\n         // Command name\n         name: 'install',\n\n         parameters: ['\u003cpackage name\u003e'],\n\n         luminars: {\n            noSave: Boolean,\n            saveDev: Boolean\n         }\n      })\n   ]\n})\n\n// $ npm install lodash\n\nargv.command // =\u003e \"install\" (string)\nargv._.packageName // =\u003e \"lodash\" (string)\n```\n\nDepending on the command given, the resulting type can be narrowed:\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\".github/command-type-narrowing.png\" width=\"420\"\u003e\n\u003c/p\u003e\n\n#### 🔧 Command callback\n\nWhen a CLI app has many commands, it's recommended to organize each command in its own file. With this structure, parsed output handling for each command is better placed where they are respectively defined rather than the single `cli` output point. This can be done by passing a callback function into the `command` function (callbacks are supported in the `cli` function too).\n\n💡 Example:\n\n_install-command.js_ (`install` command using callback)\n```ts\nimport { command } from 'zyro'\n\nexport const installCommand = command({\n   // Command name\n   name: 'install',\n\n   parameters: ['\u003cpackage name\u003e'],\n\n   luminars: {\n      noSave: Boolean,\n      saveDev: Boolean\n   }\n}, (argv) =\u003e {\n   // $ npm install lodash\n\n   argv._.packageName // =\u003e \"lodash\" (string)\n})\n```\n\n_npm.js_ (CLI entry file)\n```ts\nimport { installCommand } from './install-command.js'\n\ncli({\n   name: 'npm',\n\n   commands: [\n      installCommand\n   ]\n})\n```\n\n### 📚 Help documentation\n_Zyro_ uses all information provided to generate rich help documentation. The more information you give, the better the docs!\n\n#### 🎨 Help customization\nThe help document can be customized by passing a `render(nodes, renderers) =\u003e string` function to `help.render`.\n\nThe `nodes` parameter contains an array of nodes that will be used to render the document. The `renderers` parameter is an object of functions used to render the document. Each node has properties `type` and `data`, where `type` corresponds to a property in `renderers` and `data` is passed into the render function.\n\nDefault renderers can be found in [`/src/render-help/renderers.ts`](/src/render-help/renderers.ts).\n\nHere's an example that adds an extra sentence at the end and also updates the flags (luminars) table to use the `=` operator (`--luminar \u003cvalue\u003e` → `--luminar=\u003cvalue\u003e`):\n\n```ts\ncli({\n   // ...,\n\n   help: {\n      render(nodes, renderers) {\n         /* Modify nodes... */\n\n         // Add some text at end of document\n         nodes.push('\\nCheckout Zyro: https://github.com/nyxblabs/zyro')\n\n         /* Extend renderers... */\n\n         // Make all iluminar examples use `=` as the separator\n         renderers.iluminarOperator = () =\u003e '='\n\n         /* Render nodes and return help */\n         return renderers.render(nodes)\n      }\n   }\n})\n```\n\n#### 📊 Responsive tables\n_Zyro_'s \"Luminars\" table in the help document is responsive and wraps cell text content based on the column \u0026 terminal width. It also has [breakpoints to display more vertically-optimized tables](/src/render-help/render-luminars.ts#L4) for narrower viewports.\n\nThis feature is powered by [tabletron](https://github.com/nyxblabs/tabletron) and can be configured via the `renderers.table` renderer.\n\n\u003ctable\u003e\n\t\u003ctr\u003e\n\t\t\u003cth\u003eNormal width\u003c/th\u003e\n\t\t\u003cth\u003eNarrow width\u003c/th\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\u003cth\u003e\u003cimg src=\".github/responsive-normal.png\" width=\"420\"\u003e\u003c/th\u003e\n\t\t\u003cth\u003e\u003cimg src=\".github/responsive-narrow.png\" width=\"300\"\u003e\u003c/th\u003e\n\t\u003c/tr\u003e\n\u003c/table\u003e\n\n## 📚 API\n\n### 🚀 `cli(options, callback?, argvs?)`\n\nReturn type:\n```ts\ninterface ParsedArgv {\n   // Parsed arguments\n   _: string[] \u0026 Parameters\n\n   // Parsed luminars\n   luminars: {\n      [luminarName: string]: InferredType\n   }\n\n   // Unexpected luminars\n   unknownLuminars: {\n      [luminarName: string]: (string | boolean)[]\n   }\n\n   // Method to print version\n   showVersion: () =\u003e void\n\n   // Method to print help\n   showHelp: (options: HelpOptions) =\u003e void\n}\n```\n\nFunction to parse argvs by declaring parameters and flags (luminars).\n\n#### 🛠️ options\n\nOptions object to configure `cli`.\n\n##### 📝 name\n\nType: `string`\n\nName of the script used in the help documentation.\n\n##### 📝 version\n\nType: `string`\n\nVersion of the script used in the help documentation.\n\nPassing this in enables auto-handling `--version`. To provide a version for the documentation without auto-handling `--version`, pass it into [`help.version`](#version-1).\n\n##### 📝 parameters\n\nType: `string[]`\n\nParameter names to map onto arguments. Also used for validation and help documentation.\n\nParameters must be defined in the following formats:\n| Format | Description |\n| - | - |\n| `\u003cparameter name\u003e` | Required parameter |\n| `[parameter name]` | Optional parameter |\n| `\u003cparameter name...\u003e` | Required spread parameter (1 or more) |\n| `[parameter name...]` | Optional spread parameter (0 or more) |\n\nRequired parameters must be defined before optional parameters, and spread parameters must be defined at the end.\n\n##### 🚩 flags (luminars)\n\nType: An object that maps the flag (luminar) name (in camelCase) to a flag (luminar) type function or an object describing the flag (luminar):\n\n| Property | Type | Description |\n| - | - | - |\n| `type` | `Function` | Luminar value parsing function. |\n| `alias` | `string` | Single character alias for the luminar. |\n| `default` | `any` | Default value for the luminar. |\n| `description` | `string` | Description of the luminar shown in `--help`. |\n| `placeholder` | `string` | Placeholder for the luminar value shown in `--help`. |\n\n##### ℹ️ help\n\nType: `false` or an object with the following properties.\n\n| Property | Type | Description |\n| - | - | - |\n| `version` | `string` | Version shown in `--help`. |\n| `description` | `string` | Description shown in `--help`. |\n| `usage` | `string \\| string[]` | Usage code examples shown in `--help`. |\n| `examples` | `string \\| string[]` | Example code snippets shown in `--help`. |\n| `render` | `(nodes, renderers) =\u003e string` | Function to customize the help document. |\n\nHandling `--help, -h` is enabled by default. To disable it, pass in `false`.\n\n##### 📋 commands\n\nType: `Command[]`\n\nArray of [commands](#commandoptions-callback) to register.\n\n##### ignoreArgv\n\nType:\n```ts\ntype IgnoreArgvCallback = (\n   type: 'known-luminar' | 'unknown-luminar' | 'argument',\n   luminarOrArgv: string,\n   value: string | undefined,\n) =\u003e boolean | void\n```\n\nA callback to ignore argv tokens from being parsed.\n\n#### ⚙️ callback(parsed)\n\nType: \n\nOptional callback function that is called when the script is invoked without a command.\n\n#### 📋 argvs\n\nType: `string[]`\n\nDefault: `process.argv.slice(2)`\n\nThe raw parameters array to parse.\n\n### ⚙️ command(options, callback?)\n\n#### ⚙️ options\n\n| Property | Type | Description |\n| - | - | - |\n| `name` | `string` | Required name used to invoke the command. |\n| `alias` | `string \\| string[]` | Aliases used to invoke the command. |\n| `parameters` | `string[]` | Parameters for the command. Same as [`parameters`](#parameters-1). |\n| `luminars` | `Luminars` | Luminars for the command. Same as [`luminars`](#luminars-1). |\n| `help` | `false \\| HelpOptions` | Help options for the command. Same as [`help`](#help-1). |\n\n#### ⚡️callback(parsed)\n\nType: \n\nOptional callback function that is called when the command is invoked.\n\n## 📜 License\n\n[MIT](./LICENSE) - Made with 💞\n\n\u003c!-- Badges --\u003e\n\n[npm-version-src]: https://img.shields.io/npm/v/zyro?style=flat\u0026colorA=18181B\u0026colorB=14F195\n[npm-version-href]: https://npmjs.com/package/zyro\n[npm-downloads-src]: https://img.shields.io/npm/dm/zyro?style=flat\u0026colorA=18181B\u0026colorB=14F195\n[npm-downloads-href]: https://npmjs.com/package/zyro\n[bundle-src]: https://img.shields.io/bundlephobia/minzip/zyro?style=flat\u0026colorA=18181B\u0026colorB=14F195\n[bundle-href]: https://bundlephobia.com/result?p=zyro\n[jsdocs-src]: https://img.shields.io/badge/jsDocs.io-reference-18181B?style=flat\u0026colorA=18181B\u0026colorB=14F195\n[jsdocs-href]: https://www.jsdocs.io/package/zyro\n[license-src]: https://img.shields.io/github/license/nyxblabs/zyro.svg?style=flat\u0026colorA=18181B\u0026colorB=14F195\n[license-href]: https://github.com/nyxblabs/zyro/blob/main/LICENSE\n\n\u003c!-- Cover --\u003e\n[cover-src]: https://raw.githubusercontent.com/nyxblabs/zyro/main/.github/assets/cover-github-zyro.png\n[cover-href]: https://💻nyxb.ws\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnyxblabs%2Fzyro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnyxblabs%2Fzyro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnyxblabs%2Fzyro/lists"}