{"id":21659989,"url":"https://github.com/tiktok/sparo","last_synced_at":"2026-02-28T07:39:49.292Z","repository":{"id":223620969,"uuid":"761032724","full_name":"tiktok/sparo","owner":"tiktok","description":"Sparo optimizes performance of Git operations for your large frontend monorepo.","archived":false,"fork":false,"pushed_at":"2025-03-19T01:09:40.000Z","size":4223,"stargazers_count":241,"open_issues_count":1,"forks_count":12,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-06-22T15:19:37.334Z","etag":null,"topics":["checkout","git","monorepo","monorepos","optimization","pnpm","rush","rushjs","rushstack","sparse","sparse-checkout"],"latest_commit_sha":null,"homepage":"https://tiktok.github.io/sparo/","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/tiktok.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":"2024-02-21T05:33:36.000Z","updated_at":"2025-05-27T05:59:26.000Z","dependencies_parsed_at":"2024-02-27T00:43:09.457Z","dependency_job_id":"8c95c824-b0c5-4acb-8a91-d89a75e00ee4","html_url":"https://github.com/tiktok/sparo","commit_stats":null,"previous_names":["tiktok/sparo"],"tags_count":34,"template":false,"template_full_name":null,"purl":"pkg:github/tiktok/sparo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiktok%2Fsparo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiktok%2Fsparo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiktok%2Fsparo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiktok%2Fsparo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tiktok","download_url":"https://codeload.github.com/tiktok/sparo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiktok%2Fsparo/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265678448,"owners_count":23810114,"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":["checkout","git","monorepo","monorepos","optimization","pnpm","rush","rushjs","rushstack","sparse","sparse-checkout"],"created_at":"2024-11-25T09:32:00.488Z","updated_at":"2026-02-28T07:39:44.259Z","avatar_url":"https://github.com/tiktok.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"\n\u003cimg width=\"380\" src=\"./common/assets/sparo-380.png\" alt=\"Sparo\" /\u003e\n\n## Monorepo for Sparo toolkit\n\n\u003c!-- Text below this line should stay in sync with the website index.md --\u003e\n\u003c!-- ------------------------------------------------------------------ --\u003e\n\n**Sparo** optimizes performance of Git operations for your large frontend monorepo.\n\n## Key features\n\n- **Familiar interface:** The `sparo` command-line interface (CLI) wrapper offers **better defaults** and **performance suggestions** without altering the familiar `git` syntax. (The native `git` CLI is also supported.)\n- **A proven solution:** Git provides [quite a lot of ingredients](./pages/guide/git_features.md) for optimizing very large repos; Sparo is your recipe for combining these features intelligently.\n- **Simplified sparse checkout:** Work with sparse checkout [profiles](./pages/guide/sparo_profiles.md) instead of confusing \"cones\" and globs\n- **Frontend integration:** Sparo leverages [Rush](https://rushjs.io/) and [PNPM](https://pnpm.io/) workspace configurations, including the ability to automatically checkout project dependencies\n- **Dual workflows:** The `sparo-ci` tool implements a specialized checkout model optimized for continuous integration (CI) pipelines\n- **Extra safeguards**: Avoid common Git mistakes such as checkouts with staged files outside the active view\n- **Go beyond Git hooks:** Optionally collect anonymized Git timing metrics in your monorepo, enabling your build team to set data-driven goals for _local_ developer experience (not just CI!)\n\n  _(Metrics are transmitted to your own service and are not accessible by any other party.)_\n\n\u003c!-- ------------------------------------------------------------------ --\u003e\n\u003c!-- Text above this line should stay in sync with the website index.md --\u003e\n\nFor details, consult the [Sparo documentation](./apps/sparo/README.md).\n\n\u003c!-- GENERATED PROJECT SUMMARY START --\u003e\n\n## Published Packages\n\n\u003c!-- the table below was generated using the ./repo-scripts/repo-toolbox script --\u003e\n\n| Folder | Version | Changelog | Package |\n| ------ | ------- | --------- | ------- |\n| [/apps/sparo](./apps/sparo/) | [![npm version](https://badge.fury.io/js/sparo.svg)](https://badge.fury.io/js/sparo) | [changelog](./apps/sparo/CHANGELOG.md) | [sparo](https://www.npmjs.com/package/sparo) |\n| [/apps/sparo-lib](./apps/sparo-lib/) | [![npm version](https://badge.fury.io/js/sparo-lib.svg)](https://badge.fury.io/js/sparo-lib) | | [sparo-lib](https://www.npmjs.com/package/sparo-lib) |\n\n\n## Unpublished Local Projects\n\n\u003c!-- the table below was generated using the ./repo-scripts/repo-toolbox script --\u003e\n\n| Folder | Description |\n| ------ | -----------|\n| [/apps/website](./apps/website/) | The Sparo documentation website |\n| [/build-tests/sparo-output-test](./build-tests/sparo-output-test/) | Building this project tests Sparo command-line outputs |\n| [/build-tests/sparo-real-repo-test](./build-tests/sparo-real-repo-test/) | Building this project tests Sparo by cloning a real repository |\n| [/build-tests/test-utilities](./build-tests/test-utilities/) | Code shared between the build test projects in this repository |\n\u003c!-- GENERATED PROJECT SUMMARY END --\u003e\n\n## Contributing\n\nBuilding the projects in this monorepo:\n\n1. Install the [RushJS](https://rushjs.io/) tool:\n\n   ```shell\n   npm install -g @microsoft/rush\n   ```\n\n2. Clone the repo:\n\n   ```shell\n   git clone https://github.com/tiktok/sparo.git\n   ```\n\n3. Install the dependencies\n\n   ```shell\n   cd sparo\n   rush install\n   ```\n\n4. Build all projects\n\n   ```shell\n   rush build\n   ```\n\nHow to invoke your locally build `sparo` command:\n\n```shell\ncd apps/sparo\nnode lib/start.js\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftiktok%2Fsparo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftiktok%2Fsparo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftiktok%2Fsparo/lists"}