How to Contribute to the Astryx Design System: Complete Guide for Developers
To contribute to the Astryx design system, fork the facebook/astryx repository, install dependencies with pnpm via Corepack, bootstrap the monorepo using the $ASTRYX CLI, create a feature branch for your changes, and submit a pull request after running the full Vitest suite and linting.
Astryx is Facebook’s modular design system for building internal tools and products, maintained as a monorepo containing core UI components, themes, and developer tooling. To contribute to the Astryx design system, you must use the $ASTRYX CLI for component discovery, pnpm for package management, and Vitest for testing. This guide covers the exact workflow defined in CONTRIBUTING.md and demonstrates how to work with the source code in packages/core/ and packages/themes/.
Prerequisites and Repository Setup
Begin by forking the repository on GitHub and cloning your fork locally. The project requires pnpm managed via Corepack for consistent dependency resolution across the monorepo.
git clone https://github.com/YOUR_USERNAME/astryx.git
cd astryx
Install dependencies using pnpm:
pnpm install
Bootstrapping the Monorepo
After installation, initialize the repository using the Astryx CLI to ensure all packages are correctly linked and documentation is generated. Run these commands in sequence:
$ASTRYX help
$ASTRYX component --list
$ASTRYX upgrade --apply
This bootstrap process validates the packages/ directory structure and syncs generated documentation (*.doc.mjs files) with the current source code.
Creating and Editing Components
Generating New Components
Use the CLI to scaffold a new component skeleton. Pipe the output to create the source file in packages/core/src/:
$ASTRYX component Button --dense > packages/core/src/Button/Button.tsx
Edit the generated file and create a matching documentation file at packages/core/src/Button/Button.doc.mjs. Verify registration by listing components:
$ASTRYX component --list | grep Button
Component Documentation Standards
All components must include a *.doc.mjs file alongside their source. View existing component APIs before editing by using the dense flag:
$ASTRYX component Switch --dense
This outputs props, variants, usage examples, and the exact path to the source documentation file.
Working with Theme Packages
Theme packages reside in packages/themes/. To update a theme, navigate to the specific theme directory (e.g., packages/themes/stone) and modify the theme definition in src/theme.ts.
After editing, rebuild the theme assets:
pnpm run build
Preview changes in Storybook:
pnpm -F @astryxdesign/storybook dev
Testing and Validation
All contributions must pass the Vitest test suites. Run the full test suite across all packages:
pnpm test
For targeted testing, run vibe-tests with a sample subset:
pnpm -F @astryxdesign/vibe-tests interactive --sample 5
Execute linting to ensure code style compliance:
pnpm lint
The repository enforces StyleX-centric CSS conventions and JSDoc documentation standards. All Vitest suites must pass before submitting a pull request.
Submitting Your Contribution
Create a feature branch with a descriptive name:
git checkout -b feature/your-change-name
Commit your changes following the repository’s formatting guidelines. Push the branch to your fork and open a Pull Request against the main branch. Follow the PR template by providing a clear description, linking relevant issues, and including screenshots for visual changes. Address review feedback promptly; approved PRs are merged automatically.
Summary
- Fork and clone the facebook/astryx repository, then run
pnpm installto initialize dependencies. - Bootstrap the monorepo using
$ASTRYX help,$ASTRYX component --list, and$ASTRYX upgrade --applyto link packages and sync documentation. - Generate components with
$ASTRYX component <Name> --denseand create corresponding*.doc.mjsfiles inpackages/core/src/. - Test thoroughly using
pnpm test(Vitest) andpnpm lintbefore submitting; all suites must pass. - Follow StyleX and JSDoc conventions for CSS and documentation, and adhere to the PR template requirements.
Frequently Asked Questions
What package manager does Astryx use?
Astryx uses pnpm managed via Corepack for all package management operations. This ensures consistent dependency resolution across the monorepo’s packages/ directory. Install dependencies with pnpm install and use pnpm filters (e.g., pnpm -F @astryxdesign/storybook) to run commands in specific packages.
How do I generate a new component skeleton?
Use the $ASTRYX CLI with the --dense flag to output a complete component template. Pipe the result to your target file in packages/core/src/:
$ASTRYX component Button --dense > packages/core/src/Button/Button.tsx
Where does component documentation live?
Documentation co-locates with source code as *.doc.mjs files (e.g., packages/core/src/Button/Button.doc.mjs). View existing documentation using $ASTRYX component <Name> --dense, which displays props, variants, and the file path to the documentation source.
What testing framework does Astryx use?
The repository uses Vitest for all testing. Run the complete suite with pnpm test or target specific packages using pnpm filters (e.g., pnpm -F @astryxdesign/vibe-tests interactive --sample 5). All tests must pass before a pull request can be merged.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →