trustbit/Contexture
53.0
Adequate · 21 September 2026
18.4k
lines of production code
TypeScript
with F#, JavaScript
3
measurements over time
What this system is
Contexture is a web-based application designed for documenting and visualizing Bounded Contexts and their connections. It provides a .NET backend that implements an event-sourced architecture to manage domains, namespaces, and collaborations, supporting both file-based and SQL Server storage. The system exposes comprehensive RESTful APIs for creating, searching, and querying these domain entities, while a Vue.js frontend enables interactive management and visualization of the architectural data.
How it got here
2020–2021 — Initial release and domain modeling
10 changes.
This period marks the initial release of Contexture, a web-based tool for documenting and visualizing Bounded Contexts. The work focused on establishing the core domain models, implementing an event-sourced backend architecture, and exposing comprehensive API endpoints for managing and searching domain entities.
2023 — frontend migration and persistence infrastructure
4 changes.
The frontend was rewritten in Vue.js with added end-to-end testing, while the backend introduced file-based database persistence and a new event store infrastructure. These changes established the core storage and state management layers, supported by comprehensive integration tests for domain operations.
Features
Added Namespaces and Search view pages
Introduced new backend view handlers for the Namespaces and Search features. The Namespaces view renders a page for managing namespaces within a bounded context, while the Search view provides a search interface and an API endpoint (/api/search/filter/namespaces) that aggregates namespace data and labels. These changes add new UI pages and API routes to support namespace management and search functionality.
backend/Contexture.Api/Views · high confidence
Initial release of Contexture: a Bounded Context Canvas tool
Contexture is introduced as a web-based application for documenting and visualizing Bounded Contexts and their connections. The release includes a Vue.js frontend, a .NET backend with file-based and SQL Server storage options, and Docker support for local development and deployment. The application provides endpoints for importing and exporting data snapshots, and includes health check probes for container orchestration.
(repo-wide) · high confidence
Introduced domain models for Bounded Contexts, Collaborations, Domains, and Namespaces
The backend's entity layer now defines the core domain models for Bounded Contexts, Collaborations, Domains, and Namespaces. Each model includes its own set of commands (e.g., CreateBoundedContext, DefineRelationship, CreateDomain, NewNamespace) and events (e.g., BoundedContextCreated, RelationshipDefined, DomainCreated, NamespaceAdded). The diff shows the addition of new files (BoundedContext.fs, Collaboration.fs, Domain.fs, Namespace.fs, NamespaceTemplate.fs) that establish the structure for managing these aggregates, including value objects, state evolution logic, and error handling specific to each entity.
backend/Contexture.Api/Entities · high confidence
Introduced event-sourced command handling and unified data import/export endpoints
The backend now implements an event-sourced architecture for command handling, with new modules defining a generic \Aggregate\ and \CommandHandler\ infrastructure that processes commands against domain state and persists resulting events. This enables a new \/api/all\ GET endpoint that aggregates data from all read models (Domains, BoundedContexts, Collaborations, Namespaces, and Templates) and a \/api/all\ PUT endpoint that replaces all stored data, optionally triggering an application shutdown after reseeding. The change also introduces a unified \AllEvents\ type to map event envelopes to specific domain events and supports both file-based and SQL Server-based storage engines.
backend/Contexture.Api · high confidence
Introduced file-based database persistence for domains, bounded contexts, and collaborations
Added new file-based database implementations for Domain, BoundedContext, and Collaboration aggregates. The changes introduce a new \Convert.fs\ module that maps domain events to document updates and a \Database.fs\ module providing in-memory collection wrappers and file persistence logic. This enables the system to persist and retrieve state from local files, supporting the 'untangled file-based database integration' by providing the concrete storage layer for these specific aggregate types.
backend/Contexture.Api/Filebased · high confidence
Introduced new event store and subscription infrastructure
Added new infrastructure components for event sourcing and state management. This includes an abstract EventStore interface and implementations for in-memory and NStore (SQL) backends, enabling reliable event storage and retrieval. Additionally, a new subscription system was introduced, featuring a runtime that tracks subscription status (e.g., caught up, processing, failed) and supports position tracking in both memory and SQL Server, allowing read models and projections to subscribe to event streams.
backend/Contexture.Api/Infrastructure · high confidence
New API endpoints for domains, bounded contexts, namespaces, collaborations, and event logs
The backend now exposes new HTTP API endpoints for managing domains, bounded contexts, namespaces, and collaborations, as well as reading event logs. These endpoints handle creating, updating, and removing entities (e.g., domains, bounded contexts, namespaces, collaborations) and querying them via read models. The event log endpoint allows retrieving events for a specific entity. This change introduces the core API surface for these aggregates, replacing or supplementing previous implementations.
backend/Contexture.Api/Apis · high confidence
New search and find capabilities for namespaces, labels, domains, and bounded contexts
The backend introduces a new read-model-based search system for finding entities by name, short name, template, and label. This includes a \SearchHandler\ that processes queries for namespaces, labels, domains, and bounded contexts, utilizing a \SearchPhrase\ type that supports operators like Equals, StartsWith, Contains, and EndsWith. The \FindReadModels\ file defines the state management and projection logic for namespaces and labels, while \Types.fs\ provides the core search types and argument handling. This change enables users to perform complex, multi-criteria searches across these domain entities.
backend/Contexture.Api/ReadModels/Find · high confidence
Rewrite frontend with Vue.js and add E2E tests
The frontend application has been rewritten using Vue.js, introducing a new component structure and build configuration. This change includes the addition of end-to-end tests using Playwright to verify domain and bounded context editing, message handling, and collaborator management. Configuration files for ESLint, Prettier, and VS Code have been added to standardize code quality and editor settings.
frontend-vue · high confidence
Behavioural changes
Backend project structure and documentation reorganization
The backend solution file (Contexture.sln) and README documentation have been moved into the backend directory, establishing a self-contained project structure. The README provides updated configuration instructions, including environment variables for the ASP.NET Core server (defaulting to port 5000) and database engine selection (FileBased or SqlBased). It also documents the available API endpoints for managing namespace templates via curl commands.
backend · high confidence
Restructured read models with timeout configuration
The read models in the backend have been restructured into a new file, ApplicationReadModels.fs, which defines read models for domains, bounded contexts, collaborations, and namespaces. Each read model now explicitly configures a reply timeout of 10 seconds via a shared Defaults module, ensuring consistent timeout behavior across all read model queries.
backend/Contexture.Api/ReadModels · medium confidence
Test coverage
Added comprehensive integration tests for bounded context operations; Added comprehensive test suite for the API backend.
Dependencies
Upgrade frontend dependencies to Vue 3.4 and update backend packages
The frontend-vue project has been upgraded to Vue 3.4.29, along with related libraries such as Pinia 2.1.7, VeeValidate 4.12.4, and VueUse 10.7.2. On the backend, the .NET project files have been updated to target .NET 7.0, and dependencies like Testcontainers 4.0.0 and NStore 0.14.0 have been added or updated.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 55 → 53 (-2.5)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 92 → 90 (-2.0)
- Architecture 87 → 73 (-14.3)
- Maturity 47 → 47 (-0.0)
- Readiness 65 → 56 (-8.2)
- Security 53 → 53 (-0.3)
- Domain Modelling 100 → 86 (-13.9)
- Accessibility 63 → 56 (-6.7)
Resolved (89)
- Critical CVE: [GHSA redacted] (frontend-vue/package-lock.json)
- Critical CVE: [GHSA redacted] (frontend-vue/package-lock.json)
- Critical CVE: [GHSA redacted] (frontend-vue/package-lock.json)
- Dependency hygiene not measured — no packages were read
- Duplicated block (10 lines × 2) (backend/Contexture.Api/Filebased/Database.fs)
- Duplicated block (11 lines × 2) (backend/Contexture.Api/Filebased/Database.fs)
- Duplicated block (11 lines × 2) (backend/Contexture.Api/ReadModels/Find/FindReadModels.fs)
- Duplicated block (14 lines × 2) (backend/Contexture.Api/ReadModels/Find/FindReadModels.fs)
- Duplicated block (5 lines × 2) (backend/Contexture.Api/Filebased/Database.fs)
- Duplicated block (6 lines × 2) (backend/Contexture.Api/Apis/Domains.fs)
- Duplicated block (8 lines × 2) (backend/Contexture.Api/Filebased/Convert.fs)
- Duplicated block (9 lines × 2) (backend/Contexture.Api/Apis/Domains.fs)
- Duplicated block (9 lines × 2) (backend/Contexture.Api/Infrastructure/Subscriptions.fs)
- High CVE: [GHSA redacted] (frontend-vue/package-lock.json)
- High CVE: [GHSA redacted] (frontend-vue/package-lock.json)
- High CVE: [GHSA redacted] (frontend-vue/package-lock.json)
- High CVE: [GHSA redacted] (frontend-vue/package-lock.json)
- High CVE: [GHSA redacted] (frontend-vue/package-lock.json)
- High CVE: [GHSA redacted] (frontend-vue/package-lock.json)
- High CVE: [GHSA redacted] (frontend-vue/package-lock.json)
- …and 69 more
New (117)
- Bubble.showBoundedContextConnections (cognitive 43) (frontend-vue/src/visualisations/Bubble.js)
- Bubble.showMainPage (cognitive 49) (frontend-vue/src/visualisations/Bubble.js)
- Coverage not measured — JavaScript/TypeScript suite
- Critical CVE: [GHSA redacted] (frontend-vue/package-lock.json)
- Critical CVE: [GHSA redacted] (frontend-vue/package-lock.json)
- Critical CVE: [GHSA redacted] (frontend-vue/package-lock.json)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (11 lines × 2) (backend/Contexture.Api/Filebased/Database.fs)
- Duplicated block (11 lines × 2) (backend/Contexture.Api/Filebased/Database.fs)
- Duplicated block (13 lines × 2) (backend/Contexture.Api/ReadModels/Find/FindReadModels.fs)
- Duplicated block (16 lines × 2) (backend/Contexture.Api/ReadModels/Find/FindReadModels.fs)
- Duplicated block (2–5 lines × 7) (backend/Contexture.Api/AllRoutes.fs)
- Duplicated block (5 lines × 2) (backend/Contexture.Api/Filebased/Database.fs)
- Duplicated block (6 lines × 2) (backend/Contexture.Api/Apis/BoundedContexts.fs)
- Duplicated block (7 lines × 2) (backend/Contexture.Api/Filebased/Convert.fs)
- Duplicated block (7 lines × 2) (backend/Contexture.Api/Infrastructure/Subscriptions.fs)
- Duplicated block (8–9 lines × 2) (backend/Contexture.Api/Apis/Collaborations.fs)
- End-of-life runtime: .NET net7.0
- FileTooLong: Filebased/Database.fs (backend/Contexture.Api/Filebased/Database.fs)
- …and 97 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
trustbit/Contexture was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 8e2e038f55c4285f19585bdb8fca0091dec170bd — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-b84573e22831.