Skip to content

Get Started

The shortest path from zero to a running worker.

1. Bootstrap a local environment

The platform ships a one-shot installer that brings up the three services plus Dapr plus a NATS broker on a single host (Docker required):

git clone https://git.haenerconsulting.com/virtufin/deploy-local
cd deploy-local
./install.sh

When the script finishes, the following are live on localhost:

Service gRPC REST Docs
API Gateway :5002 :5001 api.docs.virtufin.com
WebSocketManager :5002 :5001 websocketmanager.docs.virtufin.com
WorkManager :25002 :25001 workmanager.docs.virtufin.com

2. Pick a client SDK

The API gateway exposes the same surface in every language. Pick the one that matches the consumer you're writing:

Language Repo Package
C# / .NET virtufin/lib Virtufin.Api.Client
Python virtufin/python virtufin-api
TypeScript virtufin/ts virtufin-api

A REST / Swagger UI is also live at http://localhost:5001/swagger once install.sh finishes.

3. Subscribe to a market-data lane

The fastest "hello world" is to subscribe to a live exchange. From the C# client (other SDKs are equivalent):

using Virtufin.Api.Client;

var client = new ApiClient(new ApiClientOptions
{
    Host = "localhost",
    Port = 5002,
});

await foreach (var evt in client.Pubsub.SubscribeAsync(
    new SubscribeRequest { Topic = "act.exchange.binance.orderbook.update" }))
{
    Console.WriteLine($"ce-type={evt.CeType} subject={evt.Subject} data={evt.Data}");
}

The full RPC surface (Invoke, Pubsub.PublishEvent, Pubsub.Subscribe, State.*, Config.*) is on the API gateway sub-site.

4. Try a sample worker

The virtufin-workers repo ships working workers in every supported engine. The fastest end-to-end is the canonical HttpGetWorker:

git clone https://git.haenerconsulting.com/virtufin/workers.git
cd workers/HttpGetWorker
python3 scripts/build_managed.py
python3 scripts/publish.py
python3 scripts/create_worker.py --api-client-host localhost --api-client-port 5002
python3 scripts/start_worker.py --api-client-host localhost --api-client-port 5002 --id <worker_id>

Trigger it by publishing a CloudEvent on command.httpgetworker whose data is {"url": "https://example.com/data"} — see the workers repo's Getting Started walkthrough for the full trigger snippet and expected output.

To write your own worker, see the Worker DevKit page for the wire protocol and the Engine System page for which engine to use.

5. Read the spec

For anything that needs to be precise (topic naming, scenario registry semantics, state-key prefixes, worker wire contract), the spec is the answer:

6. Deploy it

This page bootstraps a local stack. For Docker Compose, Kubernetes with Helm, and the production Ansible path — plus workload placement and verification — see Operations.