dhtml

Get started · five steps, nothing to install

From a folder to a live site

dhtml sites run on dhtml.net. You write the files of a project, zip them and upload them. The address is live a few seconds later, and every upload is checked before it replaces what is running.

§ 01 · Make a site

An address of your own

Sign up at dhtml.net with your email address (you set the password from a link we send you) and choose Create site. The site gets an address, NAME.dhtml.net, with HTTPS, and a page of its own with everything below on it.

§ 02 · A project

Start from a starter, or from nothing

Starters are MIT-licensed: change them freely.

A project is a folder with dhtml.config, pages in server/pages, actions in server/api, plain SQL in server/migrations and static files in public. The smallest one is a config file and one page. Or start from a whole app:

  • LaunchBlog, a news site with authors, editors and an AI writer.
  • LaunchSaaS, an AI product with credits, plans and Stripe.
  • notes, accounts, a database and a streamed AI answer in a few files.
  • shop, a Stripe payment and a signed webhook, written in tags.

The rules of the language are on one page, and the guide is the short version.

§ 03 · Upload

Zip the contents, upload the zip

Zip the contents of the folder, so that dhtml.config is at the top of the zip. Leave out .env and server/data. On the site's page, under Deploy a new version, choose the zip.

The upload is checked first: every page, route, setting and migration is compiled, your database is backed up, and the migrations run. If anything is wrong, the result says which file, which line and what to do, and the version that is running is left as it was. Fix it and upload again.

§ 04 · Secrets

Keys never go in the zip

An AI key, a Stripe key or a mail password is set under Secrets on the site's page, one name and one value each, and written in dhtml.config as env:NAME. The value is never in your files, never shown in an error and never served.

§ 05 · From a script or an agent

A deploy key, one call

Under Account, Deploy keys make a key. It can only deploy to your sites and can be revoked at any time. Then one HTTP call uploads the zip:

bash
curl -X POST --data-binary @project.zip \
  -H "Content-Type: application/zip" \
  -H "Authorization: Bearer $DHTML_KEY" \
  "https://dhtml.net/api/deploy?site=25"

The same address answers with the state of the latest deploy. The whole interface is in deploy-api.txt, and the AI agent skill teaches an assistant the language and this loop.

Your own domain is set under Your own domain, and every deploy, with its result, is listed under History.