20 pontos por GN⁺ 2025-12-05 | 2 comentários | Compartilhar no WhatsApp
  • PGlite é uma solução leve que permite executar localmente um banco de dados Postgres completo em ambiente WASM
  • Com menos de 3 MB quando compactado, pode ser executado facilmente no navegador ou em ambientes cliente
  • Inclui recursos integrados de carregamento de dados, sincronização e consultas em tempo real, permitindo processamento de dados reativo
  • Suporta carregamento dinâmico de extensões, incluindo pgvector, permitindo aproveitar diversos módulos de extensão
  • Por meio do database.build, baseado na Supabase, é possível criar e implantar bancos de dados Postgres com IA, aumentando a flexibilidade do desenvolvimento de bancos de dados na web

Visão geral

  • PGlite é um banco de dados Postgres embarcado executado em ambiente WASM (WebAssembly)
    • É possível rodar uma instância completa do Postgres localmente
    • Suporta processamento de dados reativo e sincronização em tempo real

Principais características

  • Leveza: oferece uma build completa do Postgres com menos de 3 MB em Gzip
    • Pode ser executado em navegadores e ambientes cliente leves
  • Extensibilidade: permite adicionar diversos recursos de extensão do Postgres por meio de um mecanismo de carregamento dinâmico de extensões
    • Suporte nativo à extensão pgvector
  • Responsividade: inclui recursos integrados para carregamento de dados, sincronização e consultas em tempo real
    • Adequado para atualizações de dados em tempo real e para criar aplicações reativas

Teste e uso

  • Na plataforma database.build, é possível criar e publicar bancos de dados Postgres baseados em PGlite
    • Ferramenta com IA criada pela Supabase, que permite ao usuário gerar seu próprio banco de dados
  • É possível executar diretamente no navegador uma instância Postgres do PGlite
    • Inclui pgvector
    • Extensões adicionais podem ser testadas no ambiente playground (REPL)

Significado

  • O PGlite leva os recursos do Postgres ao nível do navegador, tornando possível executar bancos de dados com foco no cliente
  • Ao combinar leveza, extensibilidade e responsividade, vem ganhando destaque como uma solução de banco de dados adequada para o desenvolvimento de aplicações web de próxima geração

2 comentários

 
qqq7300 2025-12-10

Vi esta matéria e resolvi adotar o PGlite experimentalmente no meu projeto. Para testes simples, ele realmente é muito rápido e muito bom. Fico animado com o que vem por aí.

 
GN⁺ 2025-12-05
Opiniões no Hacker News
  • Trabalho na equipe do PGlite. Fico feliz em vê-lo apresentado no HN de novo
    Recentemente passamos de 3 milhões de downloads semanais e em breve devemos chegar a 4 milhões — veja a página do pacote no npm
    Originalmente ele foi criado para ser embutido em apps web, mas agora o uso em ferramentas de desenvolvimento e ambientes de CLI está crescendo de forma explosiva. Google Firebase e Prisma também embutiram o PGlite em suas respectivas CLIs para emular produtos de servidor

    • Interessante. Mas fiquei curioso sobre o motivo de ele ter sido feito apenas para WASM. Normalmente eu imaginaria que a ordem seria transformar em biblioteca e depois portar para WASM, então talvez eu esteja deixando passar alguma coisa
    • Obrigado pelo ótimo trabalho. Queria saber se há planos de oferecer suporte ao cenário de http-vfs somente leitura
      Quero dizer algo como DuckDB ou sql.js-httpvfs, lendo blocos de uma URL remota via range requests
      Nosso laboratório também está trabalhando em um projeto como esse, mas o ecossistema de http-vfs ainda está em nível de protótipo, então quase não existem bibliotecas otimizadas
      Também tenho curiosidade se o padrão de acesso a disco do PostgreSQL seria mais adequado para http-vfs do que o do SQLite
    • Queria perguntar se há planos para uma biblioteca para Flutter
    • Tenho curiosidade se o PGlite, no modo em memória, é mais rápido que o Postgres comum
      Se for, seria realmente incrível se ele suportasse o protocolo de rede para poder ser usado também em ambientes de CI de linguagens além de JS
    • Parece muito legal. Gostaria de entender em quais casos de uso isso seria especialmente útil
      Fico curioso se o objetivo é ser uma alternativa ao SQLite ou ao DuckDB
  • Eu gostaria de usar o PGlite em runtimes que não sejam JavaScript
    Por exemplo, embutido numa CLI em Go com um runtime WASM, como substituto do SQLite
    Pelo issue #89, parece haver bindings de terceiros para Rust, mas tenho curiosidade se há planos de oferecer suporte oficial a bindings para outras linguagens

    • Sim, a combinação PGlite + Go parece realmente ótima
  • O PGlite é excelente. Estou usando como um servidor PostgreSQL dentro do navegador para desenvolvimento
    O servidor implementa o protocolo do PG e, quando o cliente se conecta, encaminha as queries para o navegador, onde o PGlite roda internamente
    No fim, isso faz com que um servidor PG completo dentro do navegador funcione — dbfor.dev

  • Este projeto é muito interessante. Um dos pontos fracos do Postgres é que sempre é preciso configurar um servidor, e isso resolve esse problema
    Fico curioso se existe uma forma de compilar isso como uma biblioteca nativa. Parece que parte do código poderia ser reaproveitada

    • Eu compilei experimentalmente para React Native. O Postgres roda em iOS e Android — link do PR
    • A biblioteca nativa atualmente está incluída no roadmap
    • Concordo totalmente. Seria incrível poder migrar de embarcado para modo de rede sem mudar o SQL nem o comportamento
  • Tenho curiosidade sobre as diferenças entre PGlite e SQLite
    Eu usei principalmente SQLite em ambientes embarcados e no lado cliente do navegador
    A vantagem do SQLite é a simplicidade, mas os vários recursos de extensão do PGlite são interessantes. Queria entender quais são as diferenças centrais entre os dois bancos

    • Na minha opinião, o principal caso de uso é ambiente de testes/CI
      Você pode rodar testes rapidamente com SQLite, mas se a infraestrutura real for PostgreSQL, o valor disso fica limitado
  • Em testes unitários ainda estou usando TestContainers para rodar Postgres baseado em Docker
    Mas alternativas como esta também tornaram possíveis ferramentas de teste em Python como py-pglite
    Ainda assim, eu confio mais em algo como o pgserver, em que o Postgres real pode ser executado de forma leve como pacote pip
    Minha opinião é apenas do ponto de vista de testes unitários

    • Tenho curiosidade sobre quais seriam os trade-offs entre essas duas abordagens. Relatos de experiência assim sempre ajudam
  • Nossa equipe adotou o PGlite no ambiente de testes ao criar um novo serviço interno
    Montamos um wrapper para usar o PGlite nos testes e uma instância de Postgres na execução real, e isso foi muito bem-sucedido
    Em especial, com o recurso .clone() é possível criar checkpoints do banco e restaurar o estado inicial em cada teste
    Também ficou muito fácil rodar 50 suítes de teste em paralelo

  • Estou usando para testes, e parece um meio-termo entre SQLite em memória e uma instância completa de Postgres
    Eu procurava algo assim havia muito tempo, e estou satisfeito com a melhora na velocidade dos testes. Até agora quase não encontrei limitações

  • Também existe o Doltgres, um Postgres em formato de executável único
    Assim como no Deno, basta baixar e executar um único arquivo .exe e o Postgres já funciona — documentação de instalação do Doltgres