Documentation
Learn how to use Dele to quickly deploy and manage your AI-generated apps.
For Humans
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:
- 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.
- Drag your entire project folder into the dashed box, or click the 'Select Folder' button to choose it.
- 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.
For Agents
APIOverview
Dele provides a Deploy Skill that allows AI agents (such as OpenClaw, Cursor, or any LLM-powered agent) to programmatically deploy generated web apps via API.
The agent generates HTML/CSS/JS files → calls the Dele API → gets a live URL back. No human interaction needed.
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.
Authorization: Bearer pm_xxxxxxxxxxxxxxxxxxxxKeep your API key secret. Do not expose it in client-side code or public repositories.
Deploy Skill
The deploy skill packages local files and uploads them to Dele via the /api/upload endpoint.
Tool Definition
{
"name": "postme_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."
}
},
"required": ["target_path", "app_name"]
}
}Usage
from postme_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/# 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"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
/api/uploadDeploy files to create or update an app. Accepts multipart/form-data.
| Field | Type | Required | Description |
|---|---|---|---|
| appName | string | Yes | URL-friendly app name |
| files | File[] | Yes | Files to upload (repeatable) |
| paths | string[] | Yes | Relative path for each file (repeatable) |
| appDesc | string | No | Short description (max 255 chars) |
Response
{
"url": "/app/my-app/",
"appName": "my-app"
}{
"error": "Storage limit exceeded. Your Free plan allows 50MB."
}