tigris-static-assets
Use when deploying static assets (CSS, JS, fonts, build artifacts) to Tigris — asset pipelines, cache headers, CDN delivery, covers Next.js, Remix, Rails, Django, Laravel, Express
Savant verdict: Pending analysis
Imported from the source hub; Savant's analysis is still running.
Live evaluation
Not evaluated yet. Workspaces can request a live evaluation.
Safety (NVIDIA SkillSpector)
Scan pending.
Structure
- 2 referenced files aren't in the packageassets/main-abc123.js, scripts/deploy-assets.sh. They may be binary, too large to catalog, or missing upstream.
- No license declaredConfirm you may reuse this skill before importing it into your repository.
SKILL.md
---
name: tigris-static-assets
description: Use when deploying static assets (CSS, JS, fonts, build artifacts) to Tigris — asset pipelines, cache headers, CDN delivery, covers Next.js, Remix, Rails, Django, Laravel, Express
---
# 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:
```bash
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:**
1. Build assets with content hashes (e.g., `main-abc123.js`)
2. Upload to a public Tigris bucket
3. Set `Cache-Control: public, max-age=31536000, immutable`
4. Point your app's asset URL to the Tigris bucket
---
## Cache Headers
```bash
# 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
```bash
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
```typescript
import { put } from "@tigrisdata/storage";
await put("assets/main-abc123.js", fileBuffer, {
access: "public",
contentType: "application/javascript",
});
```
---
## Upload Script (General)
```bash
#!/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.md` for assetPrefix config and deploy script
- **Remix** — Read `./resources/remix.md` for Vite config and deploy script
- **Express** — Read `./resources/express.md` for static redirect pattern
- **Rails** — Read `./resources/rails.md` for Sprockets/Propshaft asset sync
- **Django** — Read `./resources/django.md` for collectstatic with S3 backend
- **Laravel** — Read `./resources/laravel.md` for 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/