# Gemini hosting: from Canvas to a link you own

Gemini Canvas previews the web page it wrote, and its documented export options go to Docs, Slides and Colab. There is no documented HTML download, so the route out is Copy code, save the file, upload it. That takes about a minute and the result is yours.

## What Gemini outputs

Code inside Canvas, with a preview beside it. Google's own Canvas documentation describes generating and previewing HTML and React code for web app prototypes, and asking for changes to see the preview update.

What that documentation does not describe is a way to download the result as an HTML file. The export options it names go to Google's own tools: Export to Docs, Export to Slides, and Export to Colab for Python. For code the documented action is Copy code. So the honest route out of Canvas is a copy and a paste into a text editor, which takes about a minute and produces a file you own outright rather than a preview that lives inside a chat.

Once that file exists the rest is ordinary. A self-contained HTML page publishes as it is. A React component saved as a .jsx file publishes without a build, transformed in the visitor browser using React and a JSX runtime served from our own edge. If the answer spanned several files or imported packages you would have to install, it is a project rather than a page, and it needs its build run first.

## Which of the two paths you are on

The Canvas preview does not tell you this; the top of the code does. Read the imports.

### One file, no build

A complete HTML page, or a React component that imports nothing but React. Either is a single file and a single upload.

- Save the HTML as index.html. That name is what makes it the page the address serves.
- Save a component as .jsx or .tsx and upload it on its own.
- Tailwind classes work on both paths; a Tailwind runtime is served from our own edge.
- The HTML tester renders pasted markup, which is a quick way to confirm the copy came out whole.

### Several files, one build first

Canvas described a project, or the code imports from files and packages that are not in the block.

- Create the project locally, install what it imports, and run its build.
- Upload the folder the build produced, as a folder or zipped.
- Guides for 23 frameworks, each naming the command and the folder.
- Packages beyond React are not fetched from a public CDN for your visitors, so this path is not optional once they appear.

## Getting the code out of Gemini Canvas

Google documents Copy code as the action for code in Canvas, and its documented exports go to Docs, Slides and Colab. These steps use the copy route, because it is the one the documentation actually describes for web code.

1. **Open the Canvas with your page in it.** Canvas is where the code and its preview sit side by side. The preview is not a hosted page; it is a rendering inside the product.
2. **Copy the code.** Google documents opening More at the top of the Canvas panel and choosing Copy code. Share and export options live under Share & export at the top right, and go to Docs, Slides or Colab rather than to a file.
3. **Paste it into a text editor and save as index.html.** The file name is not cosmetic. index.html is the file served at the root of the address; a page saved under any other name will not be the one visitors land on.
4. **Open the file locally to check the copy is whole.** A copy that stopped short is the most common problem with this route, and it shows up immediately: the page opens half-rendered or the console reports an unclosed tag.
5. **Upload it and pick a name.** Drop the file here, choose the subdomain, and the page is live over HTTPS at an address that does not depend on a Gemini share link.

Source: Canvas behaviour from Google's own documentation at support.google.com/gemini/answer/16047321, read 8 September 2026, which documents Copy code at the top of the Canvas panel, Share & export at the top right with Export to Docs and Export to Slides, Export to Colab for Python, and generating and previewing HTML and React web app prototypes. That article documents no direct HTML file download. Product interfaces can change.

## What breaks, and why

Because the route out of Canvas is a copy rather than a download, the first failure below is specific to this tool and worth checking before anything else.

### The published page is cut off halfway down

Why: The copy did not take the whole document. This happens when text is selected by hand in the Canvas panel instead of using the documented Copy code action, and it is invisible until the page renders.

Fix: Copy again with Copy code, then open the saved file locally before uploading. A page that ends mid-tag in your own browser will end mid-tag at the address too.

### It looked right in the Canvas preview and is broken once published

Why: The preview renders inside Google's own environment, which is not the same as a plain browser opening a plain file. Anything the preview supplied for the code, rather than the code supplying for itself, is missing once the file stands alone.

Fix: Open the saved file directly in your browser before uploading. What you see there is what the published address will serve, with no environment around it.

### Every route except the home page returns a 404

Why: The app routes in the browser, so /about exists only once JavaScript has run. A static host asked for /about looks for a file at that path, does not find one, and answers 404 before your code loads.

Fix: Turn on the Single-page app switch in the site settings. Unknown paths are then served the root index.html and the client router takes over. Free on every plan, applied without a redeploy, and off by default because a multi-page site wants real 404s.

### The API keys the tool wrote into the code are now public

Why: AI tools fill in the value they can see, and a key in front-end code is readable by anyone who opens the page. No host can fix that: a published page is public by definition.

Fix: The deploy-time security check names the key it found. Rotate it, then move the call behind something that can hold a secret. Every plan, free included, and it never blocks the publish.

## What the free plan includes

