Documentation

Learn how to use Dele to quickly deploy and manage your AI-generated apps.

For Humans

Plans and AI usage

dele.fun plans cover hosted app limits, storage, visibility, analytics, and form collection. Regular dele.fun users do not configure model endpoints.

  • Free, Starter, and Medium are public SaaS plans for creating and publishing apps on dele.fun.
  • Choose the plan that fits your app, storage, and sharing needs.

Using Dele at your company?

For private deployment and sales, visit Enterprise. For an existing customer instance, use the enterprise admin and employee guide.

1. Prepare Your App

Dele currently supports hosting pure frontend static websites (HTML, CSS, JS). Whether you use Cursor, OpenClaw, or other AI tools, ensure your project folder meets these requirements:

  • The root directory must contain an index.html file as the entry point.
  • All static resources (images, stylesheets, scripts) should be stored within this folder.
  • It is recommended to use relative paths (e.g., ./images/pic.png or images/pic.png) to reference resources for best compatibility.

2. Deploy App

The deployment process is very simple, just two steps:

  1. In the drag-and-drop area on the homepage, enter a unique app name (only lowercase letters, numbers, and hyphens are supported). This name will be the exclusive URL path for your app.
  2. Drag your entire project folder into the dashed box, or click the 'Select Folder' button to choose it.
  3. Click 'Deploy App', and the system will automatically upload the files to the cloud and generate a preview image for your app in the background.

3. Update & Overwrite

If you have modified the code and want to update the deployed app, no complex operations are needed:

Just enter the same app name on the homepage, and then drag and drop the new folder again. The system will automatically overwrite the old files and regenerate the latest preview image in the background.

Note: For security reasons, you can only overwrite apps created by yourself.

Visibility Control

Each app has a visibility level you can change at any time from My Apps or during deployment.

LevelIconBehavior
Public🌐Visible in the app gallery; anyone can access it.
Unlisted🔗Not listed in the app gallery, but accessible via direct URL.
Password🔑Requires a 4-character access code. Visitors see a code entry page.
Hidden🔒Only the owner can access it. Others see an unavailable page.

Password-Protected Apps

  • When you set an app to Password, a 4-character code is auto-generated.
  • The code is shown next to the visibility icon in My Apps. You can copy or edit it.
  • Share the code with people you want to grant access.
  • Visitors enter the code once; it is saved in a cookie for 30 days.
  • You can change the code at any time. Old codes stop working immediately.

For Agents

API

Overview

Dele provides a Deploy Skill for local AI agents such as Codex, Claude Code, OpenClaw, Cursor, or any LLM-powered agent to deploy generated web apps through the API.

The agent generates HTML/CSS/JS files, calls the Dele API, and gets a live URL from this Dele instance.

Works with any local agent that can make HTTP requests: Codex, Claude Code, OpenClaw, Python, Node.js, cURL, MCP tools, and more.

Quick install via ClawHub

Install the official Dele Deploy skill from ClawHub to let your OpenClaw agent deploy apps with one command.

Install from ClawHub

API Key

Generate an API key from My Apps -> API Keys to authenticate agent requests. Enterprise users normally use the default Agent Key created after login.

Authentication Header
Authorization: Bearer pm_xxxxxxxxxxxxxxxxxxxx

Keep your API key secret. Do not expose it in client-side code or public repositories. Configure agents with this Dele instance URL.

Deploy Skill

The deploy skill packages local files and uploads them to Dele through the /api/upload endpoint. Read the complete skill at /skill.md.

Read the full skill

Tool Definition

tool.json
{
  "name": "dele_deploy",
  "description": "Deploy a local folder or HTML file to Dele to get a live URL.",
  "parameters": {
    "type": "object",
    "properties": {
      "target_path": {
        "type": "string",
        "description": "Path to the folder or HTML file to deploy."
      },
      "app_name": {
        "type": "string",
        "description": "URL-friendly name (lowercase, numbers, hyphens)."
      },
      "app_desc": {
        "type": "string",
        "description": "Optional short description."
      },
      "visibility": {
        "type": "string",
        "enum": ["public", "unlisted", "password", "hidden"],
        "description": "App visibility. Defaults to public. If password, a 4-char code is auto-generated."
      }
    },
    "required": ["target_path", "app_name"]
  }
}

Usage

Python
from dele_deploy import execute

# Deploy a folder
result = execute(
    target_path="/tmp/workspace/my-report",
    app_name="quarterly-report",
    api_key="pm_xxxxxxxxxxxxxxxxxxxx",
    api_url="https://www.dele.fun/api/upload"
)
print(result)
# Deployment successful! URL: https://www.dele.fun/app/quarterly-report/
cURL
# Deploy a single HTML file
curl -X POST https://www.dele.fun/api/upload \
  -H "Authorization: Bearer pm_xxxxxxxxxxxxxxxxxxxx" \
  -F "appName=my-page" \
  -F "files=@index.html" \
  -F "paths=index.html"

# Deploy multiple files
curl -X POST https://www.dele.fun/api/upload \
  -H "Authorization: Bearer pm_xxxxxxxxxxxxxxxxxxxx" \
  -F "appName=my-site" \
  -F "files=@index.html" -F "paths=index.html" \
  -F "files=@style.css" -F "paths=style.css" \
  -F "files=@script.js" -F "paths=script.js"
Node.js
const form = new FormData();
form.append("appName", "my-app");
form.append("files", fs.createReadStream("./dist/index.html"));
form.append("paths", "index.html");

const res = await fetch("https://www.dele.fun/api/upload", {
  method: "POST",
  headers: { Authorization: "Bearer pm_xxxxxxxxxxxxxxxxxxxx" },
  body: form,
});
const data = await res.json();
console.log(data.url); // → /app/my-app/

API Reference

POST/api/upload

Deploy files to create or update an app. Accepts multipart/form-data.

FieldTypeRequiredDescription
appNamestringYesURL-friendly app name.
filesFile[]YesFiles to upload. Repeat this field for multiple files.
pathsstring[]YesRelative path for each uploaded file. Repeat this field with files.
appDescstringNoShort public description, up to 255 characters.

Response

200 OK
{
  "success": true,
  "url": "/app/my-app/"
}
4xx / 5xx Error
{
  "error": "Storage limit exceeded. Your current plan does not allow this upload."
}

Visibility API

POST/api/apps/visibility

Set the visibility level for an app you own. Accepts a JSON body.

FieldTypeRequiredDescription
appNamestringYesName of the app.
visibilitystringYesVisibility level.: public | unlisted | password | hidden
accessCodestringNoCustom 4-character code. Only used for password visibility. Auto-generated if omitted.
Response - password
{
  "ok": true,
  "visibility": "password",
  "accessCode": "x7k2"
}
POST/api/apps/verify-code

Verify a password-protected app access code. On success, sets a cookie for 30-day access.

Request body
{
  "appName": "my-app",
  "code": "x7k2"
}
200 OK
{ "ok": true }
403 Forbidden
{ "ok": false }