1. Home
  2. Docs
  3. Architecture & scale
  4. Go services: responsibilities and fallba...
Architecture & scale

Go services: responsibilities and fallbacks

What each Go service does, which product uses it, and what happens when it is unavailable.

Developer v2026.10 Updated 8 Nov 2026

Service matrix

Service Primary responsibility Product scope Data path Failure behaviour
go-sync High-performance mobile push/pull, acknowledgements and device health Campaigns + mobile form payloads Direct PostgreSQL + Redis processing list Pull can fall back to Laravel when configured; native push is handled by Go
go-bulk-import Heavy background imports Campaigns/shared operations Claims bulk_operations; reads shared disk or S3 Disable to use Laravel import path
go-dashboard Campaign decision-dashboard projections TALA Campaigns PostgreSQL/outbox to Redis and snapshot/read-model paths Laravel falls back to cached/live queries for unsupported or stale projections
go-xlsform Streams very large XLSX choice sheets TALA Flow Laravel uploads XLSX over private HTTP; receives NDJSON rows/progress Laravel local reader and PhpSpreadsheet compatibility path remain available
go-report Streaming CSV/XLSX exports Campaigns, Workforce, Flow Claims export operations, streams PostgreSQL, writes shared storage Laravel keeps core pages online and can reject new heavy reports when worker is not ready

Why these services are separate

They isolate workloads with very different memory and concurrency profiles. A million-row export should not consume PHP-FPM memory needed for login or dashboards. A large XLSForm parser should not share the same failure domain as sync. Campaign sync can be tuned for latency while report generation can be tuned for throughput.

Security boundary

These are private application services. Do not expose their health, metrics, XLSForm or report ports to the public internet. Internal service authentication and shared secrets must be configured through the runtime secret store.

Was this page helpful?

Still stuck?

Open a ticket and reference this page — we will pick it up from there.

Open a ticket