setup-leafygreen

作成者: mongodb

Vite + React + TypeScriptプロジェクトでMongoDBのLeafyGreen UIデザインシステムをセットアップ、インストール、またはスキャフォールディングする際に使用します。

npx skills add https://github.com/mongodb/leafygreen-ui --skill setup-leafygreen

LeafyGreen UI Setup

Configure a Vite + React + TypeScript project to use MongoDB's LeafyGreen design system. Run all steps in order. See references/gotchas.md before troubleshooting any issues.

Prerequisites Check

Before starting, verify the project is a Vite + React + TypeScript project:

# Must exist
ls package.json src/main.tsx src/App.tsx vite.config.ts

If these files are missing, scaffold the project first:

echo "y" | npm create vite@latest . -- --template react-ts

Step 1 — Install Packages

npm install \
  @leafygreen-ui/leafygreen-provider \
  @leafygreen-ui/button \
  @leafygreen-ui/typography \
  @leafygreen-ui/tokens \
  @leafygreen-ui/icon \
  @leafygreen-ui/icon-button \
  @leafygreen-ui/logo
npm install --save-dev vite-plugin-node-polyfills

The polyfills package is required because some LeafyGreen packages reference Node.js built-ins (e.g. Buffer) that don't exist in the browser. Without it, the app renders a blank page with no visible error.

Step 2 — Update vite.config.ts

Replace the full contents of vite.config.ts:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { nodePolyfills } from 'vite-plugin-node-polyfills'
import path from 'path'

export default defineConfig({
  plugins: [react(), nodePolyfills()],
  resolve: {
    dedupe: ['react', 'react-dom'],
    alias: {
      react: path.resolve('./node_modules/react'),
      'react-dom': path.resolve('./node_modules/react-dom'),
    },
  },
})

The dedupe + alias block is critical — LeafyGreen packages bundle their own React copy, which causes an "Invalid hook call" crash in the browser. This forces every package to use the single React instance in the project.

Step 3 — Update src/main.tsx

Wrap the app in LeafyGreenProvider. Important: LeafyGreenProvider is a default export, not a named export.

import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import LeafyGreenProvider from '@leafygreen-ui/leafygreen-provider'
import './index.css'
import App from './App.tsx'

createRoot(document.getElementById('root')!).render(
  <StrictMode>
    <LeafyGreenProvider darkMode={true}>
      <App />
    </LeafyGreenProvider>
  </StrictMode>,
)

Keep the provider in main.tsx only — not in App.tsx.

Step 4 — Replace src/index.css

Replace the entire contents of src/index.css with only this. The Vite template's default CSS overrides LeafyGreen colors and must be completely removed:

@font-face {
  font-family: 'Euclid Circular A';
  src:
    url('https://d2va9gm4j17fy9.cloudfront.net/fonts/euclid-circular/EuclidCircularA-Regular-WebXL.woff2') format('woff2'),
    url('https://d2va9gm4j17fy9.cloudfront.net/fonts/euclid-circular/EuclidCircularA-Regular-WebXL.woff') format('woff'),
    url('https://d2va9gm4j17fy9.cloudfront.net/fonts/euclid-circular/EuclidCircularA-Regular.ttf') format('truetype');
  font-weight: 400;
  font-style: normal;
}

@font-face {
  font-family: 'MongoDB Value Serif';
  src:
    url('https://d2va9gm4j17fy9.cloudfront.net/fonts/value-serif/MongoDBValueSerif-Regular.woff2') format('woff2'),
    url('https://d2va9gm4j17fy9.cloudfront.net/fonts/value-serif/MongoDBValueSerif-Regular.woff') format('woff'),
    url('https://d2va9gm4j17fy9.cloudfront.net/fonts/value-serif/MongoDBValueSerif-Regular.ttf') format('truetype');
  font-weight: 400;
  font-style: normal;
}

*, *::before, *::after { box-sizing: border-box; }

body {
  margin: 0;
  background-color: #001E2B;
  font-family: 'Euclid Circular A', 'Helvetica Neue', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
}

Do not add anything to index.html for fonts. Do not add other styles.

Step 5 — Smoke Test src/App.tsx

Replace src/App.tsx with a smoke test to confirm components render:

import { H1 } from '@leafygreen-ui/typography'
import { Button } from '@leafygreen-ui/button'

function App() {
  return (
    <div style={{ padding: 24 }}>
      <H1>LeafyGreen is working</H1>
      <Button>Click me</Button>
    </div>
  )
}

export default App

Use named imports only{ H1 } and { Button }. Do not use default imports for these components.

Also clear src/App.css (keep the file but empty it) since the Vite template styles interfere.

Step 6 — Create src/components/

mkdir -p src/components

Step 7 — Verify

npm run dev

Open the browser. Confirm H1 text and Button render with MongoDB styling (Euclid Circular A font, dark background). If the page is blank, see references/gotchas.md.

npm run build

Build must pass with zero errors. A chunk-size warning about LeafyGreen's bundle size is expected and harmless.

Additional Resources

  • references/gotchas.md — React 19 type errors, multiple-React crash, darkMode quirks, and other known issues with fixes
  • leafygreen-authoring skill — component mapping, import conventions, design tokens, Figma MCP workflow (auto-loaded when editing .tsx/.ts files)

mongodbのその他のスキル

atlas-stream-processing
mongodb
MongoDB Atlas Stream Processing(ASP)ワークフローを管理します。ワークスペースのプロビジョニング、データソース/シンク接続、プロセッサのライフサイクル操作を処理し、…
official
mongodb-atlas-stream-processing
mongodb
MongoDB Atlas Stream Processing (ASP) ワークフローを管理します。ワークスペースのプロビジョニング、データソース/シンク接続、プロセッサのライフサイクル操作を処理します、…
official
mongodb-connection
mongodb
MongoDBクライアント接続設定(プール、タイムアウト、パターン)を、サポートされている任意のドライバー言語向けに最適化します。このスキルは、作業・更新・レビューの際に使用します…
official
mongodb-mcp-setup
mongodb
ユーザーが主要なMongoDB MCPサーバーオプションの設定を進められるよう案内します。MongoDB MCPサーバーはインストール済みだが、設定がまだ完了していないユーザーにこのスキルを使用してください…
official
mongodb-natural-language-querying
mongodb
自然言語を使用して、コレクションスキーマのコンテキストとサンプルドキュメントを基に、読み取り専用のMongoDBクエリ(find)または集計パイプラインを生成します。このスキルを使用してください…
official
mongodb-query-optimizer
mongodb
MongoDBのクエリ最適化とインデックス作成を支援します。ユーザーが最適化やパフォーマンスについて質問した場合にのみ使用してください:「このクエリを最適化するには?」「どうすれば…」
official
mongodb-schema-design
mongodb
MongoDBスキーマ設計のパターンとアンチパターン。データモデルの設計、スキーマのレビュー、SQLからの移行、パフォーマンス問題のトラブルシューティングの際に使用します…
official
mongodb-search-and-ai
mongodb
MongoDBユーザーがAtlas Search(全文検索)、Vector Search(セマンティック検索)、Hybrid Searchソリューションの実装と最適化を行う際にガイドします。このスキルは次のような場合に使用します…
official