Update to Render
Snapshot Oct 24, 2026 · 12:46 UTC · version 1.0.2
Collection source: downloaded plugin package. These snapshots do not have a confirmed matching collection source. Differences in file lists alone do not establish changes to the package.
Instructions updated for render-disks
Skill instructions — Now says: preserve files written beneath a service's configured mount path across deploys and restarts. Before designing, configuring, resizing, transferring data to,...
Observed in instructions or declared skills. Runtime behavior has not been tested.
Up to 10 plugins free · no card required.
All fields and original values.
Skill instructions
Sep 30, 2026 · 22:43 UTC
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. - **Restoring...
Oct 24, 2026 · 12:46 UTC
preserve files written beneath a service's configured mount path across deploys and restarts. Before designing, configuring, resizing, transferring data to, snapshotting, restoring, or troubleshooting a disk, read `references/persistent-...
Supporting files
Sep 30, 2026 · 22:43 UTC
[{"relative_path":"references/sizing-and-snapshots.md","size_in_bytes":2167}]
Oct 24, 2026 · 12:46 UTC
[{"relative_path":"references/persistent-disks.md","size_in_bytes":4586}]
Compare saved observations
Download comparison JSONSKILL.md text changes
− removed · + added
--- before +++ after @@ -18,7 +18,9 @@ # Render Persistent Disks -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. +Persistent disks preserve files written beneath a service's configured mount path across deploys and restarts. + +Before designing, configuring, resizing, transferring data to, snapshotting, restoring, or troubleshooting a disk, read `references/persistent-disks.md`. ## When to Use @@ -26,126 +28,45 @@ - Running a **self-managed database** (MySQL, MongoDB, ClickHouse) on Render - Deploying **stateful infrastructure** (Elasticsearch, Kafka, RabbitMQ, Mattermost) - Understanding **why scaling is blocked** or **zero-downtime deploys are disabled** -- **Restoring data** from an automatic disk snapshot +- **Restoring data** from a disk snapshot For managed databases, prefer **Render Postgres** (render-postgres) or **Key Value** (render-keyvalue) over self-managed alternatives on disk. -## Critical Constraints +## Core Decisions -These constraints affect architecture decisions. Understand them **before** attaching a disk: +- Render's default filesystem is ephemeral. Only files written beneath a disk's mount path persist across deploys and restarts. +- A disk-backed service is single-instance: it cannot use horizontal scaling or zero-downtime deploys. +- If file storage must be shared by scaled instances, use external object storage such as S3 or R2. Use Render Postgres for relational data and Render Key Value for managed cache or queue state. +- Choose the smallest current disk size that accommodates observed usage because capacity can increase but cannot decrease. For a small upload service, 1–5 GB is a reasonable starting range when supported by the current limits. -| 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 | - -## Setup - -### Dashboard - -1. Go to your service's **Disks** page -2. Set the **mount path** (absolute path where persistent data is stored) -3. Choose a **size** in GB -4. Click **Add disk** — triggers a new deploy +## Blueprint Setup -### Blueprint +For a native Node.js upload service, mount a subdirectory such as `/opt/render/project/src/uploads`, not the source root itself, and configure the application to write uploads there: ```yaml services: - type: web - name: cms + name: uploads runtime: node - plan: starter - region: oregon - buildCommand: npm ci && npm run build + buildCommand: npm ci startCommand: npm start disk: - name: cms-data - mountPath: /var/data - sizeGB: 10 -``` - -## Mount Path - -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` | - -### Disallowed mount paths - -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`). - -## Snapshots - -- Render creates an **automatic snapshot every 24 hours** -- Snapshots are available for **at least 7 days** -- Restore from the service's **Disks** page in the Dashboard -- **Full restore only** — you cannot restore individual files -- **Destructive** — all changes after the snapshot are lost - -**Do not restore snapshots for custom database recovery.** Use database-native backup tools (mysqldump, mongodump) instead—disk snapshots may capture a corrupted database state. - -## File Transfers - -### SCP (via SSH) - -```bash -# Download from service -scp -s YOUR_SERVICE@ssh.YOUR_REGION.render.com:/mount/path/file ./local-file - -# Upload to service -scp -s ./local-file YOUR_SERVICE@ssh.YOUR_REGION.render.com:/mount/path/file + name: uploads-data + mountPath: /opt/render/project/src/uploads + sizeGB: 5 ``` -Requires SSH access enabled for the service. - -### Magic-Wormhole - -Available on all native runtimes (install manually on Docker): - -```bash -# On the service shell -wormhole send /mount/path/file +Fetch the current disk documentation and Blueprint specification through `references/persistent-disks.md` before finalizing the mount path or size. -# On your local machine -wormhole receive -``` - -## Common Patterns +## Database Backups and File Recovery -| 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 | - -## Common Mistakes - -| 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 | +Do not use a disk snapshot to recover a self-managed database such as MySQL: a filesystem snapshot can restore an inconsistent or corrupted database state. Use database-native backups such as `mysqldump` and test their restore procedure. Move backup files off the service with a currently supported transfer method such as SCP with SSH or Magic-Wormhole. Snapshot restores replace the entire disk and permanently discard changes made after the selected snapshot. ## References | Document | Contents | |----------|----------| -| `references/sizing-and-snapshots.md` | Sizing guidance, snapshot lifecycle, restore procedures, cost patterns | +| `references/persistent-disks.md` | Current disk constraints, configuration, sizing, snapshots, restores, and transfers | ## Related Skills @@ -153,3 +74,16 @@ - **render-private-services** — Internal services with disks (Elasticsearch, MySQL) - **render-blueprints** — `disk` field reference in `render.yaml` - **render-postgres** — Managed database alternative (no disk management needed) + +<!-- shared:documentation-retrieval --> +## Current documentation retrieval + +Whenever this skill directs you to consult current Render documentation: + +1. Retrieve the linked Markdown document directly with an available URL-fetching tool or HTTP client, such as `curl`. Do not substitute web-search summaries for the document. +2. Confirm that retrieval succeeded and returned the expected document, then read its contents. Saving a file or printing its path is not sufficient. +3. If the request fails or your tool cannot read the Markdown response, open and read the linked HTML version instead. +4. If neither version can be retrieved, disclose that the current reference is unavailable and follow any topic-specific fallback in the skill. Use bundled guidance only for stable constraints, and do not guess at changeable platform details. + +When a task requires multiple references, apply this workflow to each one and distinguish the documents you verified from those that remain unavailable. +<!-- /shared:documentation-retrieval -->
Full technical diff · 2 changed fields
changed /included_files
[
{
"relative_path": "references/sizing-and-snapshots.md",
"size_in_bytes": 2167
}
][
{
"relative_path": "references/persistent-disks.md",
"size_in_bytes": 4586
}
]changed /skill_md_contents
"---\nname: render-disks\ndescription: >-\n Attaches and manages persistent disks on Render services—mount paths, sizing,\n snapshots, file transfers, and single-instance constraints. Use when the user\n needs persistent storage, file uploads, a custom database on disk, CMS media\n storage, or needs to understand why their service can't scale horizontally\n or use zero-downtime deploys.\n Trigger terms: persistent disk, disk, storage, mount path, sizeGB, SSD,\n file uploads, snapshots, disk restore, ephemeral filesystem.\nlicense: MIT\ncompatibility: Render paid web services, private services, and background workers\nmetadata:\n author: Render\n version: \"1.0.0\"\n category: storage\n---\n\n# Render Persistent Disks\n\nPersistent 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.\n\n## When to Use\n\n- Storing **file uploads**, CMS media, or user-generated content\n- Running a **self-managed database** (MySQL, MongoDB, ClickHouse) on Render\n- Deploying **stateful infrastructure** (Elasticsearch, Kafka, RabbitMQ, Mattermost)\n- Understanding **why scaling is blocked** or **zero-downtime deploys are disabled**\n- **Restoring data** from an automatic disk snapshot\n\nFor managed databases, prefer **Render Postgres** (render-postgres) or **Key Value** (render-keyvalue) over self-managed alternatives on disk.\n\n## Critical Constraints\n\nThese constraints affect architecture decisions. Understand them **before** attaching a disk:\n\n| Constraint | Impact |\n|------------|--------|\n| **Single instance only** | Cannot scale horizontally (`numInstances` must be 1, autoscaling not available) |\n| **No zero-downtime deploys** | Old instance stops before new instance starts (brief downtime on each deploy) |\n| **Runtime access only** | Disk is not available during `buildCommand` or `preDeployCommand` (those run on separate compute) |\n| **Not accessible from other services** | Only the attached service can read/write the disk |\n| **Not available on cron jobs** | Attach to a web service, private service, or background worker instead |\n| **Not available on one-off jobs** | One-off jobs run on separate compute without disk access |\n| **Can increase size, cannot decrease** | Start small and grow as needed |\n\n## Setup\n\n### Dashboard\n\n1. Go to your service's **Disks** page\n2. Set the **mount path** (absolute path where persistent data is stored)\n3. Choose a **size** in GB\n4. Click **Add disk** — triggers a new deploy\n\n### Blueprint\n\n```yaml\nservices:\n - type: web\n name: cms\n runtime: node\n plan: starter\n region: oregon\n buildCommand: npm ci && npm run build\n startCommand: npm start\n disk:\n name: cms-data\n mountPath: /var/data\n sizeGB: 10\n```\n\n## Mount Path\n\nOnly files written **under the mount path** are preserved. Everything else remains ephemeral.\n\n| Runtime | Source code path | Example mount path |\n|---------|------------------|--------------------|\n| Node.js, Python, Ruby, Elixir, Rust | `/opt/render/project/src` | `/opt/render/project/src/uploads` |\n| Go | `/opt/render/project/go/src/github.com/<user>/<repo>` | `.../data` |\n| Docker | Dockerfile's `WORKDIR` (commonly `/app`) | `/app/storage` |\n\n### Disallowed mount paths\n\nCannot mount at: `/`, `/opt`, `/opt/render`, `/opt/render/project`, `/opt/render/project/src`, `/home`, `/home/render`, `/etc`, `/etc/secrets`.\n\nSubdirectories of these paths are fine (e.g. `/opt/render/project/src/uploads`).\n\n## Snapshots\n\n- Render creates an **automatic snapshot every 24 hours**\n- Snapshots are available for **at least 7 days**\n- Restore from the service's **Disks** page in the Dashboard\n- **Full restore only** — you cannot restore individual files\n- **Destructive** — all changes after the snapshot are lost\n\n**Do not restore snapshots for custom database recovery.** Use database-native backup tools (mysqldump, mongodump) instead—disk snapshots may capture a corrupted database state.\n\n## File Transfers\n\n### SCP (via SSH)\n\n```bash\n# Download from service\nscp -s YOUR_SERVICE@ssh.YOUR_REGION.render.com:/mount/path/file ./local-file\n\n# Upload to service\nscp -s ./local-file YOUR_SERVICE@ssh.YOUR_REGION.render.com:/mount/path/file\n```\n\nRequires SSH access enabled for the service.\n\n### Magic-Wormhole\n\nAvailable on all native runtimes (install manually on Docker):\n\n```bash\n# On the service shell\nwormhole send /mount/path/file\n\n# On your local machine\nwormhole receive\n```\n\n## Common Patterns\n\n| Pattern | Service type | Mount path | Notes |\n|---------|-------------|------------|-------|\n| WordPress / Ghost / CMS | Web Service | `/var/data` or `/app/content` | Media uploads, SQLite |\n| Self-managed MySQL | Private Service | `/var/lib/mysql` | Use mysqldump for backups, not disk snapshots |\n| File upload API | Web Service | `/opt/render/project/src/uploads` | Single instance constraint |\n| Elasticsearch | Private Service | `/usr/share/elasticsearch/data` | Stateful search infrastructure |\n\n## Common Mistakes\n\n| Mistake | Fix |\n|---------|-----|\n| Expecting horizontal scaling with a disk | Not possible — disk services are single-instance only |\n| Mounting at a disallowed path | Use a subdirectory (e.g. `/opt/render/project/src/uploads` not `/opt/render/project/src`) |\n| Reading disk during build or pre-deploy | These run on separate compute — move logic to the start command |\n| Restoring disk snapshot for a database | Use database-native backups instead |\n| Starting with a large disk size | Start small — you can increase but never decrease |\n\n## References\n\n| Document | Contents |\n|----------|----------|\n| `references/sizing-and-snapshots.md` | Sizing guidance, snapshot lifecycle, restore procedures, cost patterns |\n\n## Related Skills\n\n- **render-web-services** — Deploy lifecycle, health checks (disk disables zero-downtime)\n- **render-private-services** — Internal services with disks (Elasticsearch, MySQL)\n- **render-blueprints** — `disk` field reference in `render.yaml`\n- **render-postgres** — Managed database alternative (no disk management needed)\n"
"---\nname: render-disks\ndescription: >-\n Attaches and manages persistent disks on Render services—mount paths, sizing,\n snapshots, file transfers, and single-instance constraints. Use when the user\n needs persistent storage, file uploads, a custom database on disk, CMS media\n storage, or needs to understand why their service can't scale horizontally\n or use zero-downtime deploys.\n Trigger terms: persistent disk, disk, storage, mount path, sizeGB, SSD,\n file uploads, snapshots, disk restore, ephemeral filesystem.\nlicense: MIT\ncompatibility: Render paid web services, private services, and background workers\nmetadata:\n author: Render\n version: \"1.0.0\"\n category: storage\n---\n\n# Render Persistent Disks\n\nPersistent disks preserve files written beneath a service's configured mount path across deploys and restarts.\n\nBefore designing, configuring, resizing, transferring data to, snapshotting, restoring, or troubleshooting a disk, read `references/persistent-disks.md`.\n\n## When to Use\n\n- Storing **file uploads**, CMS media, or user-generated content\n- Running a **self-managed database** (MySQL, MongoDB, ClickHouse) on Render\n- Deploying **stateful infrastructure** (Elasticsearch, Kafka, RabbitMQ, Mattermost)\n- Understanding **why scaling is blocked** or **zero-downtime deploys are disabled**\n- **Restoring data** from a disk snapshot\n\nFor managed databases, prefer **Render Postgres** (render-postgres) or **Key Value** (render-keyvalue) over self-managed alternatives on disk.\n\n## Core Decisions\n\n- Render's default filesystem is ephemeral. Only files written beneath a disk's mount path persist across deploys and restarts.\n- A disk-backed service is single-instance: it cannot use horizontal scaling or zero-downtime deploys.\n- If file storage must be shared by scaled instances, use external object storage such as S3 or R2. Use Render Postgres for relational data and Render Key Value for managed cache or queue state.\n- Choose the smallest current disk size that accommodates observed usage because capacity can increase but cannot decrease. For a small upload service, 1–5 GB is a reasonable starting range when supported by the current limits.\n\n## Blueprint Setup\n\nFor a native Node.js upload service, mount a subdirectory such as `/opt/render/project/src/uploads`, not the source root itself, and configure the application to write uploads there:\n\n```yaml\nservices:\n - type: web\n name: uploads\n runtime: node\n buildCommand: npm ci\n startCommand: npm start\n disk:\n name: uploads-data\n mountPath: /opt/render/project/src/uploads\n sizeGB: 5\n```\n\nFetch the current disk documentation and Blueprint specification through `references/persistent-disks.md` before finalizing the mount path or size.\n\n## Database Backups and File Recovery\n\nDo not use a disk snapshot to recover a self-managed database such as MySQL: a filesystem snapshot can restore an inconsistent or corrupted database state. Use database-native backups such as `mysqldump` and test their restore procedure. Move backup files off the service with a currently supported transfer method such as SCP with SSH or Magic-Wormhole. Snapshot restores replace the entire disk and permanently discard changes made after the selected snapshot.\n\n## References\n\n| Document | Contents |\n|----------|----------|\n| `references/persistent-disks.md` | Current disk constraints, configuration, sizing, snapshots, restores, and transfers |\n\n## Related Skills\n\n- **render-web-services** — Deploy lifecycle, health checks (disk disables zero-downtime)\n- **render-private-services** — Internal services with disks (Elasticsearch, MySQL)\n- **render-blueprints** — `disk` field reference in `render.yaml`\n- **render-postgres** — Managed database alternative (no disk management needed)\n\n<!-- shared:documentation-retrieval -->\n## Current documentation retrieval\n\nWhenever this skill directs you to consult current Render documentation:\n\n1. Retrieve the linked Markdown document directly with an available URL-fetching tool or HTTP client, such as `curl`. Do not substitute web-search summaries for the document.\n2. Confirm that retrieval succeeded and returned the expected document, then read its contents. Saving a file or printing its path is not sufficient.\n3. If the request fails or your tool cannot read the Markdown response, open and read the linked HTML version instead.\n4. If neither version can be retrieved, disclose that the current reference is unavailable and follow any topic-specific fallback in the skill. Use bundled guidance only for stable constraints, and do not guess at changeable platform details.\n\nWhen a task requires multiple references, apply this workflow to each one and distinguish the documents you verified from those that remain unavailable.\n<!-- /shared:documentation-retrieval -->\n"
Full snapshot data
{
"description": "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.",
"included_files": [
{
"relative_path": "references/persistent-disks.md",
"size_in_bytes": 4586
}
],
"name": "render-disks",
"skill_md_contents": "---\nname: render-disks\ndescription: >-\n Attaches and manages persistent disks on Render services—mount paths, sizing,\n snapshots, file transfers, and single-instance constraints. Use when the user\n needs persistent storage, file uploads, a custom database on disk, CMS media\n storage, or needs to understand why their service can't scale horizontally\n or use zero-downtime deploys.\n Trigger terms: persistent disk, disk, storage, mount path, sizeGB, SSD,\n file uploads, snapshots, disk restore, ephemeral filesystem.\nlicense: MIT\ncompatibility: Render paid web services, private services, and background workers\nmetadata:\n author: Render\n version: \"1.0.0\"\n category: storage\n---\n\n# Render Persistent Disks\n\nPersistent disks preserve files written beneath a service's configured mount path across deploys and restarts.\n\nBefore designing, configuring, resizing, transferring data to, snapshotting, restoring, or troubleshooting a disk, read `references/persistent-disks.md`.\n\n## When to Use\n\n- Storing **file uploads**, CMS media, or user-generated content\n- Running a **self-managed database** (MySQL, MongoDB, ClickHouse) on Render\n- Deploying **stateful infrastructure** (Elasticsearch, Kafka, RabbitMQ, Mattermost)\n- Understanding **why scaling is blocked** or **zero-downtime deploys are disabled**\n- **Restoring data** from a disk snapshot\n\nFor managed databases, prefer **Render Postgres** (render-postgres) or **Key Value** (render-keyvalue) over self-managed alternatives on disk.\n\n## Core Decisions\n\n- Render's default filesystem is ephemeral. Only files written beneath a disk's mount path persist across deploys and restarts.\n- A disk-backed service is single-instance: it cannot use horizontal scaling or zero-downtime deploys.\n- If file storage must be shared by scaled instances, use external object storage such as S3 or R2. Use Render Postgres for relational data and Render Key Value for managed cache or queue state.\n- Choose the smallest current disk size that accommodates observed usage because capacity can increase but cannot decrease. For a small upload service, 1–5 GB is a reasonable starting range when supported by the current limits.\n\n## Blueprint Setup\n\nFor a native Node.js upload service, mount a subdirectory such as `/opt/render/project/src/uploads`, not the source root itself, and configure the application to write uploads there:\n\n```yaml\nservices:\n - type: web\n name: uploads\n runtime: node\n buildCommand: npm ci\n startCommand: npm start\n disk:\n name: uploads-data\n mountPath: /opt/render/project/src/uploads\n sizeGB: 5\n```\n\nFetch the current disk documentation and Blueprint specification through `references/persistent-disks.md` before finalizing the mount path or size.\n\n## Database Backups and File Recovery\n\nDo not use a disk snapshot to recover a self-managed database such as MySQL: a filesystem snapshot can restore an inconsistent or corrupted database state. Use database-native backups such as `mysqldump` and test their restore procedure. Move backup files off the service with a currently supported transfer method such as SCP with SSH or Magic-Wormhole. Snapshot restores replace the entire disk and permanently discard changes made after the selected snapshot.\n\n## References\n\n| Document | Contents |\n|----------|----------|\n| `references/persistent-disks.md` | Current disk constraints, configuration, sizing, snapshots, restores, and transfers |\n\n## Related Skills\n\n- **render-web-services** — Deploy lifecycle, health checks (disk disables zero-downtime)\n- **render-private-services** — Internal services with disks (Elasticsearch, MySQL)\n- **render-blueprints** — `disk` field reference in `render.yaml`\n- **render-postgres** — Managed database alternative (no disk management needed)\n\n<!-- shared:documentation-retrieval -->\n## Current documentation retrieval\n\nWhenever this skill directs you to consult current Render documentation:\n\n1. Retrieve the linked Markdown document directly with an available URL-fetching tool or HTTP client, such as `curl`. Do not substitute web-search summaries for the document.\n2. Confirm that retrieval succeeded and returned the expected document, then read its contents. Saving a file or printing its path is not sufficient.\n3. If the request fails or your tool cannot read the Markdown response, open and read the linked HTML version instead.\n4. If neither version can be retrieved, disclose that the current reference is unavailable and follow any topic-specific fallback in the skill. Use bundled guidance only for stable constraints, and do not guess at changeable platform details.\n\nWhen a task requires multiple references, apply this workflow to each one and distinguish the documents you verified from those that remain unavailable.\n<!-- /shared:documentation-retrieval -->\n"
}SHA-256 of public snapshot: 16239beb97afef3cdf6dd0f0e41e355af20ccae732c9c702fab0cb7f10471540