mcpField
T
tamagui-best-practices

tamagui-best-practices

github.com/alleneubankDesign & UI50357 installsUpdated 18w ago
Repository

About tamagui-best-practices

tamagui-best-practices is a coding skill for developers building with Tamagui v1.x. It covers Config v4, compiler-aware component patterns, overlays, forms, animation, and design tokens through reference materials and practical guidance.

Key features

  1. 01Config v4 setup guidance
  2. 02Compiler optimization patterns
  3. 03styled() and variant usage
  4. 04Overlay, form, and animation references
  5. 05Design token and theme guidance

Use cases

  1. 01Configure a Tamagui v1.x project
  2. 02Build compiler-friendly reusable components
  3. 03Implement dialogs, forms, or animations
  4. 04Resolve common styling and theming issues

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/alleneubank/claude-code --skill tamagui-best-practices

After installing, type/tamagui-best-practicesin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

ANIMATION_PATTERNS.md
COMPILER_PATTERNS.md
DESIGN_SYSTEM.md
DIALOG_PATTERNS.md
FORM_PATTERNS.md
OVERLAY_PATTERNS.md

Details

From the project README

Tamagui Best Practices

Tamagui v1.x patterns beyond fundamentals: Config v4, compiler optimization, compound components, and gotchas.

Reference Files — Read Before Writing Code

ContextFileWhat it covers
Dialog, Sheet, modal overlays@DIALOG_PATTERNS.mdAdapt component, accessibility
Form, Input, Label, validation@FORM_PATTERNS.mdzod integration
Animations, transitions@ANIMATION_PATTERNS.mddrivers, enterStyle/exitStyle
Popover, Tooltip, Select@OVERLAY_PATTERNS.mdoverlay primitives
Compiler optimization@COMPILER_PATTERNS.mdwhat the compiler can/cannot flatten
Design tokens, theming@DESIGN_SYSTEM.mdpalette, token structure

Config v4

Minimal setup with @tamagui/config/v4. Add styleCompat: 'react-native' for new projects to align flexBasis with React Native behavior:

import { defaultConfig } from '@tamagui/config/v4'
import { createTamagui } from 'tamagui'

export const config = createTamagui({
  ...defaultConfig,
  settings: { ...defaultConfig.settings, styleCompat: 'react-native' },
})

declare module 'tamagui' {
  interface TamaguiCustomConfig extends typeof config {}
}

For custom themes use createThemes with palette/accent/childrenThemes — see @DESIGN_SYSTEM.md.

Compiler Optimization Rules

  • Use styled() variants instead of inline conditionals — dynamic values break flattening.
  • Avoid style={{ ... }} with variables; use variant props instead.
  • The context pattern (createStyledContext) disables compiler flattening — use for higher-level components (Button, Card), not primitives.
// BAD — breaks compiler
<View backgroundColor={isDark ? '$gray1' : '$gray12'} />

// GOOD — use variants
const Box = styled(View, {
  variants: {
    dark: { true: { backgroundColor: '$gray1' }, false: { backgroundColor: '$gray12' } },
  },
})

styled() vs Inline

  • styled(): reusable components, variant-driven behavior, compiler-optimizable primitives.
  • Inline props: one-off layout adjustments on already-styled components.
  • Always use as const on variants objects (TypeScript limitation until inferred const generics).

Key Gotchas

Prop order determines override priority — props after a spread cannot be overridden by callers:

// width is locked; backgroundColor can be overridden
<View backgroundColor="$red10" {...props} width={200} />

Variant order matters — later props win:

<Component scale={3} huge />  // scale = 3 (scale listed first)
<Component huge scale={3} />  // scale = 2 (huge overrides, comes first in variants)

Use .styleable() when wrapping styled components — preserves variant inheritance:

const CorrectWrapper = StyledText.styleable((props, ref) => (
  <StyledText ref={ref} {...props} />
))

accept prop for non-standard token resolution (SVG fill/stroke, contentContainerStyle):

const StyledSVG = styled(SVG, {}, { accept: { fill: 'color', stroke: 'color' } as const })

Import consistency — tamagui, @tamagui/core, and @tamagui/button are different packages; pick one approach per project.

Never mix RN StyleSheet with Tamagui — StyleSheet values don't resolve tokens.

Platform branching for Dialog/Sheet — use Adapt instead of Platform.OS checks (see @DIALOG_PATTERNS.md).

Quick Reference

Config v4 shorthands: bg backgroundColor, p padding, m margin, w width, h height, br borderRadius

Media breakpoints: $xs 660px, $sm 800px, $md 1020px, $lg 1280px, $xl 1420px

Animation drivers: css (web, default), react-native-reanimated (native, required)

Token $ prefix: use in props (color="$color"), omit in theme definitions ({ color: palette[11] })

Fetching Current Docs

curl -sL "https://tamagui.dev/docs/core/configuration.md"
curl -sL "https://tamagui.dev/llms.txt"  # full index

Comments

Markdown supported