Group machines into @sets
Gather machines into named @sets — by role, by function, however you actually run the fleet. A set is both your rollout target and your canary boundary.
The technical deep-dive for the team evaluating Syncronis. How a change travels from your console to thousands of machines, where every byte of your data lives, and what it costs to run.
Illustrative. Agents enrol with a one-time token issued from your console. No shared secrets, no public endpoint to attack.
No agents to babysit, no cluster to reconcile. You describe what should happen; Syncronis makes it happen, where and when you said.
Gather machines into named @sets — by role, by function, however you actually run the fleet. A set is both your rollout target and your canary boundary.
Pick the package and target, then set the schedule window, timeout, on-failure policy and process signals, all in the console, no DSL to learn. Every rollout is plain JSON underneath, so you can script it through the API whenever you want automation.
Pushed over gRPC the moment you commit, not on a poll interval. Agents pull packages from your vault over HTTPS, run your scripts, and stream results back.
Per-machine progress, failures surfaced immediately, and a full attributed history of who changed what.
Arbitrary files — configs, templates, binaries — plus the script the agent runs. The package is the script's path: deploy-nginx/setup.sh and deploy-nginx/rollback.sh are two packages sharing one folder, each with its own deployments, versions, targets and blocked-version tracking.
No .deb or .rpm to build, no manifest schema. Your package is opaque to the platform: Syncronis schedules, distributes and runs it, but never parses or rewrites your files.
The control plane decides where and when. Your vault holds what (packages, logs, credentials) on hardware you own. You (or your auditor) can see exactly where data lives, because the line between the two planes is the whole design.
Self-hosting ships with Enterprise. Same binary in both modes, so moving later is a configuration change, not a migration.
On the wire
Control-plane traffic carries rollout intent, config and machine status — never your payloads. Packages, logs, credentials and rendered secrets stay on your vault.
Identity
Every agent↔server connection is mutually authenticated with client certificates. No shared secrets sprayed across the fleet.
Secrets
Per-machine secrets are rendered on your own infrastructure at build time. They never round-trip through the control plane.
No cluster to stand up, no runtime to keep patched, no platform team to operate it. One small binary you can drop on a Raspberry Pi or a datacenter server. Measured on a live host, not modeled.
A fleet is only as manageable as its slowest page. These are the operations that decide whether ten thousand machines feel like ten.
Storage-layer benchmarks over a 10,000-machine dataset on a mid-range
desktop CPU, not end-to-end page loads — the server's own
go test -bench suite, run on every change.
Your numbers will differ with disk and CPU; the shape won't.
The three categories teams weigh Syncronis against. Where each tool sits is a design choice. Read it as positioning, not a verdict.
| Syncronis | Ansible | Puppet | Chef | |
|---|---|---|---|---|
| What you write | The bash you already have. The rollout is built in the console. | YAML playbooks + Jinja templates | Puppet DSL manifests | Ruby DSL recipes |
| New language to learn | None | YAML + Jinja | Puppet DSL | Ruby DSL |
| Hand-edited config files | None — JSON underneath, for the API when you want it | Yes, that is the interface | Yes, that is the interface | Yes, that is the interface |
| Agent model | Persistent (push) | Agentless (SSH) | Agent (pull) | Agent (pull) |
| Access into the machine | None inbound — the agent dials out, identity is a client certificate | Inbound SSH from a control node, with keys to distribute | None inbound — agent dials out | None inbound — agent dials out |
| Change reaches fleet | On publish, near-instant | When you run it | Poll interval | Poll interval |
| Machines that were offline | Catch up by themselves on reconnect | Fail the run — you write and schedule the retry | Catch up on next poll | Catch up on next poll |
| What you get back | A console view, backed by one JSON line per event — still filterable months later | Run output, verbose by default | Agent run reports | Agent run reports |
| Package delivery | Built-in, delta transfer | Copy / modules | File-based | File-based |
| Config templating | Yes (vault build) | Yes (Jinja2) | Yes | Yes |
| Desired-state / drift correction | On demand, fleet-wide: a version bump re-runs it. Not on a timer. | Whenever you run it | Continuous | Continuous |
| Syncronis | Mender | Balena | qbee | |
|---|---|---|---|---|
| Built for | Linux fleets, any size | Embedded OTA | Container edge | IoT / embedded |
| Change reaches fleet | On publish, near-instant | Poll interval | Poll interval | Poll interval |
| Your data on your infra | Yes (vault) | Vendor / hosted | Vendor cloud | Vendor hub |
| Self-host | First-class, same binary | On-prem (enterprise) | openBalena (partial) | Enterprise only |
| Delivers | Scripts + packages | A/B image OTA | Containers | Declarative config |
| Package format | Folder + bash entry script | Signed artifact (.mender) | Container image | Declarative bundles |
| Transport | Push (gRPC) | Pull | Pull | Pull (HTTPS) |
| Behind a 443-only proxy | Yes — ports are yours to set, agent honours HTTPS_PROXY | Yes | Yes | Yes |
| Rollout control | Targeting, windows, canary, version history | Phased rollouts (Ent) | Release pinning | Group config |
| Deploy preview | Simulate targets first | — | — | — |
| Syncronis | Argo CD | Flux | |
|---|---|---|---|
| Built for | Linux fleets, any size | Kubernetes clusters | Kubernetes clusters |
| What it manages | The host itself — config, packages, scripts | Cluster resources, declared as manifests | Cluster resources, declared as manifests |
| Needs a cluster | No — one binary on the machine | Yes | Yes |
| Change reaches fleet | On publish, near-instant | Poll, 180s by default — instant with a webhook | Poll, 1m from bootstrap — instant with a webhook |
| Your data on your infra | Yes (vault) | Yes — your repo, your cluster | Yes — your repo, your cluster |
| Source of truth | Rollout in the console, JSON underneath | A Git repository | A Git repository |
| Drift correction | On publish, and on a version bump | Continuous reconcile | Continuous reconcile |
| Runs where there is no cluster | Yes — that is the case it is for | No | No |
| Agent footprint | ~13 MB static binary | In-cluster controllers | In-cluster controllers |
Syncronis renders per-machine config from templates, inheritance and secrets, but it deploys on publish rather than continuously reconciling state. It is not infrastructure-as-code and not a container orchestrator: it delivers your packages and runs your scripts, where and when you decide.
Create your organization and start free. Your first 5 machines are on us, no card required. Any Linux host with systemd, amd64 or arm64.