Skip to content

Features

Everything DCTL does, and why it does it

DCTL is an rclone-shaped tool with a durability contract bolted to its spine. The vocabulary is familiar; the guarantees are not.

Verified writes, or no write at all

Nothing is reported stored until its bytes are checksum-verified at the destination and durably committed to the local index.

A mismatch hard-aborts the run, deletes the staged object and commits nothing. There are no half-stored files and no false "copied" lines in the log. The contract applies identically to plain and encrypted remotes.

Constant memory, any file size

Chunked AEAD plus constant-memory multipart means a 50 GB video uploads in bounded memory.

The pipeline is read → hash → encrypt → checksum → upload → verify → commit, and no stage ever materialises the whole file. Seeking into a large object uses chunk-aware HTTP Range requests, so playback starts without downloading the file first.

Cross-device restore from a password

The backend is authoritative. A fresh machine with only the password rebuilds the entire path map.

dctl index rebuild rescans the backend’s encrypted name records and reconstructs the path→object map, then restores byte-exact. No index backup to lose, no sync service to trust.

A format frozen for twenty years

A dependency-free C99 reference decoder proves the format outlives the tool that wrote it.

On-disk identifiers are brand-neutral and design-frozen. Known-Answer Tests cross-validate the Rust and C decoders byte-for-byte, so a vault written today stays readable with no Rust, no DCTL and no network.

Post-quantum where it counts

The at-rest path is entirely symmetric. Sharing uses an X25519 + ML-KEM-768 hybrid.

Because at-rest encryption is symmetric (Argon2id + XChaCha20-Poly1305), there is no public-key operation at rest for a quantum computer to break. The asymmetric sharing layer wraps recipients with a hybrid KEM for harvest-now, decrypt-later resistance today.

Mount a vault, read it like a disk

Read-only FUSE mount with chunk-ranged reads and writes refused at the kernel boundary.

Implemented on Linux (FUSE3) and macOS (macFUSE), and attached against a live kernel: mounted, listed, read byte-for-byte including a mid-file seek, writes refused with EROFS, unmounted clean.

Metadata-private encrypted index

Filenames and directory structure never reach the provider in the clear.

A vendored SQLCipher index with three-layer keying — keyed hash, per-row AEAD and whole-database page cipher. WAL mode makes it safely multi-process.

Encryption is optional, never accidental

A remote is plain or vault-wrapped, and what a command encrypts depends only on the remote name you typed.

A destination’s contents can cause DCTL to refuse an operation — never to silently change what it does. Plain rclone-style copy, move and sync are fully supported, and the verified-write contract covers both modes.

The pipeline

Seven stages, and the last two are the point

Reading, hashing, encrypting and uploading are table stakes. Verifying at the destination and committing durably are what let DCTL claim a file is stored.

  1. readbounded chunks
  2. hashBLAKE3
  3. encryptXChaCha20-Poly1305
  4. checksumciphertext digest
  5. uploadconstant-memory multipart
  6. verifycompare at destination
  7. commitindex says it exists

Command surface

The verbs you already type

Addressing rules, filter syntax and command names follow rclone's conventions on purpose, so the tool disappears and the guarantees stay.

  • dctl initCreate a vault and print its recovery phrase once
  • dctl copy / copytoCopy files or a single exact path
  • dctl syncMake destination match source
  • dctl move / movetoCopy then delete the source
  • dctl cat / rcatStream an object to stdout, or stdin to an object
  • dctl ls / lsl / lsd / lsjson / treeList in five shapes, including machine-readable
  • dctl mountRead-only FUSE mount of a vault
  • dctl verify / check / scrubRe-prove what is stored, at three depths
  • dctl index rebuildReconstruct the path map from the backend alone
  • dctl backup / restore / replicateScheduled backup, restore, and ciphertext-to-ciphertext replication
  • dctl auditRead the hash-chained operation log
  • dctl hashsum / size / aboutDigests, totals and backend capabilities

Architecture

Eight crates, layered so the crypto core stays clean

The layering exists to keep one promise structural rather than aspirational: the crate that touches your keys contains no unsafe code, and the one crate that does is small enough to audit.

dctl-crypto

Frozen v1 format and every primitive. Forbids unsafe code outright.

dctl-secmem

The one audited home for unsafe FFI — mlock, madvise, locked secrets.

dctl-meta

Single renameable source of the app name, paths and env prefix.

dctl-store

Provider-neutral Backend trait, plus LocalFs, B2, S3 and R2.

dctl-index

SQLCipher-encrypted, metadata-private local index.

dctl-core

Vault — composes crypto, store and index into one API.

dctl-cli

The dctl binary and its addressing invariants.

dctl-decode

Dependency-free C99 reference decoder and KAT cross-validation.

Lineage

Inspired by rclone, implemented from scratch

DCTL is written from scratch in Rust, but its addressing rules, filter syntax and command vocabulary were heavily inspired by the excellent work of the Rclone project. If you know rclone, you already know how to drive DCTL.

Capability comparison between Rclone and DCTL
CapabilityRcloneDCTLNotes
copy / sync / move / ls / catYesYesSame mental model, same filter and addressing rules
Breadth of backends70+Focused setLocal and B2 today; R2, S3, Drive and SFTP on the roadmap
Client-side encryptioncrypt overlayVault with identityA vault has a vault_id, revocable key slots and an encrypted index — two remotes sharing a password are not interchangeable
Verified write before successOptional checksYesNon-negotiable, on both plain and encrypted remotes
Post-quantum sharingNoYesX25519 + ML-KEM-768 hybrid recipient wrap
Metadata-private indexNoYesEncrypted SQLCipher index; filenames never leave in the clear
Format decodable without the toolNoYesDependency-free C99 reference decoder plus Known-Answer Tests
Tamper-evident audit logNoYesHash-chained, order- and integrity-preserving
LicenceMIT, freeFree for personal useCommercial and corporate use requires a licence

Start with your own data. Licence it when it becomes work.

DCTL is free forever for personal use, with nothing held back. When it starts moving data for a business, a commercial licence keeps you covered.