---
title: "Changelog"
description: "Release history and notable changes for each version of Sairo."
---

import { Aside } from "@astrojs/starlight/components";

Each version release produces all three artifacts from the same `v*` tag:

- **Docker image** — `stephenjr002/sairo:X.Y.Z` on [Docker Hub](https://hub.docker.com/r/stephenjr002/sairo)
- **Helm chart** — published to `oci://registry-1.docker.io/stephenjr002/sairo-helm`
- **CLI binaries** — on [GitHub Releases](https://github.com/AshwathStephen/sairo/releases) and via `brew install ashwathstephen/sairo/sairo`

---

## v3.2.0

**Cost Intelligence, Multipart Cleanup & Optimization Recommendations**

### Cost Visibility
- **Cost heatmaps** — Per-folder cost breakdown with 13 S3 provider pricing tables
- **Live AWS pricing** — Fetched from the AWS Bulk Pricing API with 24-hour cache
- **Provider auto-detect** — Automatically identifies your provider from the S3 endpoint URL
- **Storage class comparison** — See what your data would cost on Standard, Glacier, Standard-IA, and more
- **Provider selector** — Switch between providers to compare costs side-by-side

### Optimization
- **Lifecycle gap analysis** — Detects missing expiration rules, no abort-multipart rules, versioning without cleanup
- **Cold data detection** — Age distribution by folder with configurable thresholds
- **Duplicate detection** — Finds files with identical names and sizes across prefixes
- **Tiering savings** — Calculates monthly/annual savings from moving cold data to cheaper storage classes
- **Severity badges** — High / Medium / Info recommendations with actionable suggestions

### Multipart Cleanup
- **Part sizes** — Shows size and part count for each incomplete upload
- **Stale vs. active** — Uploads older than 24 hours flagged as stale; recent uploads protected
- **Bulk abort** — "Abort All Stale" button with confirmation dialog; active uploads untouched
- **Paginated** — Handles buckets with 1,000+ incomplete uploads via S3 pagination

### UI
- **Insights panel** — Consolidated "Storage" and "Optimize" tabs in one modal
- **Lazy loading** — Optimization data fetched only when the Optimize tab is clicked
- **Settings page: 24s to 0.3s** — Multipart data no longer blocks initial settings load

### Performance
- **`last_modified` index** — Cold data queries use indexed scans instead of full table scans
- **Lifecycle transitions** — Model now supports `transition_days` and `transition_storage_class`
- **6 new providers** — DigitalOcean, Hetzner, Scaleway, OVH, iDrive e2, Storj

---

## v3.1.0

**S3 Access Key Authentication**

- **S3 auth mode** — `AUTH_MODE=s3` lets users log in with S3 access key and secret key
- **Login toggle** — Sliding pill on the login page to switch between Password and S3 Keys
- **Helm support** — `auth.mode` value in Helm chart

---

## v3.0.0

**AI Storage Intelligence + Petabyte-Scale Performance**

### AI / MCP
- **MCP Server** — Optional sidecar with 26 tools for natural language storage analysis. Connect Claude Desktop, Cursor, or any MCP client.
- **4 guided workflows** — Storage audit, cost optimization, data quality check, incident investigation
- **Security** — Input validation (SQL injection, path traversal, prompt injection), per-bucket RBAC, output sanitization
- **Observability** — Structured JSON logging, per-tool latency metrics, health endpoints

### Performance
- **Folder listing: 191,231x faster** — Pre-computed `prefix_children` via SQL, no more 1M-object skip. 311ms → 0.002ms on 2M objects.
- **SQLite PRAGMA tuning** — 64MB page cache, 256MB mmap, in-memory temp store
- **Crawl workers: 12 buckets + 16 prefix threads** — up from 6 + 4
- **10K batch inserts** — 5x fewer SQLite commits per crawl
- **Async FTS rebuild** — Search stays available during index rebuild
- **Sub-prefix splitting** — Auto-discovers sub-folders for single-prefix buckets with 500K+ objects

### Testing
- 45 backend tests (16 original + 29 scaling)
- 103 MCP protocol tests (E2E + unit + security)
- 48 comprehensive live tests against production data
- Benchmarked on 557K objects / 167 TB (Leaseweb StorageGRID)

---

## v2.0.0

A complete rewrite of Sairo with a modern frontend and significantly expanded feature set.

### Frontend

- Complete rewrite with **React 18** and **Vite** build system
- **Dark mode** with system preference detection and manual toggle
- Virtualized file lists for smooth browsing of large buckets
- NDJSON streaming for instant rendering of object listings

### Multi-Endpoint Support

- Connect to **multiple S3-compatible backends** simultaneously
- Switch between endpoints from the sidebar
- Fernet-encrypted credential storage for added endpoints

### Search and Indexing

- **Full-text search** powered by SQLite FTS5
- Per-bucket SQLite databases with WAL mode
- Prefix-parallel crawling for fast initial indexing
- Background reindexing on a configurable interval

### Storage Analytics

- **Storage analytics dashboard** with per-prefix breakdown
- Storage growth history charts
- Visual treemap of bucket contents

### Version Management

- Browse, compare, and restore object versions
- Version scanner for discovering all versions in a bucket
- Bulk version deletion

### Sharing

- **Share links** for individual files with optional password protection
- Configurable expiration
- Public access without authentication

### Security

- **Audit logging** with 37 tracked action types
- **Two-factor authentication** (TOTP) with QR code setup and recovery codes
- **OAuth integration** with Google and GitHub
- **LDAP authentication** with group-based role mapping
- **API tokens** for programmatic access (format: `sairo_` prefix + 32 chars)
- Per-bucket viewer permissions (No Access, Read, Write)
- Rate limiting (global, login, upload, search)

### Bucket Settings

- **8 settings tabs**: Overview, Lifecycle, Policy, ACL, Tags, CORS, Multipart, Index
- Visual editors for lifecycle rules, CORS policies, and bucket tags

### Deployment

- **Helm chart** for Kubernetes deployments
- Non-root container (UID 1000, no privilege escalation)
- Custom branding support (app name, logo, colors, login message)

### Testing

- **261 tests** across the full stack:
  - 164 end-to-end tests
  - 39 API integration tests
  - 20 indexing tests
  - 16 pytest unit tests
  - 22 Vitest frontend tests
