Object storage,
built for developers.
Lioran S3 is developer-first object storage with simple buckets, fast reads and writes, an official TypeScript driver, and a production CLI.
* Benchmark results measured in controlled local and network test environments. Actual throughput varies with hardware, storage media (NVMe vs SSD), object size distribution, concurrency, networking, and configured durability settings (strict vs balanced).
Developer Quickstart
Get up and running in minutes with the official CLI or TypeScript driver.
npm install -g @liorans3/cli@prealphaliorans3 configure --endpoint http://127.0.0.1:27118liorans3 bucket create assets --quota-gb 50liorans3 object put assets file.bin ./file.binEngineered for Predictability
Core storage primitives designed to eliminate memory spikes and locking contention.
Bounded-Memory Streaming
Uploads and downloads stream through fixed-size buffers (64 KiB–4 MiB) between network sockets and disk descriptors. Objects are never buffered entirely in RAM.
Decoupled RocksDB Metadata
Bucket configurations, quotas, ETags, SHA-256 digests, and multipart states are persisted in an embedded RocksDB key-value store, decoupled from raw payload volumes.
Resumable Multipart Uploads
Upload multi-gigabyte files in parallel chunks with per-part retries, incremental checksum verification, and atomic server-side assembly.
Crash Durability Modes
Choose between strict synchronous disk sync (fsync per write) for guaranteed crash consistency or balanced OS writeback caching for peak throughput.
Expiring Signed URLs
Cryptographically bound HMAC-SHA256 presigned URLs enable secure, delegated GET, PUT, and HEAD operations directly from client browsers without leaking credentials.
Identity & Programmatic Keys
Role-based user management (admin, readwrite, readonly) with Argon2id password hashing and rotatable programmatic Access Key credentials.
Atomic Storage Lifecycle
Every mutating write follows a strict 5-stage staging and commit protocol to prevent partial or corrupted object exposure.
Staging
Payload bytes stream into an isolated temporary UUID v7 staging file (.staging/).
Hashing
Incremental SHA-256 and CRC32C digests are computed chunk-by-chunk in flight.
Disk Sync
Buffer is flushed and synced to physical storage (fsync in strict durability mode).
Metadata Commit
Object record, ETag, size, and checksum are atomically committed to RocksDB.
Promotion
Staging file is atomically promoted into the active /objects/ hierarchy and acknowledged 200 OK.
Dual Developer Interfaces
Interact programmatically via the TypeScript driver or administer instances directly from the terminal.
TypeScript & JavaScript Driver
Strongly typed, zero-copy streaming client library supporting Node streams, Web streams, cursor pagination, and resumable multipart uploads.
const client = new BastionClient("bastion://admin:pass@host:27118");
const bucket = client.bucket("media");
// High-level multipart upload
await bucket.uploadMultipart("video.mp4", "./video.mp4", {
concurrency: 4,
onProgress: (p) => console.log(`Progress: ${p.percent}%`),
});Command Line Interface
Administrative CLI featuring deterministic exit codes, local credential profiles, automated multipart transfers, and machine-readable JSON output.
# Upload large file with 4 parallel chunk workers
liorans3 multipart upload media video.mp4 ./video.mp4 --concurrency 4
# Query bucket objects in JSON mode for automation
liorans3 object ls media --jsonProduction Deployment
Deploy in minutes with Docker Compose, automatic Let's Encrypt TLS provisioning via Caddy, and persistent volumes.
services:
bastion:
image: liorans3/liorans3:pre-alpha
container_name: bastion-server
restart: unless-stopped
expose:
- "27118"
environment:
- BASTION_ENV=production
- BASTION_HOST=0.0.0.0
- BASTION_PORT=27118
- BASTION_DATA_DIR=/data
- BASTION_ADMIN_PASSWORD=${BASTION_ADMIN_PASSWORD}
- BASTION_SIGNING_SECRET=${BASTION_SIGNING_SECRET}
- BASTION_DURABILITY=strict
volumes:
- bastion-data:/data
caddy:
image: caddy:2-alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443"
environment:
- BASTION_DOMAIN=${BASTION_DOMAIN:-s3.example.com}
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy-data:/data
volumes:
bastion-data:
caddy-data:Frequently Asked Questions
Quick answers to common questions about Lioran S3 architecture, licensing, and deployment.
Build with Lioran S3.
Start with the documentation, inspect the source code, or join the developer community.