publish_page
Publish a page
Publish an HTML file as a NEW live link and return its URL. Use update_page to change an existing page instead.
htmlpathaccess必填emailsinviteexpires
io.github.Vilancer由 GitHub 帳號 Vilancer 發布v0.5.1更新於 Nov 7, 2026
Share analyst reports and dashboards as a live link.
把單一 HTML 檔案發布成帶存取控制的線上連結,並管理頁面、收件者與頁面附帶的媒體檔案。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
參照 儲存庫 中的啟動說明。
Drop an HTML file. Get a live link. Control who sees it.
droppage is a command-line tool that publishes a single HTML file to a live, shareable URL in one
command — with access control that feels like sharing a document, not deploying a website. It is
built for developers, analysts, and AI agents that produce HTML reports and need a URL without
running a hosting stack.
Website: droppage.dev · Source: github.com/Vilancer/droppage-cli
Requires Node.js 22 or newer.
Open the printed link in any browser. That's it.
Run droppage <command> --help for full option details.
Slugs from 0.2.1 on never start with -. If an older page's slug does (say -AbC12xYz9), put -- in front of
it, with any options before the --: droppage expire -- -AbC12xYz9 never or
droppage update --expires 7d -- -AbC12xYz9 report.html. The CLI prints the same hint when it happens.
--password, --email, and --private are mutually exclusive. update never changes the access
mode — it only swaps the HTML. When you are signed in to droppage.dev, your own protected pages
open directly, without the password or email link.
.html or .htm file per upload; the file is validated before any network call.<img src> are uploaded with the page (see below); sensitive images belong
inline as data: URIs.list count one unique visitor per page. Refreshes, reopening in the same browser,
link previews from chat apps, and your own opens do not add views.list --preview) never increment the view count.Images belong to a page. Reference local image files in your HTML (inside the HTML file's folder; ../ and absolute paths are ignored), with paths relative to the HTML
file, and upload it:
upload finds the images, uploads them to that page, rewrites the links to
https://droppage.dev/i/<id>.<ext>, then publishes. The image lines go to stderr; stdout is still
only the page URL.
update uploads any new local images, keeps the same URL for an unchanged image, and deletes
the page's images the new HTML no longer uses.<img src>, the CLI picks up local images in srcset on <img>/<source> (every
candidate, descriptors kept), <link rel="icon"|"apple-touch-icon" href>, and url(...) inside
<style> blocks (0.2.2+). Not picked up: style="..." attributes and .ico files.droppage image upload <files...> --page <slug> adds images to an existing page and
prints their URLs; droppage image list [--page <slug>] [--json] shows them (--json prints
{images:[{id,url,ext,content_type,bytes,name,created_at,page}], page?:{slug,used_bytes,limit_bytes}});
droppage image delete <id-or-url...> removes them.Short product films (CLI 0.3.0+) are hosted exactly like images. Reference local MP4 or WebM files,
and a poster image, in a <video>:
<video src>, <source src> (inside <video>, and <picture> as before), and
<video poster>. Same folder rule as images..mov and .mkv are refused; convert them first, e.g.
ffmpeg -i in.mov -c:v libx264 -pix_fmt yuv420p -movflags +faststart -an film.mp4.update and deleted with the page, like images. Video traffic counts toward your
monthly bandwidth.https://droppage.dev/i/<id>.mp4|webm with HTTP Range support (206 Partial Content),
so Safari, iOS and seeking work. Public to anyone with the URL, like images.droppage image upload film.mp4 --page <slug> (or
droppage media upload) adds a video to an existing page.Pages can expire. Nothing expires unless you set it, on any plan.
After expiry the page shows "This page has expired." (HTTP 410) to everyone, including you, and
its images stop working. A daily cleanup then deletes the page and its images for good.
droppage list shows an EXPIRES column (never or a date); list --json rows have expires_at
(null means never).
droppage is a quick way to send an analysis to people who don't have your tools: a dashboard for your team, a weekly KPI or stakeholder report, a client deliverable, a notebook export. They open a link.
frontend-design skill before building the page, so
the report gets a deliberate look instead of a templated one. Claude Code:
/plugin install frontend-design@claude-plugins-official; Codex, Cursor, and other agents: use its
SKILL.md from anthropics/skills.jupyter nbconvert --to html analysis.ipynb, Plotly's fig.write_html("report.html", include_plotlyjs="cdn"), Altair's
chart.save("report.html"), or your own Chart.js / ECharts page. Scripts run, so interactive
charts work, and chart libraries can load from a CDN.localStorage, cookies, and same-origin requests are not available, so
keep the data in the file rather than fetching it.--email [email protected],[email protected] for named people (Builder; manage
them later with droppage recipients), --password for a group link (Starter and Builder),
--private for a draft. On the Free plan, pages can be public or private, without a password or email list.droppage update <slug> report.html replaces the report and keeps the
link and its access settings (Starter and Builder). Use --expires 30d for one-off deliverables.droppage list --json shows view_count (unique visitors) and
last_viewed_at for each report.droppage keeps a strict stream contract so it is safe to call from automation:
upload and update print only the URL on stdout, even when they upload images;
image upload prints only the image or video URL(s); expire prints nothing on stdout.list --json, image list --json, recipients list --json, and quota --json print only JSON on stdout.droppage: image … → … / droppage: video … → … lines go to stderr.--yes on delete / recipients remove for non-interactive runs.Ready-made instruction packs for Codex, Cursor, and Claude-style agents live in the
agents/ directory of the repository.
Machine-readable docs for agents and doc tools such as mcpdoc:
droppage.dev/llms.txt, or everything in one file at
droppage.dev/llms-full.txt.
From 0.4.0, droppage mcp runs a Model Context Protocol server on stdio, so
agents in Claude Code, Cursor, Codex, Windsurf, or Claude Desktop publish through typed tools instead of shell
commands. It runs on your machine and uses the session from droppage login; sign in once in a terminal first.
Cursor (.cursor/mcp.json), Windsurf (~/.codeium/windsurf/mcp_config.json), and Claude Desktop
(claude_desktop_config.json):
Codex (~/.codex/config.toml):
Tools: publish_page (a file path or inline html; access public, email or private; emails; invite; expires), update_page, list_pages, delete_page, set_page_expiry, get_quota, list_recipients, add_recipients, invite_recipients, remove_recipient, upload_media, list_media, delete_media, send_feedback. Results are JSON with a warnings list.
droppage login in a terminal, then retry."
There is no login tool: login needs the terminal, and stdin belongs to the protocol.droppage upload <file> --password yourself for a password page.path when the page uses local images or videos; inline html cannot bring them.update_page, delete_page, set_page_expiry, remove_recipient, and delete_media are marked destructive, so MCP clients ask before running them.After a command finishes, interactive terminals check npm for a new release at most once every 24
hours and put any update notice on stderr only. The check sends no identifier or usage data, and
all errors are ignored. Set DROPPAGE_NO_UPDATE_CHECK=1 to opt out. This registry lookup is the
CLI's only non-backend network request; droppage still collects no telemetry.
Before bulk publishing, use droppage quota --json. A warn level means the monthly meter is at
least 80% used; limit means new uploads, updates, or previews may pause. Existing links remain
live. Delete unneeded pages or review plan options at droppage.dev/account.
Feedback is public and login is optional:
Agent-authored feedback should always use --agent and include the model name.
Releases are published from GitHub Actions with npm provenance, so every version on npm is verifiably built from a tagged commit in the public repository.
droppage works with zero configuration against the hosted service. For self-hosted or development setups, these environment variables are honoured (in order of precedence):
service_role/sb_secret key is found in its
environment or config file — those keys must never be used with droppage.~/.droppage/config.json (or $DROPPAGE_HOME/config.json) with 0600
permissions. A project's ./.env cannot move it.Apache-2.0 © 2026 Vilancer.
來源:README.md,提交 8e67b6b
Publish a page
Publish an HTML file as a NEW live link and return its URL. Use update_page to change an existing page instead.
htmlpathaccess必填emailsinviteexpiresUpdate a page
Replace the HTML behind an existing page. The URL and access settings stay; new local images and videos are uploaded and ones the page no longer uses are deleted.
htmlpathslug必填expiresList pages
The user's pages, newest first: url, access_mode, allowed_emails, view_count (unique visitors), last_viewed_at, expires_at.
previewDelete a page
Delete a page for good: its link stops working and its images and videos are deleted. Confirm with the user first.
slug必填Set when a page expires
Set or clear when a page (and its images and videos) is deleted for good, without re-uploading it.
slug必填when必填Plan and limits
The plan, what it allows, and current usage. usage.level "warn" means at least 80% used; "limit" means writes may pause. Existing links stay live.
無需輸入參數。
List recipients
Who can open an email page, with their invitation status.
pageslug必填Add recipients
Give more people access to an email page; each new one is emailed an invitation with an access link.
slug必填emails必填Invite recipients
Email an invitation to everyone on an email page who has not had one yet, e.g. after publish_page with invite: false. People already invited are skipped.
slug必填Remove a recipient
Take away one person's access to an email page.
slug必填email必填Add images or videos to a page
Upload image or video files to one of the user's pages and return their URLs, for files the HTML did not reference at publish time. PNG, JPEG, GIF, WebP, AVIF, SVG up to 4 MB; MP4, WebM up to 20 MB. Hosted media is public to anyone with its URL, even on a gated page.
page必填paths必填List images and videos
The user's hosted images and videos; with `page`, only that page's and its media budget.
pageDelete an image or video
Delete one hosted image or video by id or URL. It stops being served within 5 minutes.
id_or_url必填Send feedback
Send an idea, bug report, review, or other feedback to the droppage team. It is always marked as coming from an agent; include your model name.
kindmodelratingcontactmessage必填已滿足適用檢查項的 90%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
$ droppage upload report.htmlhttps://droppage.dev/p/k3x9qd2mnpm install -g droppagedroppage --versiondroppage login # magic link sent to your emaildroppage upload report.html # prints the share URL on stdout<img src="chart.png">$ droppage upload report.htmldroppage: image chart.png → https://droppage.dev/i/AbCdEfGhIjKl.pnghttps://droppage.dev/p/k3x9qd2m<video autoplay muted loop playsinline poster="still.webp"> <source src="film.webm" type="video/webm"> <source src="film.mp4" type="video/mp4"></video>droppage upload page.html# stderr: droppage: image still.webp → https://droppage.dev/i/AbCdEfGhIjKl.webp# stderr: droppage: video film.webm → https://droppage.dev/i/MnOpQrStUvWx.webm# stderr: droppage: video film.mp4 → https://droppage.dev/i/YzAbCdEfGhIj.mp4droppage upload report.html --expires 7d # also 30m, 12h, 2w, or a date like 2026-12-31droppage update <slug> report.html --expires neverdroppage expire <slug> 2026-12-31 # change it without re-uploading; `never` clears itclaude mcp add droppage -- npx -y droppage mcp # Claude Code{ "mcpServers": { "droppage": { "command": "npx", "args": ["-y", "droppage", "mcp"] } } }[mcp_servers.droppage]command = "npx"args = ["-y", "droppage", "mcp"]droppage upgrade # upgrade to the latest releasedroppage --version # confirm the installed versiondroppage feedback "The preview command should…" --kind ideadroppage feedback "Upload failed after…" --kind bug --agent "my-model"