IMPORTANTE: Esta documentação foi reorganizada e modernizada para melhor suporte a LLMs.
👉 Acesse a documentação completa em: LLMD/
LLMD/INDEX.md- Hub de navegação principalLLMD/core/framework-lifecycle.md- Ciclo de vida do framework
- Project Structure - Organização de pastas
- Routes & Eden Treaty - APIs type-safe
- Live Components - Componentes WebSocket
- Live Rooms - Sistema de salas real-time
- Type Safety - Fluxo de tipos
- Troubleshooting - Solução de problemas
- CLI Commands - Comandos disponíveis
- Plugin Hooks - Hooks de plugins
- Anti-Patterns - O que NÃO fazer
FluxStack é um framework full-stack TypeScript moderno que combina:
- Runtime: Bun >= 1.2.0 (3x mais rápido que Node.js)
- Backend: Elysia.js 1.4.6 (ultra-performático)
- Frontend: React 19.1.0 + Vite 7.1.7
- Language: TypeScript 5.8.3 (100% type-safe)
- Styling: Tailwind CSS 4.1.13
- Communication: Eden Treaty 1.3.2 com inferência automática
- Docs: Swagger UI gerado automaticamente
- Testing: Vitest 3.2.4 + React Testing Library
- Deploy: Docker otimizado
- ✅ Eden Treaty Nativo: Type inference automática funcionando perfeitamente
- ✅ Zero Tipos Unknown: Inferência corrigida após refatoração
- ✅ Monorepo Unificado: Uma instalação, hot reload independente
- ✅ APIs Funcionando: Health check e CRUD operacionais
- ✅ Frontend Ativo: React 19 + Vite rodando na porta 5173
- ✅ Backend Ativo: Elysia + Bun rodando na porta 3000
- ✅ Live Components: WebSocket sync com re-hydration automático
- ✅ Room System: Comunicação multi-sala server-side com API HTTP
FluxStack/
├── core/ # 🔒 FRAMEWORK (read-only)
│ ├── server/ # Framework Elysia + plugins
│ ├── config/ # Sistema base de configuração
│ ├── utils/ # Utilitários (env.ts, config-schema.ts)
│ ├── types/ # Types do framework
│ └── build/ # Sistema de build
├── config/ # ⚙️ CONFIGURAÇÕES DA APLICAÇÃO
│ ├── app.config.ts # Configuração da aplicação
│ ├── client.config.ts # Configuração do cliente/frontend
│ ├── database.config.ts # Banco de dados
│ ├── fluxstack.config.ts # Configuração principal do FluxStack
│ ├── logger.config.ts # Sistema de logs
│ ├── monitoring.config.ts # Monitoramento e métricas
│ ├── plugins.config.ts # Configuração de plugins
│ ├── runtime.config.ts # Configuração de runtime
│ ├── server.config.ts # Servidor e CORS
│ ├── services.config.ts # Configuração de serviços
│ ├── system.config.ts # Informações do sistema
│ └── index.ts # Exports centralizados
├── app/ # 👨💻 CÓDIGO DA APLICAÇÃO
│ ├── server/ # Backend (controllers, routes)
│ │ ├── controllers/ # Lógica de negócio
│ │ ├── routes/ # Endpoints da API
│ │ └── app.ts # Export do tipo para Eden Treaty
│ ├── client/ # Frontend (React + Vite)
│ │ ├── src/components/ # Componentes React
│ │ ├── src/lib/ # Cliente Eden Treaty
│ │ └── src/App.tsx # Interface principal
│ └── shared/ # Types compartilhados
├── plugins/ # 🔌 PLUGINS EXTERNOS
│ └── crypto-auth/ # Plugin de autenticação criptográfica
├── tests/ # Testes do framework
└── LLMD/ # 📖 Documentação LLM-optimizada
├── INDEX.md # Hub de navegação
├── core/ # Framework internals
├── config/ # Sistema de configuração
├── resources/ # Criando routes, controllers, plugins
├── patterns/ # Boas práticas e anti-patterns
└── reference/ # CLI, hooks, troubleshooting
- Interface em abas integradas: Demo interativo, API Docs, Tests
- Demo CRUD: Usuários usando Eden Treaty nativo
- Swagger UI: Documentação automática integrada
- Type Safety: Eden Treaty com inferência automática
- API RESTful: Endpoints CRUD completos
- Response Schemas: Documentação automática via TypeBox
- Error Handling: Tratamento consistente de erros
- Hot Reload: Recarregamento automático
// ✅ Eden Treaty infere automaticamente após refatoração
const { data: user, error } = await api.users.post({
name: "João",
email: "joao@example.com"
})
// TypeScript sabe que:
// - user: UserResponse = { success: boolean; user?: User; message?: string }
// - error: undefined (em caso de sucesso)bun run dev # ✅ Backend (3000) + Frontend (5173)
bun run dev # ✅ Output automaticamente limpo em desenvolvimento- Health Check:
GET /api/health✅ - Users CRUD:
GET|POST|PUT|DELETE /api/users✅ - Room Messages:
POST /api/rooms/{roomId}/messages✅ - Room Events:
POST /api/rooms/{roomId}/emit✅ - Swagger Docs:
GET /swagger✅
Sistema de comunicação multi-sala server-side para Live Components.
// app/server/live/MyComponent.ts
export class MyComponent extends LiveComponent<State> {
async joinRoom(payload: { roomId: string }) {
// Entrar na sala
this.$room(payload.roomId).join()
// Escutar eventos de OUTROS usuários
this.$room(payload.roomId).on('message:new', (msg) => {
// Atualizar MEU estado (sincroniza com MEU frontend)
this.setState({ messages: [...this.state.messages, msg] })
})
return { success: true }
}
async sendMessage(payload: { text: string }) {
const message = { id: Date.now(), text: payload.text }
// 1. Atualizar MEU estado
this.setState({ messages: [...this.state.messages, message] })
// 2. Notificar OUTROS na sala
this.$room('sala').emit('message:new', message)
return { success: true }
}
}# Enviar mensagem via webhook/bot
curl -X POST http://localhost:3000/api/rooms/geral/messages \
-H "Content-Type: application/json" \
-d '{"user": "Bot", "text": "Hello from API!"}'
# Emitir evento customizado
curl -X POST http://localhost:3000/api/rooms/tech/emit \
-H "Content-Type: application/json" \
-d '{"event": "notification", "data": {"type": "alert"}}'- LLMD/resources/live-rooms.md - Guia completo do sistema de salas
FluxStack usa um sistema de configuração declarativa com validação automática e inferência de tipos completa.
config/
├── app.config.ts # Configuração da aplicação
├── client.config.ts # Configuração do cliente/frontend
├── database.config.ts # Configuração do banco de dados
├── fluxstack.config.ts # Configuração principal do FluxStack
├── logger.config.ts # Configuração de logs
├── monitoring.config.ts # Configuração de monitoramento e métricas
├── plugins.config.ts # Configuração de plugins
├── runtime.config.ts # Configuração de runtime
├── server.config.ts # Configuração do servidor
├── services.config.ts # Configuração de serviços
├── system.config.ts # Informações do sistema
└── index.ts # Exports centralizados
1. Definir Schema de Configuração:
// config/app.config.ts
import { defineConfig, config } from '@/core/utils/config-schema'
const appConfigSchema = {
name: config.string('APP_NAME', 'FluxStack', true),
port: config.number('PORT', 3000, true),
env: config.enum('NODE_ENV', ['development', 'production', 'test'] as const, 'development', true),
debug: config.boolean('DEBUG', false),
} as const
export const appConfig = defineConfig(appConfigSchema)2. Usar Configuração com Type Safety:
import { appConfig } from '@/config/app.config'
import { appRuntimeConfig } from '@/config/runtime.config'
// ✅ Type inference automática
const name = appConfig.name // string
const env = appConfig.env // "development" | "production" | "test"
const debug = appRuntimeConfig.values.enableDebugMode // boolean
// ✅ Validação em tempo de boot
if (appConfig.env === 'production') {
// TypeScript sabe que env é exatamente 'production'
}3. Validação e Transformação:
const schema = {
port: {
type: 'number' as const,
env: 'PORT',
default: 3000,
required: true,
validate: (value: number) => {
if (value < 1 || value > 65535) {
return 'Port must be between 1 and 65535'
}
return true
}
}
}- ✅ Type Safety Total: Inferência automática de tipos literais
- ✅ Validação em Boot: Falha rápida com mensagens claras
- ✅ Zero Tipos
any: TypeScript infere tudo corretamente - ✅ Hot Reload Seguro: Configs podem ser recarregadas em runtime
- ✅ Documentação Automática: Schema serve como documentação
import { config } from '@/core/utils/config-schema'
config.string(envVar, defaultValue, required)
config.number(envVar, defaultValue, required)
config.boolean(envVar, defaultValue, required)
config.array(envVar, defaultValue, required)
config.enum(envVar, values, defaultValue, required)- ❌ Usar
process.envdiretamente no código da aplicação - ❌ Acessar variáveis de ambiente sem validação
- ❌ Criar configs sem schema
- ✅ Usar configs declarativos de
config/ - ✅ Definir schemas com validação
- ✅ Usar helpers
config.*para type safety - ✅ Adicionar
as constnos schemas para preservar tipos literais
FluxStack implementa segurança em camadas com whitelist + opt-in para proteger contra supply chain attacks.
1. Built-in Plugins (core/plugins/built-in)
✅ Manual registration via .use()
✅ Totalmente confiáveis
2. Project Plugins (plugins/)
✅ Auto-discovery ENABLED by default
✅ SEMPRE confiáveis (não requerem whitelist)
✅ Inicializados automaticamente se discovery ativo
3. NPM Plugins (node_modules/)
🔒 Auto-discovery DISABLED by default
🔒 Whitelist OBRIGATÓRIA
⚠️ Código de terceiros = não confiável
# .env
# Discovery de plugins de projeto (HABILITADO por padrão)
PLUGINS_DISCOVER_PROJECT=true # ✅ Plugins em plugins/ são sempre confiáveis
# Discovery de plugins NPM (DESABILITADO por padrão)
PLUGINS_DISCOVER_NPM=false # ❌ Seguro por padrão
# Whitelist de plugins NPM (OBRIGATÓRIO para plugins NPM)
# Plugins de projeto (plugins/) NÃO precisam estar aqui
PLUGINS_ALLOWED=fluxstack-plugin-auth,@acme/fplugin-paymentsMétodo Rápido (CLI Automatizado):
# Comando único que faz tudo automaticamente
bun run fluxstack plugin:add fluxstack-plugin-auth
# O comando faz:
# ✅ Valida nome do plugin
# 🔍 Audita segurança (npm audit)
# 📦 Instala plugin
# 🔧 Habilita NPM discovery
# 🛡️ Adiciona à whitelistGerenciar Plugins via CLI:
# Listar todos os plugins
bun run fluxstack plugin:list
# Remover plugin
bun run fluxstack plugin:remove fluxstack-plugin-authMétodo Manual (se preferir):
# 1. Auditar plugin ANTES de instalar
npm view fluxstack-plugin-auth repository
npm audit fluxstack-plugin-auth
# 2. Habilitar discovery e adicionar à whitelist (.env)
PLUGINS_DISCOVER_NPM=true
PLUGINS_ALLOWED=fluxstack-plugin-auth
# 3. Instalar plugin
bun add fluxstack-plugin-auth
# 4. Verificar logs de segurança
bun run dev
# [INFO] Loading whitelisted npm plugin: fluxstack-plugin-auth- ✅ NPM plugins bloqueados por padrão
- ✅ Project plugins sempre confiáveis (não requerem whitelist)
- ✅ Whitelist obrigatória apenas para plugins NPM
- ✅ Logs de segurança visíveis sobre plugins bloqueados
- ✅ Opt-in explícito necessário para NPM plugins
- ❌ NUNCA adicionar plugins NPM sem auditar o código fonte
- ❌ NUNCA desabilitar segurança globalmente
- ❌ NUNCA confiar cegamente em packages populares
- ✅ SEMPRE auditar plugins NPM antes de adicionar à whitelist
- ✅ SEMPRE usar versões exatas em package.json para plugins NPM
- ✅ SEMPRE monitorar logs de segurança em produção
- ✅ Project plugins (plugins/) podem ser adicionados livremente
📖 Documentação completa: ai-context/reference/plugin-security.md
- Editar arquivos em
core/(framework read-only) Usar✅ REMOVIDO - quebrava type inferenceapiCall()wrapper- Criar types manuais para Eden Treaty
- Ignorar response schemas nas rotas
- Trabalhar em
app/(código da aplicação) - Usar Eden Treaty nativo:
const { data, error } = await api.users.get() - Manter types compartilhados em
app/shared/ - Definir response schemas para documentação automática
- Testar com
bun run dev
SEMPRE que tentar executar um comando bun ou bunx e receber erro de "command not found", você DEVE instalar o Bun automaticamente.
which bun || bun --versionLinux/macOS:
curl -fsSL https://bun.sh/install | bashApós instalação, verificar:
bun --version- ✅ Se
bun --versionfuncionar: Continuar com o comando original - ❌ Se
bun: command not found: Instalar Bun automaticamente e tentar novamente - 🔄 Após instalação: Sempre verificar se funcionou antes de continuar
# Tentativa 1
bun run dev
# ❌ Error: bun: command not found
# Ação automática: Instalar Bun
curl -fsSL https://bun.sh/install | bash
# Verificar instalação
bun --version
# ✅ Output: 1.2.20
# Tentativa 2 (agora funciona)
bun run dev
# ✅ Servidor iniciado com sucesso- Bun é ESSENCIAL para FluxStack funcionar
- A instalação é rápida (< 1 minuto)
- Após instalar, pode ser necessário reiniciar o terminal ou executar:
source ~/.bashrc(Linux) ousource ~/.zshrc(macOS)
# Desenvolvimento
bun run dev # ✅ Full-stack (recomendado)
bun run dev # ✅ Output automaticamente limpo
bun run dev:backend # ✅ Backend apenas (porta 3001)
bun run dev:frontend # ✅ Frontend apenas (porta 5173)
# Build e produção
bun run build # ✅ Build completo
bun run start # ✅ Servidor de produção
# Testes e validação
bun run test # ✅ Suite de testes
bunx tsc --noEmit # ✅ Verificação TypeScript
curl http://localhost:3000/api/health # ✅ Health check- 🚀 Backend API: http://localhost:3000
- ⚛️ Frontend React: http://localhost:5173
- 📋 Swagger Docs: http://localhost:3000/swagger
- 🩺 Health Check: http://localhost:3000/api/health
- 👥 Users API: http://localhost:3000/api/users
- Novidade: State mutations auto-sincronizam com frontend via Proxy
- Antes:
this.setState({ count: this.state.count + 1 }) - Depois:
this.state.count++(auto-sync!) - Benefício: Código mais limpo e intuitivo
- Nota:
setState()ainda disponível para batch updates (múltiplas props = um emit)
- Novidade:
defaultStatedefinido dentro da classe como propriedade estática - Antes:
export const defaultState = {...}+static defaultState = defaultState - Depois: Apenas
static defaultState = {...}dentro da classe - Benefício: Menos boilerplate, melhor encapsulamento
- Novidade: Links clicáveis do componente server para o client
- Sintaxe:
import type { Demo as _Client } from '@client/src/live/Demo' - Uso: Ctrl+Click no VSCode navega direto para o componente client
- Benefício: Navegação rápida entre server e client
- Novidade: Constructors não são mais necessários para componentes simples
- Base class faz merge automático de
defaultStatecominitialState - Constructor só necessário para: room event subscriptions, lógica customizada
- Benefício: Menos código boilerplate
- Novidade: Interface
FluxStackWebSockettipada - Antes:
ws: any - Depois:
ws: FluxStackWebSocket - Benefício: Type safety no WebSocket server-side
- Problema resolvido: Auto-discovery de plugins NPM criava risco de supply chain attacks
- Solução implementada: Sistema de segurança em camadas com whitelist + opt-in
- NPM plugin discovery DESABILITADO por padrão (secure by default)
- Whitelist obrigatória para plugins NPM (
PLUGINS_ALLOWED) - Project plugins (plugins/) continuam confiáveis e auto-discovered
- Built-in plugins (core/) agora requerem registro manual via
.use() - Logs de segurança visíveis sobre plugins bloqueados
- Resultado: Proteção robusta contra código malicioso sem comprometer DX
- Configuração:
PLUGINS_DISCOVER_NPM=false # ❌ NPM plugins bloqueados PLUGINS_DISCOVER_PROJECT=true # ✅ Projeto confiável PLUGINS_ALLOWED=plugin-auth # 🔒 Whitelist
- Documentação:
ai-context/reference/plugin-security.md
- Problema resolvido: Dados do navegador vazando no pacote npm
- Solução implementada: Correção de segurança aplicada
- Resultado: Pacote npm seguro e sem vazamento de dados
- Problema resolvido: Multiple exports da app instance causavam inconsistências
- Solução implementada: App instance como fonte única de verdade
- Resultado: Arquitetura mais limpa e previne bugs de sincronização
- Problema resolvido: Exit codes inconsistentes em workflows
- Solução implementada: Arithmetic safety aplicado em todos os workflows CI/CD
- Resultado: Pipeline mais confiável e previsível
- Problema resolvido: LLMs não sabiam como proceder quando Bun não estava instalado
- Solução implementada: Instrução clara no CLAUDE.md para instalar Bun automaticamente
- Resultado: Onboarding mais fluido e menos erros de "command not found"
- Aprimoramento: Sistema de versão única de verdade completamente estável
- Sincronização: package.json ↔ version.ts funcionando perfeitamente
- DX Melhorado: Scripts
sync-versionintegrados no workflow
- Problema resolvido: Arquivos markdown duplicados e desorganizados na raiz
- Solução implementada: Consolidação em
ai-context/e remoção de arquivos desnecessários - Resultado: Estrutura limpa com apenas README.md e CLAUDE.md na raiz
- Problema resolvido: Logs poluídos com erros HEAD do Elysia em desenvolvimento
- Solução implementada: Filtro integrado no core do framework
- Resultado: Logs limpos automaticamente, sem necessidade de scripts externos
- Problema resolvido: Uso inadequado de tipos
anye erros de compilação - Solução implementada: Tipos específicos e interfaces apropriadas
- Resultado: Type safety melhorada e código mais robusto
- Problema resolvido: Wrapper
apiCall()quebrava type inference - Solução implementada: Eden Treaty nativo preserva tipos automáticos
- Resultado: Zero tipos
unknown, autocomplete perfeito
- Todas as rotas: Schemas TypeBox para inferência
- Documentação automática: Swagger UI atualizado
- Type inference: Eden Treaty funcionando 100%
- Uma instalação:
bun installpara todo o projeto - Hot reload independente: Backend e frontend separados
- Build otimizado: Sistema unificado
- Problema resolvido: Uso direto de
process.envsem validação - Solução implementada: Sistema Laravel-inspired com schemas
- Arquitetura: 3 camadas (env loader → config schema → app configs)
- Benefícios:
- ✅ Type inference completa com tipos literais
- ✅ Validação em boot time com mensagens claras
- ✅ Zero tipos
anyem configurações - ✅ Hot reload seguro de configs
- ✅ Pasta
config/centralizada e organizada
- Build: Pasta
config/copiada automaticamente para produção - CLI:
create-fluxstackinclui configs automaticamente
- Database integration - ORM nativo
- Authentication system - Auth built-in
- Real-time features - WebSockets/SSE
- API versioning - Versionamento automático
- Middleware de validação avançado
- Cache de responses
- Bundle size optimization
- Monitoring e métricas
- Erro específico? →
LLMD/reference/troubleshooting.md - Estrutura de pastas? →
LLMD/patterns/project-structure.md - Eden Treaty? →
LLMD/resources/routes-eden.md - Não entendo nada? →
LLMD/INDEX.md
🎯 Objetivo: Capacitar LLMs a trabalhar eficientemente com FluxStack, seguindo padrões estabelecidos e garantindo código de alta qualidade com type safety automática.
📅 Última atualização: Fevereiro 2025 - v1.12.0 - Reactive State Proxy, Static defaultState, Client Links.