Pular para o conteúdo
Cursos

DevClub

LógicaFront-endBack-endMobile

IA Club

IA na prática
Estudar programaçãoEstudar IA
LiçãoIniciantecódigo testado

Como instalar o Tailwind CSS v4: CLI, Vite e PostCSS

Instalação do Tailwind v4 do jeito CSS-first: um @import, nenhum tailwind.config.js, e o build rodando em watch — com a saída de cada comando.

Rodolfo Mori5 min de leitura

No Tailwind v4, a instalação mínima é um pacote de integração e uma linha @import "tailwindcss". Você escolhe CLI, Vite ou PostCSS conforme a ferramenta que já constrói o projeto; não escolhe três ao mesmo tempo.

Todos os comandos abaixo foram executados num diretório criado com mktemp, no Node 26.3.0. O projeto da demonstração é uma página solta da clínica. Se a ideia utility-first ainda não está clara, leia primeiro o que é Tailwind.

O que a versão 4 removeu do primeiro passo

Tutoriais da versão 3 normalmente começam com tailwindcss init e criam um arquivo JavaScript de configuração. Esse não é o fluxo da v4. O tema e as fontes de conteúdo podem morar no próprio CSS.

css
@import "tailwindcss";

Não execute o comando abaixo seguindo material antigo:

bash
npx tailwindcss init -p

No pacote atual, o binário fica em @tailwindcss/cli, e a configuração é CSS-first. Misturar as instruções deixa o aluno com dependências certas e arquivos errados — um dos casos tratados em Tailwind não aplica classes.

Caminho 1: CLI para HTML sem bundler

Crie uma pasta vazia e instale os dois pacotes com versão fixada se você quiser reproduzir esta saída.

bash
npm install --save-exact tailwindcss@4.3.3 @tailwindcss/cli@4.3.3
added 33 packages, and audited 34 packages in 2s

6 packages are looking for funding found 0 vulnerabilities

Crie src.css e um index.html. O import traz tema, Preflight e utilitários; o scanner encontra o HTML automaticamente quando o comando roda na raiz.

css
@import "tailwindcss";
html
<button class="rounded-lg bg-cyan-600 px-4 py-2 font-bold text-white">
  Marcar consulta
</button>

Compile uma vez para confirmar a instalação:

bash
npx @tailwindcss/cli -i src.css -o public/app.css --minify
≈ tailwindcss v4.3.3

Done in 35ms

O arquivo medido tinha 12.164 bytes porque a fonte de teste reunia classes de layout, tema, estados e responsividade. Um projeto menor gera outra quantidade; o número serve para provar que houve compilação, não como promessa de bundle.

Watch mantém o arquivo sincronizado

Durante o desenvolvimento, acrescente --watch. O processo fica aberto e recompila quando uma origem muda.

bash
npx @tailwindcss/cli -i src.css -o public/app.css --watch

Mantenha o CSS gerado ligado no HTML:

html
<link rel="stylesheet" href="/app.css">

Se o navegador não muda, confirme três pontos nesta ordem: o processo continua rodando, o href aponta para o arquivo de saída e a classe completa existe no fonte. Procurar a classe com grep separa falha de geração de falha de cascata.

bash
grep -F '.bg-cyan-600' public/app.css

Uma linha encontrada prova que o compilador fez sua parte. Resultado vazio significa que você precisa corrigir a fonte ou o build antes de abrir o DevTools.

Caminho 2: Vite com o plugin oficial

Para React, Vue ou um projeto web já construído por Vite, instale o plugin. A medição usou Vite 8.2.2 e @tailwindcss/vite 4.3.3.

bash
npm install --save-exact tailwindcss@4.3.3 @tailwindcss/vite@4.3.3

No arquivo de configuração, acrescente o plugin ao array existente:

js
import { defineConfig } from 'vite';
import tailwindcss from '@tailwindcss/vite';

export default defineConfig({
  plugins: [tailwindcss()],
});

O CSS continua com o mesmo import e deve ser importado pelo ponto de entrada da aplicação. O servidor do Vite cuida do hot reload; você não abre um segundo processo tailwindcss --watch.

js
import './src.css';

