TAG (Tigris Acceleration Gateway)
An S3-compatible caching proxy you run next to your compute, keeping hot Tigris objects on local NVMe.
- What it is
- Object storage
- Used for
- Caching
- Part of
- Built on Tigris
- Type
- Open source
- Made by
- Tigris Data
- License
- Apache 2.0
- Facts checked
- 23 October 2026
What it is
TAG is a Go server that sits between S3 clients and Tigris. Clients change only their endpoint (path-style addressing, port 8080 by default). On a GET, TAG looks in its local cache and answers from there, or fetches from Tigris, stores the object and passes it on; an X-Cache header says HIT or MISS. The cache is OCache, Tigris’s RocksDB-based cache library, embedded in the process and kept on local NVMe. Objects of 1 MiB or more are cached in 1 MiB blocks by default, so a range read, such as a Parquet footer, fetches only the blocks it covers. Concurrent requests for the same uncached object share one upstream fetch. PUT, DELETE and copy requests go through to Tigris and invalidate the cached entries; stale entries are revalidated with conditional requests; and under a disk cap entries are evicted LRU or oldest-first. Several TAG nodes form one cache: they find each other by gossip, split keys by consistent hashing and forward requests to the owning node over gRPC.
In the default transparent mode, clients sign requests with their own Tigris keys and TAG forwards them unchanged. After a client’s first request, TAG learns derived signing keys from Tigris (stored encrypted) and checks later signatures itself, and it serves a bucket from cache to a key only after Tigris has allowed that key a GetObject or HeadObject there. TAG’s own credentials only need read access. A signing mode instead checks requests against TAG’s own credential store and re-signs them, which works with any S3-compatible backend. TAG ships as an install script, a Docker image and Kubernetes manifests (a StatefulSet with autoscaling), and exposes Prometheus metrics at /metrics.
Why teams pick it
- No code changes: any S3 SDK or tool points its endpoint at TAG and keeps its own credentials
- One node served about 75,000 requests a second for 1 KiB objects and 10.7 GiB/s of 1 MiB objects in Tigris’s benchmark, using about 12% of the CPU
- Block-aligned caching and request coalescing suit ML training, model loading and Parquet scans that reread the same files
- Apache 2.0, with gossip-based clustering, Kubernetes manifests and over 30 Prometheus metrics
Watch out for
- Path-style addressing only; no object versioning, server-side encryption, Object Lock or browser POST uploads
- The first read of each object still makes a round trip to Tigris, and objects above the size threshold or marked
no-storeorprivatearen’t cached - It is another stateful service to run, with NVMe disks, compaction to watch and its own failure modes
- Transparent mode with local key checks is built for Tigris; other S3 services need signing mode and a credential store in TAG
More of the Tigris family
What all object storage have in common →Compare side by side →How it fits with other technologies
Run TAG on a GPU box and point the AWS CLI at it · bash
curl -fsSL https://tag-releases.t3.storage.dev/latest/install.sh | bash
# TAG's own key: read-only access to the cached buckets
AWS_ACCESS_KEY_ID=tid_tag AWS_SECRET_ACCESS_KEY="$TAG_SECRET" \
tag --config /etc/tag/config.yaml & # listens on :8080
# clients keep their own Tigris keys; only the endpoint changes
aws configure set default.s3.addressing_style path
aws s3 cp s3://acme-datasets/shards/0001.tar . --endpoint-url http://localhost:8080 # MISS
aws s3 cp s3://acme-datasets/shards/0001.tar . --endpoint-url http://localhost:8080 # HIT, from NVMeOne node, cache warm#
Tigris’s benchmark: warp with 64 threads against a single i3en.24xlarge with NVMe disks over a 100 Gbps link.
| Object size | GETs per second | Throughput | Time to first byte (p50) |
|---|---|---|---|
| 1 KiB | about 75,700 | 74 MiB/s | under 1 ms |
| 100 KiB | about 33,300 | 3.2 GiB/s | about 1 ms |
| 1 MiB | about 11,000 | 10.7 GiB/s | about 1 ms |
| 4 MiB | about 2,800 | 10.8 GiB/s | about 1 ms |
- For objects of 1 MiB and larger one node reached about 85 Gbps, close to the network card’s limit. Tigris says TAG is usually limited by NVMe for large objects and by CPU for small ones.
See it in a real stack
No architecture uses TAG (Tigris Acceleration Gateway) yet. Drop it into the playground and wire it up yourself.Open playground →Worth exploring
Where it came from2025–2026
Tigris already moves objects into the region that reads them, but every read still crosses the network from wherever the compute runs. Training jobs reread the same dataset every epoch, and inference servers reload the same weights on every cold start. TAG puts a cache on machines next to that compute, so repeated reads come from local NVMe.
Its cache layer, OCache, has its own repository, started in July 2025: a cache service with RocksDB for small objects and plain files for large ones. TAG, built on it, appeared on GitHub in January 2026 and reached 1.0.0 on 20 January. By October 2026 it was at 1.22.3, with block-aligned caching on by default, an optional tiered mode that keeps small writes locally, and warming of Parquet footers. Goldsky’s Prism data lake uses it to serve historical blockchain reads in-region, with an average of about 9 ms per GetObject; Tigris’s CEO Ovais Tariq, reviewing that write-up, said a cache in front of object storage should be “boring shared infrastructure”.
Why it’s built this way
- A proxy that speaks S3
- Training loaders, inference servers and query engines already talk S3, so a cache at the same protocol level works with all of them by changing one endpoint.
- Forward the client’s own signature
- TAG never needs the clients’ secret keys, and Tigris stays the authority on who may read what; local checks with learned signing keys keep cache hits from waiting on Tigris.
- Cache large objects in fixed blocks
- Columnar files and model shards are often read in ranges. Caching 1 MiB blocks means a footer read doesn’t pull the whole multi-gigabyte file.
Timeline
- 2025
Repository for OCache, the cache TAG builds on, started in July
- 2026
TAG 1.0.0 in January; 1.22 by October, with block-aligned caching on by default
Sources6 · facts checked 23 October 2026
- Tigris docs: TAG, Tigris Acceleration Gateway (caching, clustering, auth modes, limits, benchmarks)
- Tigris docs: TAG deployment guide (sizing, topologies, ports, monitoring)
- GitHub: tigrisdata/tag (README: block caching, coalescing, transparent proxy mode, install)
- GitHub: tigrisdata/tag, docs/architecture.md (embedded OCache, two-key storage)
- GitHub: tigrisdata/tag, docs/usage.md (S3 clients, path-style)
- Goldsky blog: Prism, a geo-replicated data lake serving billions of <10 ms point lookups