Skip to content

Ecosystem

The Virtufin platform is a federation of focused repos. Each repo ships its own documentation site; the sites cross-link so a developer can find related material without leaving the platform.

Solid arrows are real dependencies (package/build-time); dashed arrows are "deploys" relationships, not code dependencies. Click any node to open its docs site (or repo page, where no docs site exists).

graph TD
    subgraph Foundation
        dotnet["virtufin-dotnet<br/>.NET core libraries"]
        openspec["virtufin-openspec<br/>domain spec"]
        common["virtufin-common<br/>CI/build tooling for all repos"]
    end

    subgraph "Core services"
        api["virtufin-api<br/>API gateway"]
        service["virtufin-service<br/>multi-instance coordination"]
        wm["virtufin-workmanager"]
        wsm["virtufin-websocketmanager"]
    end

    subgraph "Dev kits"
        stratdevkit["virtufin-strategy-devkit"]
        execdevkit["virtufin-execution-devkit"]
        indicdevkit["virtufin-indicator-devkit"]
        mddevkit["virtufin-market-data-devkit"]
    end

    subgraph "Deployable workers"
        strategies["virtufin-strategies"]
        execengines["virtufin-execution-engines"]
        indengines["virtufin-indicator-engines"]
        mdengines["virtufin-market-data-engines"]
        workers["virtufin-workers"]
        examples["virtufin-examples"]
    end

    subgraph Frontends
        tui["virtufin-tui"]
        app["virtufin-app"]
        site["site"]
    end

    subgraph Deployment
        helm["helm"]
        deploylocal["deploy-local"]
        dockercompose["docker-compose"]
    end

    docs["docs<br/>(this site)"]

    service --> api
    wm --> api
    wm --> service
    wsm --> api
    wsm --> service

    stratdevkit --> dotnet
    stratdevkit --> wm
    execdevkit --> dotnet
    execdevkit --> wm
    indicdevkit --> dotnet
    indicdevkit --> wm
    indicdevkit --> api
    mddevkit --> dotnet
    mddevkit --> wm

    strategies --> wm
    strategies --> stratdevkit
    execengines --> wm
    execengines --> execdevkit
    indengines --> wm
    indengines --> indicdevkit
    indengines --> mddevkit
    mdengines --> wm
    mdengines --> mddevkit
    mdengines --> api
    workers --> wm
    workers --> api
    examples --> wm
    examples --> api
    examples --> wsm
    examples --> stratdevkit
    examples --> execdevkit
    examples --> indicdevkit
    examples --> mddevkit
    examples -.-> strategies
    examples -.-> execengines
    examples -.-> indengines
    examples -.-> mdengines

    tui --> api
    app --> api
    app --> wm
    app --> wsm

    helm -.-> api
    helm -.-> wm
    helm -.-> wsm
    deploylocal -.-> api
    deploylocal -.-> wm
    deploylocal -.-> wsm
    dockercompose -.-> api
    dockercompose -.-> wm
    dockercompose -.-> wsm
    dockercompose -.-> app

    click dotnet "https://lib.docs.virtufin.com" "virtufin-dotnet docs" _blank
    click openspec "https://specs.docs.virtufin.com" "virtufin-openspec docs" _blank
    click common "https://git.haenerconsulting.com/virtufin/common" "virtufin-common repo" _blank
    click api "https://api.docs.virtufin.com" "virtufin-api docs" _blank
    click service "https://git.haenerconsulting.com/virtufin/service" "virtufin-service repo" _blank
    click wm "https://workmanager.docs.virtufin.com" "virtufin-workmanager docs" _blank
    click wsm "https://websocketmanager.docs.virtufin.com" "virtufin-websocketmanager docs" _blank
    click stratdevkit "https://strategy-devkit.docs.virtufin.com" "virtufin-strategy-devkit docs" _blank
    click execdevkit "https://execution-devkit.docs.virtufin.com" "virtufin-execution-devkit docs" _blank
    click indicdevkit "https://indicator-devkit.docs.virtufin.com" "virtufin-indicator-devkit docs" _blank
    click mddevkit "https://market-data-devkit.docs.virtufin.com" "virtufin-market-data-devkit docs" _blank
    click strategies "https://strategies.docs.virtufin.com" "virtufin-strategies docs" _blank
    click execengines "https://execution-engines.docs.virtufin.com" "virtufin-execution-engines docs" _blank
    click indengines "https://indicator-engines.docs.virtufin.com" "virtufin-indicator-engines docs" _blank
    click mdengines "https://market-data-engines.docs.virtufin.com" "virtufin-market-data-engines docs" _blank
    click workers "https://workers.docs.virtufin.com" "virtufin-workers docs" _blank
    click examples "https://examples.docs.virtufin.com" "virtufin-examples docs" _blank
    click tui "https://tui.docs.virtufin.com" "virtufin-tui docs" _blank
    click app "https://git.haenerconsulting.com/virtufin/app" "virtufin-app repo" _blank
    click site "https://www.virtufin.com" "virtufin site" _blank
    click helm "https://git.haenerconsulting.com/virtufin/helm" "helm repo" _blank
    click deploylocal "https://git.haenerconsulting.com/virtufin/deploy-local" "deploy-local repo" _blank
    click dockercompose "https://git.haenerconsulting.com/virtufin/docker-compose" "docker-compose repo" _blank
    click docs "https://docs.virtufin.com" "docs site (this site)" _blank

