Netlify Deploy
Added March 5, 2026 Source: OpenAI
Deploys web projects to Netlify using the Netlify CLI. It handles authentication, links your project to a Netlify site (or creates one), and publishes it to preview or production. Use this when you need to quickly host or publish a web project.
Installation
This skill has dependencies (scripts or reference files). Install using the method below to make sure everything is in place.
npx skills add openai/skills --skill netlify-deployRequires Node.js 18+. The skills CLI auto-detects your editor and installs to the right directory.
Or install manually from the source repository.
SKILL.md (reference - install via npx or source for all dependencies)
---
name: netlify-deploy
description: Deploy web projects to Netlify using the Netlify CLI (`npx netlify`). Use when the user asks to deploy, host, publish, or link a site/repo on Netlify, including preview and production deploys.
---
# Netlify Deployment Skill
Deploy web projects to Netlify using the Netlify CLI with intelligent detection of project configuration and deployment context.
## Overview
This skill automates Netlify deployments by:
- Verifying Netlify CLI authentication
- Detecting project configuration and framework
- Linking to existing sites or creating new ones
- Deploying to production or preview environments
## Prerequisites
- **Netlify CLI**: Installed via npx (no global install required)
- **Authentication**: Netlify account with active login session
- **Project**: Valid web project in current directory
- When sandboxing blocks the deployment network calls, rerun with `sandbox_permissions=require_escalated`.
- The deployment might take a few minutes. Use appropriate timeout values.
## Authentication Pattern
The skill uses the **pre-authenticated Netlify CLI** approach:
1. Check authentication status with `npx netlify status`
2. If not authenticated, guide user through `npx netlify login`
3. Fail gracefully if authentication cannot be established
Authentication uses either:
- **Browser-based OAuth** (primary): `netlify login` opens browser for authentication
- **API Key** (alternative): Set `NETLIFY_AUTH_TOKEN` environment variable
## Workflow
### 1. Verify Netlify CLI Authentication
Check if the user is logged into Netlify:
```bash
npx netlify status
```
**Expected output patterns**:
- ✅ Authenticated: Shows logged-in user email and site link status
- ❌ Not authenticated: "Not logged into any site" or authentication error
**If not authenticated**, guide the user:
```bash
npx netlify login
```
This opens a browser window for OAuth authentication. Wait for user to complete login, then verify with `netlify status` again.
**Alternative: API Key authentication**
If browser authentication isn't available, users can set:
```bash
export NETLIFY_AUTH_TOKEN=your_token_here
```
Tokens can be generated at: https://app.netlify.com/user/applications#personal-access-tokens
### 2. Detect Site Link Status
From `netlify status` output, determine:
- **Linked**: Site already connected to Netlify (shows site name/URL)
- **Not linked**: Need to link or create site
### 3. Link to Existing Site or Create New
**If already linked** → Skip to step 4
**If not linked**, attempt to link by Git remote:
```bash
# Check if project is Git-based
git remote show origin
# If Git-based, extract remote URL
# Format: https://github.com/username/repo or [email protected]:username/repo.git
# Try to link by Git remote
npx netlify link --git-remote-url <REMOTE_URL>
```
**If link fails** (site doesn't exist on Netlify):
```bash
# Create new site interactively
npx netlify init
```
This guides user through:
1. Choosing team/account
2. Setting site name
3. Configuring build settings
4. Creating netlify.toml if needed
### 4. Verify Dependencies
Before deploying, ensure project dependencies are installed:
```bash
# For npm projects
npm install
# For other package managers, detect and use appropriate command
# yarn install, pnpm install, etc.
```
### 5. Deploy to Netlify
Choose deployment type based on context:
**Preview/Draft Deploy** (default for existing sites):
```bash
npx netlify deploy
```
This creates a deploy preview with a unique URL for testing.
**Production Deploy** (for new sites or explicit production deployments):
```bash
npx netlify deploy --prod
```
This deploys to the live production URL.
**Deployment process**:
1. CLI detects build settings (from netlify.toml or prompts user)
2. Builds the project locally
3. Uploads built assets to Netlify
4. Returns deployment URL
### 6. Report Results
After deployment, report to user:
- **Deploy URL**: Unique URL for this deployment
- **Site URL**: Production URL (if production deploy)
- **Deploy logs**: Link to Netlify dashboard for logs
- **Next steps**: Suggest `netlify open` to view site or dashboard
## Handling netlify.toml
If a `netlify.toml` file exists, the CLI uses it automatically. If not, the CLI will prompt for:
- **Build command**: e.g., `npm run build`, `next build`
- **Publish directory**: e.g., `dist`, `build`, `.next`
Common framework defaults:
- **Next.js**: build command `npm run build`, publish `.next`
- **React (Vite)**: build command `npm run build`, publish `dist`
- **Static HTML**: no build command, publish current directory
The skill should detect framework from `package.json` if possible and suggest appropriate settings.
## Example Full Workflow
```bash
# 1. Check authentication
npx netlify status
# If not authenticated:
npx netlify login
# 2. Link site (if needed)
# Try Git-based linking first
git remote show origin
npx netlify link --git-remote-url https://github.com/user/repo
# If no site exists, create new one:
npx netlify init
# 3. Install dependencies
npm install
# 4. Deploy (preview for testing)
npx netlify deploy
# 5. Deploy to production (when ready)
npx netlify deploy --prod
```
## Error Handling
Common issues and solutions:
**"Not logged in"**
→ Run `npx netlify login`
**"No site linked"**
→ Run `npx netlify link` or `npx netlify init`
**"Build failed"**
→ Check build command and publish directory in netlify.toml or CLI prompts
→ Verify dependencies are installed
→ Review build logs for specific errors
**"Publish directory not found"**
→ Verify build command ran successfully
→ Check publish directory path is correct
## 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 Netlify. I can rerun the command with escalated permissions—want me to proceed?
```
## Environment Variables
For secrets and configuration:
1. Never commit secrets to Git
2. Set in Netlify dashboard: Site Settings → Environment Variables
3. Access in builds via `process.env.VARIABLE_NAME`
## Tips
- Use `netlify deploy` (no `--prod`) first to test before production
- Run `netlify open` to view site in Netlify dashboard
- Run `netlify logs` to view function logs (if using Netlify Functions)
- Use `netlify dev` for local development with Netlify Functions
## Reference
- Netlify CLI Docs: https://docs.netlify.com/cli/get-started/
- netlify.toml Reference: https://docs.netlify.com/configure-builds/file-based-configuration/
## Bundled References (Load As Needed)
- [CLI commands](references/cli-commands.md)
- [Deployment patterns](references/deployment-patterns.md)
- [netlify.toml guide](references/netlify-toml.md)
---
## Companion Files
The following reference files are included for convenience:
### references/cli-commands.md
# Netlify CLI Commands Reference
Quick reference for common Netlify CLI commands used in deployments.
## Authentication
```bash
# Login via browser OAuth
npx netlify login
# Check authentication status and site link
npx netlify status
# Logout
npx netlify logout
```
## Site Management
```bash
# Link current directory to existing site
npx netlify link
# Link by Git remote URL
npx netlify link --git-remote-url <url>
# Create and link new site
npx netlify init
# Unlink from current site
npx netlify unlink
# Open site in Netlify dashboard
npx netlify open
# Open site admin panel
npx netlify open:admin
# Open site in browser
npx netlify open:site
```
## Deployment
```bash
# Deploy preview/draft (safe for testing)
npx netlify deploy
# Deploy to production
npx netlify deploy --prod
# Deploy with specific directory
npx netlify deploy --dir=dist
# Deploy with message
npx netlify deploy --message="Deploy message"
# List all deploys
npx netlify deploy:list
```
## Development
```bash
# Run local dev server with Netlify features
npx netlify dev
# Run local dev server on specific port
npx netlify dev --port 3000
```
## Site Information
```bash
# Get site info
npx netlify sites:list
# Get current site info
npx netlify api getSite --data '{"site_id": "YOUR_SITE_ID"}'
```
## Environment Variables
```bash
# List environment variables
npx netlify env:list
# Set environment variable
npx netlify env:set KEY value
# Get environment variable value
npx netlify env:get KEY
# Import env vars from file
npx netlify env:import .env
```
## Build
```bash
# Show build settings
npx netlify build --dry
# Run build locally
npx netlify build
```
## Functions (Serverless)
```bash
# List functions
npx netlify functions:list
# Invoke function locally
npx netlify functions:invoke FUNCTION_NAME
# Create new function
npx netlify functions:create FUNCTION_NAME
```
## Logs
```bash
# Stream function logs
npx netlify logs
# View logs for specific function
npx netlify logs:function FUNCTION_NAME
```
## Troubleshooting Commands
```bash
# Check CLI version
npx netlify --version
# Get help for any command
npx netlify help [command]
# Check status with verbose output
npx netlify status --verbose
```
## Exit Codes
- `0` - Success
- `1` - General error
- `2` - Authentication error
- `3` - Site not found
- `4` - Build failed
## Common Flags
- `--json` - Output as JSON
- `--silent` - Suppress output
- `--debug` - Show debug information
- `--force` - Skip confirmation prompts
## Resources
- Full CLI documentation: https://docs.netlify.com/cli/get-started/
- CLI GitHub repository: https://github.com/netlify/cli
### references/netlify-toml.md
# netlify.toml Configuration Reference
Configuration file for Netlify builds and deployments.
## Basic Structure
```toml
[build]
command = "npm run build"
publish = "dist"
```
## Build Settings
### Common Configuration
```toml
[build]
# Command to build your site
command = "npm run build"
# Directory to publish (relative to repo root)
publish = "dist"
# Functions directory
functions = "netlify/functions"
# Base directory (if not repo root)
base = "packages/frontend"
# Ignore builds for specific conditions
ignore = "git diff --quiet HEAD^ HEAD package.json"
```
## Environment Variables
```toml
[build.environment]
NODE_VERSION = "18"
NPM_FLAGS = "--prefix=/dev/null"
[context.production.environment]
NODE_ENV = "production"
```
## Framework Detection
Netlify auto-detects frameworks, but you can override:
### Next.js
```toml
[build]
command = "npm run build"
publish = ".next"
```
### React (Vite)
```toml
[build]
command = "npm run build"
publish = "dist"
```
### Vue
```toml
[build]
command = "npm run build"
publish = "dist"
```
### Astro
```toml
[build]
command = "npm run build"
publish = "dist"
```
### SvelteKit
```toml
[build]
command = "npm run build"
publish = "build"
```
## Redirects and Rewrites
```toml
[[redirects]]
from = "/old-path"
to = "/new-path"
status = 301
[[redirects]]
from = "/api/*"
to = "https://api.example.com/:splat"
status = 200
# SPA fallback (for client-side routing)
[[redirects]]
from = "/*"
to = "/index.html"
status = 200
```
## Headers
```toml
[[headers]]
for = "/*"
[headers.values]
X-Frame-Options = "DENY"
X-XSS-Protection = "1; mode=block"
Content-Security-Policy = "default-src 'self'"
[[headers]]
for = "/assets/*"
[headers.values]
Cache-Control = "public, max-age=31536000, immutable"
```
## Context-Specific Configuration
Deploy different settings per context:
```toml
# Production
[context.production]
command = "npm run build:prod"
[context.production.environment]
NODE_ENV = "production"
# Deploy previews
[context.deploy-preview]
command = "npm run build:preview"
# Branch deploys
[context.branch-deploy]
command = "npm run build:staging"
# Specific branch
[context.staging]
command = "npm run build:staging"
```
## Functions Configuration
```toml
[functions]
directory = "netlify/functions"
node_bundler = "esbuild"
[[functions]]
path = "/api/*"
function = "api"
```
## Build Plugins
```toml
[[plugins]]
package = "@netlify/plugin-lighthouse"
[plugins.inputs]
output_path = "reports/lighthouse.html"
[[plugins]]
package = "netlify-plugin-submit-sitemap"
[plugins.inputs]
baseUrl = "https://example.com"
sitemapPath = "/sitemap.xml"
```
## Edge Functions
```toml
[[edge_functions]]
function = "geolocation"
path = "/api/location"
```
## Processing
```toml
[build.processing]
skip_processing = false
[build.processing.css]
bundle = true
minify = true
[build.processing.js]
bundle = true
minify = true
[build.processing.html]
pretty_urls = true
[build.processing.images]
compress = true
```
## Common Patterns
### Single Page Application (SPA)
```toml
[build]
command = "npm run build"
publish = "dist"
[[redirects]]
from = "/*"
to = "/index.html"
status = 200
```
### Monorepo with Base Directory
```toml
[build]
base = "packages/web"
command = "npm run build"
publish = "dist"
```
### Multiple Redirects with Country-Based Routing
```toml
[[redirects]]
from = "/"
to = "/uk"
status = 302
conditions = {Country = ["GB"]}
[[redirects]]
from = "/"
to = "/us"
status = 302
conditions = {Country = ["US"]}
```
## Validation
Validate your netlify.toml:
```bash
npx netlify build --dry
```
## Resources
- Full configuration reference: https://docs.netlify.com/configure-builds/file-based-configuration/
- Framework-specific guides: https://docs.netlify.com/frameworks/
Originally by OpenAI, adapted here as an Agent Skills compatible SKILL.md.
Works with
Agent Skills format — supported by 20+ editors. Learn more