[docs-infra] Add a script to generate Material UI `llms.txt` and docs markdown.
Result:
- llms.txt: https://deploy-preview-46308--material-ui.netlify.app/material-ui/llms.txt
- public component: https://deploy-preview-46308--material-ui.netlify.app/material-ui/react-accordion.md (APIs for this component family are attached to the main component)
- public docs: https://deploy-preview-46308--material-ui.netlify.app/material-ui/getting-started/installation.md
Summary
This PR introduces a new script to generate LLM-optimized documentation by processing MUI component markdown files and creating standalone documentation with embedded code examples and API references.
What's included
New build script: buildLlmsDocs
-
Location:
/scripts/buildLlmsDocs/index.ts - Purpose: Generates comprehensive markdown files optimized for LLM consumption
-
Features:
- Replaces
{{"demo": "filename.js"}}syntax with actual code snippets - Appends component API documentation (props, slots, CSS classes)
- Supports non-component documentation (guides, customization docs)
- Generates root
llms.txtbased on the project settings - Reusable across repositories via
--projectSettingsparameter
- Replaces
Core processing utilities
-
processComponent.ts: Handles demo replacement in markdown files -
processApi.ts: Converts API JSON to markdown tables with proper formatting
Key improvements
- Escapes pipe characters in union types for better markdown readability
- Properly handles HTML-to-markdown conversion including lists
- Uses existing API docs builder infrastructure for consistency
- Supports grep filtering for selective generation
Usage
# Generate all Material UI component docs
pnpm tsx scripts/buildLlmsDocs/index.ts \
--projectSettings ./packages/api-docs-builder-core/materialUi/projectSettings.ts
# Generate specific components and guides
pnpm tsx scripts/buildLlmsDocs/index.ts \
--projectSettings ./packages/api-docs-builder-core/materialUi/projectSettings.ts \
--nonComponentFolders system material/customization \
--grep "Button|borders"
Output structure
- Components: docs/public/material-ui/react-{component}.md
- Guides: docs/public/material-ui/{category}/{topic}.md
- Index files: docs/public/{directory}/llms.txt
Testing
The script has been tested with Material UI components and documentation. Unit tests are included for the
core processing functions.
The script has been tested with Material UI components and documentation. Unit tests are included for the core processing functions.
- [x] I have followed (at least) the PR section of the contributing guide.
Netlify deploy preview
https://deploy-preview-46308--material-ui.netlify.app/
Bundle size report
@mui/material parsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/lab parsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/system parsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/utils parsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/lab/AdapterDateFns parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/AdapterDayjs parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/AdapterLuxon parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/AdapterMoment parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/CalendarPicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/CalendarPickerSkeleton parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/ClockPicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/DatePicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/DateRangePicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/DateRangePickerDay parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/DateTimePicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/DesktopDatePicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/DesktopDateRangePicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/DesktopDateTimePicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/DesktopTimePicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/LoadingButton parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/LocalizationProvider parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/Masonry parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/MobileDatePicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/MobileDateRangePicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/MobileDateTimePicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/MobileTimePicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/MonthPicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/PickersDay parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/StaticDatePicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/StaticDateRangePicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/StaticDateTimePicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/StaticTimePicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/TabContext parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/TabList parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/TabPanel parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/Timeline parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/TimelineConnector parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/TimelineContent parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/TimelineDot parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/TimelineItem parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/TimelineOppositeContent parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/TimelineSeparator parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/TimePicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/TreeItem parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/TreeView parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/useAutocomplete parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/lab/YearPicker parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Accordion parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/AccordionActions parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/AccordionDetails parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/AccordionSummary parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Alert parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/AlertTitle parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/AppBar parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Autocomplete parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Avatar parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/AvatarGroup parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Backdrop parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Badge parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/BottomNavigation parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/BottomNavigationAction parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Box parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Breadcrumbs parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Button parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/ButtonBase parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/ButtonGroup parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Card parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/CardActionArea parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/CardActions parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/CardContent parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/CardHeader parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/CardMedia parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Checkbox parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Chip parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/CircularProgress parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/ClickAwayListener parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Collapse parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Container parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/CssBaseline parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/DefaultPropsProvider parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Dialog parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/DialogActions parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/DialogContent parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/DialogContentText parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/DialogTitle parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Divider parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Drawer parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Fab parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Fade parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/FilledInput parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/FormControl parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/FormControlLabel parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/FormGroup parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/FormHelperText parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/FormLabel parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/GlobalStyles parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Grid parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/GridLegacy parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Grow parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/Icon parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/IconButton parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/ImageList parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/ImageListItem parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/material/ImageListItemBar parsed: 0B(0.00%) gzip: 0B(0.00%)
Generated by :no_entry_sign: dangerJS against 7c9e60ede9b854483762146225422ccd871e6ecf
A bit late to the party here, but any plans on supporting an llms.txt for Mui X? I've been wanting to feed some better documentation to an LLM for complex things like DataGrid and Charts.