PRIVADO · MULTI-TENANT · CIFRADO · SELF-HOSTED

Almacenamiento de objetosque muestra sus cuentas.

Lockwell es un almacén de objetos privado y cifrado, con API compatible con S3, API JSON nativa y SDKs oficiales para Go, Node y Java: un solo binario, sin segunda base de datos, sin pegamento. Las afirmaciones de esta página son mediciones, y el repositorio incluye las herramientas para repetirlas.

MEDIDO, NO PROMETIDOPASS
recuperación tras crash, escrituras confirmadas intactas
16 s
disco usado para los mismos bytes, vs MinIO
0.54x
PUT multiparte, 64 MiB con 64 clientes
2.2x MinIO
suite de producción S3, 24 clientes SDK
0 fallos
buckets públicos, lecturas anónimas
rechazado

medido el 2026-06-11 · una máquina, Docker Compose · metodología · reproducir: make bench · make prod-authority-test

LA PUERTA

Cada petición pasa por la puerta

Este es el modelo de seguridad completo en una escena. Una petición que presenta una clave de tenant pasa, y su objeto queda sellado y cifrado en reposo. Una petición sin clave se rechaza con 401. No existe un camino anónimo que configurar con cuidado: no existe.

carries a tenant key: passes, sealed at rest sin clave: rechazado en la puerta, 401

Compartir sigue funcionando, por el camino seguro: se genera un enlace firmado con caducidad (una descarga de 7 días para un cliente, una subida de una hora desde el navegador) y se entrega. El enlace lleva el permiso, nadie recibe claves, y caduca solo.

RECHAZADO POR DISEÑObuckets públicoslecturas anónimasSSE-KMS sin un KMSfallbacks silenciosos en llamadas S3 no soportadasla lista completa →
PARA QUIEN PAGA LA FACTURA

El argumento para sustituir un MinIO que funciona

Los benchmarks no mueven un sistema en producción; facturas más bajas, menos piezas móviles y una salida segura, sí. Esto es lo que cambia el día del cambio, y la forma honesta de comprobarlo sin arriesgar nada.

Los mismos bytes, cerca de la mitad del disco

Medido: 0,54x el disco de MinIO para un conjunto de escritura idéntico, antes incluso de que la deduplicación trabaje sobre datos reales. El almacenamiento es la partida que solo crece; esto reduce su pendiente a la mitad.

Multi-tenancy que no hay que construir

Aislamiento por cliente, claves con alcance, cuotas y auditoría son trabajo del servidor, no una capa de autenticación que tu equipo escribe alrededor de un bucket y mantiene durante años.

Cumplimiento incluido

Cifrado en reposo siempre activo, retención y legal hold con Object Lock, auditoría, verificación y reparación, y ensayos de backup y restauración. La evidencia que pide el auditor es la salida normal del producto.

Un binario que operar

Sin base de datos externa, sin broker, sin caché que alimentar. Actualizar es sustituir un binario; la recuperación es un ensayo que corre en CI, no una página de wiki sin probar.

La salida es estándar

Habla S3, así que irse es un aws s3 sync. Un sistema de almacenamiento del que es fácil salir es el único al que vale la pena entrar.

Mantén MinIO en marcha. Audita el cambio primero.

El planificador de migración lee tu MinIO u otro almacén compatible con S3 y rechaza funciones bloqueadas en lugar de dejarlas caer en silencio. Ejecuta Lockwell junto a producción, copia con verificación y checkpoints, y cambia solo cuando su propio libro mayor te haya convencido.

$ lockwell migration s3 plan --json
Cómo funciona la migración →
CASOS REALES

Lo que los equipos ejecutan aquí de verdad

Tres formas concretas, no personas. Cada una es un tenant, unas pocas claves con alcance y partes del servidor que ya existen.

Entregas a clientes con enlaces que caducan

