plugins/render/skills/render-disks/SKILL.md
Attaches and manages persistent disks on Render services—mount paths, sizing, snapshots, file transfers, and single-instance constraints. Use when the user needs persistent storage, file uploads, a custom database on disk, CMS media storage, or needs to understand why their service can't scale horizontally or use zero-downtime deploys. Trigger terms: persistent disk, disk, storage, mount path, sizeGB, SSD, file uploads, snapshots, disk restore, ephemeral filesystem.
npx skillsauth add openai/plugins render-disksInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Persistent disks are high-performance SSDs you attach to a Render service to preserve filesystem changes across deploys and restarts. Without a disk, services have an ephemeral filesystem—all local file changes are lost on every deploy.
For managed databases, prefer Render Postgres (render-postgres) or Key Value (render-keyvalue) over self-managed alternatives on disk.
These constraints affect architecture decisions. Understand them before attaching a disk:
| Constraint | Impact |
|------------|--------|
| Single instance only | Cannot scale horizontally (numInstances must be 1, autoscaling not available) |
| No zero-downtime deploys | Old instance stops before new instance starts (brief downtime on each deploy) |
| Runtime access only | Disk is not available during buildCommand or preDeployCommand (those run on separate compute) |
| Not accessible from other services | Only the attached service can read/write the disk |
| Not available on cron jobs | Attach to a web service, private service, or background worker instead |
| Not available on one-off jobs | One-off jobs run on separate compute without disk access |
| Can increase size, cannot decrease | Start small and grow as needed |
services:
- type: web
name: cms
runtime: node
plan: starter
region: oregon
buildCommand: npm ci && npm run build
startCommand: npm start
disk:
name: cms-data
mountPath: /var/data
sizeGB: 10
Only files written under the mount path are preserved. Everything else remains ephemeral.
| Runtime | Source code path | Example mount path |
|---------|------------------|--------------------|
| Node.js, Python, Ruby, Elixir, Rust | /opt/render/project/src | /opt/render/project/src/uploads |
| Go | /opt/render/project/go/src/github.com/<user>/<repo> | .../data |
| Docker | Dockerfile's WORKDIR (commonly /app) | /app/storage |
Cannot mount at: /, /opt, /opt/render, /opt/render/project, /opt/render/project/src, /home, /home/render, /etc, /etc/secrets.
Subdirectories of these paths are fine (e.g. /opt/render/project/src/uploads).
Do not restore snapshots for custom database recovery. Use database-native backup tools (mysqldump, mongodump) instead—disk snapshots may capture a corrupted database state.
# Download from service
scp -s [email protected]_REGION.render.com:/mount/path/file ./local-file
# Upload to service
scp -s ./local-file [email protected]_REGION.render.com:/mount/path/file
Requires SSH access enabled for the service.
Available on all native runtimes (install manually on Docker):
# On the service shell
wormhole send /mount/path/file
# On your local machine
wormhole receive
| Pattern | Service type | Mount path | Notes |
|---------|-------------|------------|-------|
| WordPress / Ghost / CMS | Web Service | /var/data or /app/content | Media uploads, SQLite |
| Self-managed MySQL | Private Service | /var/lib/mysql | Use mysqldump for backups, not disk snapshots |
| File upload API | Web Service | /opt/render/project/src/uploads | Single instance constraint |
| Elasticsearch | Private Service | /usr/share/elasticsearch/data | Stateful search infrastructure |
| Mistake | Fix |
|---------|-----|
| Expecting horizontal scaling with a disk | Not possible — disk services are single-instance only |
| Mounting at a disallowed path | Use a subdirectory (e.g. /opt/render/project/src/uploads not /opt/render/project/src) |
| Reading disk during build or pre-deploy | These run on separate compute — move logic to the start command |
| Restoring disk snapshot for a database | Use database-native backups instead |
| Starting with a large disk size | Start small — you can increase but never decrease |
| Document | Contents |
|----------|----------|
| references/sizing-and-snapshots.md | Sizing guidance, snapshot lifecycle, restore procedures, cost patterns |
disk field reference in render.yamldevelopment
Use when the user wants to spin up / create / launch / provision a DigitalOcean droplet (or "a remote dev box on DO") and connect to it from Codex as a remote SSH workspace.
data-ai
Search through Microsoft Teams chats or channels, triage unread or recent activity, draft follow-ups, and manage Planner tasks through connected Teams data.
tools
Motion / animation context for the `use_figma` MCP tool — animating Figma nodes via manual keyframes, animation styles, easing, and timeline duration. Load alongside figma-use whenever a task involves adding, editing, or inspecting animation on a node.
development
SwiftUI ↔ Figma translation. Use whenever the user mentions Swift, SwiftUI, iOS, iPhone, or iPad — in EITHER direction — translating a Figma design into SwiftUI (design → code), or pushing SwiftUI views / screens / tokens back into a Figma file (code → design). Triggers on phrases like 'implement this Figma design in SwiftUI', 'build this screen in Swift', 'push this SwiftUI view to Figma', 'mirror my Swift code in a Figma file', or whenever a Figma URL appears alongside `.swift` files / an `.xcodeproj`. Routes to a direction-specific reference doc; loads alongside `figma-use` for the code → design path.