Skip to content
Weik.ioDocs
2026.2
Try Weik.io

Your first transfer

Weik.io 2026.2

A transfer is one YAML document with a schedule, a source, a destination, an operation and filters, and weikio apply publishes it like any integration. Product page · Video

Watch: Your first transfer, 3:40

The video writes the supplier-invoices transfer with weikio init --kind mft and applies it.

On this page

A transfer is a document of kind: mft. You don’t write a Camel route for it: the platform generates the route that runs rclone on the schedule, and the agent carries rclone in its image.

Start from the scaffold#

weikio init writes a transfer that runs as soon as you deploy it:

Terminal
$ weikio init supplier-invoices --kind mft --project finance

The scaffold has a schedule, a source and a destination with their remotes and paths, and operation: copy. Its destination is a local folder under /var/lib/weikio/mft/supplier-invoices, which the agent of a Linux site can write. Commented lines show the fields you add next, filters, flags, retries and retriesSleep, so you see that choosing files is a list of patterns and that everything else is rclone’s own vocabulary.

The real job#

The finance team collects a supplier’s invoice PDFs from the supplier’s FTP server every morning at five and moves them into Azure Blob storage. The transfer is this document:

finance/transfers/supplier-invoices.yaml
apiVersion: weik.io/v1
kind: mft
metadata: { name: supplier-invoices, project: finance }
spec:
  schedule: "0 0 5 * * ?"
  source:      { remote: supplier-ftp,      path: /outgoing }
  destination: { remote: invoice-archive,   path: invoices/incoming }
  operation: move
  filters: ["*.pdf"]
Field What it says
schedule A cron with six fields, starting with the seconds, in UTC. 0 0 5 * * ? is every day at 05:00 UTC.
source, destination The rclone remote and the path on it. A remote is the name of a variable that has the remote’s definition, or the definition itself.
operation The rclone command to run: copy, move, sync or another rclone command, such as check.
filters Patterns for the files to move, and only the files that match one of them move.

The two ends#

Each remote is a variable whose value is the remote’s rclone definition. The password inside it is a placeholder for a secret, so the rest stays readable in Git and reviewable in a pull request:

finance/variables/supplier-ftp.yaml
apiVersion: weik.io/v1
kind: variable
metadata: { name: supplier-ftp, project: finance }
spec:
  value: |
    type = ftp
    host = ftp.supplier.example
    user = weikio
    pass = {{supplier-ftp-password}}
finance/variables/invoice-archive.yaml
apiVersion: weik.io/v1
kind: variable
metadata: { name: invoice-archive, project: finance }
spec:
  value: |
    type = azureblob
    account = financearchive
    key = {{invoice-archive-key}}

Set the two secrets with the CLI, never in a file:

Terminal
$ weikio secret set finance/supplier-ftp-password --env production
$ weikio secret set finance/invoice-archive-key --env production

Remotes and credentials has every way to write a remote, including the one-file form with everything in the transfer itself.

Publish it#

Terminal
$ weikio apply -f ./finance/

The apply checks the transfer’s fields, including that operation is a command the agent’s rclone has, and publishes it as a version. A transfer is an integration like any other: it has versions, a deployment per environment, and an agent that runs it, chosen by the same requirements. Nothing runs until you deploy it.

In the admin UI, New integration with the kind File transfer writes the same document and opens it in the editor.