Sparo optimizes performance of Git operations for your large frontend monorepo.
-
Familiar interface: The
sparo
command-line interface (CLI) wrapper offers better defaults and performance suggestions without altering the familiargit
syntax. (The nativegit
CLI is also supported.) -
A proven solution: Git provides quite a lot of ingredients for optimizing very large repos; Sparo is your recipe for combining these features intelligently.
-
Simplified sparse checkout: Work with sparse checkout profiles instead of confusing "cones" and globs
-
Frontend integration: Sparo leverages Rush and PNPM workspace configurations, including the ability to automatically checkout project dependencies
-
Dual workflows: The
sparo-ci
tool implements a specialized checkout model optimized for continuous integration (CI) pipelines -
Extra safeguards: Avoid common Git mistakes such as checkouts with staged files outside the active view
-
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!)
(Metrics are transmitted to your own service and are not accessible by any other party.)
For details, consult the Sparo documentation.
Folder | Version | Changelog | Package |
---|---|---|---|
/apps/sparo | changelog | sparo | |
/apps/sparo-lib | sparo-lib |
Folder | Description |
---|---|
/apps/website | The Sparo documentation website |
/build-tests/sparo-output-test | Building this project tests Sparo command-line outputs |
/build-tests/sparo-real-repo-test | Building this project tests Sparo by cloning a real repository |
/build-tests/test-utilities | Code shared between the build test projects in this repository |
Building the projects in this monorepo:
-
Install the RushJS tool:
npm install -g @microsoft/rush
-
Clone the repo:
git clone https://github.com/tiktok/sparo.git
-
Install the dependencies
cd sparo rush install
-
Build all projects
rush build
How to invoke your locally build sparo
command:
cd apps/sparo
node lib/start.js