Esse detalhe evita compilação duplicada e resultados diferentes entre o CSS servido pelo Vite e um arquivo solto esquecido em public.

Caminho 3: PostCSS quando o pipeline já usa plugins

Use PostCSS quando o seu bundler já expõe essa etapa ou quando a infraestrutura do projeto exige uma cadeia de transformações CSS.

bash
npm install --save-exact tailwindcss@4.3.3 @tailwindcss/postcss@4.3.3
js
export default {
  plugins: {
    '@tailwindcss/postcss': {},
  },
};

Não instale autoprefixer só por hábito de um tutorial antigo. A v4 usa sua própria pipeline moderna. Se o projeto já depende do plugin por outra razão, avalie separadamente; instalação mínima é uma ferramenta de diagnóstico.

@source resolve monorepo e biblioteca ignorada

O v4 detecta fontes automaticamente, ignorando binários, arquivos no .gitignore e dependências. Quando as classes ficam num pacote compartilhado, registre o caminho explicitamente:

css
@import "tailwindcss" source("../src");
@source "../node_modules/@empresa/ui";

Para uma medição isolada, desative a detecção automática e declare somente o arquivo desejado. Foi assim que os bundles desta trilha foram reproduzidos sem capturar classes de outros exemplos:

css
@import "tailwindcss" source(none);
@source "./pagina.html";

Essa forma é especialmente útil quando um monorepo roda o build a partir de uma raiz diferente. O caminho é relativo à folha de estilo, não à imaginação do comando.

Erro reproduzido: o build funciona, mas a utility não existe

Uma instalação válida também precisa falhar de modo legível. O CLI 4.3.3 recebeu um @apply com o token de produto ainda não configurado:

css
@import "tailwindcss";
.qa { @apply bg-produto; }
bash
printf '@import "tailwindcss"; .qa { @apply bg-produto; }\n' | npx @tailwindcss/cli@4.3.3 -i - -o /dev/null
Error: Cannot apply unknown utility class `bg-produto`

O código de saída foi 1. Isso confirma que o executável está rodando; a correção é declarar o token ou usar uma cor disponível, não reinstalar o pacote.

O teste de dez segundos

Coloque bg-cyan-600 num botão, compile e procure a regra no arquivo final. Depois troque para bg-rose-600 e confirme que a nova regra aparece. Se as duas mudanças ocorrerem, instalação e detecção estão funcionando. Continue pelo sistema de espaçamento e volte a personalizar @theme apenas quando a base já estiver estável.

Deixe a instalação reproduzível para outra pessoa

Fixe versões no lockfile e registre um script em package.json. O comando precisa funcionar a partir da raiz documentada, sem depender de um diretório que só existe na sua máquina. Num monorepo, declare a base de fontes em vez de pedir que cada pessoa execute o build de um lugar diferente.

Separe saída de desenvolvimento e produção. Watch privilegia feedback rápido; o build final usa minificação e deve falhar quando a compilação falha. Não versione dois arquivos gerados por pipelines concorrentes. Escolha quem possui o artefato: CLI, Vite ou PostCSS.

Faça ainda um teste limpo. Remova o diretório de saída temporário, instale pelas dependências registradas e rode o script de produção. Se só funciona depois de um comando manual não documentado, a instalação não terminou. O curso de Tailwind usa esse mesmo critério antes de começar a página final, e o guia da trilha ajuda a decidir se o custo de build faz sentido para o tipo de projeto.

Prefere aprender em vídeo?

Tem uma aula sobre este assunto no nosso canal.

Ver todos os vídeos do canal
  • tailwind
  • instalação
  • tailwind v4
  • vite
  • postcss
  • cli

Dúvidas e comentários

Travou em algum passo? Pergunte aqui — a equipe e outros alunos respondem.

Todo o código deste artigo foi executado em @tailwindcss/cli 4.3.3, @tailwindcss/vite 4.3.3 e Vite 8.2.2 no Node 26.3.0, e as saídas exibidas são as reais — como produzimos este conteúdo.

Fontes consultadas

  1. Tailwind CSS — Installation with the CLI — tailwindcss.com
  2. Tailwind CSS — Installation with Vite — tailwindcss.com
  3. Tailwind CSS — Installation with PostCSS — tailwindcss.com

Continue por aqui