Architecture
Platform
147 plug-and-play modules across three architectural layers — each module owns a single bounded context, exposes stable APIs, and can be composed into any Civic product.
Products in Suite
Municipal Modules
Integration Points
Ontario Compliance
The Architecture
Build products from composable modules
Every Civic product is an assembly of modules — not a monolithic application. This means municipalities get exactly the capabilities they need, nothing more, and can extend the platform incrementally.
Modules communicate through domain events on a shared event bus — loose coupling that enables independent deployment, scaling, and evolution without breaking downstream dependencies.
Key Facts
Module architecture at a glance
Bounded Context
Each module owns exactly one domain — no overlapping responsibilities, no hidden coupling between modules.
Versioned APIs
Every module exposes versioned REST/GraphQL endpoints with OpenAPI specs. Internal evolution without breaking consumers.
Three Layers
Platform (22) → Shared (19) → Domain (106). Clear dependency direction — upper layers never depend on lower layers.
Purpose-Built for Canadian Municipalities
Three Layers
A layered architecture built for composition
Every Civic product is assembled from modules across three architectural layers — each with a clear responsibility boundary.
Platform Infrastructure
Foundational services that every product depends on — identity, payments, GIS, workflow engine, AI/ML, integration bus, and more.
Example Modules
Shared Functional
Cross-cutting capabilities consumed by multiple domains — billing, inspections, work orders, property registry, asset registry, and facility booking.
Example Modules
Domain
Specialised business logic for individual municipal domains — tax, utilities, recreation, elections, roads, fire, environmental monitoring, and 90+ more.
Example Modules
Platform Infrastructure
Foundational services that every product depends on
Shared Functional
Cross-cutting capabilities consumed by multiple domains
Domain
Specialised business logic for individual municipal domains
Design Principles
How every module is built
Six architectural principles that govern how modules are designed, built, and composed into products.
Single Responsibility
Each module owns exactly one bounded context with clear API boundaries. No overlapping ownership, no hidden dependencies.
Composable by Design
Modules snap together like building blocks. Any Civic product is simply a composition of modules configured for a specific use case.
Stable APIs
Every module exposes versioned REST/GraphQL APIs with OpenAPI specs. Internal modules evolve without breaking consumers.
Event-Driven
Modules communicate through domain events on a shared event bus. Loose coupling enables independent deployment and scaling.
Compliance-Native
FIPPA, MFIPPA, AODA, PSAB — compliance is architected in, not bolted on. Audit trails, encryption, and data residency are first-class concerns.
Zero Vendor Lock-In
Standard data formats, portable schemas, and open APIs. Every module can export its data in open formats at any time.
Full Catalogue
All 147 modules searchable & filterable
Browse the complete module catalogue. Filter by architectural layer, search by name or description, and explore modules with detailed showcase pages.
Every module owns a single bounded context, exposes stable APIs, and can be composed into any Civic product — that's modular architecture done right.
Krutik Parikh
Creator of Civic
Custom Architecture
Need a custom module?
Every municipality has unique requirements. If our existing 147 modules don't cover your specific need, we'll build one that does — following the same architecture patterns and compliance standards.