> ## Documentation Index
> Fetch the complete documentation index at: https://docs.htmldrop.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Publishing HTML

> Single files, inline assets, and what does and doesn't work in a static drop.

Drop an `.html` file and it is served exactly as written. No transformation, no
build step, no framework detection.

## Make it self-contained

A single file with its CSS and JavaScript inline is the most reliable thing you
can publish. Relative references to files you did not upload will 404 — if your
page needs `styles.css` or `logo.png`, either inline them or publish the whole
[folder](/publishing/folders-and-zip).

External URLs work normally: a CDN script, a Google Font, an image hosted
elsewhere all load as they would anywhere.

## What runs

Anything the browser can do on its own:

* JavaScript, including canvas and WebGL — p5.js sketches, Three.js scenes
* CSS animations, custom properties, container queries
* `fetch()` to any API that permits cross-origin requests
* Web fonts, SVG, video and audio elements

## What does not

There is no server-side runtime. No PHP, no Node, no Python, no database, no
environment variables. Server-rendered frameworks must be built to static output
first — run `npm run build`, then publish the resulting folder.

<Warning>
  Anything in a drop is public to anyone with the URL unless you add
  [password protection](/sharing/password-protection). Never publish API keys,
  tokens or credentials — treat a drop like a public repository.
</Warning>

## Head control

Your `<head>` is preserved, so `<title>`, `<meta name="description">`, Open Graph
tags and favicons all behave as expected — including in link previews when the
URL is pasted into Slack, WhatsApp or a social post.

On free and anonymous drops a small "Made with htmldrop" badge is added in the
corner. Paid plans remove it.
