Render Deploy
OpenAIOfficialPublished by OpenAI
- Skill
- Tool integration
- Cloud and DevOps
- Apache-2.0
- Medium risk
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
The render-deploy skill streamlines the process of hosting applications on the Render cloud platform. It provides a structured workflow to analyze your codebase, generate necessary configuration files, and execute deployments. The skill supports two primary paths: the Blueprint method for complex, multi-service, or reproducible infrastructure setups, and the Direct Creation method for quick, single-service deployments via MCP tools. It includes comprehensive guidance on prerequisites, authentication, and post-deployment verification to ensure a smooth transition from local development to production.
What it does
- Analyzes codebases to detect frameworks, build commands, and infrastructure requirements.
- Generates render.yaml Blueprint files for Infrastructure-as-Code deployments.
- Facilitates direct service creation for web apps and static sites using MCP tools.
- Provides deep-linking to the Render Dashboard for final configuration and deployment.
- Verifies deployment status, logs, and service health metrics post-launch.
- Guides users through CLI authentication and workspace management.
When to use it
- When you need to deploy a new application or service to Render.
- When you want to define your infrastructure as code using a render.yaml file.
- When you need to set up complex environments including databases, workers, or cron jobs.
- When you want a quick, automated way to deploy a single web service or static site.
- When you need to troubleshoot or verify the health of an existing Render deployment.
Advantages
- Ensures reproducible deployments through version-controlled Blueprint configurations.
- Reduces manual setup time by automating resource creation and environment variable mapping.
- Provides a clear, step-by-step path for both simple and complex application architectures.
- Integrates directly with AI agent workflows for seamless interaction and command execution.
- Includes built-in validation to catch configuration errors before deployment.
Usage examples
- “Deploy my current project to Render.”
- The agent will analyze your repository, ask if you prefer a Blueprint or direct creation, and guide you through the necessary steps to get your app live.
- “Create a render.yaml file for my Node.js app with a Postgres database.”
- The agent will generate a valid Blueprint configuration tailored to your project's needs, including the database definition and required environment variables.
- “Check the status of my deployed service.”
- The agent will use MCP tools to list your recent deployments and check if the service is live, providing logs if any errors are detected.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/openai/render-deploy/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip render-deploy.zip -d .agents/skills
Documentation by OpenAI
Deploy to Render
Render supports Git-backed services and prebuilt Docker image services.
This skill covers Git-backed flows:
Blueprint Method - Generate render.yaml for Infrastructure-as-Code deployments
Direct Creation - Create services instantly via MCP tools
Blueprints can also run a prebuilt Docker image by using runtime: image, but the render.yaml still must live in a Git repo.
If there is no Git remote, stop and ask the user to either:
Create/push a Git remote (can be minimal if only the Blueprint is needed), or
Use the Render Dashboard/API to deploy a prebuilt Docker image (MCP cannot create image-backed services).
Prerequisites
When sandboxing blocks the deployment network calls, rerun with
sandbox_permissions=require_escalated.The deployment might take a few minutes. Use appropriate timeout values.
When to Use This Skill
Activate this skill when users want to:
Deploy an application to Render
Create a render.yaml Blueprint file
Set up Render deployment for their project
Host or publish their application on Render's cloud platform
Create databases, cron jobs, or other Render resources
Happy Path (New Users)
Use this short prompt sequence before deep analysis to reduce friction:
Ask whether they want to deploy from a Git repo or a prebuilt Docker image.
Ask whether Render should provision everything the app needs (based on what seems likely from the user's description) or only the app while they bring their own infra. If dependencies are unclear, ask a short follow-up to confirm whether they need a database, workers, cron, or other services.
Then proceed with the appropriate method below.
Choose Your Source Path
Git Repo Path: Required for both Blueprint and Direct Creation. The repo must be pushed to GitHub, GitLab, or Bitbucket.
Prebuilt Docker Image Path: Supported by Render via image-backed services. This is not supported by MCP; use the Dashboard/API. Ask for:
Image URL (registry + tag)
Registry auth (if private)
Service type (web/worker) and port
If the user chooses a Docker image, guide them to the Render Dashboard image deploy flow or ask them to add a Git remote (so you can use a Blueprint with runtime: image).
Choose Your Deployment Method (Git Repo)
Both methods require a Git repository pushed to GitHub, GitLab, or Bitbucket. (If using runtime: image, the repo can be minimal and only contain render.yaml.)
| Method | Best For | Pros |
|---|---|---|
| Blueprint | Multi-service apps, IaC workflows | Version controlled, reproducible, supports complex setups |
| Direct Creation | Single services, quick deployments | Instant creation, no render.yaml file needed |
Method Selection Heuristic
Use this decision rule by default unless the user requests a specific method. Analyze the codebase first; only ask if deployment intent is unclear (e.g., DB, workers, cron).
Use Direct Creation (MCP) when ALL are true:
Single service (one web app or one static site)
No separate worker/cron services
No attached databases or Key Value
Simple env vars only (no shared env groups) If this path fits and MCP isn't configured yet, stop and guide MCP setup before proceeding.
Use Blueprint when ANY are true:
Multiple services (web + worker, API + frontend, etc.)
Databases, Redis/Key Value, or other datastores are required
Cron jobs, background workers, or private services
You want reproducible IaC or a render.yaml committed to the repo
Monorepo or multi-env setup that needs consistent configuration
If unsure, ask a quick clarifying question, but default to Blueprint for safety. For a single service, strongly prefer Direct Creation via MCP and guide MCP setup if needed.
Prerequisites Check
When starting a deployment, verify these requirements in order:
1. Confirm Source Path (Git vs Docker)
If using Git-based methods (Blueprint or Direct Creation), the repo must be pushed to GitHub/GitLab/Bitbucket. Blueprints that reference a prebuilt image still require a Git repo with render.yaml.
git remote -vIf no remote exists, stop and ask the user to create/push a remote or switch to Docker image deploy.
2. Check MCP Tools Availability (Preferred for Single-Service)
MCP tools provide the best experience. Check if available by attempting:
list_services()If MCP tools are available, you can skip CLI installation for most operations.
3. Check Render CLI Installation (for Blueprint validation)
render --versionIf not installed, offer to install:
macOS:
brew install renderLinux/macOS:
curl -fsSL https://raw.githubusercontent.com/render-oss/cli/main/bin/install.sh | sh
4. MCP Setup (if MCP isn't configured)
If list_services() fails because MCP isn't configured, ask whether they want to set up MCP (preferred) or continue with the CLI fallback. If they choose MCP, ask which AI tool they're using, then provide the matching instructions below. Always use their API key.
Cursor
Walk the user through these steps:
Get a Render API key:
https://dashboard.render.com/u/*/settings#api-keysAdd this to
~/.cursor/mcp.json(replace<YOUR_API_KEY>):
{
"mcpServers": {
"render": {
"url": "https://mcp.render.com/mcp",
"headers": {
"Authorization": "Bearer <YOUR_API_KEY>"
}
}
}
}Restart Cursor, then retry
list_services().
Claude Code
Walk the user through these steps:
Get a Render API key:
https://dashboard.render.com/u/*/settings#api-keysAdd the MCP server with Claude Code (replace
<YOUR_API_KEY>):
claude mcp add --transport http render https://mcp.render.com/mcp --header "Authorization: Bearer <YOUR_API_KEY>"Restart Claude Code, then retry
list_services().
Codex
Walk the user through these steps:
Get a Render API key:
https://dashboard.render.com/u/*/settings#api-keysSet it in their shell:
export RENDER_API_KEY="<YOUR_API_KEY>"Add the MCP server with the Codex CLI:
codex mcp add render --url https://mcp.render.com/mcp --bearer-token-env-var RENDER_API_KEYRestart Codex, then retry
list_services().
Other Tools
If the user is on another AI app, direct them to the Render MCP docs for that tool's setup steps and install method.
Workspace Selection
After MCP is configured, have the user set the active Render workspace with a prompt like:
Set my Render workspace to [WORKSPACE_NAME]5. Check Authentication (CLI fallback only)
If MCP isn't available, use the CLI instead and verify you can access your account:
# Check if user is logged in (use -o json for non-interactive mode)
render whoami -o jsonIf render whoami fails or returns empty data, the CLI is not authenticated. The CLI won't always prompt automatically, so explicitly prompt the user to authenticate:
If neither is configured, ask user which method they prefer:
API Key (CLI):
export RENDER_API_KEY="rnd_xxxxx"(Get from https://dashboard.render.com/u/*/settings#api-keys)Login:
render login(Opens browser for OAuth)
6. Check Workspace Context
Verify the active workspace:
get_selected_workspace()Or via CLI:
render workspace current -o jsonTo list available workspaces:
list_workspaces()If user needs to switch workspaces, they must do so via Dashboard or CLI (render workspace set).
Once prerequisites are met, proceed with deployment workflow.
Method 1: Blueprint Deployment (Recommended for Complex Apps)
Blueprint Workflow
Step 1: Analyze Codebase
Analyze the codebase to determine framework/runtime, build and start commands, required env vars, datastores, and port binding. Use the detailed checklists in references/codebase-analysis.md.
Step 2: Generate render.yaml
Create a render.yaml Blueprint file following the Blueprint specification.
Complete specification: references/blueprint-spec.md
Key Points:
Always use
plan: freeunless user specifies otherwiseInclude ALL environment variables the app needs
Mark secrets with
sync: false(user fills these in Dashboard)Use appropriate service type:
web,worker,cron,static, orpservUse appropriate runtime: references/runtimes.md
Basic Structure:
services:
- type: web
name: my-app
runtime: node
plan: free
buildCommand: npm ci
startCommand: npm start
envVars:
- key: DATABASE_URL
fromDatabase:
name: postgres
property: connectionString
- key: JWT_SECRET
sync: false # User fills in Dashboard
databases:
- name: postgres
databaseName: myapp_db
plan: freeService Types:
web: HTTP services, APIs, web applications (publicly accessible)worker: Background job processors (not publicly accessible)cron: Scheduled tasks that run on a cron schedulestatic: Static sites (HTML/CSS/JS served via CDN)pserv: Private services (internal only, within same account)
Service type details: references/service-types.md Runtime options: references/runtimes.md Template examples: assets/
Step 2.5: Immediate Next Steps (Always Provide)
After creating render.yaml, always give the user a short, explicit checklist and run validation immediately when the CLI is available:
Authenticate (CLI): run
render whoami -o json(if not logged in, runrender loginor setRENDER_API_KEY)Validate (recommended): run
render blueprints validateIf the CLI isn't installed, offer to install it and provide the command.
Commit + push:
git add render.yaml && git commit -m "Add Render deployment configuration" && git push origin mainOpen Dashboard: Use the Blueprint deeplink and complete Git OAuth if prompted
Fill secrets: Set env vars marked
sync: falseDeploy: Click "Apply" and monitor the deploy
Step 3: Validate Configuration
Validate the render.yaml file to catch errors before deployment. If the CLI is installed, run the commands directly; only prompt the user if the CLI is missing:
render whoami -o json # Ensure CLI is authenticated (won't always prompt)
render blueprints validateFix any validation errors before proceeding. Common issues:
Missing required fields (
name,type,runtime)Invalid runtime values
Incorrect YAML syntax
Invalid environment variable references
Configuration guide: references/configuration-guide.md
Step 4: Commit and Push
IMPORTANT: You must merge the render.yaml file into your repository before deploying.
Ensure the render.yaml file is committed and pushed to your Git remote:
git add render.yaml
git commit -m "Add Render deployment configuration"
git push origin mainIf there is no Git remote yet, stop here and guide the user to create a GitHub/GitLab/Bitbucket repo, add it as origin, and push before continuing.
Why this matters: The Dashboard deeplink will read the render.yaml from your repository. If the file isn't merged and pushed, Render won't find the configuration and deployment will fail.
Verify the file is in your remote repository before proceeding to the next step.
Step 5: Generate Deeplink
Get the Git repository URL:
git remote get-url originThis will return a URL from your Git provider. If the URL is SSH format, convert it to HTTPS:
| SSH Format | HTTPS Format |
|---|---|
[email protected]:user/repo.git | https://github.com/user/repo |
[email protected]:user/repo.git | https://gitlab.com/user/repo |
[email protected]:user/repo.git | https://bitbucket.org/user/repo |
Conversion pattern: Replace git@<host>: with https://<host>/ and remove .git suffix.
Format the Dashboard deeplink using the HTTPS repository URL:
https://dashboard.render.com/blueprint/new?repo=<REPOSITORY_URL>Example:
https://dashboard.render.com/blueprint/new?repo=https://github.com/username/repo-nameStep 6: Guide User
CRITICAL: Ensure the user has merged and pushed the render.yaml file to their repository before clicking the deeplink. If the file isn't in the repository, Render cannot read the Blueprint configuration and deployment will fail.
Provide the deeplink to the user with these instructions:
Verify render.yaml is merged - Confirm the file exists in your repository on GitHub/GitLab/Bitbucket
Click the deeplink to open Render Dashboard
Complete Git provider OAuth if prompted
Name the Blueprint (or use default from render.yaml)
Fill in secret environment variables (marked with
sync: false)Review services and databases configuration
Click "Apply" to deploy
The deployment will begin automatically. Users can monitor progress in the Render Dashboard.
Step 7: Verify Deployment
After the user deploys via Dashboard, verify everything is working.
Check deployment status via MCP:
list_deploys(serviceId: "<service-id>", limit: 1)Look for status: "live" to confirm successful deployment.
Check for runtime errors (wait 2-3 minutes after deploy):
list_logs(resource: ["<service-id>"], level: ["error"], limit: 20)Check service health metrics:
get_metrics(
resourceId: "<service-id>",
metricTypes: ["http_request_count", "cpu_usage", "memory_usage"]
)If errors are found, proceed to the Post-deploy verification and basic triage section below.
Method 2: Direct Service Creation (Quick Single-Service Deployments)
For simple deployments without Infrastructure-as-Code, create services directly via MCP tools.
When to Use Direct Creation
Single web service or static site
Quick prototypes or demos
When you don't need a render.yaml file in your repo
Adding databases or cron jobs to existing projects
Prerequisites for Direct Creation
Repository must be pushed to a Git provider. Render clones your repository to build and deploy services.
git remote -v # Verify remote exists
git push origin main # Ensure code is pushedSupported providers: GitHub, GitLab, Bitbucket
If no remote exists, stop and ask the user to create/push a remote or switch to Docker image deploy.
Note: MCP does not support creating image-backed services. Use the Dashboard/API for prebuilt Docker image deploys.
Direct Creation Workflow
Use the concise steps below, and refer to references/direct-creation.md for full MCP command examples and follow-on configuration.
Step 1: Analyze Codebase
Use references/codebase-analysis.md to determine runtime, build/start commands, env vars, and datastores.
Step 2: Create Resources via MCP
Create the service (web or static) and any required databases or key-value stores. See references/direct-creation.md.
If MCP returns an error about missing Git credentials or repo access, stop and guide the user to connect their Git provider in the Render Dashboard, then retry.
Step 3: Configure Environment Variables
Add required env vars via MCP after creation. See references/direct-creation.md.
Remind the user that secrets can be set in the Dashboard if they prefer not to pass them via MCP.
Step 4: Verify Deployment
Check deploy status, logs, and metrics. See references/direct-creation.md.
For service discovery, configuration details, quick commands, and common issues, see references/deployment-details.md.
Post-deploy verification and basic triage (All Methods)
Keep this short and repeatable. If any check fails, fix it before redeploying.
Confirm the latest deploy is
liveand serving trafficHit the health endpoint (or root) and verify a 200 response
Scan recent error logs for a clear failure signature
Verify required env vars and port binding (
0.0.0.0:$PORT)
Detailed checklist and commands: references/post-deploy-checks.md
If the service fails to start or health checks time out, use the basic triage guide: references/troubleshooting-basics.md
Troubleshooting
Escalated Network Access
If deployment fails due to network issues (timeouts, DNS errors, connection resets), rerun the deploy with escalated permissions (use sandbox_permissions=require_escalated). The deploy requires escalated network access when sandbox networking blocks outbound requests.
Example guidance to the user:
The deploy needs escalated network access to deploy to Render. I can rerun the command with escalated permissions—want me to proceed?Optional: If you need deeper diagnostics (metrics/DB checks/error catalog), suggest installing the
render-debug skill. It is not required for the core deploy flow.
Files
- ATTRIBUTION.mdAdded by AutoGineer878 B
- LICENSE.txt10.5 KiB
- SKILL.md17.2 KiB
- agents/openai.yaml480 B
- assets/docker.yaml1.4 KiB
- assets/go-api.yaml848 B
- assets/nextjs-postgres.yaml870 B
- assets/node-express.yaml619 B
- assets/python-django.yaml2.5 KiB
- assets/render-small.svg553 B
- assets/render.png911 B
- assets/static-site.yaml1.3 KiB
- references/blueprint-spec.md15.6 KiB
- references/codebase-analysis.md2.2 KiB
- references/configuration-guide.md11.5 KiB
- references/deployment-details.md5.2 KiB
- references/direct-creation.md2.7 KiB
- references/error-patterns.md833 B
- references/post-deploy-checks.md1.0 KiB
- references/runtimes.md9.6 KiB
- references/service-types.md11.1 KiB
- references/troubleshooting-basics.md1.3 KiB
references/service-types.md
Render Service Types
Detailed explanation of each service type available on Render. Choose the right service type based on your application's needs.
Web Services (type: web)
Purpose
Web services are HTTP servers that handle incoming requests from the internet. They're publicly accessible via HTTPS URLs.
Use Cases
REST APIs: JSON APIs for mobile apps or frontend applications
GraphQL servers: GraphQL endpoints for client queries
Web applications: Server-rendered websites (Django, Rails, Express)
Full-stack frameworks: Next.js, Nuxt.js, Remix, SvelteKit
WebSocket servers: Real-time communication servers
SSR applications: Server-side rendered React, Vue, or Angular apps
Key Characteristics
Public URL: Automatically assigned
https://[service-name].onrender.comPort binding required: Must bind to
0.0.0.0:$PORTHealth checks: Render pings your service to verify it's running
HTTPS: Automatic SSL/TLS certificates
Load balancing: Traffic distributed across multiple instances
Custom domains: Support for your own domain names
Required Configuration
type: web
name: my-api
runtime: node
buildCommand: npm ci
startCommand: npm startBest Practices
Bind to environment PORT:
const PORT = process.env.PORT || 3000;
app.listen(PORT, '0.0.0.0');Add health check endpoint:
app.get('/health', (req, res) => {
res.status(200).json({ status: 'ok' });
});Use appropriate timeouts: Web requests should complete within 30 seconds
Implement graceful shutdown: Handle SIGTERM signals properly
Worker Services (type: worker)
Purpose
Worker services run background tasks without handling HTTP requests. They're not publicly accessible.
Use Cases
Queue processors: Redis queue, BullMQ, Celery, Sidekiq
Background jobs: Email sending, image processing, data exports
Event consumers: Message queue consumers (Kafka, RabbitMQ, etc.)
Data pipeline workers: ETL processes, data transformation
Scheduled background tasks: Continuous processes (not cron)
WebSocket backend: Dedicated WebSocket handler services
Key Characteristics
No public URL: Not accessible from internet
No port binding: Doesn't need to listen on a port
No health checks: Render monitors process health differently
Long-running: Can run indefinitely
Private communication: Access via internal networking
Restart on crash: Automatically restarted if process dies
Required Configuration
type: worker
name: queue-processor
runtime: python
buildCommand: pip install -r requirements.txt
startCommand: celery -A tasks worker --loglevel=infoBest Practices
Connect to message queue:
import redis
r = redis.from_url(os.environ['REDIS_URL'])Implement retry logic: Handle failures gracefully
Monitor queue depth: Track pending jobs
Log processing status: Make debugging easier
Graceful shutdown: Finish current jobs before exiting
Common Patterns
Node.js with BullMQ:
type: worker
name: job-processor
runtime: node
buildCommand: npm ci
startCommand: node worker.js
envVars:
- key: REDIS_URL
fromDatabase:
name: redis
property: connectionStringPython with Celery:
type: worker
name: celery-worker
runtime: python
buildCommand: pip install -r requirements.txt
startCommand: celery -A app.celery worker
envVars:
- key: REDIS_URL
fromDatabase:
name: redis
property: connectionStringCron Jobs (type: cron)
Purpose
Cron jobs run scheduled tasks on a repeating schedule. They execute, complete, and shut down.
Use Cases
Database backups: Regular automated backups
Report generation: Daily/weekly reports
Data cleanup: Delete old records periodically
Cache warming: Pre-populate caches
Email digests: Send scheduled email summaries
Data synchronization: Sync between systems
Batch processing: Process accumulated data
Key Characteristics
Scheduled execution: Runs on cron schedule
Automatic shutdown: Shuts down after completing
No persistent port: Doesn't maintain listening port
No health checks: Task either completes or fails
UTC timezone: All schedules in UTC
Maximum runtime: Jobs timeout after configured limit
Required Configuration
type: cron
name: daily-backup
runtime: node
schedule: "0 2 * * *" # Daily at 2 AM UTC
buildCommand: npm ci
startCommand: node scripts/backup.jsSchedule Format
Standard cron syntax: minute hour day month weekday
Common schedules:
| Schedule | Description |
|---|---|
*/5 * * * * | Every 5 minutes |
0 * * * * | Every hour |
0 0 * * * | Daily at midnight UTC |
0 9 * * 1-5 | Weekdays at 9 AM UTC |
0 0 1 * * | First day of each month |
0 9 * * 1 | Every Monday at 9 AM UTC |
Best Practices
Handle failures gracefully: Jobs should be idempotent
Log completion status: Track success/failure
Set appropriate timeouts: Match expected job duration
Use UTC times: All schedules are UTC-based
Test thoroughly: Test with different data scenarios
Example Use Cases
Daily Database Backup:
type: cron
name: db-backup
runtime: python
schedule: "0 1 * * *" # 1 AM UTC daily
buildCommand: pip install -r requirements.txt
startCommand: python scripts/backup.py
envVars:
- key: DATABASE_URL
fromDatabase:
name: postgres
property: connectionString
- key: S3_BUCKET
value: my-backupsHourly Cache Refresh:
type: cron
name: cache-refresh
runtime: node
schedule: "0 * * * *" # Top of every hour
buildCommand: npm ci
startCommand: node scripts/refresh-cache.jsStatic Sites (type: web + runtime: static)
Purpose
Serve static HTML, CSS, and JavaScript files via CDN. No backend runtime.
Use Cases
Single Page Applications (SPAs): React, Vue, Angular apps
Static site generators: Gatsby, Next.js (static export), Hugo
Documentation sites: MkDocs, Docusaurus, VitePress
Landing pages: Marketing sites
Portfolio sites: Personal websites
JAMstack sites: Static sites with API integration
Key Characteristics
CDN delivery: Global edge caching
No backend runtime: Only serves built files
Build output only: Serves contents of build directory
Routing support: Rewrite rules for SPA routing
Custom headers: Cache control, security headers
Fast deployment: Quick to build and deploy
Required Configuration
type: web
name: frontend
runtime: static
buildCommand: npm ci && npm run build
staticPublishPath: ./dist # or ./build, ./out, ./publicRouting for SPAs
Single Page Applications need rewrite rules to handle client-side routing:
type: web
name: react-app
runtime: static
buildCommand: npm ci && npm run build
staticPublishPath: ./build
routes:
- type: rewrite
source: /*
destination: /index.htmlCustom Headers
Add cache control and security headers:
type: web
name: static-site
runtime: static
buildCommand: npm ci && npm run build
staticPublishPath: ./dist
headers:
# Cache static assets
- path: /static/*
name: Cache-Control
value: public, max-age=31536000, immutable
# Security headers
- path: /*
name: X-Frame-Options
value: DENY
- path: /*
name: X-Content-Type-Options
value: nosniffBuild Filters
For monorepos, only build when frontend files change:
type: web
name: frontend
runtime: static
buildCommand: npm ci && npm run build
staticPublishPath: ./dist
buildFilter:
paths:
- frontend/**
ignoredPaths:
- frontend/**/*.test.js
- frontend/README.mdBest Practices
Optimize build output: Minify, compress, tree-shake
Use proper cache headers: Long cache for hashed assets
Add security headers: Protect against common attacks
Configure SPA routing: Add rewrite rules for client routing
Handle 404s: Create custom 404.html page
Private Services (type: pserv)
Purpose
Internal services accessible only within your Render account. Not exposed to the internet.
Use Cases
Internal APIs: Services accessed only by other services
Database proxies: Connection pools, read replicas
Microservices: Service mesh architectures
Admin tools: Internal dashboards
Cache layers: Internal caching services
Message brokers: Internal message queues
Key Characteristics
No public URL: Only accessible via internal DNS
Internal networking: Fast, low-latency connections
Port binding required: Must bind to
0.0.0.0:$PORTPrivate DNS:
[service-name].render-internal.comSame-account only: Only accessible from same account
No internet access: Traffic stays within Render network
Required Configuration
type: pserv
name: internal-api
runtime: node
buildCommand: npm ci
startCommand: npm startAccessing Private Services
From other services in the same account:
// Use .render-internal.com domain
const API_URL = 'http://internal-api.render-internal.com:10000';Or use service references:
services:
- type: web
name: frontend
runtime: node
envVars:
- key: INTERNAL_API_URL
fromService:
name: internal-api
type: pserv
property: hostportBest Practices
Use internal DNS: Always use
.render-internal.comdomainsNo authentication needed: Already isolated to account
Fast communication: Low latency between services
Simplify architecture: No need for external load balancers
Comparison Table
| Feature | Web | Worker | Cron | Static | Private |
|---|---|---|---|---|---|
| Public URL | ✅ Yes | ❌ No | ❌ No | ✅ Yes | ❌ No |
| Port Binding | ✅ Required | ❌ Not needed | ❌ Not needed | ❌ N/A | ✅ Required |
| Health Checks | ✅ Yes | ❌ No | ❌ No | ❌ N/A | ✅ Yes |
| Runtime | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes |
| Persistent | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes | ✅ Yes |
| Scaling | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes | ✅ Yes |
| Use Case | HTTP servers | Background jobs | Scheduled tasks | Static files | Internal services |
Choosing the Right Service Type
Use Web Service when:
Your app handles HTTP requests
Users need to access it via URL
You need load balancing and scaling
Use Worker Service when:
Processing background jobs
Consuming from message queues
Running long-lived processes without HTTP
Use Cron Job when:
Running scheduled tasks
Processing doesn't need to be always-on
Tasks run periodically (hourly, daily, weekly)
Use Static Site when:
Serving pre-built HTML/CSS/JS
No backend processing needed
Want CDN caching and fast delivery
Use Private Service when:
Service only accessed by other services
Want internal-only communication
Building microservice architectures
Requirements and compatibility
Written for: OpenAI Codex
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs an MCP server, Needs network access, Needs an API key, Needs a command-line tool, Needs Node.js
Security
What our scanner noticed· Medium risk
- Instructions that use the network
- Downloads piped into a shell
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- OpenAI
- Publisher
- OpenAI (Official)
- Source
- openai/skills · skills/.curated/render-deploy · commit 49f948f
- Licence
- Apache License 2.0 (redistribution allowed)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by OpenAI or OpenAI.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download render-deploy.zip