tigris-static-assets
Tigris Static Asset Hosting
Deploy CSS, JavaScript, fonts, and build artifacts to Tigris for global CDN delivery. Covers asset pipeline integration, cache-busting strategies, and Cache-Control configuration for all major frameworks.
Prerequisites
Before doing anything else, install the Tigris CLI if it's not already available:
tigris help || npm install -g @tigrisdata/cli
If you need to install it, tell the user: "I'm installing the Tigris CLI (@tigrisdata/cli) so we can work with Tigris object storage."
Overview
Tigris public buckets automatically serve files from the nearest global edge — no separate CDN configuration needed. Combined with content-hashed filenames and immutable cache headers, this gives you fast, cost-effective static asset delivery.
Key pattern:
- Build assets with content hashes (e.g.,
main-abc123.js) - Upload to a public Tigris bucket
- Set
Cache-Control: public, max-age=31536000, immutable - Point your app's asset URL to the Tigris bucket
Cache Headers
# For immutable, hashed assets (CSS, JS bundles)
Cache-Control: public, max-age=31536000, immutable
# For mutable assets (manifest files, index.html)
Cache-Control: public, max-age=0, must-revalidate
# For fonts
Cache-Control: public, max-age=31536000, immutable
Setting Headers via CLI
tigris cp dist/main-abc123.js t3://my-assets/main-abc123.js \
--cache-control "public, max-age=31536000, immutable" \
--content-type "application/javascript"
Setting Headers via SDK
import { put } from "@tigrisdata/storage";
await put("assets/main-abc123.js", fileBuffer, {
access: "public",
contentType: "application/javascript",
});
Upload Script (General)
#!/bin/bash
# scripts/deploy-assets.sh
BUCKET="my-app-assets"
BUILD_DIR="dist"
# Upload hashed assets with long cache
tigris cp "$BUILD_DIR/" "t3://$BUCKET/" -r \
--cache-control "public, max-age=31536000, immutable"
echo "Assets deployed to t3://$BUCKET/"
Framework Guides
Read the resource file for your framework:
- Next.js — Read
./resources/nextjs.mdfor assetPrefix config and deploy script - Remix — Read
./resources/remix.mdfor Vite config and deploy script - Express — Read
./resources/express.mdfor static redirect pattern - Rails — Read
./resources/rails.mdfor Sprockets/Propshaft asset sync - Django — Read
./resources/django.mdfor collectstatic with S3 backend - Laravel — Read
./resources/laravel.mdfor Vite/Mix asset upload
Cache-Busting Strategies
| Strategy | Example | Use When |
|---|---|---|
| Content hash in filename | main-abc123.js |
Build tools generate hashed names (Vite, Webpack) |
| Query string | main.js?v=abc123 |
Legacy systems without hashed filenames |
| Directory versioning | /v2/assets/main.js |
Major version changes |
Most modern build tools (Vite, Webpack, esbuild) generate content-hashed filenames by default. Use these with immutable cache headers for the best performance.
Critical Rules
Always: Use a public bucket for static assets | Set Cache-Control: immutable on hashed assets | Use content-hashed filenames | Upload after build, not on every request
Never: Serve static assets through your app server in production (use Tigris CDN) | Set long cache times on mutable filenames | Forget to update asset URL configuration in your framework
Related Skills
- tigris-egress-optimizer — Reduce bandwidth costs
- tigris-lifecycle-management — Clean up old asset versions
Official Documentation
- Tigris: https://www.tigrisdata.com/docs/