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
Interactive Mode
Run filelift without a subcommand to open the interactive shell:
filelift> target update
When a command is missing a target name, filelift shows a dim hint after a short
pause without interrupting typing. Press Tab to choose from configured targets,
or press Enter with the target name still missing to open the selector.
Full commands still run directly and are suitable for scripts:
filelift target use r2-blog
filelift target update r2-blog --bucket eave-assets --skip-check
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.