Fero is a lightweight, scalable sync orchestration SDK designed to standardize and simplify data synchronization across platforms and frameworks. It abstracts retry logic, backoff strategies, sync state, and orchestration, so application code stays clean while sync behavior remains consistent. Fero means "circulate" (from "pheero" / "phiro" — "move here and there").
Build once. Sync everywhere.
Modern apps need reliable syncing—offline support, retries, partial failures, background recovery—but implementing this logic repeatedly in every app and platform quickly becomes messy.
Fero solves this by acting as the sync brain.
You provide:
- What to sync
- How to sync (handlers)
Fero handles:
- Retry & backoff
- Orchestration
- Sync state tracking
- Failure recovery
- Consistent behavior across platforms
- A Sync Orchestration SDK
- A platform-agnostic core
- A stateful sync coordinator
- Designed for Flutter, Rust, JS, and beyond
- A UI framework
- A database
- A network client
- A simple utility library
If your app only needs a helper function—Fero is overkill. If your app needs reliable, repeatable sync at scale—Fero fits.
A single unit of synchronization (feature, resource, or module).
User-provided logic that performs the actual sync operation.
Coordinates when, how, and in what order syncs run.
Controls retry behavior on failure (exponential, fixed, custom).
Tracks progress, failures, retries, and completion.
App / UI Layer
↓
Sync Handlers (User Code)
↓
Fero Orchestrator
↓
Retry + Backoff + State Engine
Fero owns policy and orchestration. You own business logic.
- Offline-first apps
- Multi-feature sync pipelines
- Background sync
- SDKs used across multiple apps
- Shared sync logic across Flutter, Web, and Native
- App triggers sync
- Fero checks sync state
- Required items are scheduled
- Handlers are executed
- Failures trigger retries via backoff
- State is updated and reported
- SDK-first — built to be embedded, not hacked in
- Deterministic behavior — same input, same sync result
- Platform-agnostic core
- Minimal surface API
- Extensible, not opinionated
- Flutter / Dart
- JavaScript / TypeScript (planned)
- Any platform that can call handlers
Use Fero if:
- Sync logic is repeating across apps
- You need consistent retry behavior
- You want sync logic independent of UI
- You’re building an SDK, not just an app
Don’t use Fero if:
- You only sync once
- Failures don’t matter
- You want quick hacks instead of systems
🚧 Active Development APIs may evolve before stable release.
Sync is not a feature. Sync is infrastructure.
Fero treats synchronization as a first-class system, not an afterthought.
MIT License