{"id":19163208,"url":"https://github.com/oada/cli","last_synced_at":"2026-04-17T19:32:59.448Z","repository":{"id":57132641,"uuid":"332884225","full_name":"OADA/cli","owner":"OADA","description":"Pipeable OADA CLI client","archived":false,"fork":false,"pushed_at":"2023-07-19T18:24:34.000Z","size":6035,"stargazers_count":2,"open_issues_count":3,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-12T04:41:36.423Z","etag":null,"topics":["cli","client","concatenated-json","json","jsonl","jsonlines","ldjson","ndjson","oada"],"latest_commit_sha":null,"homepage":"","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/OADA.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"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}},"created_at":"2021-01-25T21:09:20.000Z","updated_at":"2023-12-01T05:33:46.000Z","dependencies_parsed_at":"2025-01-03T21:42:53.265Z","dependency_job_id":"437f3573-16a0-49f9-adac-f5c8763cbcb6","html_url":"https://github.com/OADA/cli","commit_stats":{"total_commits":44,"total_committers":1,"mean_commits":44.0,"dds":0.0,"last_synced_commit":"74b701053feb15a02caeaaace17981dde2a8966d"},"previous_names":["awlayton/clioada"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OADA%2Fcli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OADA%2Fcli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OADA%2Fcli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OADA%2Fcli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OADA","download_url":"https://codeload.github.com/OADA/cli/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240245887,"owners_count":19771029,"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":["cli","client","concatenated-json","json","jsonl","jsonlines","ldjson","ndjson","oada"],"created_at":"2024-11-09T09:14:29.160Z","updated_at":"2026-04-17T19:32:59.407Z","avatar_url":"https://github.com/OADA.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CLI OADA\n\nPipeable OADA client CLI\n\n[![oclif](https://img.shields.io/badge/cli-oclif-brightgreen.svg)](https://oclif.io)\n[![Version](https://img.shields.io/npm/v/@oada/cli.svg)](https://npmjs.org/package/@oada/cli)\n[![Downloads/week](https://img.shields.io/npm/dw/@oada/cli.svg)](https://npmjs.org/package/@oada/cli)\n[![License](https://img.shields.io/npm/l/@oada/cli.svg)](https://github.com/OADA/cli/blob/master/package.json)\n\n\u003c!-- toc --\u003e\n\n- [CLI OADA](#cli-oada)\n- [Overview](#overview)\n- [Usage](#usage)\n- [Commands](#commands)\n\u003c!-- tocstop --\u003e\n\n## Overview\n\nThe code could use a major refactor, but it is useful and working for me at least.\nI mostly put it here for my own safe-keeping.\nIt is not particularly fast or efficient.\n\nIt has help output that is rather terse for now.\n\nIt supports various JSON-y input formats:\n\n- JSON\n- [JSONL][] (aka. LDJSON or NDJSON)\n- [Concatenated JSON][]\n- [HJSON][]\n- [JSON5][]\n- [JSON6][]\n- JavaScript/TypeScript (converts what is exported to JSON)\n\nIt can get inputs from local files, paths in OADA APIs, or generic URLs to JSON.\nAlso, it can take [Concatenated JSON][] piped through standard input.\n\nIt will currently die a horrible death if you try to use it with\nany other non-JSON data.\n\nIt outputs [JSONL][] (or pretty-printed Concatenated JSON in TTY mode).\nThis makes piping with traditional line-based CLI tools easy.\nAlso, it is _very_ useful with tools like [`jq`][].\n\nThere is support for configuring it for multiple OADA APIs\nand moving files between them.\n\nIt supports \"shell expansion\" of a sort via [`minimatch`][]\n(i.e., you can use paths like `/bookmarks/trellis/*/test{s,y}/`\nand they will be expanded).\n\n## Usage\n\n\u003c!-- usage --\u003e\n\n```sh-session\n$ yarn global add @oada/cli\n$ oada COMMAND\nrunning command...\n$ oada --help [COMMAND]\nUSAGE\n  $ oada COMMAND\n...\n```\n\n\u003c!-- usagestop --\u003e\n\n## Commands\n\n\u003c!-- commands --\u003e\n\n- [`oada autocomplete [SHELL]`](#oada-autocomplete-shell)\n- [`oada config:show`](#oada-configshow)\n- [`oada delete PATHS...`](#oada-delete-paths)\n- [`oada fs:copy PATHS... PATH`](#oada-fscopy-paths-path)\n- [`oada fs:link PATHS... PATH`](#oada-fslink-paths-path)\n- [`oada fs:list PATHS...`](#oada-fslist-paths)\n- [`oada fs:move PATHS... PATH`](#oada-fsmove-paths-path)\n- [`oada fs:remove PATHS...`](#oada-fsremove-paths)\n- [`oada fs:touch PATHS...`](#oada-fstouch-paths)\n- [`oada get PATHS...`](#oada-get-paths)\n- [`oada head PATHS...`](#oada-head-paths)\n- [`oada help [COMMAND]`](#oada-help-command)\n- [`oada plugins`](#oada-plugins)\n- [`oada plugins:install PLUGIN...`](#oada-pluginsinstall-plugin)\n- [`oada plugins:link PLUGIN`](#oada-pluginslink-plugin)\n- [`oada plugins:uninstall PLUGIN...`](#oada-pluginsuninstall-plugin)\n- [`oada plugins:update`](#oada-pluginsupdate)\n- [`oada post PATHS... PATH`](#oada-post-paths-path)\n- [`oada put PATHS... PATH`](#oada-put-paths-path)\n- [`oada watch PATH`](#oada-watch-path)\n\n### `oada autocomplete [SHELL]`\n\ndisplay autocomplete installation instructions\n\n```shell\nUSAGE\n  $ oada autocomplete [SHELL]\n\nARGUMENTS\n  SHELL  shell type\n\nOPTIONS\n  -r, --refresh-cache  Refresh cache (ignores displaying instructions)\n\nEXAMPLES\n  $ oada autocomplete\n  $ oada autocomplete bash\n  $ oada autocomplete zsh\n  $ oada autocomplete --refresh-cache\n```\n\n_See code: [@oclif/plugin-autocomplete](https://github.com/oclif/plugin-autocomplete/blob/v0.3.0/src/commands/autocomplete/index.ts)_\n\n### `oada config:show`\n\nShow the current config settings\n\n```\nUSAGE\n  $ oada config:show\n\nOPTIONS\n  -d, --domain=domain  [default: localhost] default OADA API domain\n  -t, --token=token    default OADA API token\n  --[no-]tty           format output for TTY\n  --[no-]ws            use WebSockets for OADA API\n\nALIASES\n  $ oada config\n```\n\n_See code: [src/commands/config/show.ts](https://github.com/OADA/cli/blob/v1.1.0/src/commands/config/show.ts)_\n\n### `oada delete PATHS...`\n\nperform an OADA DELETE\n\n```shell\nUSAGE\n  $ oada delete PATHS...\n\nARGUMENTS\n  PATHS...  OADA path(s) to GET\n\nOPTIONS\n  -R, --recursive\n  -d, --domain=domain  [default: localhost] default OADA API domain\n  -t, --token=token    default OADA API token\n  --[no-]tty           format output for TTY\n  --[no-]ws            use WebSockets for OADA API\n\nALIASES\n  $ oada d\n  $ oada rm\n  $ oada DELETE\n\nEXAMPLES\n  $ oada delete /bookmarks/foo\n  $ oada rm /bookmarks/foo /bookmarks/bar /bookmarks/baz*\n```\n\n_See code: [src/commands/delete.ts](https://github.com/OADA/cli/blob/v1.1.0/src/commands/delete.ts)_\n\n### `oada fs:copy PATHS... PATH`\n\nperform an \"OADA copy\"\n\n```shell\nUSAGE\n  $ oada fs:copy PATHS... PATH\n\nARGUMENTS\n  PATHS...  path(s) to copy\n  PATH      OADA path to which to copy\n\nOPTIONS\n  -d, --domain=domain  [default: localhost] default OADA API domain\n  -t, --token=token    default OADA API token\n  --[no-]tty           format output for TTY\n  --[no-]ws            use WebSockets for OADA API\n\nALIASES\n  $ oada cp\n\nEXAMPLES\n  $ oada cp /resources/foo /bookmarks/foo\n  $ oada cp /resources/foo1 /resources/foo2 /bookmarks/foos/\n```\n\n_See code: [src/commands/fs/copy.ts](https://github.com/OADA/cli/blob/v1.1.0/src/commands/fs/copy.ts)_\n\n### `oada fs:link PATHS... PATH`\n\nperform an \"OADA link\"\n\n```shell\nUSAGE\n  $ oada fs:link PATHS... PATH\n\nARGUMENTS\n  PATHS...  path(s) to link\n  PATH      OADA path in which to link\n\nOPTIONS\n  -d, --domain=domain  [default: localhost] default OADA API domain\n  -f, --force          delete conflicting existing data/links\n  -r, --versioned      make versioned link(s)\n  -t, --token=token    default OADA API token\n  --[no-]tty           format output for TTY\n  --[no-]ws            use WebSockets for OADA API\n\nALIASES\n  $ oada ln\n\nEXAMPLES\n  $ oada ln /resources/my-thingy /bookmarks/thingy\n  $ oada ln /resources/thingy1 /resources/thingy2 /bookmarks/thingies/\n```\n\n_See code: [src/commands/fs/link.ts](https://github.com/OADA/cli/blob/v1.1.0/src/commands/fs/link.ts)_\n\n### `oada fs:list PATHS...`\n\nperform an \"OADA ls\"\n\n```shell\nUSAGE\n  $ oada fs:list PATHS...\n\nARGUMENTS\n  PATHS...  path(s) to list\n\nOPTIONS\n  -d, --domain=domain  [default: localhost] default OADA API domain\n  -t, --token=token    default OADA API token\n  --[no-]tty           format output for TTY\n  --[no-]ws            use WebSockets for OADA API\n\nALIASES\n  $ oada ls\n  $ oada l\n```\n\n_See code: [src/commands/fs/list.ts](https://github.com/OADA/cli/blob/v1.1.0/src/commands/fs/list.ts)_\n\n### `oada fs:move PATHS... PATH`\n\nperform an \"OADA move\"\n\n```shell\nUSAGE\n  $ oada fs:move PATHS... PATH\n\nARGUMENTS\n  PATHS...  path(s) to move\n  PATH      OADA path to which to move\n\nOPTIONS\n  -d, --domain=domain  [default: localhost] default OADA API domain\n  -t, --token=token    default OADA API token\n  --[no-]tty           format output for TTY\n  --[no-]ws            use WebSockets for OADA API\n\nALIASES\n  $ oada mv\n\nEXAMPLES\n  $ oada mv /resources/foo /bookmarks/foo\n  $ oada mv /resources/foo1 /resources/foo2 /bookmarks/foos/\n```\n\n_See code: [src/commands/fs/move.ts](https://github.com/OADA/cli/blob/v1.1.0/src/commands/fs/move.ts)_\n\n### `oada fs:remove PATHS...`\n\nperform an OADA DELETE\n\n```shell\nUSAGE\n  $ oada fs:remove PATHS...\n\nARGUMENTS\n  PATHS...  OADA path(s) to GET\n\nOPTIONS\n  -R, --recursive\n  -d, --domain=domain  [default: localhost] default OADA API domain\n  -t, --token=token    default OADA API token\n  --[no-]tty           format output for TTY\n  --[no-]ws            use WebSockets for OADA API\n\nALIASES\n  $ oada d\n  $ oada rm\n  $ oada DELETE\n\nEXAMPLES\n  $ oada delete /bookmarks/foo\n  $ oada rm /bookmarks/foo /bookmarks/bar /bookmarks/baz*\n```\n\n_See code: [src/commands/fs/remove.ts](https://github.com/OADA/cli/blob/v1.1.0/src/commands/fs/remove.ts)_\n\n### `oada fs:touch PATHS...`\n\nperform and \"OADA touch\"\n\n```shell\nUSAGE\n  $ oada fs:touch PATHS...\n\nARGUMENTS\n  PATHS...  paths to touch\n\nOPTIONS\n  -d, --domain=domain  [default: localhost] default OADA API domain\n  -t, --token=token    default OADA API token\n  --[no-]tty           format output for TTY\n  --[no-]ws            use WebSockets for OADA API\n\nALIASES\n  $ oada touch\n\nEXAMPLE\n  $ oada touch /bookmarks\n```\n\n_See code: [src/commands/fs/touch.ts](https://github.com/OADA/cli/blob/v1.1.0/src/commands/fs/touch.ts)_\n\n### `oada get PATHS...`\n\nperform an OADA GET (read)\n\n```shell\nUSAGE\n  $ oada get PATHS...\n\nARGUMENTS\n  PATHS...  OADA path(s) to GET\n\nOPTIONS\n  -R, --recursive\n  -T, --tree=tree      file containing an OADA tree to use for a tree GET\n  -d, --domain=domain  [default: localhost] default OADA API domain\n  -m, --meta\n  -o, --out=out        [default: -]\n  -t, --token=token    default OADA API token\n  --[no-]tty           format output for TTY\n  --[no-]ws            use WebSockets for OADA API\n\nALIASES\n  $ oada g\n  $ oada GET\n\nEXAMPLES\n  $ oada get /bookmarks\n  {\n     \"_id\": \"resources/default:resources_bookmarks_321\",\n     \"_rev\": 45,\n     \"_type\": \"application/vnd.oada.bookmarks.1+json\",\n     \"_meta\": {\n       \"_id\": \"resources/default:resources_bookmarks_321/_meta\",\n       \"_rev\": 45\n     },\n     \"foo\": \"bar\",\n     \"baz\": 700\n  }\n  $ oada get /bookmarks/*\n  \"bar\"\n  700\n```\n\n_See code: [src/commands/get.ts](https://github.com/OADA/cli/blob/v1.1.0/src/commands/get.ts)_\n\n### `oada head PATHS...`\n\nperform an OADA HEAD\n\n```shell\nUSAGE\n  $ oada head PATHS...\n\nARGUMENTS\n  PATHS...  OADA path(s) to HEAD\n\nOPTIONS\n  -d, --domain=domain  [default: localhost] default OADA API domain\n  -t, --token=token    default OADA API token\n  --[no-]tty           format output for TTY\n  --[no-]ws            use WebSockets for OADA API\n\nALIASES\n  $ oada h\n  $ oada HEAD\n\nEXAMPLES\n  $ oada head /bookmarks/does-exist; echo $?\n  0\n  $ oada head /bookmarks/does-not-exist; echo $?\n  1\n```\n\n_See code: [src/commands/head.ts](https://github.com/OADA/cli/blob/v1.1.0/src/commands/head.ts)_\n\n### `oada help [COMMAND]`\n\ndisplay help for `oada`\n\n```shell\nUSAGE\n  $ oada help [COMMAND]\n\nARGUMENTS\n  COMMAND  command to show help for\n\nOPTIONS\n  --all  see all commands in CLI\n```\n\n_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v3.2.1/src/commands/help.ts)_\n\n### `oada plugins`\n\nlist installed plugins\n\n```shell\nUSAGE\n  $ oada plugins\n\nOPTIONS\n  --core  show core plugins\n\nEXAMPLE\n  $ oada plugins\n```\n\n_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v1.9.5/src/commands/plugins/index.ts)_\n\n### `oada plugins:install PLUGIN...`\n\ninstalls a plugin into the CLI\n\n```shell\nUSAGE\n  $ oada plugins:install PLUGIN...\n\nARGUMENTS\n  PLUGIN  plugin to install\n\nOPTIONS\n  -f, --force    yarn install with force flag\n  -h, --help     show CLI help\n  -v, --verbose\n\nDESCRIPTION\n  Can be installed from npm or a git url.\n\n  Installation of a user-installed plugin will override a core plugin.\n\n  e.g. If you have a core plugin that has a 'hello' command, installing a user-installed plugin with a 'hello' command\n  will override the core plugin implementation. This is useful if a user needs to update core plugin functionality in\n  the CLI without the need to patch and update the whole CLI.\n\nALIASES\n  $ oada plugins:add\n\nEXAMPLES\n  $ oada plugins:install myplugin\n  $ oada plugins:install https://github.com/someuser/someplugin\n  $ oada plugins:install someuser/someplugin\n```\n\n_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v1.9.5/src/commands/plugins/install.ts)_\n\n### `oada plugins:link PLUGIN`\n\nlinks a plugin into the CLI for development\n\n```shell\nUSAGE\n  $ oada plugins:link PLUGIN\n\nARGUMENTS\n  PATH  [default: .] path to plugin\n\nOPTIONS\n  -h, --help     show CLI help\n  -v, --verbose\n\nDESCRIPTION\n  Installation of a linked plugin will override a user-installed or core plugin.\n\n  e.g. If you have a user-installed or core plugin that has a 'hello' command, installing a linked plugin with a 'hello'\n  command will override the user-installed or core plugin implementation. This is useful for development work.\n\nEXAMPLE\n  $ oada plugins:link myplugin\n```\n\n_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v1.9.5/src/commands/plugins/link.ts)_\n\n### `oada plugins:uninstall PLUGIN...`\n\nremoves a plugin from the CLI\n\n```shell\nUSAGE\n  $ oada plugins:uninstall PLUGIN...\n\nARGUMENTS\n  PLUGIN  plugin to uninstall\n\nOPTIONS\n  -h, --help     show CLI help\n  -v, --verbose\n\nALIASES\n  $ oada plugins:unlink\n  $ oada plugins:remove\n```\n\n_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v1.9.5/src/commands/plugins/uninstall.ts)_\n\n### `oada plugins:update`\n\nupdate installed plugins\n\n```shell\nUSAGE\n  $ oada plugins:update\n\nOPTIONS\n  -h, --help     show CLI help\n  -v, --verbose\n```\n\n_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v1.9.5/src/commands/plugins/update.ts)_\n\n### `oada post PATHS... PATH`\n\nPerform an OADA POST\n\n```shell\nUSAGE\n  $ oada post PATHS... PATH\n\nARGUMENTS\n  PATHS...  paths to POST\n  PATH      destination OADA path\n\nOPTIONS\n  -T, --tree=tree      file containing an OADA tree to use for a tree POST\n  -d, --domain=domain  [default: localhost] default OADA API domain\n  -t, --token=token    default OADA API token\n  --[no-]tty           format output for TTY\n  --[no-]ws            use WebSockets for OADA API\n\nALIASES\n  $ oada po\n  $ oada POST\n\nEXAMPLE\n  $ oada post - /bookmarks/ \u003c\u003c\u003c '{\"a\": 1}{\"b\": true}'\n```\n\n_See code: [src/commands/post.ts](https://github.com/OADA/cli/blob/v1.1.0/src/commands/post.ts)_\n\n### `oada put PATHS... PATH`\n\nPerform an OADA PUT\n\n```shell\nUSAGE\n  $ oada put PATHS... PATH\n\nARGUMENTS\n  PATHS...  paths to PUT\n  PATH      destination OADA path\n\nOPTIONS\n  -T, --tree=tree      file containing an OADA tree to use for a tree PUT\n  -d, --domain=domain  [default: localhost] default OADA API domain\n  -t, --token=token    default OADA API token\n  --[no-]tty           format output for TTY\n  --[no-]ws            use WebSockets for OADA API\n\nALIASES\n  $ oada pu\n  $ oada PUT\n\nEXAMPLE\n  $ oada put - /bookmarks/ \u003c\u003c\u003c '{\"a\": 1}'\n```\n\n_See code: [src/commands/put.ts](https://github.com/OADA/cli/blob/v1.1.0/src/commands/put.ts)_\n\n### `oada watch PATH`\n\nperform and OADA WATCH\n\n```shell\nUSAGE\n  $ oada watch PATH\n\nARGUMENTS\n  PATH  OADA path to WATCH\n\nOPTIONS\n  -d, --domain=domain       [default: localhost] default OADA API domain\n  -o, --out=out             [default: -]\n  -r, --rev=rev             rev from which to start (negative means latest - n)\n  -t, --token=token         default OADA API token\n  -t, --type=(sinlge|tree)  [default: tree]\n  --[no-]tty                format output for TTY\n  --[no-]ws                 use WebSockets for OADA API\n\nALIASES\n  $ oada w\n  $ oada WATCH\n\nEXAMPLE\n  $ oada watch /bookmarks\n  [\n     {\n       \"resource_id\": \"resources/dd2d0c95-89ab-400d-863c-e2f62e9570a5\",\n       \"path\": \"\",\n       \"body\": {\n         \"services\": {\n           \"_rev\": 213\n         },\n         \"_meta\": {\n           \"modifiedBy\": \"system/rev_graph_update\",\n           \"modified\": 1610676324.424,\n           \"_rev\": 8799\n         },\n         \"_rev\": 8799\n       },\n       \"type\": \"merge\"\n     },\n     {\n       \"resource_id\": \"resources/1e6mHvcV9ZUczdzLDIdz9T8s2eV\",\n       \"path\": \"/services\",\n       \"body\": {\n         \"ainz\": {\n           \"_rev\": 169\n         },\n         \"_meta\": {\n           \"modifiedBy\": \"system/rev_graph_update\",\n           \"modified\": 1610676324.29,\n           \"_rev\": 213\n         },\n         \"_rev\": 213\n       },\n       \"type\": \"merge\"\n     },\n     {\n       \"resource_id\": \"resources/7f0d1bcf-c0f9-44a1-a506-18c2fb3e73ed\",\n       \"path\": \"/services/ainz\",\n       \"body\": {\n         \"rules\": {\n           \"_rev\": 151\n         },\n         \"_meta\": {\n           \"modifiedBy\": \"system/rev_graph_update\",\n           \"modified\": 1610676324.12,\n           \"_rev\": 169\n         },\n         \"_rev\": 169\n       },\n       \"type\": \"merge\"\n     },\n     {\n       \"resource_id\": \"resources/f6e90c0f-7900-446e-989d-5d32d5dcb741\",\n       \"path\": \"/services/ainz/rules\",\n       \"body\": {\n         \"_meta\": {\n           \"modifiedBy\": \"users/5989462\",\n           \"modified\": 1610676323.964,\n           \"_rev\": 151\n         },\n         \"_rev\": 151\n       },\n       \"type\": \"merge\"\n     }\n  ]\n```\n\n_See code: [src/commands/watch.ts](https://github.com/OADA/cli/blob/v1.1.0/src/commands/watch.ts)_\n\n\u003c!-- commandsstop --\u003e\n\n[jsonl]: https://en.wikipedia.org/wiki/JSON_streaming#Line-delimited_JSON\n[concatenated json]: https://en.wikipedia.org/wiki/JSON_streaming#Concatenated_JSON\n[hjson]: https://hjson.github.io\n[json5]: https://json5.org\n[json6]: https://github.com/d3x0r/JSON6\n[`jq`]: https://github.com/stedolan/jq\n[`minimatch`]: https://github.com/isaacs/minimatch\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foada%2Fcli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foada%2Fcli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foada%2Fcli/lists"}