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.