Daniel Legt 3471e2b0cf feat(api): add API documentation and ShareX integration
- Add an API documentation page with curl and ShareX examples.
- Implement a dynamic ShareX configuration endpoint (`/api/v1/sharex/warpbox-anonymous.sxcu`) that generates a `.sxcu` file pre-configured with the instance's base URL.
- Update anonymous uploads to return a private management link (`manageUrl`) and a deletion link (`deleteUrl`) in JSON responses.
- Update README with details on Stage 3 Anonymous Integrations.
- Add styling for the new API documentation view and management details.
2026-05-29 23:44:05 +03:00

Warpbox.dev

This repository contains the Go backend base for warpbox.dev, a self-hosted transfer-first file sharing application.

Run

./scripts/run/dev.sh

The default server listens on :8080.

Upload size limits are configured in megabytes through WARPBOX_MAX_UPLOAD_SIZE_MB. Fractions are supported, so 0.5Mb is 512 KiB and 1.5Mb is 1536 KiB.

Runtime data is configured with WARPBOX_DATA_DIR and defaults to ./data in the dev environment. The dev script resolves that path from the repository root.

Background jobs are enabled with WARPBOX_JOBS_ENABLED=true. Individual jobs can be toggled with WARPBOX_CLEANUP_ENABLED and WARPBOX_THUMBNAIL_ENABLED, and their schedules are configured with WARPBOX_CLEANUP_EVERY and WARPBOX_THUMBNAIL_EVERY.

The basic admin console is available at /admin. Set WARPBOX_ADMIN_TOKEN and use that value to sign in.

For one-off Go commands, run them from the backend module:

cd backend
go run ./cmd/warpbox

Layout

  • backend/cmd/warpbox - main application entry point.
  • backend/libs/config - environment-backed configuration.
  • backend/libs/httpserver - server construction and route composition.
  • backend/libs/handlers - HTTP handlers for pages, API, health, static files.
  • backend/libs/jobs - background job registration and job loop definitions.
  • backend/libs/middleware - request logging, recovery, security headers, gzip, request IDs.
  • backend/libs/services - business logic boundaries, starting with upload limits.
  • backend/libs/helpers - small reusable helpers.
  • backend/libs/web - Go template renderer.
  • backend/templates - server-rendered Go templates.
  • backend/static/css, backend/static/js, backend/static/img, backend/static/fonts - public assets served from /static/.
  • scripts/run/dev.sh - local development runner.
  • scripts/env/dev.env.example - tracked development environment template.
  • scripts/env/dev.env - local development environment, ignored by git.

Stage 2 Operator Tools

  • /admin/login - token-based admin login.
  • /admin - overview metrics: boxes, files, storage, recent uploads, protected/expired boxes.
  • /admin/files - recent upload table with view and delete actions.
  • Expired boxes and boxes that have reached their download limit are cleaned on startup and then every WARPBOX_CLEANUP_EVERY when WARPBOX_CLEANUP_ENABLED=true.
  • Missing image/video thumbnails are generated in a background worker every WARPBOX_THUMBNAIL_EVERY when WARPBOX_THUMBNAIL_ENABLED=true.

Stage 3 Anonymous Integrations

Anonymous uploads now return a private management link at creation time. Keep that link secret: anyone with it can delete the entire upload box. The raw delete token is not stored and cannot be recovered later.

Browser uploads still show Open box and Copy URL as the primary actions, with a smaller Manage or delete this upload link in the completion panel.

Curl and custom uploaders can use the same endpoint:

# Terminal-friendly output: one plain box URL.
curl -F file=@./report.pdf http://localhost:8080/api/v1/upload

# JSON output with boxUrl, manageUrl, deleteUrl, zipUrl, and file entries.
curl -F sharex=@./screenshot.png \
  -H 'Accept: application/json' \
  http://localhost:8080/api/v1/upload

The upload endpoint accepts multipart fields named file and sharex. ShareX users can start from examples/sharex/warpbox-anonymous.sxcu; update RequestURL to match your instance URL.

Runtime Data

Warpbox keeps local runtime data under the configured data directory:

  • data/files/{box_id}/@each@{file_id}.ext - uploaded file contents.
  • data/files/{box_id}/@thumb@{file_id}.jpg - generated previews where available.
  • data/db/warpbox.bbolt - bbolt metadata database for boxes and file records.
  • data/logs/{YYYY-MM-DD}.log - JSONL logs, one event per line.

Static Asset Policy

The static handler sets long-lived immutable caching for images, video, audio, and fonts, shorter caching for CSS/JS, and gzip compression for compressible responses.

Description
No description provided
Readme 22 MiB
Languages
Go 57.7%
HTML 14.9%
CSS 14%
JavaScript 12.7%
Shell 0.4%
Other 0.2%