{"id":13902902,"url":"https://github.com/Xunnamius/black-flag","last_synced_at":"2025-07-18T00:32:32.835Z","repository":{"id":202769353,"uuid":"708076353","full_name":"Xunnamius/black-flag","owner":"Xunnamius","description":"🏴 A declarative yargs-based framework for building fluent command line interfaces that are easy to maintain and extend","archived":false,"fork":false,"pushed_at":"2025-07-10T10:20:00.000Z","size":6766,"stargazers_count":4,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-10T15:15:54.289Z","etag":null,"topics":["arguments","cli","command","interface","line","option","optstring","parameters","parse","user","yargs"],"latest_commit_sha":null,"homepage":"https://npm.im/@black-flag/core","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/Xunnamius.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":".github/SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["Xunnamius"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2023-10-21T13:03:57.000Z","updated_at":"2025-07-10T10:20:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"921f778d-8eb0-4afe-8a7f-db0ca4d48829","html_url":"https://github.com/Xunnamius/black-flag","commit_stats":{"total_commits":256,"total_committers":1,"mean_commits":256.0,"dds":0.0,"last_synced_commit":"173544b16d66424130138df7c3914ade0184b877"},"previous_names":["xunnamius/black-flag"],"tags_count":61,"template":false,"template_full_name":null,"purl":"pkg:github/Xunnamius/black-flag","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xunnamius%2Fblack-flag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xunnamius%2Fblack-flag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xunnamius%2Fblack-flag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xunnamius%2Fblack-flag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Xunnamius","download_url":"https://codeload.github.com/Xunnamius/black-flag/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xunnamius%2Fblack-flag/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265685524,"owners_count":23811191,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["arguments","cli","command","interface","line","option","optstring","parameters","parse","user","yargs"],"created_at":"2024-08-06T22:01:29.322Z","updated_at":"2025-07-18T00:32:32.797Z","avatar_url":"https://github.com/Xunnamius.png","language":"TypeScript","funding_links":["https://github.com/sponsors/Xunnamius"],"categories":["cli"],"sub_categories":[],"readme":"\u003c!-- symbiote-template-region-start 1 --\u003e\n\n\u003cp align=\"center\" width=\"100%\"\u003e\n  \u003cimg width=\"300\" src=\"https://raw.githubusercontent.com/Xunnamius/black-flag/refs/heads/main/logo.png\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\" width=\"100%\"\u003e\n\u003c!-- symbiote-template-region-end --\u003e\nA declarative wrapper around Yargs for building beautiful, fluent command line interfaces \u003cbr /\u003e \u003ccode\u003e$ black-pearl hoist the colors --black-flag\u003c/code\u003e\n\u003c!-- symbiote-template-region-start 2 --\u003e\n\u003c/p\u003e\n\n\u003chr /\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![Black Lives Matter!][x-badge-blm-image]][x-badge-blm-link]\n[![Last commit timestamp][x-badge-lastcommit-image]][x-badge-repo-link]\n[![Codecov][x-badge-codecov-image]][x-badge-codecov-link]\n[![Source license][x-badge-license-image]][x-badge-license-link]\n[![Uses Semantic Release!][x-badge-semanticrelease-image]][x-badge-semanticrelease-link]\n\n[![NPM version][x-badge-npm-image]][x-badge-npm-link]\n[![Monthly Downloads][x-badge-downloads-image]][x-badge-downloads-link]\n\n\u003c/div\u003e\n\n\u003cbr /\u003e\n\n# Black Flag 🏴\n\n\u003c!-- symbiote-template-region-end --\u003e\n\nBlack Flag is a fairly thin library that wraps [yargs][1], extending its\ncapabilities with several powerful **declarative** features. It can be used to\ncreate simple single-level CLIs or deeply nested sprawling interfaces alike.\n\nBlack Flag was built as a drop-in replacement for vanilla Yargs, specifically\nfor users of the [`yargs::commandDir()`][2] ([which][3] [has][4] [its][5]\n[issues][6]). Its features include:\n\n- [Declarative-first sync/async APIs][7] ✨\n- [Zero configuration required][8] ✨\n- [It's still yargs all the way down][9] ✨ (nothing brand new to learn!)\n- [Built-in support for dynamic options][10] ✨ ([an][11] [infamous][12]\n  [Yargs][13] [white][14] [whale][15])\n- [Consistent and safe CLI execution][16] ✨\n- [Simple comprehensive error handling][17] ✨\n- [A pleasant testing experience][18] ✨\n- [Builtin TypeScript intellisense][19] ✨\n\n\u003cbr /\u003e\n\nBlack Flag is tested on Ubuntu and Windows 10, and like Yargs tracks Node.js LTS\nversions. Also comes with first-class support for both CJS and ESM source.\n\n\u003cbr/\u003e\n\n\u003c!-- prettier-ignore-start --\u003e\n\n‌ ‌ ‌  ‌❖ ‌ ‌ [Quick start][20]\\\n‌ ‌ ‌  ‌‌❖ ‌ ‌ [Step-by-step getting started guide][21]\\\n‌ ‌ ‌  ‌‌❖ ‌ ‌ [Black Flag versus vanilla Yargs][22]\\\n‌ ‌ ‌  ‌‌❖ ‌ ‌ [Simple demo CLI project][23] (or `npx -p @black-flag/demo myctl --help`)\\\n‌ ‌ ‌  ‌‌❖ ‌ ‌ [Black Flag recipes for solving common CLI design problems][24]\\\n‌ ‌ ‌  ‌‌❖ ‌ ‌ [Black Flag's intro examples][25] (which are just [Yargs's intro examples][26] rewritten with Black Flag)\n\n\u003cbr/\u003e\n\n‌ ‌ ‌  ‌‌❖ ‌ ‌ [Builder API][27] (essentially `yargs::options`'s `opt` keys)\\\n‌ ‌ ‌  ‌‌❖ ‌ ‌ [Command module API][28]\\\n‌ ‌ ‌  ‌‌❖ ‌ ‌ [Configuration hooks API][29]\\\n‌ ‌ ‌  ‌‌❖ ‌ ‌ [BFE extended `builder` API][30]\\\n‌ ‌ ‌  ‌‌❖ ‌ ‌ [All `@black-flag/core` exports][31]\\\n‌ ‌ ‌  ‌‌❖ ‌ ‌ [All `@black-flag/core/util` exports][32]\\\n‌ ‌ ‌  ‌‌❖ ‌ ‌ [All `@black-flag/extensions` exports][33]\\\n‌ ‌ ‌  ‌‌❖ ‌ ‌ [All `@black-flag/checks` exports][34]\n\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003cbr /\u003e\n\n\u003e [!TIP]\n\u003e\n\u003e If you find yourself a fan of Black Flag's more declarative DX and want to go\n\u003e all the way, check out [Black Flag Extensions][35] (BFE). BFE is a collection\n\u003e of surprisingly simple set-theoretic APIs that build on\n\u003e [`yargs::options()`][27] for a **fully declarative developer experience**. BFE\n\u003e also protects you from [a couple Yargs footguns][36] that Black Flag by itself\n\u003e cannot.\n\u003e\n\u003e You may also be interested in [Black Flag Checks][37] (BFC), which offers\n\u003e several pluggable [`yargs::check`][38] functions—like `checkIsNotNegative` and\n\u003e `checkArrayNotEmpty`—built to work with BFE.\n\n\u003c!-- symbiote-template-region-start 3 --\u003e\n\n---\n\n\u003c!-- remark-ignore-start --\u003e\n\u003c!-- symbiote-template-region-end --\u003e\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n- [Install](#install)\n- [Quick Start](#quick-start)\n- [Appendix 🏴](#appendix-)\n  - [Terminology](#terminology)\n  - [Inspiration](#inspiration)\n  - [Published Package Details](#published-package-details)\n  - [License](#license)\n- [Contributing and Support](#contributing-and-support)\n  - [Contributors](#contributors)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- symbiote-template-region-start 4 --\u003e\n\u003c!-- remark-ignore-end --\u003e\n\n\u003cbr /\u003e\n\n## Install\n\n\u003c!-- symbiote-template-region-end --\u003e\n\nTo install:\n\n```shell\nnpm install @black-flag/core\n```\n\nAnd if you're ready to go all in on Black Flag's declarative API, check out\n[Black Flag Extensions][35]:\n\n```shell\nnpm install @black-flag/extensions\n```\n\n## Quick Start\n\nInstall Black Flag:\n\n```shell\nnpm install @black-flag/core\n```\n\nCreate the file that will run your CLI, perhaps at `./cli.js`:\n\n\u003e [!TIP]\n\u003e\n\u003e Both CJS and ESM source is acceptable!\n\n\u003c!-- example-region cli.js --\u003e\n\n```js\n#!/usr/bin/env node\n\nimport { runProgram } from '@black-flag/core';\nexport default runProgram(import.meta.resolve('./commands'));\n```\n\nThen create the root command, perhaps at `./commands/index.js`:\n\n\u003c!-- example-region commands/index.js --\u003e\n\n```js\nexport const name = 'pirate-parser';\nexport const usage = 'Usage: $0 \u003ccmd\u003e [args]';\n```\n\nFinally, create a subcommand, perhaps at `./commands/hello.js`:\n\n\u003c!-- example-region commands/hello.js --\u003e\n\n```js\nexport const command = '$0 [name]';\n\nexport const description =\n  'Welcome ter black flag, a declarative wrapper around yargs!';\n\nexport function builder(blackFlag, helpOrVersionSet, argv) {\n  blackFlag.positional('name', {\n    type: 'string',\n    default: 'Cambi',\n    describe: 'The name to say hello to'\n  });\n\n  // A special --attention flag only available when greeting the captain!\n  if (helpOrVersionSet || argv?.name === 'CAPTAIN') {\n    return {\n      attention: {\n        boolean: true,\n        description: `Alert the watch${\n          helpOrVersionSet ? ' (only available when greeting captain)' : ''\n        }`\n      }\n    };\n  }\n}\n\nexport async function handler(argv) {\n  if (argv.attention) {\n    console.log('-!- Captain is on the bridge -!-');\n  }\n\n  console.log(`Hello ${argv.name}, welcome to Black Flag!`);\n}\n```\n\n\u003e [!TIP]\n\u003e\n\u003e This example demonstrates a multi-level or \"nested\" command, i.e. a _root\n\u003e command_ with a _subcommand_. If instead we wanted to make a simple\n\u003e single-level CLI with no subcommands at all, we could merge\n\u003e `./commands/hello.js`'s exports (`handler`, `builder`, etc) into\n\u003e `./commands/index.js`.\n\u003e\n\u003e How you design your CLI is up to you!\n\nThen run it:\n\n\u003c!-- example-region command-1 --\u003e\n\n```shell\nnode cli.js --help\n```\n\n\u003c!-- example-region output-1 --\u003e\n\n```text\nUsage: pirate-parser \u003ccmd\u003e [args]\n\nCommands:\n  pirate-parser hello  Welcome ter black flag, a declarative wrapper around yargs!\n\nOptions:\n  --help     Show help text                                                 [boolean]\n  --version  Show version number                                            [boolean]\n```\n\n---\n\n\u003c!-- example-region command-2 --\u003e\n\n```shell\nnode cli.js hello --help\n```\n\n\u003c!-- example-region output-2 --\u003e\n\n```text\nUsage: pirate-parser hello [name]\n\nWelcome ter black flag, a declarative wrapper around yargs!\n\nPositionals:\n  name  The name to say hello to                          [string] [default: \"Cambi\"]\n\nOptions:\n  --help       Show help text                                               [boolean]\n  --attention  Alert the watch (only available when greeting captain)       [boolean]\n```\n\n---\n\n\u003c!-- example-region command-3 --\u003e\n\n```shell\nnode cli.js hello Parrot\n```\n\n\u003c!-- example-region output-3 --\u003e\n\n```text\nHello Parrot, welcome to Black Flag!\n```\n\n---\n\n\u003c!-- example-region command-4 --\u003e\n\n```shell\nnode cli.js hello CAPTAIN\n```\n\n\u003c!-- example-region output-4 --\u003e\n\n```text\nHello CAPTAIN, welcome to Black Flag!\n```\n\n---\n\n\u003c!-- example-region command-5 --\u003e\n\n```shell\nnode cli.js hello Parrot --attention\n```\n\n\u003c!-- example-region output-5 --\u003e\n\n```text\nUsage: pirate-parser hello [name]\n\nPositionals:\n  name  The name to say hello to                          [string] [default: \"Cambi\"]\n\nOptions:\n  --help  Show help text                                                    [boolean]\n\nUnknown argument: attention\n```\n\n---\n\n\u003c!-- example-region command-6 --\u003e\n\n```shell\nnode cli.js hello CAPTAIN --attention\n```\n\n\u003c!-- example-region output-6 --\u003e\n\n```text\n-!- Captain is on the bridge -!-\nHello CAPTAIN, welcome to Black Flag!\n```\n\n\u003e [!TIP]\n\u003e\n\u003e Not sure what makes Black Flag \"more declarative\" than Yargs? Compare this\n\u003e quick start example to the\n\u003e \u003ca href=\"https://yargs.js.org\" target=\"_blank\"\u003evanilla Yargs version\u003c/a\u003e.\n\nNext steps:\n\n- [Check out the step-by-step getting started guide][21]\n- [Compare Black Flag versus vanilla Yargs][22]\n- [Play with a simple demo CLI project][23] (or\n  `npx -p @black-flag/demo myctl --help`)\n- [Review Black Flag recipes for solving common CLI design problems][24]\n- [Deep dive into Black Flag's internals][39]\n- [Pull up Black Flag's introductory examples][25] (or [Yargs's][26])\n- [Pore over Yargs's parser tricks][40] (which also apply to Black Flag)\n\n## Appendix 🏴\n\n\u003c!-- symbiote-template-region-end --\u003e\n\nFurther documentation can be found under [`docs/`][x-repo-docs] and\n[`docs/api/`][41]. Common CLI design \"recipes\" can be found under\n[`examples/`][24].\n\n### Terminology\n\n|      Term       | Description                                                                                                                                                                                                                                                                                                   |\n| :-------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n|     command     | A \"command\" is a functional unit associated with a [configuration][28] file and represented internally as a trio of programs: [effector, helper, and router][39]. Further, each command is classified as one of: \"pure parent\" (root and parent), \"parent-child\" (parent and child), or \"pure child\" (child). |\n|     program     | A \"program\" is a Yargs instance wrapped in a [`Proxy`][42] granting the instance an expanded set of features. Programs are represented internally by the [`Program`][43] type.                                                                                                                                |\n|      root       | The tippy top command in your hierarchy of commands and the entry point for any Black Flag application. Also referred to as the \"root command\".                                                                                                                                                               |\n| default command | A \"default command\" is [Yargs parlance][44] for the CLI entry point. Technically there is no concept of a \"default command\" at the Black Flag level, though there is the _root command_.                                                                                                                      |\n\n### Inspiration\n\n\u003cdetails\u003e\u003csummary\u003eExpand details\u003c/summary\u003e\n\nI love Yargs 💕 Yargs is the greatest! I've made dozens of CLI tools with Yargs,\neach with drastically different interfaces and requirements. Some help manage\ncritical systems.\n\nAs I was copying-and-pasting some configs from past projects for yet another\ntool, I realized the (irritatingly disparate 😖) structures of my CLI projects\nup until this point were converging on a set of personal conventions around\nYargs. And, as I'm [always eager][45] to [\"optimize\" my workflows][46], I\nwondered how much common functionality could be abstracted away.\n\nThe goal: make my CLIs more stable upon release, much faster to build, and more\npleasant to test. And also avoid Yargs's most egregious footguns. But perhaps\nmost important: I wanted CLIs that would remain simple and consistent to\nmaintain.\n\nThrow in a re-watch of the PotC series and Black Flag was born! 🏴‍☠🍾\n\n\u003c/details\u003e\n\n\u003c!-- symbiote-template-region-start 6 --\u003e\n\n### Published Package Details\n\nThis is a [CJS2 package][x-pkg-cjs-mojito] with statically-analyzable exports\nbuilt by Babel for use in Node.js versions that are not end-of-life. For\nTypeScript users, this package supports both `\"Node10\"` and `\"Node16\"` module\nresolution strategies.\n\n\u003c!-- symbiote-template-region-end --\u003e\n\u003c!-- symbiote-template-region-start 7 --\u003e\n\n\u003cdetails\u003e\u003csummary\u003eExpand details\u003c/summary\u003e\n\nThat means both CJS2 (via `require(...)`) and ESM (via `import { ... } from ...`\nor `await import(...)`) source will load this package from the same entry points\nwhen using Node. This has several benefits, the foremost being: less code\nshipped/smaller package size, avoiding [dual package\nhazard][x-pkg-dual-package-hazard] entirely, distributables are not\npacked/bundled/uglified, a drastically less complex build process, and CJS\nconsumers aren't shafted.\n\nEach entry point (i.e. `ENTRY`) in [`package.json`'s\n`exports[ENTRY]`][x-repo-package-json] object includes one or more [export\nconditions][x-pkg-exports-conditions]. These entries may or may not include: an\n[`exports[ENTRY].types`][x-pkg-exports-types-key] condition pointing to a type\ndeclaration file for TypeScript and IDEs, a\n[`exports[ENTRY].module`][x-pkg-exports-module-key] condition pointing to\n(usually ESM) source for Webpack/Rollup, a `exports[ENTRY].node` and/or\n`exports[ENTRY].default` condition pointing to (usually CJS2) source for Node.js\n`require`/`import` and for browsers and other environments, and [other\nconditions][x-pkg-exports-conditions] not enumerated here. Check the\n[package.json][x-repo-package-json] file to see which export conditions are\nsupported.\n\nNote that, regardless of the [`{ \"type\": \"...\" }`][x-pkg-type] specified in\n[`package.json`][x-repo-package-json], any JavaScript files written in ESM\nsyntax (including distributables) will always have the `.mjs` extension. Note\nalso that [`package.json`][x-repo-package-json] may include the\n[`sideEffects`][x-pkg-side-effects-key] key, which is almost always `false` for\noptimal [tree shaking][x-pkg-tree-shaking] where appropriate.\n\n\u003c!-- symbiote-template-region-end --\u003e\n\u003c!-- symbiote-template-region-start 8 --\u003e\n\n\u003c/details\u003e\n\n### License\n\n\u003c!-- symbiote-template-region-end --\u003e\n\nSee [LICENSE][x-repo-license].\n\n\u003c!-- symbiote-template-region-start 9 --\u003e\n\n## Contributing and Support\n\n**[New issues][x-repo-choose-new-issue] and [pull requests][x-repo-pr-compare]\nare always welcome and greatly appreciated! 🤩** Just as well, you can [star 🌟\nthis project][x-badge-repo-link] to let me know you found it useful! ✊🏿 Or [buy\nme a beer][x-repo-sponsor], I'd appreciate it. Thank you!\n\nSee [CONTRIBUTING.md][x-repo-contributing] and [SUPPORT.md][x-repo-support] for\nmore information.\n\n\u003c!-- symbiote-template-region-end --\u003e\n\u003c!-- symbiote-template-region-start 10 --\u003e\n\n### Contributors\n\n\u003c!-- symbiote-template-region-end --\u003e\n\u003c!-- symbiote-template-region-start root-package-only --\u003e\n\u003c!-- remark-ignore-start --\u003e\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n\n[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-)\n\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\u003c!-- remark-ignore-end --\u003e\n\nThanks goes to these wonderful people ([emoji\nkey][x-repo-all-contributors-emojis]):\n\n\u003c!-- remark-ignore-start --\u003e\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://xunn.io/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/656017?v=4?s=100\" width=\"100px;\" alt=\"Bernard\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBernard\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#infra-Xunnamius\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e \u003ca href=\"https://github.com/Xunnamius/black-flag/commits?author=Xunnamius\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/Xunnamius/black-flag/commits?author=Xunnamius\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#maintenance-Xunnamius\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"https://github.com/Xunnamius/black-flag/commits?author=Xunnamius\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"https://github.com/Xunnamius/black-flag/pulls?q=is%3Apr+reviewed-by%3AXunnamius\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n  \u003ctfoot\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" size=\"13px\" colspan=\"7\"\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/all-contributors/all-contributors-cli/1b8533af435da9854653492b1327a23a4dbd0a10/assets/logo-small.svg\"\u003e\n          \u003ca href=\"https://all-contributors.js.org/docs/en/bot/usage\"\u003eAdd your contributions\u003c/a\u003e\n        \u003c/img\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tfoot\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\u003c!-- remark-ignore-end --\u003e\n\nThis project follows the [all-contributors][x-repo-all-contributors]\nspecification. Contributions of any kind welcome!\n\n\u003c!-- symbiote-template-region-end --\u003e\n\u003c!-- symbiote-template-region-start workspace-package-only --\u003e\n\u003c!-- (section elided by symbiote) --\u003e\n\u003c!-- symbiote-template-region-end --\u003e\n\n[x-badge-blm-image]: https://xunn.at/badge-blm 'Join the movement!'\n[x-badge-blm-link]: https://xunn.at/donate-blm\n[x-badge-codecov-image]:\n  https://img.shields.io/codecov/c/github/Xunnamius/black-flag/main?style=flat-square\u0026token=HWRIOBAAPW\u0026flag=package.main_root\n  'Is this package well-tested?'\n[x-badge-codecov-link]: https://codecov.io/gh/Xunnamius/black-flag\n[x-badge-downloads-image]:\n  https://img.shields.io/npm/dm/@black-flag/core?style=flat-square\n  'Number of times this package has been downloaded per month'\n[x-badge-downloads-link]: https://npmtrends.com/@black-flag/core\n[x-badge-lastcommit-image]:\n  https://img.shields.io/github/last-commit/Xunnamius/black-flag?style=flat-square\n  'Latest commit timestamp'\n[x-badge-license-image]:\n  https://img.shields.io/npm/l/@black-flag/core?style=flat-square\n  \"This package's source license\"\n[x-badge-license-link]:\n  https://github.com/Xunnamius/black-flag/blob/main/LICENSE\n[x-badge-npm-image]:\n  https://xunn.at/npm-pkg-version/@black-flag/core\n  'Install this package using npm or yarn!'\n[x-badge-npm-link]: https://npm.im/@black-flag/core\n[x-badge-repo-link]: https://github.com/Xunnamius/black-flag\n[x-badge-semanticrelease-image]:\n  https://xunn.at/badge-semantic-release\n  'This repo practices continuous integration and deployment!'\n[x-badge-semanticrelease-link]:\n  https://github.com/semantic-release/semantic-release\n[x-pkg-cjs-mojito]:\n  https://dev.to/jakobjingleheimer/configuring-commonjs-es-modules-for-nodejs-12ed#publish-only-a-cjs-distribution-with-property-exports\n[x-pkg-dual-package-hazard]:\n  https://nodejs.org/api/packages.html#dual-package-hazard\n[x-pkg-exports-conditions]:\n  https://webpack.js.org/guides/package-exports#reference-syntax\n[x-pkg-exports-module-key]:\n  https://webpack.js.org/guides/package-exports#providing-commonjs-and-esm-version-stateless\n[x-pkg-exports-types-key]:\n  https://devblogs.microsoft.com/typescript/announcing-typescript-4-5-beta#packagejson-exports-imports-and-self-referencing\n[x-pkg-side-effects-key]:\n  https://webpack.js.org/guides/tree-shaking#mark-the-file-as-side-effect-free\n[x-pkg-tree-shaking]: https://webpack.js.org/guides/tree-shaking\n[x-pkg-type]:\n  https://github.com/nodejs/node/blob/8d8e06a345043bec787e904edc9a2f5c5e9c275f/doc/api/packages.md#type\n[x-repo-all-contributors]: https://github.com/all-contributors/all-contributors\n[x-repo-all-contributors-emojis]: https://allcontributors.org/docs/en/emoji-key\n[x-repo-choose-new-issue]:\n  https://github.com/Xunnamius/black-flag/issues/new/choose\n[x-repo-contributing]: /CONTRIBUTING.md\n[x-repo-docs]: docs\n[x-repo-license]: ./LICENSE\n[x-repo-package-json]: package.json\n[x-repo-pr-compare]: https://github.com/Xunnamius/black-flag/compare\n[x-repo-sponsor]: https://github.com/sponsors/Xunnamius\n[x-repo-support]: /.github/SUPPORT.md\n[1]: https://yargs.js.org\n[2]: https://yargs.js.org/docs#api-reference-commanddirdirectory-opts\n[3]: https://github.com/yargs/yargs/issues/1306\n[4]: https://github.com/yargs/yargs/issues/1269\n[5]: https://github.com/yargs/yargs/issues/1975\n[6]: https://github.com/yargs/yargs/issues/2152\n[7]: ./docs/features.md#declaratively-build-deep-command-hierarchies-\n[8]: ./docs/features.md#convention-over-configuration-\n[9]: ./docs/features.md#its-yargs-all-the-way-down-\n[10]: ./docs/features.md#built-in-support-for-dynamic-options-\n[11]: https://github.com/yargs/yargs/issues/793\n[12]: https://github.com/yargs/yargs/issues/2119\n[13]: https://github.com/yargs/yargs/issues/2256\n[14]: https://github.com/yargs/yargs/issues/2227\n[15]: https://github.com/yargs/yargs/issues/2133\n[16]: ./docs/features.md#run-your-tool-safely-and-consistently-\n[17]: ./docs/features.md#simple-comprehensive-error-handling-and-reporting-\n[18]: ./docs/features.md#a-pleasant-testing-experience-\n[19]: ./docs/features.md#extensive-intellisense-support-\n[20]: #quick-start\n[21]: ./docs/getting-started.md\n[22]: ./docs/bf-vs-yargs.md\n[23]: https://github.com/Xunnamius/black-flag-demo\n[24]: ./examples/README.md\n[25]: ./examples/yargs-intro/README.md\n[26]: https://github.com/yargs/yargs/blob/HEAD/docs/examples.md\n[27]: https://yargs.js.org/docs#api-reference-optionskey-opt\n[28]: ./docs/api/src/exports/type-aliases/Configuration.md\n[29]: ./docs/api/src/exports/type-aliases/ConfigurationHooks.md\n[30]:\n  ./packages/extensions/docs/index/type-aliases/BfeBuilderObjectValueExtensions.md\n[31]: ./docs/api/src/exports/README.md\n[32]: ./docs/api/src/exports/util/README.md\n[33]: ./packages/extensions/docs/index/README.md\n[34]: ./packages/checks/docs/index/README.md\n[35]: ./packages/extensions/README.md\n[36]: ./docs/bf-vs-yargs.md#irrelevant-differences\n[37]: ./packages/checks/README.md\n[38]: https://yargs.js.org/docs#api-reference-checkfn-globaltrue\n[39]: ./docs/advanced.md\n[40]: https://github.com/yargs/yargs/blob/main/docs/tricks.md\n[41]: ./docs/api/README.md\n[42]:\n  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy\n[43]: ./docs/api/src/exports/util/type-aliases/Program.md\n[44]: https://github.com/yargs/yargs/blob/main/docs/advanced.md#default-commands\n[45]: https://xkcd.com/1205\n[46]: https://i.redd.it/0cm6yx27tez21.jpg\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FXunnamius%2Fblack-flag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FXunnamius%2Fblack-flag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FXunnamius%2Fblack-flag/lists"}