DEV Community

Kyota Nakada
Kyota Nakada

Posted on

Introducing Vento: A Rust CLI for Automating File Transfers and Job Workflows

Have you ever wanted a lightweight, configurable way to automate file transfers and the commands surrounding them?

Meet Vento — a CLI tool written in Rust that lets you define file transfers and pre/post actions with a single YAML file.


🚀 What is Vento?

Vento is a lightweight CLI tool to automate file transfers and job execution workflows.

It’s currently focused on SFTP but designed with future protocol extensibility in mind.

Key Features (v0.1.0):

  • ✅ YAML-based transfer profile definition
  • 🔁 Upload/download files (SFTP supported)
  • 🔧 Execute custom commands:
    • Before transfer
    • After transfer
    • On error
  • 📜 Logging to file or console
  • ⚙️ Written in Rust — fast & minimal

🧰 Use Case Example

Imagine you want to automate:

  • Compressing a file
  • Uploading it to a remote server (SFTP)
  • Archiving it locally
  • And logging if something fails

In ~/.config/vento/config.yaml

defaultProfileFile: "/path/to/profiles.yaml" logLevel: "info" logFile: "/tmp/vento.log" logStdout: true 
Enter fullscreen mode Exit fullscreen mode

In profiles.yaml:

transferProfiles: - profileId: "upload-report" source: type: "local" path: "/data/report.csv" trigger: type: "manual" destination: type: "sftp" host: "sftp.example.com" path: "/upload/report.csv" authentication: method: "env_key" username: "user" envKeyRef: "SFTP_PRIVATE_KEY_PATH" preTransferCommand: "gzip /data/report.csv" postTransferCommand: "mv /data/report.csv.gz /archive/" onErrorCommand: "echo 'Transfer failed' >> /tmp/vento_error.log" 
Enter fullscreen mode Exit fullscreen mode

Then just run:

vento transfer --profile-id upload-report 
Enter fullscreen mode Exit fullscreen mode

You can override the config.yaml path by specifying the --config option.

vento --config /your/custom/config/path transfer --profile-id upload-report 
Enter fullscreen mode Exit fullscreen mode

📦 Installation

Option 1: GitHub Releases (Recommended)

  • Download from: ➡ GitHub Releases
  • Extract the binary and move it to a directory in your $PATH.

Option 2: Homebrew

brew tap kyotalab/vento brew install vento 
Enter fullscreen mode Exit fullscreen mode

Option 3: Build from source

git clone https://github.com/kyotalab/vento.git cd vento cargo build --release 
Enter fullscreen mode Exit fullscreen mode

💡 Notes

  • Vento does not handle scheduling. Use cron, systemd, or similar tools to run the CLI on schedule.
  • Shell command behavior is OS-dependent.
    • macOS/Linux: via sh -c
    • Windows: via cmd.exe /C
  • Authentication secrets can be passed via environment variables.

🔭 Roadmap

Here’s what’s next:

  • Support for more protocols: SCP, HTTP(S), cloud storage
  • Retry mechanisms and webhook notifications
  • Cron-like native scheduler
  • Plugin support for custom workflows

👥 Ideal For

  • DevOps or SREs working with file integrations
  • Teams replacing legacy transfer tools with OSS
  • Anyone who loves YAML, Rust, and CLI productivity

🙌 Get Involved

Vento is still young and evolving.

Try it out, and I’d love to hear your feedback!

👉 GitHub Repo

⭐ Star it / Fork it / Use it


Thanks for reading! Feel free to share thoughts, ideas, or use cases in the comments.

Top comments (0)