← 資料一覧

gluestack-ui(gluestack/gluestack-ui)

v3 · NativeWind · copy-paste · Next.js 15 / Expo SDK 53 · GeekyAnts

1 — 概要

v3 gluestack-ui は GeekyAnts が開発する、React・Next.js・React Native 向けの UI コンポーネントとパターン集。従来の npm 依存型 UI ライブラリと異なり、必要な部品だけをプロジェクトへ copy-paste するモデルを採用する(README より)。

スタイルは NativeWind 経由の Tailwind CSS。NativeBase の後継として位置づけられ、v3 では Source-to-Destination モノレポ、RSC 対応、TypeScript-first CLI が追加されている。

~55UI コンポーネント
CLIinit / add / upgrade
RSCNext.js 15 対応
RN WebWeb / モバイル共通
配布モデル: @gluestack-ui/core と @gluestack-ui/utils は npm パッケージとして振る舞い・ユーティリティを提供する。見た目付きの UI 部品は npx gluestack-ui add でアプリ側にコピーされ、プロジェクト内で自由に編集できる。
2 — モノレポ構成

編集の正は src/。コンポーネント実装・ドキュメント・サイドバー設定はここに集約され、yarn sync で各アプリへ反映される(ONBOARDING.md)。apps/*/components/ui/ は生成先のため gitignore され、直接編集すると次回 sync で上書きされる。

flowchart LR
  subgraph source["src/(編集する)"]
    UI[src/components/ui/]
    DOCS[src/docs/]
    SB[sidebar.json]
  end
  subgraph packages["packages/(npm 公開)"]
    CORE[gluestack-core]
    UTILS[gluestack-utils]
    CLI[gluestack-ui CLI]
    ADAPT[ui-next-adapter]
  end
  subgraph apps["apps/(生成先)"]
    WEB[website]
    KS[kitchen-sink]
    NEXT[starter-kit-next]
    EXPO[starter-kit-expo]
  end
  UI --> CORE
  UI --> UTILS
  source -->|yarn sync| apps
  CLI -->|init / add| NEXT
  CLI -->|init / add| EXPO
src/components/ui/     # 約55コンポーネント(button, modal, input …)
src/docs/                  # ドキュメント MDX
packages/gluestack-core/ # Creator — スタイルなしの振る舞い層
packages/gluestack-utils/# hooks, aria, NativeWind ヘルパ
packages/gluestack-ui/     # npx gluestack-ui CLI
packages/ui-next-adapter/# Next.js RSC 向け RNW アダプタ
apps/website/              # gluestack.io ドキュメントサイト
apps/kitchen-sink/         # Expo コンポーネントプレイグラウンド
scripts/mappers/         # website / kitchen-sink / starter-kits 同期
パッケージ / アプリ役割
@gluestack-ui/coreCreator ファクトリ。Pressable / View 等のプリミティブに ARIA・状態・Context を載せる(スタイルなし)
@gluestack-ui/utilstva()、useStyleContext、aria hooks、NativeWind ユーティリティ
gluestack-ui(CLI)init / add / upgrade — プロジェクトへコンポーネントをコピー
create-gluestacknpx create-gluestack で新規プロジェクトを bootstrap
ui-next-adapterReact Native Web コンポーネントを Next.js App Router / RSC で使うためのアダプタ
3 — 二層コンポーネント設計

各コンポーネントは 振る舞い と スタイル を分離する。Creator が data-hover 等の data 属性を付与し、Styled 層の NativeWind クラス(data-[hover=true]:bg-primary/90 等)がそれに反応する(ONBOARDING.md)。

createButton({ Root, Text … }) → usePress / useFocus / aria → tva() variants → copy-paste 可能な UI
レイヤ場所内容
Creatorpackages/gluestack-core/src/<component>/creator/複合コンポーネントの状態管理、アクセシビリティ、Context。スタイルは持たない
Styledsrc/components/ui/<component>/RN プリミティブ + Creator 呼び出し + tva() で Tailwind クラスを定義
ARIA(任意)packages/gluestack-core/src/<component>/aria/Web / Native 向けカスタム ARIA hooks

主要ユーティリティ(@gluestack-ui/utils)

  • tva() — tailwind-variants の薄いラッパ。parentVariants で親 Context の variant に連動
  • withStyleContext(Component, SCOPE) — 子が読む context prop を受け付けるラッパ
  • useStyleContext(SCOPE) — 親の variant / size を子コンポーネントが継承(例: ButtonText が Button の size を自動反映)
4 — 主な機能
機能内容
モジュラー構成必要なコンポーネントだけ add。未使用分のバンドル肥大を避ける
NativeWindTailwind クラスで Web / モバイルを同一 API でスタイル
RSC 互換React Server Components 向けに最適化(Next.js 15)
Universal DesignWeb とモバイルで一貫したデザインとコンポーネント API
テーマGluestackUIProvider と config トークンでライト / ダークを切替
アクセシビリティCreator 層で React ARIA 系 hooks を統合。フォーカスリング・キーボード操作を内包

技術スタック(README): JavaScript、React、React Native、Styled System 系のデザイントークン、Tailwind / NativeWind。

v1 からの移行: gluestack-ui v1 利用者向けに公式ドキュメントのアップグレードガイドと codemod が提供されている(gluestack.io/ui/docs)。
5 — 導入と CLI

既存の Next.js または Expo プロジェクトが前提。初回は init、以降は必要な部品を add する(packages/gluestack-ui README)。

# 初期セットアップ(Tailwind / Provider / 設定ファイル)
npx gluestack-ui init

# コンポーネントまたは hook を追加
npx gluestack-ui add button
npx gluestack-ui add modal

# 全コンポーネント一括追加
npx gluestack-ui add --all

# バージョンアップ
npx gluestack-ui upgrade

新規プロジェクトは npx create-gluestack でも bootstrap できる。詳細手順は 公式ドキュメント(Installation) を参照。

CLI コマンド用途
initgluestack-ui をプロジェクトに初期設定(Provider、Tailwind、設定 JSON)
add <name>指定コンポーネント / hook をソースからコピー
add --all全コンポーネントを一括追加
upgrade既存コピー済みコンポーネントの更新
helpCLI ヘルプ表示
6 — コンポーネント

リポジトリ内 src/components/ui/ に約 55 ディレクトリがある(ONBOARDING.md は 60 と記載 — all-components 等のメタディレクトリを含む場合)。各ディレクトリは index.tsx、examples/、dependencies.json を持つ。

カテゴリ例
レイアウトbox, center, hstack, vstack, grid, divider
フォームbutton, input, textarea, checkbox, radio, switch, select, form-control
フィードバックalert, progress, spinner, skeleton, toast
オーバーレイmodal, alert-dialog, popover, drawer, actionsheet, bottomsheet, menu, tooltip
表示avatar, badge, card, heading, text, icon, image
その他fab, link, pressable, gluestack-ui-provider, portal

各コンポーネントの props・例・依存関係は gluestack.io/ui/docs に掲載。Kitchen Sink(Expo)アプリで実機プレビューも可能。

7 — Sync エンジンとデモ

scripts/dev.ts が src/ を chokidar で監視し、保存時に mapper を呼ぶ。mapper は destination アプリごとにコピー対象をフィルタする。

Mapper出力先コピー内容
websiteapps/website/ドキュメント、examples、sidebar.json
kitchen-sinkapps/kitchen-sink/コンポーネントコード + ルート自動生成
starter-kitsNext / Expo starterコンポーネントコードのみ
# ルート package.json の主要スクリプト
yarn dev              # src/ 監視 + 全 mapper
yarn dev:website      # website mapper のみ
yarn sync             # 一括同期(初回セットアップ後)
yarn create:component # 新コンポーネントの scaffold
デモ / テンプレート用途
gluestack.io公式ドキュメントサイト(apps/website)
Kitchen SinkExpo 上で全コンポーネントを試すプレイグラウンド
starter-kit-nextNext.js スターター
starter-kit-expoExpo スターター