Virtufin repos

Repo What it is Docs site
virtufin/docs This site. The central hub — platform overview, concepts, architecture, and this ecosystem map. docs.virtufin.com
virtufin/common Shared infrastructure: cross-build Docker image, the canonical versions.env convention, shared Directory.Packages.props patterns, and the shared docs assets (mkdocs-base.yml, stylesheets/common.css, javascripts/mermaid-zoom.js) that every docs site pulls in at build time. Hosts all eleven reusable CI workflows: docs-common, docs-lint-common, docker-common, nuget-common, nuget-library-common, worker-nuget-common, execution-worker-nuget-common, pypi-common, npm-common, protos-common, test-parity-common — including the docs-common.yaml workflow that builds and publishes each repo's docs site. (no docs site)
virtufin/openspec The platform's normative specifications: cross-cutting rules (API-mediated pub/sub, CloudEvent envelope), per-service specs (API gateway, worker management, WebSocket proxy, multi-SDK), and operational specs (deployment, CI/CD). Scenario-driven (WHEN/THEN/AND) format. specs.docs.virtufin.com
virtufin/lib The .NET 10 library layer: Virtufin.Core (EAV framework, contract traits, DecimalAmount), Virtufin.Base (concrete types: Currency, Cash, Position, Metronome<T>), Virtufin.Data (Variant, FlatBuffers, NATS / WebSocket / Valkey IObservable<T>), Virtufin.Util (time, formatting). The "core" the rest of the platform is built on. lib.docs.virtufin.com
virtufin/api The API gateway. The single mediator through which services talk to Dapr (pub/sub, state). Hosts Gateway.InvokeJson, MethodSchema, the dynamic ServiceClient proxy used by the IGatewayClient managed adapter. api.docs.virtufin.com
virtufin/workmanager The WorkManager service. The host process for in-process workers. Implements the DotNetDllEngine (managed, via the embedded CoreCLR bridge) and the NativeDllEngine (AOT, via NativeLibrary.Load). workmanager.docs.virtufin.com
virtufin/websocketmanager The WebSocketManager service. The proxy for external WebSocket connections (Binance, Alpaca, etc.). Workers talk to it via the API gateway's websocketmanager.* methods (Connect, SendRaw, StartPublish, etc.). websocketmanager.docs.virtufin.com
virtufin/strategy-devkit The strategy development kit: the IDecide coalgebra bridge and reusable pieces that turn a strategy into a WorkManager worker. Producer half of the decide/execute loop. strategy-devkit.docs.virtufin.com
virtufin/execution-devkit The execution development kit: bridges an IExecutor into a WorkManager worker. Consumer half of the decide/execute loop. execution-devkit.docs.virtufin.com
virtufin/indicator-devkit Deploys any IIndicator<TSelf, TSample, TValue> as a standalone WorkManager worker. indicator-devkit.docs.virtufin.com
virtufin/market-data-devkit Builds world-scoped market-data workers (MarketDataWorkerBase: the market-data envelope, the exchange's event time) and owns the market-data contracts, starting with the OHLCV candle. market-data-devkit.docs.virtufin.com
virtufin/strategies Deployable strategy workers built on the IDecide coalgebra and virtufin-strategy-devkit (e.g. moving-average crossover, C# + Python variants). strategies.docs.virtufin.com
virtufin/execution-engines Deployable executor workers (Simulated / Shadow / Live) built on virtufin-execution-devkit. Consumer half of the decide/execute loop's deployed fleet. execution-engines.docs.virtufin.com
virtufin/indicator-engines Deployable indicator workers built on virtufin-indicator-devkit (SimpleMovingAverage, LogReturn, ShannonEntropy): fold closed candles into scenario-scoped indicator values. indicator-engines.docs.virtufin.com
virtufin/market-data-engines Deployable market-data workers built on virtufin-market-data-devkit (a Binance order-book maintainer, Binance candles) — ingest and maintain market data rather than participating in the decide/execute loop directly. market-data-engines.docs.virtufin.com
virtufin/workers Worker source packages — HttpGetWorker is the canonical example. Covers the IGatewayClient abstraction, the build pipeline (managed / native / both), the runtime arch check, the bridge between the WM core and per-worker shims. workers.docs.virtufin.com
virtufin/examples Worked examples — dotnet, Python and TypeScript. Verso notebooks take each devkit end to end (write a worker, test it, publish it, deploy it on demo, observe it) and chain the published engines (devkit-pipeline.verso); Python and TypeScript clients call the platform APIs through the gateway. Every example picks its API by a context name near its top ("demo" by default, from contexts.toml). For an AOT-portable worker project, see HttpGetWorker in virtufin/workers. examples.docs.virtufin.com
virtufin/service Shared multi-instance coordination library (heartbeat/peer-index, InstanceHeartbeatService) consumed by WorkManager and WebSocketManager for peer discovery and liveness. (no docs site)
virtufin/tui Operator dashboard: a Textual-based Python terminal UI that connects to a virtufin-api endpoint. tui.docs.virtufin.com
virtufin/app The platform's web app frontend. Consumes the virtufin-openspec domain spec; ships its own Kubernetes deploy config. (no docs site)
virtufin/site The public landing page at www.virtufin.com — a single hand-written static page, no framework or build step. (this is the site itself)
virtufin/helm The Helm chart that deploys the Virtufin microservices platform with Dapr sidecars on Kubernetes. (no docs site)
virtufin/deploy-local Runs the Virtufin backend services natively via dapr run for local dev — no Docker containers for the services themselves, only Dapr-managed sidecars. (no docs site)
virtufin/docker-compose Deploys the full Virtufin microservices platform (API + WM + WSM + infra) locally via Docker Compose, with its own dev.yaml/prod.yaml profiles and the same env-var convention (VIRTUFIN_DOCKER_*, VIRTUFIN_PACKAGES_*, etc.). (no docs site)

How the sites are built

All the docs sites are built with the same toolchain: - MkDocs Material, configured once in common/docs/mkdocs-base.yml: the theme (indigo palette, dark/light toggle, search, code annotations), the markdown extensions, and the shared header and footer. Every site's header shows the repo and a badge with the commit it was built from; the footer shows the build time. - mkdocs_v1.yml is the canonical config filename (mirroring each service's API version, e.g. v1). It starts with INHERIT: mkdocs-base.yml and holds only what is specific to the repo: site name and URL, repo, nav, and the shared common.css / mermaid-zoom assets. A site may override a theme feature list or the markdown extensions (tui does); lists replace the base's. - docs-common.yaml in common/.github/workflows/ is the reusable workflow: it fetches the shared templates and mkdocs-base.yml, fills in the commit and build time, builds, and publishes. Each repo's .github/workflows/docs.yaml calls it with its own docs_repo and mkdocs_config. - docs-lint-common.yaml is the reusable lint workflow for docs PRs. - Hosting: each site is a Cloudflare Pages project, <name>-docs-virtufin-com, served at <name>.docs.virtufin.com (the CNAME file at the docs root names the domain).

A new docs site needs its domain set up once. The workflow creates and deploys the Pages project, but the domain needs two records, without which it doesn't resolve (as for indicator-engines and market-data-devkit until 2026-10-10): 1. a CNAME at DNS Made Easy (zone virtufin.com): <name>.docs → <name>-docs-virtufin-com.pages.dev., TTL 1800; 2. the custom domain <name>.docs.virtufin.com on the Pages project (Cloudflare dashboard or API), which turns active once the CNAME resolves.

The same theme settings are used across every site so a developer can move between them without visual whiplash.