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)

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)