Executando verificação de segurança...
7

Pitch: Eu criei um Next.js ultra-leve em PHP

Brincadeira. Só que não.


Eu não tenho nada contra frameworks grandes. Eles têm seu lugar. Mas pra 90% dos meus projetos — APIs simples, MVPs leves, protótipos que se calhar vão pro lixo... O simples acto de iniciar um novo projeto já me dava calafrios.

composer create-project laravel/laravel meu-projeto
# 15 segundos depois...
# 50MB de dependências
# 200 arquivos que eu nunca vou tocar
# E o servidor ainda nem subiu

Eu só queria algo que:

  • Iniciasse rápido (sem esperar 2 minutos pro composer install)
  • Fosse transparente (sem magia negra que eu não entendo)
  • Tivesse rotas intuitivas (como o Next.js, que eu amo no front-end)

Tentei um e outro micro-framework, todos bons, mas todos tinham uma curva. E todos ainda exigiam que eu escrevesse arquivos de rota separados, definisse grupos, configurasse middlewares — mais código.

Eu queria algo mais simples.

E aí, eu pensei: "Vou fazer o meu próprio."


Nasceu o Fluxor

E ele faz uma coisa só: transforma pastas em rotas.

app/router/
├── users/
│   ├── index.php    # GET /users
│   └── [id].php     # GET /users/123

É isso. Sem segredo. Sem mágica.

E o melhor: tudo em menos de 10 linhas.

// app/router/users/[id].php

// GET /users/123
Flow::GET()->do(function($req) {
    $userId = $req->param('id');
    $user = User::find($userId);
    
    return Response::json([
        'user' => $user
    ]);
});

// POST /users/123
Flow::POST()->do(function($req) {
    $userId = $req->param('id');
    $data = $req->only(['name', 'email']);
    
    $updated = User::update($userId, $data);
    
    return Response::json([
        'updated' => $updated,
        'message' => 'Perfil atualizado com sucesso'
    ]);
});

Não é só isso. Ele vem com um pack de utilidades:

Request

  • $req->input('nome') — captura dados de POST, GET ou JSON
  • $req->param('id') — pega parâmetros da URL (/users/123)
  • $req->all() — todos os dados da requisição
  • Etc...

Response

  • Response::json($data) — retorna JSON com headers automáticos
  • Response::html('<h1>Olá</h1>') — resposta HTML direta
  • Response::view('home', $data) — renderiza view com dados
  • Response::redirect('/login') — redireciona para outra rota
  • Response::success($data, 'Mensagem')
  • Etc..

View

  • View::extend('layouts/main') — usa um layout base
  • View::section('content') — define uma seção de conteúdo
  • View::yield('content') — exibe o conteúdo da seção
  • View::e($texto) — escapa HTML automaticamente
  • View::include('partials/header') — inclui outra view
  • Etc...

Helpers, Uploader, Mailer

  • Helpers globais: env(), base_path(), dd(), abort()
  • Uploader seguro: Uploader::upload($_FILES['avatar']) hash do arquivo, sem duplicatas
  • Mailer: (new Mailer())->send(...)) envia e-mail com templates

Simplicidade proposital. Sem dependências. Só o que você usa.


Mas e o resto?

Você escolhe. Literalmente.

composer create-project lizzyman04/fluxor-php meu-app

O instalador pergunta: "Quer autenticação?" "Quer envio de e-mail?" "Quer upload de arquivos?"

O que você disser "não", ele remove. O projeto final só tem o que você realmente usa.

Zero bloat. Zero bagagem.


Números que importam

  • Boot time: menos de 10ms
  • Dependências: absolutamente 0 (só o puro PHP)
  • Arquivos iniciais: dá pra contar nos dedos
  • Tempo pra criar uma API: 5 minutos

Para quem é isso?

  • Quem faz não quer sobrecarga
  • Quem quer entender MVC por dentro
  • Puristas de desempenho que odeiam boat
  • Quem gosta de roteamento estilo Next.js

Início rápido

composer create-project lizzyman04/fluxor-php meu-app
cd meu-app
composer dev

Documentação: https://lizzyman04.github.io/fluxor-php

Sim, o nome "Fluxor". Combina com o framework? Talvez não. Mas me fez feliz.

E no fim, fazer código que te faz feliz é o que importa.

Fluxor Logo

Crie aplicações PHP elegantes com prazer! 🎉

Carregando publicação patrocinada...
1

Já estava na hora de ter algo assim para o mundo PHP.
Uma sugestão: não seria melhor escrever

return function ($req) {
  ...
}

Ao invés de

Flow::GET()->do(function($req) {
    ...
});

?

Aí a pessoa poderia definir uma constante em cada rota para definir o método da rota que por padrão seria GET.

1

+3

Sensacional a iniciativa! Como alguém que escreve em PHP desde que comecei na web, há uns 6 anos — hoje em dia focando mais no Yii2 e às vezes caindo no Laravel para coisas maiores —, eu entendo perfeitamente essa dor do bloatware e da lentidão inicial.

Trazer o roteamento baseado em pastas (estilo Next.js) pro PHP puro, mantendo zero dependências e um instalador cirúrgico que limpa o que você não vai usar, é uma sacada excelente para levantar MVPs rápido. O boot time de 10ms sem "magia negra" fala por si só.

Recomendaria criar sites templates usando usa ferramenta, implementar alguns pagamentos e acredito que poderá ter pessoas interessadas em utilizar, e assim atrair mais utilizadores dela; outra ideia seria criar um .md que o usuário pode copiar para a IA dele conseguir saber tudo sobre a ferramenta, como usar e cuidados.

Aproveitando esse seu perfil de construtor que gosta de criar a própria infraestrutura e fugir do ecossistema inchado, te convido a conhecer a Crom (crom.run). É um ecossistema e uma comunidade brasileira focada em Soberania Digital e desenvolvimento independente. Temos desde ferramentas local-first até espaços de discussão técnica densa, sem algoritmos de retenção. Acredito que nossa filosofia de criar tecnologia enxuta com as próprias mãos vai bater muito com a sua!

Parabéns pelo lançamento do Fluxor e sucesso com o projeto!

1