Skip to main content
Dropbox Synchronisation uses three parts of every Ayakaleaf Pro pod, and all three start only with DROPBOX_ENABLED: "true":
  • web (the dropbox module): linking, the project’s Dropbox dialog, and the webhook that Dropbox calls.
  • third-party-datastore: a service of its own inside the pod that works through the queue of changes to send to or fetch from Dropbox.
  • document-updater: with Dropbox on, it writes the editor’s changes to MongoDB in the background, a few minutes after everyone has left a project; only then do they go to Dropbox.
Create the Dropbox app and read how syncing works in Dropbox Synchronisation; this page puts it into Kubernetes.

Configuration

1

ConfigMap

30-config.yaml (additions)
GIT_BRIDGE_ENABLED: "true" and the git-bridge StatefulSet from Git integration must be in place: without them the account settings hide the project sync section.
2

Secret

DROPBOX_TOKEN_CIPHER_PASSWORD encrypts the users’ Dropbox tokens in MongoDB. Every replica must use the same value, and changing it later makes every user link Dropbox again.
3

Create the database indexes

Run the index commands from Create the database indexes once, on the primary of the replica set:
4

Apply and restart

third-party-datastore.log exists only when DROPBOX_ENABLED is "true".
5

Open the webhook to the internet

Dropbox must reach ${OVERLEAF_SITE_URL}/dropbox/webhook from the internet. If your ingress or load balancer only allows some paths or networks from outside, allow this one; it is the only path Dropbox calls. Check it from outside the cluster:
Then add the webhook in the Dropbox App Console as described on the Toolkit page.

Several replicas

Nothing extra beyond the shared DROPBOX_TOKEN_CIPHER_PASSWORD:
  • The webhook may reach any replica. It only queues the change in Redis.
  • Every replica runs third-party-datastore, and each works on the shared queue. A user’s queue is taken with a lock in Redis, so only one replica sends or fetches a given user’s changes at a time.
  • Every replica’s document-updater writes idle projects in the background. Each project is taken from a shared list in Redis, so it is written once.

Tested on Kubernetes

Against a mock of the Dropbox API, on Kubernetes 1.37 with three replicas behind HAProxy, our end-to-end tests for Dropbox Synchronisation pass (59 cases): linking and unlinking; sending projects, edits, binary files, renames, moves and deletions to Dropbox, including an editor edit that arrives through the background write after the project was closed, without compiling or “sync now”; applying changes made in Dropbox through the webhook (verification challenge and signature check), new projects from new folders, deleted project folders; projects with the same name; the editor’s Dropbox dialog and “sync now” with its rate limit; retries, rate limits and timeouts of Dropbox; accounts unlinked when Dropbox is full, refuses the token or is suspended; suspended Overleaf accounts; and the webhook’s answer when third-party-datastore is down.
Last modified on November 2, 2026