DEV Community

Cover image for The Lioran S3 CLI: Buckets, Objects, Profiles, Keys and Diagnostics
Swaraj Puppalwar
Swaraj Puppalwar

Posted on

The Lioran S3 CLI: Buckets, Objects, Profiles, Keys and Diagnostics

The Lioran S3 CLI

The official Lioran S3 CLI is the terminal interface for Lioran Bastion.

It is developed by Lioran Developer Solutions under Lioran Group, with the project led by Swaraj Puppalwar.

The executable is:

liorans3
Enter fullscreen mode Exit fullscreen mode

Install

npm install -g @liorans3/cli@prealpha
Enter fullscreen mode Exit fullscreen mode

Check it:

liorans3 --help
liorans3 --version
Enter fullscreen mode Exit fullscreen mode

Design

The CLI sits on top of the official @liorans3/driver.

It does not implement a second network protocol stack.

That matters because:

  • authentication behavior remains consistent
  • multipart behavior remains consistent
  • stream handling remains consistent
  • API errors remain consistent
  • protocol fixes propagate into CLI behavior through the driver

Configure

Interactive setup:

liorans3 configure
Enter fullscreen mode Exit fullscreen mode

Profiles:

liorans3 profile list
liorans3 profile show production
liorans3 profile use production
Enter fullscreen mode Exit fullscreen mode

Create a profile:

liorans3 profile create production   --endpoint   bastion://admin:secret@storage.example.com
Enter fullscreen mode Exit fullscreen mode

Inspect the current identity:

liorans3 whoami
Enter fullscreen mode Exit fullscreen mode

Ping:

liorans3 ping
Enter fullscreen mode Exit fullscreen mode

Credential precedence

The CLI resolves credentials in this order:

  1. explicit CLI flags
  2. environment variables
  3. explicitly selected profile
  4. active/default profile

That makes CI usage predictable.

Environment variables

Examples:

LIORANS3_URI=bastion://admin:secret@127.0.0.1:27118
LIORANS3_PROFILE=production
Enter fullscreen mode Exit fullscreen mode

Or separate values:

LIORANS3_ENDPOINT=https://storage.example.com
LIORANS3_USERNAME=admin
LIORANS3_PASSWORD=secret
Enter fullscreen mode Exit fullscreen mode

Access keys:

LIORANS3_ACCESS_KEY=bk_example
LIORANS3_SECRET_KEY=secret
Enter fullscreen mode Exit fullscreen mode

Bucket commands

List:

liorans3 bucket ls
Enter fullscreen mode Exit fullscreen mode

Create:

liorans3 bucket create media   --quota-bytes 53687091200
Enter fullscreen mode Exit fullscreen mode

Inspect:

liorans3 bucket info media
Enter fullscreen mode Exit fullscreen mode

Update quota:

liorans3 bucket update media   --quota-bytes 107374182400
Enter fullscreen mode Exit fullscreen mode

Delete:

liorans3 bucket rm media
Enter fullscreen mode Exit fullscreen mode

Object commands

List:

liorans3 object ls media   --prefix uploads/2026/   --limit 50
Enter fullscreen mode Exit fullscreen mode

Metadata:

liorans3 object stat   media   uploads/document.pdf
Enter fullscreen mode Exit fullscreen mode

Upload:

liorans3 object put   media   uploads/document.pdf   ./document.pdf   --content-type application/pdf
Enter fullscreen mode Exit fullscreen mode

Download:

liorans3 object get   media   uploads/document.pdf   ./downloaded.pdf
Enter fullscreen mode Exit fullscreen mode

Delete:

liorans3 object rm   media   uploads/document.pdf
Enter fullscreen mode Exit fullscreen mode

Binary stdout

This is one of the more useful CLI behaviors:

liorans3 object cat   media   logs/app.log
Enter fullscreen mode Exit fullscreen mode

Raw object bytes are written directly to stdout.

That lets Unix pipes remain Unix pipes:

liorans3 object cat   media   logs/app.log   | grep "ERROR"
Enter fullscreen mode Exit fullscreen mode

Archive streaming:

liorans3 object cat   media   backup.tar.gz   | tar -xz
Enter fullscreen mode Exit fullscreen mode

Range reads

liorans3 object range   media   large.bin   --start 0   --end 1048575   --output chunk.bin
Enter fullscreen mode Exit fullscreen mode

Signed URLs

liorans3 object presign   media   uploads/document.pdf   --method GET   --expires 3600
Enter fullscreen mode Exit fullscreen mode

Multipart

liorans3 multipart upload   media   archives/backup.tar.gz   ./backup.tar.gz   --part-size-mb 16   --concurrency 4
Enter fullscreen mode Exit fullscreen mode

Users

liorans3 user ls
liorans3 user create alice   --role readwrite
liorans3 user disable alice
liorans3 user enable alice
liorans3 user reset-password alice
liorans3 user rm alice
Enter fullscreen mode Exit fullscreen mode

Access keys

liorans3 key ls
Enter fullscreen mode Exit fullscreen mode

Create:

liorans3 key create   "CI Deployment Key"   --expires-days 90   --save-to-profile ci
Enter fullscreen mode Exit fullscreen mode

Rotate:

liorans3 key rotate bk_example
Enter fullscreen mode Exit fullscreen mode

Revoke:

liorans3 key revoke bk_example
Enter fullscreen mode Exit fullscreen mode

Diagnostics

liorans3 doctor
Enter fullscreen mode Exit fullscreen mode

Health:

liorans3 system health
Enter fullscreen mode Exit fullscreen mode

Info:

liorans3 system info
Enter fullscreen mode Exit fullscreen mode

Performance:

liorans3 system performance
Enter fullscreen mode Exit fullscreen mode

Metrics:

liorans3 system metrics
Enter fullscreen mode Exit fullscreen mode

JSON mode

Automation should use:

liorans3 bucket ls --json
Enter fullscreen mode Exit fullscreen mode

The CLI keeps machine-readable JSON on stdout and sends non-result diagnostics elsewhere.

That means a script can safely do:

liorans3 bucket ls --json   | jq '.'
Enter fullscreen mode Exit fullscreen mode

Exit codes

The CLI maps failures into deterministic categories including:

  • success
  • general error
  • usage error
  • authentication error
  • forbidden
  • not found
  • network error
  • conflict
  • capacity/storage errors

That makes shell automation much more robust than parsing English error strings.

Summary

The CLI is not intended to be a decorative wrapper around curl.

It is meant to be the operational surface for humans, CI, diagnosis, and storage administration while sharing protocol behavior with the TypeScript driver.

Docs: https://docs.liorans3.sbs

Top comments (0)