Turning a Canvas preview into a real address costs nothing, and the free plan is a plan rather than a trial with a countdown.

- 1 live site on a real free plan, not a trial of a paid one, with HTTPS and no card to start.
- Up to 25 MB per upload and 25 MB of storage across the account.
- 5,000 visits and 5 GB of traffic a month.
- Up to 25 publishes a day, which is the number that matters when you are regenerating.
- The Single-page app switch, so a client-routed build works without paying for anything.
- The deploy-time security check, which warns about a stray .env file, a .git folder, a private key or an API key left in your JavaScript.
- A small Droply badge in the corner of the page. Removing it starts on Starter.
- Free sites are served noindex, so search engines do not list them. Search visibility starts on Starter.

## How this compares with the other host built for AI output

Static.app has a Gemini page of its own. These rows come from what its published pricing and its own documentation state.

- **A single file copied out of a chat.** Droply: Dropped as it is, with nothing around it. Static.app: Must be zipped first, per its own Claude page.
- **A React component from a chat.** Droply: Save as .jsx and upload; it runs at the published address. Static.app: Needs a self-contained HTML version first, per its own Claude page.
- **Import from a URL.** Droply: Site import copies up to 40 pages and 600 assets from any site you point it at. Static.app: Import from URL takes claude.ai and claude.site links.
- **Expiring links.** Droply: From Starter: six hours, a week, or a date you pick. Static.app: Not listed on any of its plans.
- **Loose .html file accepted.** Droply: Yes, dropped on its own with nothing around it. Static.app: No. Its Claude page states a loose .html file is not accepted and must be zipped.
- **Single .jsx or .tsx without a build.** Droply: Yes. It is transformed in the visitor browser at the published address. Static.app: No. Its Claude page says React-based artifacts need a self-contained HTML version first.
- **Free plan.** Droply: 1 site, 25 MB storage, no card, and a plan rather than a trial. Static.app: A 7-day trial with no credit card, then paid. 1 site and 50 MB during it.
- **Security check on every publish.** Droply: Every plan, free included: leaked keys, a stray .env, a committed .git folder. Static.app: Not offered.

Static.app figures checked 8 September 2026 on its own pricing page (free tier: 1 site, 50 MB, a 7-day trial with no credit card; Starter $5 a month or $60 a year for 2 sites and 500 MB with a custom domain; Medium $10; Large $15) and on its Claude hosting page, which states that a loose .html file is not accepted and must be zipped, that React-based artifacts need an extra step because you have to ask the model for a self-contained HTML version, and that Import from URL takes claude.ai and claude.site links. Product plans can change.

## When Droply is the wrong choice

Canvas can describe an application as easily as it can write a page, and the two do not publish the same way.

- The prototype needs a login, a database or anything that runs on a server. Only the static half of it can be published here.
- The code imports packages you would have to install. They are not fetched from a public CDN for your visitors, so a real build has to happen first.
- The generated app has a database, a login screen or server actions. Those need a runtime; only the static half of it can be published here.
- You want a build to run here, on upload or on every push. There is no build step and no Git integration: you build locally and bring the output.
- You are running WordPress or another PHP application. A static export of it can be hosted here, but the application itself cannot.

## Frequently asked questions

### How do I publish a page Gemini made in Canvas?

Copy the code out of Canvas, paste it into a text editor, save it as index.html, and upload the file. It is live over HTTPS in seconds with no build step.

### Can I download my Gemini Canvas page as an HTML file?

Google's Canvas documentation does not describe one. It documents Copy code for code, and exports to Docs, Slides and Colab. So the route out is a copy and a save, which takes about a minute.

### Is the Canvas share link the same as hosting?

No. A share link points into Google's product. A published page is a file at your own address, served over HTTPS, that anyone can open without an account.

### What if Gemini gave me a React component?

Save it as a .jsx or .tsx file and upload that. It is transformed in the visitor browser at the published address, with React and a JSX runtime served from our own edge. No build and nothing installed.

### Why is my published page cut off?

The copy did not take the whole document, which happens when the text is selected by hand rather than copied with the documented action. Copy it again and open the saved file locally before uploading.

### Does the file have to be called index.html?

For a single file, yes, if you want it served at the address itself. Any other name is published but is not the page a visitor sees when they open the link.

### What about packages the code imports?

React and the JSX runtime are provided. Anything else is not fetched from a public CDN on your visitors' behalf, because that would run third-party code in their browser and leak their IP address to it. The live page names what is missing.

### Can the page call an API?

Only one that already exists elsewhere and allows browser requests under its own CORS rules. There is no server here, and any key written into the page is readable by anyone who opens it.

## Other AI tools

- [ChatGPT hosting](https://droply.host/chatgpt-hosting)
- [v0 hosting](https://droply.host/v0-hosting)
- [Lovable hosting](https://droply.host/lovable-hosting)