v0.1.0 on PyPI  ·  MIT Licensed  ·  Python / FastAPI

muleline

Your photos. Your files. Your storage.
Drop-in sync engine for any Python app. Connect S3, R2, Dropbox, SFTP, WebDAV, and more.

View on PyPI ◆ GitLab → Quick Start
pip install muleline click to copy
pypi v0.1.0 license MIT python 3.9+ tests 262 passed storage 6 backends

Why Muleline

Built for reliability, not complexity

A sync engine that does one thing well: move files between clients and servers without losing anything.

🔒
SHA-256 Deduplication
Never store the same file twice. Content-addressed storage means identical files from any device get deduplicated automatically, saving space and bandwidth.
Chunked Resumable Uploads
TUS-inspired protocol with 5MB chunks. Lose your connection mid-upload? Resume exactly where you left off. Works over flaky mobile networks without retrying from zero.
📈
Manifest Diff Sync
Client sends file hashes, server returns precisely what needs uploading or downloading. No full scans. Multi-device sync state tracked per device_id.
📦
Pluggable Storage Backends
Local filesystem out of the box. S3, Cloudflare R2, MinIO with pip install muleline[s3]. Or implement StorageBackend for your NAS, WebDAV, or anything else.
🔨
Mount in 3 Lines
Muleline is a FastAPI router. Mount it inside any existing FastAPI app and your sync API is live immediately. No separate service, no new infra to manage.
SQLite Only
No Redis, no Postgres. Sync state, upload sessions, device registry, and activity logs all live in a single SQLite WAL database. Run it with a single volume mount.

Storage Backends

Bring your own storage.

Connect your storage. Keep your files. Muleline works with your existing infrastructure.

📁
Local / NAS
Mount any directory, NAS share, or USB drive
Amazon S3
AWS S3, plus any S3-compatible service
🌐
Cloudflare R2
S3-compatible with zero egress fees
🔧
MinIO
Self-hosted S3-compatible object storage
💫
Dropbox
Sync directly to your Dropbox account
📄
Google Drive
Back up to Google Drive automatically
🔗
WebDAV
Nextcloud, Synology, ownCloud, Box
🔐
SFTP
Any SSH server or NAS over SFTP
soon
Azure Blob
Microsoft Azure object storage

Quick Start

Up in under a minute

Install, wire into your FastAPI app, and every /sync/* endpoint is live.

main.py python
# pip install muleline[server]

from fastapi import FastAPI
from muleline.engine import SyncEngine
from muleline.storage import LocalStorage
from muleline.db import run_migrations
import muleline.router as sync_router

app = FastAPI()

# Initialize
run_migrations()
engine = SyncEngine(storage=LocalStorage("./data/uploads"))
sync_router.init(engine)

# Mount — all endpoints live at /sync/*
app.include_router(sync_router.router)

Pricing

Simple, honest pricing

Self-host for free forever. Managed cloud hosting when you want us to handle the ops.

Self-Hosted
Free
forever, MIT licensed
  • Run on your own server
  • All 6 storage backends
  • 262 tests, battle-tested
  • Unlimited files
  • Community support
Get Started
Cloud Pro
$20
per month
  • Everything in Cloud
  • 1TB storage
  • Priority support
  • Custom domain
  • API access

Join the conversation

Get help, share your setup, request features, and connect with other Muleline users.

Visit the Forum