Catalogskills.sh · tigrisdata

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

Pending analysisVerified hub2.9k installs

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/