Publish a Local Website Folder with Netlify
Table of Contents
- Publish a folder from your computer, no Git required
- Before you start
- 1. Sign in to Netlify
- 2. Drag the folder onto Netlify
- 3. Test the live site
- 4. Add a domain and forms
- 5. Protect it before you share a private preview
- 6. Update the site at the same URL
- Use the Netlify CLI for repeat updates
- Prefer Cloudflare? Use Pages Direct Upload
- Checklist
- Publish a folder from your computer, no Git required
- Before you start
- 1. Sign in to Netlify
- 2. Drag the folder onto Netlify
- 3. Test the live site
- 4. Add a domain and forms
- 5. Protect it before you share a private preview
- 6. Update the site at the same URL
- Use the Netlify CLI for repeat updates
- Prefer Cloudflare? Use Pages Direct Upload
- Checklist
Publish a folder from your computer, no Git required
Netlify can publish a finished website folder directly from your computer. You drag the folder into the browser and get a live URL. This method suits a one-page portfolio or a static export from an AI tool. It also suits a vibe-coded site that you want to show a client. A vibe-coded site is a site that you build mostly by prompting an AI.
In short, make sure that index.html is at the top of the folder. Sign in to Netlify and drag the folder onto the deploy drop zone. Then test the netlify.app address in a private window. To update the site, drag the new folder onto the same project’s Deploys page, or use the Netlify CLI. The URL stays the same.
Before you start
Prepare the folder that you want people to open. For a plain static site, it usually looks like this:
my-site/
├── index.html
├── styles.css
├── script.js
└── assets/
If you used a framework, first run its production build. Then use the output folder, which is often dist, build, or out. Drop the output, not the source folder.
Before you upload the folder, make sure that:
index.htmlis at the top level, not inside another folder.- Every referenced image, font, script, and data file is inside the folder.
- There are no
.envfiles, API keys,node_modules, or unrelated working files.
Preview the folder locally first. From inside the folder, run python3 -m http.server 8000. Then open http://localhost:8000. If you open index.html directly from disk, broken paths can stay hidden.
1. Sign in to Netlify
Create a Netlify account or sign in. If you sign in first, the new project stays under your team. You can then update it, add a domain, and protect it later.
2. Drag the folder onto Netlify
Open Netlify Drop, or scroll to the drag-and-drop area at the bottom of your team’s Projects page. Drag the whole folder onto the drop zone. If you have a ZIP file, unzip it first (Netlify deploy docs).
Keep the folder structure as it is. If you move CSS, JavaScript, or images out of their folders, relative links break.
When the upload finishes, Netlify creates the project and gives it an address on netlify.app.
Netlify’s docs say that Netlify can detect the framework and build the project. This happens when you are signed in and drop a project that still needs a build step. To avoid surprises, build locally and drop the finished output.
3. Test the live site
Open the new address in a private browser window. Test these items:
- The homepage, navigation, and every link
- Images, fonts, styles, and scripts
- Downloads and buttons
- A direct reload on a nested page, such as
/about/ - The layout on a phone
A single-page app (one HTML file that JavaScript turns into many pages) can return a 404 for nested URLs on reload. In that case, add a file named _redirects (no extension) to the top of the folder. Put this line in the file. Then upload the folder again (Netlify rewrites):
/* /index.html 200
Fix any missing files locally. Then upload the corrected folder to the same project (step 6).
4. Add a domain and forms
To use your own domain, open the project. Go to Domain management > Production domains > Add a domain. Choose Add a domain you already own. Then follow the DNS steps (Netlify quickstart).
A static HTML form does nothing on its own. Netlify Forms can receive the submissions. Under Forms, select Enable form detection. Add data-netlify="true" and a name attribute to the <form> tag. Then upload the folder again. Submissions appear in the project’s dashboard, and you can add an email notification for each one (Netlify Forms setup).
5. Protect it before you share a private preview
A new netlify.app address is public unless your team makes new projects private by default. For client previews, set access before you send the link:
- Password protection gives one shared password. It is available on Pro plans and above. Find it under Visitor access in the project’s general configuration. On credit-based Pro plans, it is part of Project visibility (Netlify password docs).
- On credit-based plans, a private project already requires visitors to sign in with Netlify credentials. This option suits teammates, not clients.
- Team login protection lets visitors sign in with their Netlify team account. It is available on Enterprise plans.
Before you share the link, test the access control in a private window. Our guide on how to password protect a Netlify site gives more options.
6. Update the site at the same URL
Change the files locally. If the site has a build step, build it again. Then drag the updated folder onto the drop zone at the bottom of the project’s Deploys page. The project keeps its URL. When the deploy finishes, visitors see the new version.
Every deploy stays in the list. If an update breaks something, open an earlier successful deploy. Select Publish deploy to make it live again (Netlify manage deploys).
Use the Netlify CLI for repeat updates
If you update the same site often, the command line is faster than drag and drop. Run these commands to install the CLI (it needs Node.js) and sign in:
npm install -g netlify-cli
netlify login
From the parent folder of your site, deploy a draft first. On the first run, the CLI asks you to pick an existing project or create a new one. It remembers the choice:
netlify deploy --dir=my-site
Open the draft URL that the CLI prints. Make sure that the draft works. Then publish to the live site:
netlify deploy --dir=my-site --prod
See the Netlify CLI guide for more options.
Prefer Cloudflare? Use Pages Direct Upload
Cloudflare Pages also publishes a local folder without Git:
- In the Cloudflare dashboard, go to Workers & Pages. Select Create application, then Get started, then Drag and drop your files.
- Name the project. Drop the folder or a ZIP, and deploy.
- For later updates, open the project and select Create a new deployment.
Drag and drop accepts up to 1,000 files, and each file can be up to 25 MiB. For larger sites, use the Wrangler command npx wrangler pages deploy my-site. You cannot switch a project of this type to Git deployments later (Cloudflare Direct Upload). For private previews, Cloudflare Access can require each visitor to enter a one-time code. Cloudflare sends the code to an approved email address.
Checklist
| Check | Ready when |
|---|---|
| Entry page | index.html opens at the site root |
| Files | CSS, scripts, images, and fonts load |
| Routes | Nested pages load on a direct reload |
| Access | The site is public, or the password or sign-in screen works |
| Mobile | Main pages fit a phone screen |
| Updates | A new upload keeps the same URL |
A docs portal with Ask AI
and support tickets
Connect a repository, or describe your product to start. Each docs site has search, Ask AI, an API console, an MCP server and support tickets.
- Publishes from GitHub on every push
- Works with Mintlify repositories
- API console from your OpenAPI file
- MCP server and llms.txt for AI agents
- Ask AI and support tickets
- Analytics for people and AI agents
Related Articles

Add a Custom Domain to a Cloudflare Pages Site
Add a custom domain or www to a Cloudflare Pages site: set it up in Pages first, add the DNS record, fix stuck verification and redirect www.

What Is localhost:3000?
Your browser uses localhost:3000 to reach an app running on your own computer. Sending that address to someone else does not give them access to your app.

Move Exported Grok Website Files to Another Host
Export a Grok Build site to GitHub, deploy it on Cloudflare Pages, Netlify, Vercel or GitHub Pages, test it, then retire the grok.me copy.