Una agencia mantiene a cada cliente en su propio tenant. Las entregas se comparten con enlaces firmados que mueren a los siete días: sin cuentas de cliente, sin bucket público, y la auditoría registra cada descarga.

URLs firmadas →

Archivos de usuarios en un SaaS multi-tenant

Cada cliente es un tenant. Los navegadores suben directo al almacenamiento con URLs PUT firmadas, los webhooks disparan el pipeline de miniaturas, y una clave filtrada solo puede ver el mundo de un tenant.

El app kit →

El archivo que visitará un auditor

Facturas y registros entran bajo retención de Object Lock con cifrado siempre activo. El ciclo de vida expira lo que puede expirar, el legal hold congela lo que no, y el ensayo de restauración demuestra que las copias son reales.

Object Lock →
EVIDENCIA

Míralo funcionar y luego revisa las cuentas

La terminal repite el ciclo de vida real contra la superficie real de la CLI. Las barras salen de la evidencia de benchmark registrada, y la herramienta viene en el repositorio, así que cada número puede repetirse en tu propio hardware.

lifecycle.sessionrepetido, no fingido
$ lockwell tenant-create acme --yes
tenant "acme" created, isolated by default
$ lockwell key-create app --tenant acme --read --write --delete
access key AKIA...W4 minted, secret shown once
$ aws s3 cp report.pdf s3://acme-inbox/ --endpoint-url https://objects.example.com
upload: ./report.pdf to s3://acme-inbox/report.pdf
$ lockwell cluster disaster-drill --tenant acme --json
{ "unrecoverable_data_loss": 0, ... }
drill: PASS
PUT multiparte, partes de 64 MiB con 64 clientes2,2x
lockwell1287 MiB/s
minio579 MiB/s
GET, 64 MiB con 16 clientes2,9x
lockwell13736 MiB/s
minio4659 MiB/s
disco usado para el mismo conjunto de 44 GiB0,54x menos
lockwell44.0 GiB
minio81.2 GiB

medido el 2026-06-11 · una máquina, Docker Compose, cero errores en todas las filas · metodología · reproducir: make bench

CONTRASTADO CON LA HERRAMIENTA DEL PROPIO MINIO · WARP 1.3.1
PUT, objetos de 1 MiB con 16 clientes10,9x
lockwell2561 MiB/s
minio236 MiB/s
GET, objetos de 1 MiB con 16 clientes1,3x
lockwell6857 MiB/s
minio5454 MiB/s
GET dentro de la carga mixta de warp1,8x
lockwell2628 MiB/s
minio1500 MiB/s

medido el 2026-06-12 con warp 1.3.1, parámetros idénticos contra ambos servidores, cero errores · reproducir: make bench-warp

resultados completos →
CAPACIDADES

Todo lo que necesita la capa de almacenamiento de una app

Aprovisionamiento, subidas firmadas, cifrado, soporte edge y webhooks, todo en un servidor y un SDK. No coses un bucket, una cola, un firmador y un almacén de secretos.

01 · tenancy

Aprovisionamiento multi-tenant

Garantiza que un tenant exista y emite una clave nueva con alcance en una sola llamada: lectura/escritura/borrado, alcance opcional por bucket, secreto mostrado una sola vez. Cada tenant queda aislado por defecto.

02 · superficies

APIs nativa + S3 + admin

Un plano de datos JSON nativo, compatibilidad S3 SigV4 y una API de administración JSON. Tres superficies sobre un servidor, alcanzadas desde un SDK. Habla con el almacenamiento como prefiera tu stack.

03 · subidas

URLs firmadas para el navegador

Firma una URL de subida o descarga en el servidor y entrégala directamente al navegador. La API nativa firma URLs de escritura, no solo GET, así que los bytes nunca pasan por tu app.

04 · edge

Listo para el edge

Los clientes nativo y kit no importan nada de node:*, así que corren en Cloudflare Workers, Vercel Edge, Bun y Deno mediante una entrada /edge dedicada, sin node:crypto.

