iscos / voodoo-2026
Voodoo 2026 — micro-ORM fluente, multi-banco (MySQL/SQLite/PostgreSQL) e multilíngue (pt/en/es), sem dependencias. Herdeiro do VoodOrm e do TORM.
Requires
- php: ^8.2
- ext-pdo: *
Requires (Dev)
- phpunit/phpunit: ^11.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
"Uma ferramenta simples, para pessoas que só querem entregar."
Voodoo 2026 é um micro-ORM fluente para PHP moderno, sem nenhuma dependência além do
PDO. Multi-banco (MySQL, SQLite e PostgreSQL) e multilíngue (pt, en, es), ele segue
o formato do Laravel: você configura o driver e os dados no .env — e o Voodoo faz o resto.
Herdeiro de duas ferramentas que marcaram época no desenvolvimento web brasileiro, ele nasceu para quem precisa de um CRUD rápido e honesto em aplicações pequenas — onde um framework completo seria canhão para matar formiga.
$db = Voodoo::fromEnv(); // lê DB_CONNECTION, DB_HOST, DB_DATABASE... do .env $db->table('pessoas') ->where('cidade', 'Goiânia') ->where('idade', '>=', 18) ->orderBy('nome') ->limit(50) ->find();
O valor histórico: de onde viemos
VoodOrm — Mardix (2012–2014, MIT)
"A simple micro-ORM that stays out of your way."
Criado por Mardix e publicado no Packagist como voodoophp/voodorm, o VoodOrm foi um
dos primeiros micro-ORMs PHP a popularizar a consulta fluente por tabela:
$db->table('users')->where(...)->find() — sem classes, sem geração de código, sem
cerimônia. Em uma época em que "usar ORM" parecia exigir um framework inteiro, ele provou
que dava para fazer CRUD com elegância usando só PDO e boas intenções. Foi a porta de
entrada de muitos desenvolvedores — incluindo o autor deste pacote — para o mundo dos
mappers relacionais.
TORM — Eustáquio Rangel (2014–2018, GPL)
"Just another simple ORM for PHP."
Desenvolvido pelo brasileiro Eustáquio Rangel (taq), o TORM levou o Active Record a
outro nível com validações declarativas, associações (hasMany, hasOne,
belongsTo), callbacks, scopes, dirty tracking e suporte a múltiplos drivers
(MySQL, PostgreSQL, SQLite, Oracle) — tudo em PHP 5.5, com uma documentação que serviu de
escola para uma geração. O TORM provou que um ORM pequeno podia ser completo sem perder a
alma. Hoje é abandonware oficial — mas sua importância histórica é inegável.
O renascimento
Em 2026, com o PHP 8.4 e 8.5 consolidados e duas décadas de estrada, o Hermes Agent (Nous Research) — o assistente de IA que vive no terminal — criou este pacote de ponta a ponta: arquitetura, código, testes e documentação. Ildefonso Costa, que usou VoodOrm e TORM em projetos reais antes de migrar para o Laravel, é o parceiro do legado: deu o nome, o GitHub e a inspiração inicial — e quer que o reconhecimento pelo código seja de quem o escreveu.
O Voodoo 2026 não tenta competir com o Eloquent. Ele existe para o momento em que você
precisa de uma tabela, um filtro, um loop — e nada mais. Para quem está aprendendo,
ele é pequeno o suficiente para ser lido inteiro em uma tarde. E por seguir o formato do
Laravel (.env, nomes de variáveis, semântica), quem começa no Voodoo migra para o
Laravel sem susto — e vice-versa.
Agradecimentos
Este pacote não existiria sem:
- Mardix, pelo VoodOrm — a simplicidade fluente que inspirou a API do Voodoo 2026. Na sua época, foi um farol: mostrou que ORM podia ser leve, direto e sem mistério.
- Eustáquio Rangel (taq), pelo TORM — a referência de design para validações, associações e o cuidado com quem aprende. Um dos grandes professores silenciosos do PHP brasileiro.
A ambos, o nosso respeito e gratidão. Ferramentas como as suas constroem carreiras.
Requisitos
- PHP ^8.2 (testado até 8.5)
- Extensão
pdo+ o driver do seu banco (pdo_mysql,pdo_sqlite,pdo_pgsql)
Instalação
composer require iscos/voodoo-2026
Configuração (.env)
Copie o .env.example e ajuste — formato Laravel:
DB_CONNECTION=mysql # mysql | sqlite | pgsql DB_HOST=127.0.0.1 DB_PORT=3306 # 3306 (mysql) | 5432 (pgsql) DB_DATABASE=app # sqlite: caminho do arquivo (ex: database.sqlite) DB_USERNAME=root DB_PASSWORD= APP_LANG=pt # pt | en | es (idioma das mensagens)
use Iscos\Voodoo\Voodoo; $db = Voodoo::fromEnv(); // lê o .env da pasta (ou as variáveis de ambiente)
Teste de configuração (voodoo-check)
Cheque antes de começar a dar erro misterioso:
php vendor/bin/voodoo-check
Voodoo 2026 — verificacao de configuracao
=========================================
✅ Driver: mysql
✅ Servidor: no ar (127.0.0.1:3306)
✅ Banco de dados 'app': conectado
❌ Tabela 'clientes': nao existe (confira o nome ou crie a tabela)
Suporta --env=/caminho/.env, --lang=en|es e --table=nome.
Uso rápido
use Iscos\Voodoo\Voodoo; $db = Voodoo::open('mysql:host=localhost;dbname=app', 'root', ''); // ou Voodoo::fromEnv() // Inserir $id = $db->table('pessoas')->insert(['nome' => 'Bruna Oliveira', 'cidade' => 'Goiânia']); // Consultar (fluente) $pessoas = $db->table('pessoas')->where('cidade', 'Goiânia')->orderBy('nome')->find(); // Um registro $pessoa = $db->table('pessoas')->findById($id); // Active Record $pessoa->idade = 26; $pessoa->save(); // Atualizar em lote $db->table('pessoas')->where('cidade', 'Aparecida')->update(['cidade' => 'Goiânia']); // Apagar (sem where é bloqueado — segurança) $db->table('pessoas')->where('id', 42)->delete(); // Agregados $total = $db->table('pessoas')->count(); $media = $db->table('pessoas')->avg('idade'); // Transações $db->beginTransaction(); $db->table('pessoas')->insert($nova); $db->commit();
Recursos
- Multi-banco: MySQL, SQLite, PostgreSQL (formato Laravel, só muda o
.env) - Multilíngue: mensagens em pt, en, es (
APP_LANG) - Consulta fluente:
where,andWhere,orWhere,orderBy,limit,offset - Operadores:
=,>,>=,<,<=,LIKE,IN,IS NULL - Active Record:
find(),findOne(),findById(),save(),delete() - Agregados:
count,sum,avg,min,max - Transações, log de queries e
voodoo-check(teste de configuração) - Zero dependências — só PDO
Roadmap
- v1.0 — CRUD fluente + Active Record + agregados + multi-banco + voodoo-check
- v1.1 — validações declarativas (inspiradas no TORM)
- v2.0 — associações
hasMany/belongsTo
Licença
MIT © 2026 Hermes Agent (Nous Research) — criador e mantenedor · Ildefonso Costa — publicador