1. Create your project

    Start by creating a new Ember.js project if you don't have one set up already. The most common approach is to use Ember CLI.

    Terminal
    npx ember-cli new my-project --embroider --no-welcomecd my-project
  2. Install Tailwind CSS

    Using npm, install tailwindcss and its peer dependencies, as well as postcss-loader, and then run the init command to generate both tailwind.config.js and postcss.config.js.

    Terminal
    npm install -D tailwindcss postcss postcss-loader autoprefixernpx tailwindcss init -p
  3. Enable PostCSS support

    In your ember-cli-build.js file, configure PostCSS to process your CSS files.

    ember-cli-build.js
    'use strict';
    
    const EmberApp = require('ember-cli/lib/broccoli/ember-app');
    
    module.exports = function (defaults) {
      const app = new EmberApp(defaults, {
        // Add options here
      });
    
      const { Webpack } = require('@embroider/webpack');
      return require('@embroider/compat').compatBuild(app, Webpack, {
        skipBabel: [
          {
            package: 'qunit',
          },
        ],
        packagerOptions: {
          webpackConfig: {
            module: {
              rules: [
                {
                  test: /\.css$/i,
                  use: [
                    {
                      loader: 'postcss-loader',
                      options: {
                        postcssOptions: {
                          config: 'postcss.config.js',
                        },
                      },
                    },
                  ],
                },
              ],
            },
          },
        },
      });
    };
    
  4. Configure your template paths

    Add the paths to all of your template files in your tailwind.config.js file.

    tailwind.config.js
    /** @type {import('tailwindcss').Config} */
    module.exports = {
      content: ['./app/**/*.{gjs,gts,hbs,html,js,ts}'],
      theme: {
        extend: {},
      },
      plugins: [],
    };
    
  5. Add the Tailwind directives to your CSS

    Create a ./app/app.css file and add the @tailwind directives for each of Tailwind's layers.

    app.css
    @tailwind base;
    @tailwind components;
    @tailwind utilities;
  6. Import the CSS file

    Import the newly-created ./app/app.css file in your ./app/app.js file.

    app.js
    import Application from '@ember/application';
    import Resolver from 'ember-resolver';
    import loadInitializers from 'ember-load-initializers';
    import config from 'my-project/config/environment';
    import 'my-project/app.css';
    
    export default class App extends Application {
      modulePrefix = config.modulePrefix;
      podModulePrefix = config.podModulePrefix;
      Resolver = Resolver;
    }
    
    loadInitializers(App, config.modulePrefix);
    
  7. Start your build process

    Run your build process with npm run start.

    Terminal
    npm run start
  8. Start using Tailwind in your project

    Start using Tailwind's utility classes to style your content.

    application.hbs
    {{page-title "MyProject"}}
    
    <h1 class="text-3xl font-bold underline">
      Hello world!
    </h1>
    
    {{outlet}}