05 · cifrado

Cifrado siempre activo

El cifrado autenticado en reposo viene activado por defecto: AES-256-GCM o XChaCha20-Poly1305 sobre los datos, con claves por tenant. No hay flag que olvidar.

06 · webhooks

Webhooks verificables

Las notificaciones de bucket hacen POST a tu endpoint con firma HMAC-SHA256 de tiempo constante. verifyWebhook valida la firma en una llamada, y corre en el edge.

TRES SUPERFICIES, UN SERVIDOR

Tres APIs sobre el mismo almacén cifrado

Lockwell expone el mismo almacén de objetos multi-tenant y cifrado a través de tres interfaces. Elige la que encaje, o mézclalas libremente.

Compatible con S3SigV4 · XML

Encaja donde ya está S3

Autenticación SigV4, direccionamiento path-style y virtual-host, versiones, multiparte, escrituras condicionales, URLs prefirmadas, Object Lock, etiquetas y ciclo de vida. El libro de paridad documenta cada operación, y lo que queda fuera falla cerrado en lugar de fingir.

JSON nativo/api/v1/

Habla con el almacenamiento en nativo

Un plano de datos JSON en el listener público, sin firma SigV4 y sin XML. Los tokens bearer se emiten a partir de las claves de acceso y se renuevan por ti. Las URLs firmadas nativas cubren GET y PUT.

Admin JSON/admin/api/v1/

Aprovisionar y gestionar

Una API de administración JSON autenticada por bearer en un listener privado: tenants, claves con alcance, RBAC, auditoría y un documento OpenAPI. El aprovisionamiento vive fuera del plano de datos, por diseño.

UN SDK

Sin capa de almacenamiento propia que mantener

La pila habitual es un bucket, una segunda base para metadatos, un servicio de firmas, un verificador de webhooks y el pegamento que los une. Lockwell colapsa eso en un servidor y un SDK: aprovisionar un tenant, obtener un cliente con alcance, firmar una subida de navegador y verificar el webhook, de punta a punta, en la misma biblioteca, sobre el mismo almacén cifrado.

npm i @kelphect/sdk
provision.ts@kelphect/sdk
import { LockwellKit } from '@kelphect/sdk';

const kit = new LockwellKit({
  admin:  { endpoint: 'https://admin.example.com', token } },
  native: { endpoint: 'https://objects.example.com' },
});

// 1. provision a tenant + mint a fresh scoped key
const { key } = await kit.provisionTenant('acme', {
  defaultBucket: 'inbox',
});

// 2. sign a browser upload, then hand the URL to the client
const client = kit.clientForTenant('acme', key);
const up = await kit.signedUploadUrl(client, 'inbox', 'photo.jpg', {
  ttl: 300, contentType: 'image/jpeg',
});
APLAZADO, NO NEGADO

Lo que aún no existe, y qué hacer mientras tanto

Una función entra cuando pasa las mismas puertas de release que pasó todo lo demás: ensayos, suites, comportamiento documentado. Hasta entonces el servidor dice no, y esta página lo dice en voz alta.

en diseño, tras las puertas

Replicación multi-nodo

Lockwell es deliberadamente single-node hoy; el perfil replicado queda suspendido hasta pasar los mismos ensayos de takeover y durabilidad. Mientras tanto hay equipos con standby templado: una segunda instancia alimentada por sync S3 programado, con ensayos de restauración probando la costura.

webhooks hoy

Buses de eventos (SNS, SQS, Lambda)

Las notificaciones se entregan a webhooks firmados, verificables en una llamada. Una cola entre Lockwell y tu pipeline está a un consumidor de distancia, sobre infraestructura en la que ya confías.

ciclo de vida hoy

Tiering de almacenamiento

Las reglas de ciclo de vida ya expiran y limpian; archivar en frío es un job programado que copia vía API S3 al almacén frío que prefieran tus facturas.