rclone speaks dosya, natively.
The dosya backend ships inside rclone. Run rclone config, pick dosya, and connect your cloud storage for copies, syncs, mounts and share links. No extra plugin to install.
Choose your connection
Connect natively. Keep your familiar commands.
Start with the native Dosya backend. Connect with an API key to copy files, move them within your workspace, create share links and check your quota. The S3 gateway covers older rclone builds and existing S3 workflows.
Connect with the Dosya backend
Pick dosya in rclone config.
Create a dedicated key in API keys, scoped to your workspace with upload, list and download access.
# check your rclone version and available backends
rclone version
rclone help backends
# interactive setup: enter the key at the prompt
rclone config
name> dosya
Storage> dosya
api_key> dos_YOUR_API_KEY
workspace_id> ws_YOUR_WORKSPACE_ID
# list inside the configured workspace
rclone lsf dosya: If the key reaches exactly one workspace, leave workspace_id blank.
Native paths start inside that workspace: dosya:Photos.
The S3 equivalent is dosya-s3:ws_YOUR_WORKSPACE_ID/Photos.
- move and copy server-side, with no re-upload
- link generates a real share link, with optional expiry
- about reports your plan quota, used and free
- mkdir keeps empty directories without S3 directory markers
Or connect through S3
Open S3 setup in the app for the access key ID, secret and workspace ID. Use a credential that can upload, list and download for this walkthrough.
# find your configuration file with: rclone config file
# add this section there; replace credentials privately in your editor
[dosya-s3]
type = s3
provider = Other
access_key_id = YOUR_S3_ACCESS_KEY_ID
secret_access_key = YOUR_S3_SECRET_KEY
endpoint = https://api.dosya.dev/s3
region = us-east-1
force_path_style = true
sign_accept_encoding = false
upload_cutoff = 64Mi
chunk_size = 8Mi Save the config, then list your workspace in a terminal:
rclone lsf dosya-s3:ws_YOUR_WORKSPACE_ID/ Keep the configuration file private. S3 credentials are a pair;
a native dos_ API key is not a replacement for that pair.
sign_accept_encoding=false prevents a signature mismatch when the gateway rewrites that header.
Need WebDAV?
Choose WebDAV when your client requires it. A normal upload uses one HTTP request. For large files that should remain single files in the app, use native Dosya uploads or S3 multipart. Mounting storage does not create an independent backup.
Your first transfer
Copy a sample. Read it back. Compare it.
Create a local rclone-test folder with a few small, non-sensitive files.
Use the native dosya: remote configured above and choose a new, unique destination folder.
copy leaves extra destination files in place, but can replace files with the same name.
# use a small source folder and a NEW destination folder for this check
rclone copy ./rclone-test dosya:rclone-test-UNIQUE/ --dry-run
# review the preview, then upload
rclone copy ./rclone-test dosya:rclone-test-UNIQUE/ --transfers 2 --progress
# read back and compare content without changing either side
rclone check ./rclone-test dosya:rclone-test-UNIQUE/ --one-way --download Check that the final command reports no differences and exits successfully.
--one-way checks that every source file is present; it ignores additional destination files.
--download reads content for comparison and uses download allowance.
See the rclone check reference.
Try the same commands locally first
Local demonstration. This uses two temporary folders on your computer. It demonstrates copying and content comparison without connecting to Dosya.
# macOS / Linux shell; creates a fresh disposable directory
rclone_demo_dir=$(mktemp -d)
mkdir "$rclone_demo_dir/source"
printf 'Dosya rclone sample\n' > "$rclone_demo_dir/source/sample.txt"
rclone copy "$rclone_demo_dir/source" "$rclone_demo_dir/destination" --dry-run
rclone copy "$rclone_demo_dir/source" "$rclone_demo_dir/destination"
rclone check "$rclone_demo_dir/source" "$rclone_demo_dir/destination" --one-way --download A successful comparison reports zero differences. Keep the same command order when you switch to your configured remote.
Before you schedule a sync
sync can delete destination files.
Preview it with --dry-run, check the source is mounted and populated,
and keep an independent backup before enabling a recurring job. A successful listing alone does not prove upload or download access.
Video, RAW photos and archives
Upload in parts. Keep one usable file.
The native Dosya backend uploads large files in parts using the upload layout returned by Dosya. The completed upload is one file that the app can open and share; you do not need a chunker overlay.
Using S3 instead? The fallback setup switches to multipart uploads above 64 MiB, below the gateway's 100 MB single-request ceiling. It starts with 8 MiB parts; rclone may increase part size for very large objects. Keep individual requests below the gateway ceiling. Workspace storage and credential limits still apply.
S3 multipart also produces a single file. A WebDAV chunker overlay
instead stores a set of parts that needs the overlay to reconstruct the original.
Start with --transfers 2 and increase only if your connection and limits allow it.
Multipart upload does not guarantee that an interrupted process can resume its previous session.
For a full content check of an archive, budget the time and download allowance for check --download.
See Dosya S3 settings, rclone multipart uploads and Fair Use limits.
The whole picture
Every operation, native and otherwise.
Server-side copy applies to compatible paths in the same workspace; cross-provider transfers pass through the machine running rclone. S3 empty directories need directory_markers=true.
| Operation | Native dosya backend | S3 gateway |
|---|---|---|
| Works on both | ||
| copy · sync | Yes | Yes Multipart uploads |
| mount | Yes | Yes via FUSE |
| ls · lsd · lsl | Yes | Yes |
| empty directories | Yes | Requires directory markers |
| delete · purge | Yes | Yes |
| size | Yes | Yes |
| How the backends differ | ||
| move | Server-side | Server-side copy, then delete |
| copy within the same workspace | Server-side | Server-side object copy |
| tree | Directory listing | Walks every key |
| link | Dosya share link | Presigned object URL |
| about | Plan quota, used and free | Not available |
Recipes
Copy, mount, migrate and share.
These examples use the native dosya: remote above. For a mount, install the OS-specific prerequisites and allow local disk space for the write cache.
# native paths start inside the configured workspace
rclone copy ~/Documents dosya:Documents --dry-run
# after reviewing the preview, copy without deleting extra destination files
rclone copy ~/Documents dosya:Documents --transfers 2 --progress
rclone check ~/Documents dosya:Documents --one-way --download# create an empty mount point; install your OS's mount prerequisites first
mkdir -p ~/dosya
rclone mount dosya: ~/dosya --vfs-cache-mode writes --dir-cache-time 30s
# unmount in another terminal (use the command for your OS)
fusermount -u ~/dosya # Linux
umount ~/dosya # macOS# cross-provider data passes through the machine running rclone
rclone copy oldS3:my-bucket dosya:Imported --dry-run
rclone copy oldS3:my-bucket dosya:Imported --transfers 2 --progress
# compare content; downloads both sides when needed
rclone check oldS3:my-bucket dosya:Imported --one-way --download# creates a public Dosya share link; share only files intended for others
rclone link --expire 24h dosya:report.pdf Reference
Every option, and how the backend behaves.
For the native Dosya backend. The API key is required; select a workspace ID when the key can access several. Compare your build with the upstream reference if its options differ.
Options
| Flag | Config key | Environment | Default |
|---|---|---|---|
| --dosya-api-key | api_key | RCLONE_DOSYA_API_KEY | required |
| Your API key. Starts with dos_. | |||
| --dosya-workspace-id | workspace_id | RCLONE_DOSYA_WORKSPACE_ID | auto when one is accessible |
| Choose a ws_ ID if the key can reach several workspaces; otherwise the backend selects the only accessible workspace. | |||
| --dosya-api-urlAdvanced | api_url | RCLONE_DOSYA_API_URL | https://api.dosya.dev |
| API base URL. Leave it unless you are told otherwise. | |||
| --dosya-upload-concurrencyAdvanced | upload_concurrency | RCLONE_DOSYA_UPLOAD_CONCURRENCY | 4 |
| Parts of one file uploaded at once. The first part always goes alone, because the server creates the upload when it receives it. Each part in flight is held in memory. | |||
| --dosya-encodingAdvanced | encoding | RCLONE_DOSYA_ENCODING | Slash, LtGt, DoubleQuote, SingleQuote, BackSlash, Del, Ctl, LeftSpace, RightSpace, InvalidUtf8, Dot |
| How filenames are encoded. See the encoding section of rclone's overview. | |||
| --dosya-descriptionAdvanced | description | RCLONE_DOSYA_DESCRIPTION | none |
| A description of the remote, for your own reference. | |||
Your key and workspace
- API key: open API keys, create a workspace-restricted key and enter it at the configuration prompt.
- Workspace ID: copy the Bucket value from S3 setup. For native setup, you can leave it blank if the key reaches one workspace.
One native remote reaches one workspace. For several, create separate remotes with appropriately scoped keys:
# create separate native remotes with interactive rclone config
# work: points to the work workspace; personal: to the personal workspace
rclone copy work:docs/ personal:backup/ --dry-run Times and hashes
Modification times are kept to the second and travel with the upload, so a synced file keeps its original timestamp. Changing a time afterwards means re-uploading.
Files uploaded in one shot carry a SHA-256, so rclone check and
hash-based sync work without downloading. Native multipart files report no whole-file hash. A normal rclone check
can therefore fall back to size alone; use --download for content verification.
Names are case-sensitive and empty directories are kept. Uploading the same filename updates that file rather than creating a duplicate name.
Filenames
On top of rclone's default set, five characters are replaced with full-width equivalents on the way in and restored on the way out:
| Character | Value | Becomes |
|---|---|---|
| " | 0x22 | " |
| ' | 0x27 | ' |
| < | 0x3C | < |
| > | 0x3E | > |
| \ | 0x5C | \ |
Invalid UTF-8 is replaced as well, since it cannot travel in JSON.
Scripts and CI
Every option has an environment variable, so a pipeline needs no config file at all:
inject the API key through your secret store and set the workspace ID explicitly for the job. Address the remote as :dosya:.
# inject RCLONE_DOSYA_API_KEY from your CI secret store
# set RCLONE_DOSYA_WORKSPACE_ID to the chosen workspace
rclone copy ./dist :dosya:releases/ --dry-run
# after reviewing the preview
rclone copy ./dist :dosya:releases/ --transfers 2
The current upstream native backend lists directories individually; it does not implement
ListR. Adding --fast-list does not give it a single-pass recursive listing.
Before you point a big job at it
Limits, stated plainly.
These protocol rate limits apply to S3 and WebDAV. Native rclone uses the REST API and its applicable limits. There are no egress fees, but download allowances and credential restrictions still apply.
On the Free plan
WebDAV and S3 skip plan request and concurrency ceilings. Explicit key or role restrictions and abuse rate limits still apply, so tune concurrency to your connection and any rate-limit responses. Lower concurrency does not bypass a daily egress limit.
See Fair Use for the distinction between share-link downloads and API or protocol allowances.
When something fails
- 401 Unauthorized The key is wrong, revoked, or belongs to another account. rclone will not retry this one - check the key, then the workspace ID.
- 429 Too Many Requests You are over the request rate. rclone backs off and retries on its own; on Free, lower --transfers and --checkers rather than waiting it out.
- concurrent_upload_limit Every upload slot in the workspace is busy. rclone waits for one to free up, retrying every 5 seconds for up to 10 minutes, so this is a delay and not a failure unless it lasts that long.
- Upload refused for size A 0-byte file, or a file over the workspace's per-file cap if the admin set one. Neither is retried.
- 500 to 504 A transient server error. rclone retries these automatically; a run that still fails has hit something that needs reporting.
What the backend will not do
- Filenames up to 255 characters.
- Empty files cannot be uploaded. A 0-byte file is rejected.
- Streaming uploads of unknown size are not supported. The size has to be known before the upload starts.
- Upload slots are limited per user, 5 in flight by default and configurable per workspace. With --transfers above that, rclone waits for a free slot rather than failing, retrying every 5 seconds for up to 10 minutes.
- Deleting requests permanent deletion. Do not rely on workspace trash to recover a file removed by rclone.
Open source
Open source carried us here. We give back what we can.
A small team can build something like dosya only because thousands of people gave their work away first. rclone is one of them: maintained for a decade, handed to everyone, asking nothing in return. We would rather add to that than quietly live off it.
So we give what we have. The backend we wrote went upstream and now ships inside rclone itself, free for everyone - our users, their users, and people who will never pay us anything. Our apps and packages are published so you can read exactly what runs on your files. Our SDKs are MIT, so you can build on them without asking us first.
And we sponsor the project. That is us supporting rclone, not rclone endorsing us.
- Sponsoreddosya.dev sponsors rclone
Our support helps keep the project maintained. You can support it too through rclone.org/sponsor. Opens in a new tab.
- UpstreamWe wrote rclone a dosya backend, then gave it away
Merged upstream on October 7, 2026. Included in official rclone releases, free for the community, whether they ever use us or not.
- PublishedRead the code that touches your files
Web app, desktop, CLI and shared packages are on github.com/dosya-dev, source-available, and the SDKs are MIT. Your files are yours, so the code that handles them should be readable.
Frequently asked questions
Before the first big transfer.
Why can’t I find Dosya in rclone config?
Your installed rclone may predate native Dosya support. Update to the latest official release and check that rclone help backends lists dosya. If you need to stay on an older build, use the S3 gateway setup on this page.
Should I use S3, native Dosya or WebDAV?
Native Dosya is the recommended setup for workspace-aware operations, public share links and quota reporting. S3 works with older rclone builds and existing S3 workflows. WebDAV fits clients that require that protocol; use S3 multipart or native uploads for large files.
Why does my upload fail near 100 MB?
A single request through the gateway is subject to the 100 MB edge ceiling, and client or workspace restrictions can be lower. This S3 configuration switches to multipart above 64 MiB. A WebDAV PUT remains one request; adding a chunker changes how the stored files are represented.
Does rclone check prove that a large file matches?
A normal check can fall back to size when both sides have no common hash. Add --download to compare content by reading the files. It consumes bandwidth and download allowance, so start with a small sample and budget larger checks.
Is sync a backup?
sync makes the destination match the source and can delete destination files. Use copy for the first transfer, preview changes with --dry-run, and keep an independent backup. copy can still replace a destination file with the same name.
Why am I getting SignatureDoesNotMatch or AccessDenied?
For S3, use the S3 access key ID and secret, the /s3 endpoint, path-style addressing and sign_accept_encoding=false. Check workspace access and credential scope. Upload-only keys cannot list or read files for verification.
Can I mount Dosya on Linux, macOS or Windows?
rclone mount can use the native Dosya remote or the S3 gateway. Follow rclone's installation and mount documentation for your OS prerequisites. A mount accesses remote storage; it is not an independent backup or a promise that every file is available offline.
Get a key and point rclone at it.
Free plan includes 5 GB and every protocol. No card, no egress fees.