Use with Webpack - Flowbite React
Learn how to install Flowbite React with Webpack
This guide provides three ways to integrate Flowbite React with Webpack:
- Quick Start: Create a new project with everything pre-configured
 - Add to Existing Project: Add Flowbite React to an existing Webpack project
 - Manual Setup: Set up everything from scratch manually
 
Quick Start (Recommended)
Quick Start#
The fastest way to get started is using our project creation CLI, which sets up a new Webpack + React project with Flowbite React, Tailwind CSS, and all necessary configurations:
npx create-flowbite-react@latest -t webpack
This will:
- Create a new React project with Webpack
 - Install and configure Tailwind CSS
 - Set up Flowbite React with all required dependencies
 - Configure dark mode support
 - Set up example components
 
Add to Existing Project
Add to Existing Project#
If you already have a Webpack + React project and want to add Flowbite React, you can use our initialization CLI:
npx flowbite-react@latest init
This will automatically:
- Install Flowbite React and its dependencies
 - Configure Tailwind CSS to include Flowbite React plugin
 - Set up necessary configurations
 
Manual Setup
Manual Setup#
If you prefer to set everything up manually or need more control over the configuration, follow these steps:
1. Create Project#
Create a new directory and initialize a new project:
mkdir webpack-project
cd webpack-project
npm init -y
Install necessary packages:
npm install react react-dom
npm install -D webpack webpack-cli webpack-dev-server @babel/core @babel/preset-react @babel/preset-env @babel/preset-typescript babel-loader typescript @types/react @types/react-dom postcss css-loader style-loader postcss-loader
Update your package.json to include these scripts:
{
  "scripts": {
    "dev": "webpack serve --mode development --open",
    "build": "webpack --mode production",
    "start": "webpack serve --mode production"
  }
}
Create tsconfig.json file:
{
  "compilerOptions": {
    "target": "es5",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": false,
    "jsx": "react-jsx"
  },
  "include": ["src"]
}
Create webpack.config.js file:
const path = require("path");
const { ProvidePlugin } = require("webpack");
module.exports = {
  entry: "./src/index.tsx",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "bundle.js",
  },
  module: {
    rules: [
      {
        test: /\.(ts|tsx|js|jsx)$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader",
          options: {
            presets: ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript"],
          },
        },
      },
      {
        test: /\.css$/,
        use: ["style-loader", "css-loader", "postcss-loader"],
      },
    ],
  },
  resolve: {
    extensions: [".tsx", ".ts", ".js", ".jsx"],
  },
  devServer: {
    static: {
      directory: path.join(__dirname, "public"),
    },
    port: 3000,
  },
  plugins: [
    new ProvidePlugin({
      React: "react",
    }),
  ],
};
Create public/index.html file:
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Flowbite React + Webpack + TypeScript</title>
  </head>
  <body>
    <div id="root"></div>
    <script src="/bundle.js"></script>
  </body>
</html>
Create src/index.tsx file:
import React from "react";
import { createRoot } from "react-dom/client";
import { App } from "./App";
import "./styles.css";
const container = document.getElementById("root");
if (!container) throw new Error("Failed to find the root element");
const root = createRoot(container);
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
);
Create src/App.tsx file:
import React from "react";
export function App() {
  const [count, setCount] = React.useState(0);
  return (
    <div className="p-4">
      <h1 className="mb-4 text-2xl font-bold">Welcome to React + Webpack</h1>
      <p className="mb-4">This is a sample component to test your setup.</p>
      <div className="flex items-center gap-2">
        <button
          onClick={() => setCount(count + 1)}
          className="rounded bg-blue-500 px-4 py-2 text-white hover:bg-blue-600"
        >
          Count: {count}
        </button>
      </div>
    </div>
  );
}
2. Configure Tailwind CSS#
Install Tailwind CSS and its dependencies:
npm install -D tailwindcss @tailwindcss/postcss
Create a postcss.config.mjs file:
touch postcss.config.mjs
Add @tailwindcss/postcss to your postcss.config.mjs file:
/** @type {import('postcss-load-config').Config} */
export default {
  plugins: {
    "@tailwindcss/postcss": {},
  },
};
Create src/styles.css file:
@import "tailwindcss";
3. Install Flowbite React#
Install Flowbite React:
npx flowbite-react@latest init
This will:
- Install Flowbite React and its dependencies
 - Configure Tailwind CSS to include Flowbite React plugin
 - Set up necessary configurations
 
Try it out#
Now that you have successfully installed Flowbite React you can start using the components from the library:
// src/App.tsx
export function App() {
  return (
    <>
      <Button>Click me</Button>
    </>
  );
}