{"id":19904270,"url":"https://github.com/alloc/indo","last_synced_at":"2025-05-03T00:31:35.406Z","repository":{"id":37251768,"uuid":"202562613","full_name":"alloc/indo","owner":"alloc","description":"More flexible monorepos","archived":false,"fork":false,"pushed_at":"2024-11-11T18:32:38.000Z","size":1032,"stargazers_count":18,"open_issues_count":48,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-26T13:05:04.973Z","etag":null,"topics":["monorepo","nodejs","package-management","workspaces"],"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/alloc.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":"2019-08-15T15:07:08.000Z","updated_at":"2024-11-11T18:32:40.000Z","dependencies_parsed_at":"2024-04-15T02:34:18.475Z","dependency_job_id":"d64a8c22-e48b-4e6d-bb24-11aed61327db","html_url":"https://github.com/alloc/indo","commit_stats":null,"previous_names":[],"tags_count":84,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alloc%2Findo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alloc%2Findo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alloc%2Findo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alloc%2Findo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alloc","download_url":"https://codeload.github.com/alloc/indo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252126544,"owners_count":21698964,"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":["monorepo","nodejs","package-management","workspaces"],"created_at":"2024-11-12T20:27:38.222Z","updated_at":"2025-05-03T00:31:33.284Z","avatar_url":"https://github.com/alloc.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# indo\n\nWorkspaces where each package has its own commit history.\n\nSetup your monorepo with one command:\n\n```sh\nnpx indo\n```\n\n## Synopsis\n\nMonorepos are great for keeping a bundle of packages tied together by a commit history, but sometimes a package needs (or already has) its own commit history. For example, you might be developing a fork of someone else's package. Indo lets you choose which packages deserve their own commit history. Just run `git clone` and Indo will notice. **Note:** Be sure to add your clones to `.gitignore` to avoid [git submodules](https://git-scm.com/book/en/v2/Git-Tools-Submodules) (which are *not* supported by Indo).\n\nIndo automatically searches your monorepo for `package.json` files, which means it can be used with **zero setup**. The `indo` command will (1) create the `.indo.json` if none is found, (2) clone any missing repos, (3) install dependencies, (4) run `build` scripts, and (5) link local packages together.\n\n**Fun facts:**\n\n- Indo *never* hoists dependencies\n- Indo plays nicely with Yarn workspaces\n- Indo makes forking a breeze\n\n\u0026nbsp;\n\n## Guides\n\n- [Get Started](./docs/get-started.md)\n- [Using Vendor Packages](./docs/using-vendor.md)\n- [Using Yarn Workspaces](./docs/using-yarn-workspaces.md)\n- [Using A Temporary Fork](./docs/using-a-temporary-fork.md)\n- [Using `yarn link`](./docs/using-yarn-link.md)\n- [Configuration](./docs/config.md)\n\n\u0026nbsp;\n\n## Commands\n\n### `indo`\n\nRun this command to bootstrap your Indo-powered monorepo, which involves\ncloning any missing repos, installing any dependencies, and linking together your\nlocal packages.\n\nSpecify `-f`/`--force` to see which packages are linked where. Otherwise, only\nnewly linked packages are printed.\n\n**Note:** Packages are ignored when no `version` exists in their `package.json`.\n\n\u0026nbsp;\n\n### `indo help`\n\nPrint documentation for a specific command.\n\n```sh\n# What does \"indo clone\" do?\nindo clone help\n```\n\nAliases: `-h`, `--help`\n\n\u0026nbsp;\n\n### `indo clone`\n\nShallow clone a repository and add it to \"repos\" in the nearest `.indo.json` config.\n\nYou can even provide a package name instead of a git url! For example, `indo clone lodash`\nasks npm for the git url and clones it into `vendor/lodash` by default. You can also pass\nan optional directory name (eg: `indo clone lodash a/b/c`).\n\n\u0026nbsp;\n\n### `indo link`\n\nLink a global package to the `./vendor/` directory, and link it to packages that can use it.\n\n```sh\nindo link lodash\n```\n\nHowever, before you can do that, you must call `indo link` in your lodash clone.\n\n```sh\n# Clone \"lodash\" outside your monorepo.\ngit clone https://github.com/lodash/lodash.git ~/dev/lodash\ncd ~/dev/lodash\n\n# Add it to Indo's global package registry.\nindo link\n```\n\nIt's basically `yarn link` except with automatic linking to packages in your monorepo. 😻\n\nFor a monorepo whose root package is unnamed, use `indo link -g \u003cname\u003e` to register it globally.\nThen use `indo link \u003cname\u003e` to link your local packages to it.\n\n\u0026nbsp;\n\n### `indo unlink`\n\nRemove the current package from Indo's global package registry.\n\n```sh\nindo unlink\n```\n\nTo revert `indo link \u003cname\u003e` commands, run `indo unlink \u003cname\u003e` and the given package names\nwill be removed from the `./vendor/` directory (but only if they were added with `indo link`).\n\n```sh\nindo unlink lodash\n```\n\n\u0026nbsp;\n\n### `indo add`\n\nAdd dependencies to the current package, using its preferred `npm` client (eg: `yarn` or `pnpm`).\n\nAfter installing, the dependency is replaced with a local package if possible.\n\n```sh\nindo add lodash\n```\n\nSupported flags:\n- `--prod` (enabled by default)\n- `-P`/`--peer`\n- `-D`/`--dev`\n- `-O`/`--optional`\n- `-E`/`--exact`\n\n\u0026nbsp;\n\n### `indo remove`\n\nRemove dependencies from the current package, using its preferred `npm` client.\n\n```sh\nindo remove lodash\n```\n\nAliases: `rm`\n\n\u0026nbsp;\n\n### `indo list`\n\nSee which packages are detected by Indo.\n\n```sh\nindo list\n```\n\nAliases: `ls`\n\n\u0026nbsp;\n\n### `indo run`\n\nRun a npm script in every non-vendor package.\n\n```sh\nindo run build\n```\n\n\u0026nbsp;\n\n### `indo exec`\n\nRun an arbitrary command in every non-vendor package.\n\n**Note:** Piping is not yet supported.\n\n```sh\nindo exec -- echo \\$PACKAGE_NAME\n```\n\nInjected variables include:\n- `PACKAGE_NAME`\n- `PACKAGE_ROOT`\n\n\u0026nbsp;\n\n### `indo git`\n\nRun a `git` command in every `.git` repo containing a non-vendor package.\n\n**Note:** Your customized `git` aliases are supported!\n\n```sh\nindo git status\n```\n\n\u0026nbsp;\n\n### `indo purge`\n\nRemove one or more packages, cleaning up `.indo.json` along the way.\n\nFor example, `indo purge foo bar` removes the `./foo` and `./bar` directories (relative to the current directory) from the filesystem and from the nearest `.indo.json` file.\n\nThe given directories are not required to contain a `package.json`. For example, you can do `indo rm packages`\nto delete the entire `packages` directory, which may contain dozens of repos, each with its own `package.json`. Indo re-installs the dependencies of any non-vendor package that was linked to a removed package.\n\nIt's basically `rm -rf` but with:\n- a confirmation prompt\n- automatic updates to the nearest `.indo.json` file\n- an install step for depending packages\n\n\u0026nbsp;\n\n### `indo init`\n\nCreate an empty `.indo.json` file in the current directory, replacing any pre-existing `.indo.json` file.\n\nThe `indo` command automatically invokes this command when neither the current directory nor any of\nits ancestors contain a `.indo.json` file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falloc%2Findo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falloc%2Findo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falloc%2Findo/lists"}