Skip to content

Pacotes ​

O Basalt é um conjunto de pacotes pequenos e focados sob o scope @basaltkit/*. Cada um funciona por si só; juntos formam o framework. Cada pacote é versionado de forma independente — vê a página Ecossistema para a versão atual de cada um.

Fundação ​

PacotePropósito
@basaltkit/coreContainer de DI, ciclo de vida de plugins, contexto AsyncLocalStorage, hooks
@basaltkit/configConfiguração tipada e por namespace com acesso por dot-path
@basaltkit/envVariáveis de ambiente validadas com Zod e um relatório agregado
@basaltkit/eventsBus de eventos de domínio tipado com wildcards e prioridades; outbox transacional
@basaltkit/events-sqlite · @basaltkit/events-prismaBackends duráveis para o OutboxStore de @basaltkit/events — outbox transacional resistente a crashes; SQLite (zero-dep) e Prisma (Postgres/MySQL)
@basaltkit/loggerLogger Pino, auto-enriquecido com contexto de pedido/tenant, redação

HTTP ​

PacotePropósito
@basaltkit/httpNúcleo neutro em relação ao framework — rotas tipadas, pipeline, mapeamento de erros, plugins de periferia
@basaltkit/fastify · @basaltkit/express · @basaltkit/honoAdaptadores — as mesmas rotas correm em qualquer um deles
@basaltkit/sdkCliente type-safe inferido a partir de definições de endpoint em Zod

Dados e infraestrutura ​

PacotePropósito
@basaltkit/prismaExtensão de cliente com âmbito de tenant, pool LRU de clientes por tenant, acessor de contexto db<T>()
@basaltkit/cacheDrivers Redis/Memory, tags, TTL, proteção contra stampede, chaves por tenant
@basaltkit/cache-tieredDriver de cache multi-nível — cache próxima em processo à frente do Redis
@basaltkit/storageLocal/S3/MinIO sob um contrato, isolamento por tenant, URLs assinados
@basaltkit/storage-gcs · @basaltkit/storage-azureDrivers para Google Cloud Storage e Azure Blob
@basaltkit/mailerEmails declarativos tipados, drivers SMTP/log/memory, remetente por tenant
@basaltkit/schedulerCron fluente: schedule.job(X).daily().at('03:00'); defineReconciler volta a despachar trabalho encalhado

Filas ​

PacotePropósito
@basaltkit/queueJobs declarativos, propagação de contexto, driver plugável + verificações de capacidade
@basaltkit/queue-rabbitmqDriver RabbitMQ — retries, backoff, delay, prioridade via DLX
@basaltkit/queue-kafkaDriver Kafka — produzir/consumir com retry + tópicos de dead-letter
@basaltkit/queue-sqsDriver Amazon SQS — delay nativo, retries com backoff, DLQ

Domínio SaaS ​

PacotePropósito
@basaltkit/tenancyResolvers, contexto de tenant por pedido, hooks de ciclo de vida
@basaltkit/tenancy-sqlite · @basaltkit/tenancy-prismaBackends duráveis para o TenantSource de @basaltkit/tenancy — persistem o registo de tenants e domínios personalizados; SQLite (zero-dep) e Prisma (Postgres/MySQL)
@basaltkit/authHashing de palavras-passe, JWT + rotação de refresh, sessões, verificação de email, reposição de palavra-passe, chaves de API, MFA (TOTP)
@basaltkit/auth-sqliteBackend SQLite durável (node:sqlite) para todos os stores de @basaltkit/auth — sobrevive a reinícios, zero deps
@basaltkit/auth-prismaBackend Prisma para todos os stores de @basaltkit/auth — Postgres/MySQL, traz um schema de referência, passa o teu PrismaClient
@basaltkit/permissionsPapéis, permissões wildcard, políticas, âmbito de tenant, super admin
@basaltkit/permissions-sqlite · @basaltkit/permissions-prismaBackends duráveis para o AccessStore de @basaltkit/permissions — SQLite (zero-dep) e Prisma (Postgres/MySQL)
@basaltkit/teamsTenants multi-utilizador — papéis, convites por email, adesão, guard teamRole
@basaltkit/teams-sqlite · @basaltkit/teams-prismaBackends duráveis para os stores de @basaltkit/teams — SQLite (node:sqlite, zero-dep) e Prisma (Postgres/MySQL)
@basaltkit/subscriptionsPlanos, trials, limites de funcionalidades, drivers de gateway, Checkout e Portal alojados, proporcionalidade
@basaltkit/subscriptions-sqlite · @basaltkit/subscriptions-prismaBackends duráveis para os stores de subscrição, utilização (consume atómico) e webhooks — SQLite (zero-dep) e Prisma (Postgres/MySQL)
@basaltkit/flagsFeature flags — segmentação por tenant/utilizador, rollouts determinísticos
@basaltkit/webhooksWebhooks de saída — entrega assinada, retries, subscrições por tenant
@basaltkit/webhooks-sqlite · @basaltkit/webhooks-prismaBackends duráveis para o WebhookStore de @basaltkit/webhooks — persistem as subscrições de endpoint entre reinícios; SQLite (zero-dep) e Prisma (Postgres/MySQL)
@basaltkit/audit · @basaltkit/activity · @basaltkit/notificationsRegisto de auditoria (cadeia de hashes opcional + audit:verify), feed de atividade, notificações multicanal
@basaltkit/comments-sqlite · @basaltkit/comments-prismaBackends duráveis para o CommentStore de @basaltkit/comments
@basaltkit/audit-sqlite · @basaltkit/audit-prisma · @basaltkit/activity-sqlite · @basaltkit/activity-prisma · @basaltkit/notifications-sqlite · @basaltkit/notifications-prismaBackends SQLite/Prisma duráveis para os stores de auditoria, atividade e notificações in-app

Capacidades ​

PacotePropósito
@basaltkit/realtimePush servidor→cliente (WebSocket/SSE), canais por tenant, presença, ponte de eventos, backplane Redis
@basaltkit/realtime-clientCliente de browser zero-dep para @basaltkit/realtime — subscrever canais, reconexão automática
@basaltkit/searchPesquisa full-text com âmbito de tenant — drivers em memória (dev) e Meilisearch incluídos, pacotes de driver Postgres/Elasticsearch, sincronização automática a partir de eventos
@basaltkit/search-postgresDriver full-text PostgreSQL (tsvector/ts_rank) para @basaltkit/search
@basaltkit/search-elasticsearchDriver Elasticsearch / OpenSearch (relevância multi_match) para @basaltkit/search
@basaltkit/filesPipeline de upload sobre o storage — validação de tipo/tamanho, quota por tenant, metadados, hooks de scan
@basaltkit/commentsThreads de comentários por recurso — @mentions, resolver/reabrir, eventos para realtime e notificações
@basaltkit/i18nInternacionalização — locale resolvido pelo contexto, catálogos tipados com plurais, formatação Intl
@basaltkit/exports · @basaltkit/exports-xlsxExportações de dados tipadas → CSV/TSV/JSON/NDJSON e um formatador XLSX zero-dep

UIs autossuficientes ​

Páginas HTML sem dependências servidas sobre as tuas rotas JSON existentes.

PacotePágina
@basaltkit/audit-viewer/audit/view — navegar o registo de auditoria (filtros, estatísticas)
@basaltkit/api-keys-ui/apikeys/ui — criar/listar/revogar chaves de API
@basaltkit/teams-ui/team/ui — convites e membros
@basaltkit/billing-ui/billing/ui — planos, Checkout, Customer Portal

Experiência de desenvolvimento e produto ​

PacotePropósito
create-basaltScaffolder de projetos
@basaltkit/cli · @basaltkit/generatorO framework de comandos basalt e o scaffolding basalt make
@basaltkit/testingcreateTestApp, fakes de mail/queue, viagem no tempo
@basaltkit/admin · @basaltkit/dashboard · @basaltkit/admin-react · @basaltkit/admin-shadcnMotores headless de admin/dashboard + bindings React e shadcn/ui

A regra de dependências ​

Um pacote só pode depender de pacotes numa camada inferior (fundação → infraestrutura → domínio → capacidades). Pacotes da mesma camada comunicam através de eventos e contratos do core, nunca por imports diretos — que é porque qualquer pacote pode ser adotado por si só, e porque os drivers (queue, storage, search, cache) encaixam atrás de um contrato estável.

Publicado sob a licença MIT.