Skip to content
menumenu tanreiexpand_morecontrasttranslate
tanreiexpand_more
Getting startedWebReactSwiftUIJetpack ComposeFlutterReact NativePresetsYour own design systemUsing Tanrei with AI agentsBrandDesign tokensDesign systems and customizationTheme StudioColorTypographyIconsShapeElevationMotionInteraction statesBehaviourLayoutAccessibilityWordsColor tokensTypescale tokensShape tokensElevation tokensMotion tokensState tokensSpace and measure tokensComponentsButtonMain action buttonSegmented buttonButton groupButton with menuToolbarCopy buttonCheckboxRadio buttonSwitchChipMenuSliderSlider fieldCalendarDateTimePickerField groupRadio groupCheckbox groupSelectSelect fieldMenubarFile uploadFile picker AdvancedDrop zoneText input AdvancedText fieldChip fieldFieldCombobox AdvancedCombobox fieldNumber input AdvancedNumber fieldColor input AdvancedColor fieldOne-time-code input AdvancedOne-time-code fieldEmbedded text input AdvancedChat composerCardDividerModal layer AdvancedDialogListList rowBottom sheetSide sheetCarouselCode blockTablePopoverStepsAccordionDescription listFigureApp shellPage headerTree viewTimelineImage previewHandleResizable frameScroll areaBadgeProgress indicatorMeterNumber tickerLoading indicatorSnackbarTooltipKeyboard shortcutTagInline codeCalloutAvatarEmpty stateTag groupSkeletonFile itemSwatchMarquee textTabsTab viewApp barNavigation barNavigation drawerSearchLinkPaginationPrevious and next linksStepperBreadcrumbsTable of contentsLink cardFAB menuStatusHow Tanrei is builtContributingLicense and attribution
HomeProjectContributing

Contributing

Why Tanrei does not accept outside contributions, how to report a bug or ask a question, and where the rules live.

content_copyView as Markdown

Outside contributions are not accepted

The repository is public at github.com/chnotchy/tanrei, so that anyone can read how Tanrei is made. Every change is made by the maintainers: pull requests from outside are closed unmerged, and proposals for new components or tokens are not taken. The reason is the supply chain: Tanrei runs inside other people’s products, every change from outside is a way for code its maintainers did not write to reach them, and the current security climate makes that a risk the project does not take. To report a bug or ask a question, open an issue. Report a security problem privately, as the repository’s SECURITY.md describes, never in an issue.

Where the rules live

The repository’s root AGENTS.md is the authoritative guide for whoever changes the repository, human or AI. It is short, and reading it first will save time. Each package and source directory may add a nested AGENTS.md with local rules; the nearest file applies, and none of them may weaken the root. CONTRIBUTING.md at the root is the long form.

Longer-form material lives under the repository’s docs/ directory: the architecture overview, and the governance, which says who decides what.

Shape of a change

Every change follows these steps, whoever makes it.

  1. Start from the source of truth. Changes to a component’s public surface begin in specs/. Changes to a design value begin in tokens/. Platform code follows.
  2. Run the checks locally. pnpm validate, pnpm generate, then pnpm check. If the drift check fails, regenerate; do not edit the generated file.
  3. Keep platforms honest. If you cannot finish a platform, leave its status as it truly is. The matrix is generated from the repository and must not claim more than exists.
  4. Add a changeset for anything users can see, and use Conventional Commits (feat(web): …, fix(tokens): …, docs: …).

What no change may contain

  • Hardcoded colors, radii, type, spacing, motion or opacity inside a component.
  • Snapshot baselines updated to make a test pass.
  • Loosened contrast or accessibility thresholds.
  • Documentation text copied from another design system. All prose in Tanrei is original.

Documentation changes

This site lives in apps/docs/. Prose is hand-written MDX: English is the source, and each page is translated into the site’s other languages (apps/docs/i18n/README.md lists them, and says how a translation records what it was made from). Tables that a spec, token file or the status matrix can supply are rendered from that data and are never typed by hand. See apps/docs/AGENTS.md for the local rules.