Sync LaTeX projects with Overleaf. Free tier. Git-powered merges.
Overleaf charges you $$$$ for git sync. deadtree does it for free.
Your local git repo is the source of truth. An overleaf/main branch tracks what's on Overleaf. Pull merges. Push uploads. Conflicts are real git conflicts — resolve them with your editor, not some janky custom diff tool.
pip install deadtree
pip install 'deadtree[login]' # first time only
playwright install chromium # first time onlydeadtree init https://www.overleaf.com/project/abc123
deadtree login # browser pops up, log in, done
deadtree pull # grab everything from Overleaf
# ... write your paper ...
git commit -am "rewrote intro"
deadtree push # ship it| Command | What it does |
|---|---|
deadtree pull |
Overleaf → local. Downloads, commits to overleaf/main, merges into your branch. |
deadtree push |
Local → Overleaf. Uploads changed files, updates overleaf/main. |
deadtree status |
What's different between you and Overleaf? |
deadtree diff |
git diff against Overleaf state. |
deadtree log |
Sync history. Every pull and push, timestamped. |
Your coauthor edited the intro on Overleaf. You edited it locally. You pull.
$ deadtree pull
Merge conflicts detected. Resolve them, then:
git add -A && git commit
That's it. It's a git merge. Use vim, vscode, meld, whatever. Fix the <<<<<<< markers, commit, push.
$ deadtree push
Done. 1 file(s) uploaded.
No interactive menus. No "pick a side" prompts. Just git.
you ──●──●──●──────●── your branch
\ /
overleaf/main ──●───●───●── what Overleaf has
pull pull
pulldownloads the Overleaf zip, commits it tooverleaf/main(without touching your working tree), thengit merges into your branchpushuploads your diff, then re-downloads to keepoverleaf/mainin syncstatusanddiffare just git commands against the two branches
The git plumbing uses a temporary index to commit to overleaf/main without checkout. Your working tree is never disturbed.
deadtree init https://www.overleaf.com/project/YOUR_PROJECT_IDWrites .overleaf.json. That's the only config.
MIT. Do whatever you want.