filelift
filelift is a small CLI for uploading local assets to S3-compatible object
storage and printing shareable URLs.
It is designed for writing, publishing, and static-site workflows where images, videos, and other assets should live outside the source repository.
Goals
- Upload one file or a directory of files.
- Support Cloudflare R2, AWS S3, MinIO, and other S3-compatible services.
- Manage multiple upload targets.
- Store secrets through the operating system keyring instead of plain text.
- Print public URLs and Markdown snippets after uploads.
Planned CLI
Target Store
Targets contain non-secret storage metadata:
The target store is saved at ~/.filelift/targets.toml.
= "r2-blog"
[]
= "s3"
= "eave-assets"
= "https://example.r2.cloudflarestorage.com"
= "auto"
= "https://assets.example.com"
Access keys are stored separately in the system keyring:
- service:
filelift - account:
<target-name>:access_key_id - account:
<target-name>:secret_access_key
Diagnostic Logs
filelift writes encrypted diagnostic logs to ~/.filelift/logs/events.log.enc.
The log encryption key is stored in the operating system keyring. Logs can be
exported to a readable JSONL file for troubleshooting:
Review exported logs before sharing them. Secrets are redacted and are never written to the encrypted log intentionally.
Architecture
cli: command definitions and argument parsing.target: target store load/save.secret: keyring integration.diagnostic_log: encrypted diagnostic logging and export.log_command: diagnostic log command handlers.target_command: target command handlers.storage: storage provider interface.storage::s3: S3-compatible upload implementation.output: URL and Markdown formatting.
Status
This repository is in early scaffolding. The first implementation milestone is target management plus single and recursive uploads to S3-compatible storage.