Push your ideas to the web
Create with AI or code, deploy instantly on production infrastructure. One platform to build and ship.
Build your way.
Ship on one platform.
Every path runs on the same workflow and production infrastructure, powering millions of sites and apps.
Start with code or AI
Start with a prompt, push from Git, or drag and drop. All paths lead to the same project.
Build fullstack apps
Connect APIs, manage data, optimize images, and add AI features from your first prompt.
Go live everywhere
Ship to a global CDN in seconds. Fast for every user, instantly.
I can push a change, and within 30 seconds the site is completely rebuilt.
For every kind of web app.
Build everything from marketing sites to AI apps on one platform.
Launch AI features with one gateway
Prototype, test, and scale AI-powered experiences faster. Product teams can iterate with agents while engineers productionize on the same platform.
- Prototype and ship AI features with Agent Runners
- Connect to OpenAI, Anthropic, and Gemini through AI Gateway
- Deploy backend logic as API endpoints with Serverless Functions
import OpenAI from "openai";
export default async (req: Request) => {
const { description } = await req.json();
const client = new OpenAI();
const res = await client.responses.create({
model: "gpt-5-mini",
input: [
{ role: "user", content: `Write concise alt text for: ${description}` },
],
});
return Response.json({ altText: res.output_text });
};
export const config = { path: "/api/alt-text" }; Launch fast and iterate faster
Run campaigns quickly, test changes safely, and let marketers and designers contribute directly with agents.
- Generate pages, update copy, and publish with Agent Runners
- Review every change before it goes live with Deploy Previews
- Optimize and serve images on demand with Image CDN
<!-- Resize an image to 800px wide -->
<img src="/.netlify/images?url=/hero.jpg&w=800"
alt="Optimized hero image">
<!-- Collect leads with zero config -->
<form name="waitlist" method="POST" data-netlify="true">
<label>Email: <input type="email" name="email" /></label>
<button type="submit">Join waitlist</button>
</form> Build fullstack apps without managing infrastructure
Prototype features quickly with agents and move them into production-ready code as you scale.
- Scaffold and iterate on features with Agent Runners
- Provision a production-grade database instantly with Netlify DB
- Scale your backend logic without managing servers with Serverless Functions
import { getStore } from "@netlify/blobs";
import type { Context } from "@netlify/functions";
import { v4 as uuid } from "uuid";
export default async (req: Request, context: Context) => {
// Accessing the request as `multipart/form-data`.
const form = await req.formData();
const file = form.get("file") as File;
// Generating a unique key for the entry.
const key = uuid();
const uploads = getStore("file-uploads");
await uploads.set(key, file, {
metadata: { country: context.geo.country.name }
});
return new Response("Submission saved");
}; Run fast storefronts at global scale
Test new experiences quickly and let teams iterate safely across merchandising, design, and engineering.
- Prototype landing pages and flows with Agent Runners
- Deliver sub-second page loads from 100+ locations with Edge Network
- Optimize product images on the fly with Image CDN
export default async (req: Request) => {
const res = await fetch(Netlify.env.get("STORE_API_URL"), {
headers: {
Authorization: `Bearer ${Netlify.env.get("STORE_API_TOKEN")}`,
},
});
const { products } = await res.json();
return Response.json(
products.map((p) => ({
id: p.id,
title: p.title,
price: p.variants[0].price,
image: `/.netlify/images?url=${p.image}&w=400`,
}))
);
};
export const config = { path: "/api/products" }; Create internal apps with less overhead
Build dashboards and workflow tools faster with contributions from ops, data, and product teams.
- Build and update internal tools from the dashboard with Agent Runners
- Connect to internal APIs and databases with Serverless Functions
- Manage permissions across your team with Access Controls
export default async (req: Request) => {
const { query } = await req.json();
const res = await fetch(Netlify.env.get("INTERNAL_API"), {
method: "POST",
headers: {
Authorization: `Bearer ${Netlify.env.get("INTERNAL_TOKEN")}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ query }),
});
return new Response(res.body, {
headers: { "Content-Type": "application/json" },
});
};
export const config = { path: "/api/internal" }; Start your way.
Choose the workflow that fits how you work.
npm i -g netlify-cli
netlify deploy --allow-anonymous