Two installers: RaiMS, the Rai message service (a Rendezvous / NATS / Redis compatible
daemon that runs as a Windows service), and Rai MD API, the market data client API with C++, .NET and Java
bindings plus the raisub2 / raipub2 / raiping2 / raireplay2 test programs.
Install RaiMS first, then Rai MD API, and the test programs will talk to the local service on port 7500.
| File | Version | Size | Installs to | SHA-256 |
|---|---|---|---|---|
| raims-1.52.0-109-win64-setup.exe | 1.52.0-109 | 4.4 MB | C:\Program Files\RaiMS |
659a623d10c70422a05fcb04250cdabf91e8016bd8906cb7dff2db341f7ddad7 |
| raimdapi-1.0.0-1-win64-setup.exe | 1.0.0-1 | 3.3 MB | C:\Program Files\RaiMdApi |
899f17ca293ebd1365b0d52f5f54988fdd2b7652cdbf6c7ea82719b057b1ac89 |
Verify a download in PowerShell with Get-FileHash .\raims-1.52.0-109-win64-setup.exe.
The installers are not code signed; Windows SmartScreen will ask for confirmation (More info → Run anyway).
Program Files need them).bin\.draisub2.exe …): the .NET 9 runtime — winget install Microsoft.DotNet.Runtime.9.jraisub2.cmd …): a JRE 21 or newer on the PATH.Run raims-1.52.0-109-win64-setup.exe (or … /S for a silent install). It:
ms_server.exe, ms_gen_key.exe, raisvc.exe and the evaluation config to C:\Program Files\RaiMS;ms_gen_key -d config -s eval -y -f) the first time only — keys survive upgrades;ms_server.exe;bin to the system PATH.ms_gen_key creates a new service key
(config\svc_eval.yaml, signed with the private key in .pass/.salt), and
ms_server only networks with peers that hold the same service key — two machines that each ran
the installer have two different keys and will not mesh, even with matching transport config. Local clients
(rv, NATS, Redis) are not affected; the key only authenticates ms_server to ms_server. To network several
ms_servers, generate the key once, export a config per peer with ms_gen_key -x <peer names> -s eval,
and copy each exported directory to that host's config\ before starting the service.
See the RaiMS guide, Key Configuration.
The evaluation config (config\tport_*.yaml, edit and restart the service to change) listens on:
| transport | listens on | clients |
|---|---|---|
| rv | *:7500 | Rendezvous (rvd) clients, the Rai MD API programs |
| nats | *:4222 | any NATS client |
| redis | 127.0.0.1:6379 | redis-cli, RESP clients |
| tel | 127.0.0.1:2222 | telnet 127.0.0.1 2222 — the ms_server console |
Check it in PowerShell:
& "C:\Program Files\RaiMS\bin\raisvc.exe" status RaiMS # RaiMS: running (exit 0)
Get-NetTCPConnection -State Listen | ? { $_.LocalPort -in 7500,4222,6379,2222 }
Get-Content "C:\Program Files\RaiMS\log\ms_server.log" -Tail 20
raisvc start|stop|status RaiMS controls the service; ms_server.exe -d config -c runs it in a console instead.
Run raimdapi-1.0.0-1-win64-setup.exe (or … /S). It installs to C:\Program Files\RaiMdApi,
registers an uninstaller in Apps & features and optionally appends bin to the system PATH.
bin\ raisub2 raipub2 raiping2 raireplay2 (C++) raisub raipub raiping (C++ v1 api)
draisub2 draipub2 draiping2 draireplay2 (.NET) jraisub2.cmd jraipub2.cmd … (Java)
raimdapi.dll (C api, raiapi2_c.h) RaiApi2.dll (.NET binding) jraiapi2.dll jraimsg.dll (JNI)
lib\ raimdapi.lib libraimdapi.a *.jar
include\ raiapi2.h raiapi2_c.h raiapi.h and the base/msg/stream/util headers
Open two PowerShell windows in C:\Program Files\RaiMdApi\bin. Subscribe in the first, publish from the second
(-daemon tcp:7500 is the local RaiMS; use tcp:<host>:7500 for a remote one):
# window 1: wait for one message on subject TEST.HELLO .\raisub2.exe -daemon tcp:7500 -noDict -msgCount 1 -timeout 30 -subject TEST.HELLO # window 2: publish one record .\raipub2.exe -daemon tcp:7500 -subject TEST.HELLO -count 1 -data NAME=hello-windows -form '""'
The subscriber prints the record and exits:
## Subject TEST.HELLO (old state=NO_MSG,new=INITIAL) MSG_TYPE : UINT 2 : 8 [INITIAL] SEQ_NO : UINT 2 : 1 REC_STATUS : UINT 2 : 0 [OK] NAME : STRING 14 : "hello-windows"
Round-trip latency through the service (publishes and subscribes to itself):
.\raiping2.exe -daemon tcp:7500 -subject PING.TEST -perSec 200 -msgCount 1000 # PING.TEST: r=199.9/s av=0.5 min=0.08 max=2.7ms
The .NET programs take the same arguments (.\draisub2.exe …, .\draipub2.exe …, .\draiping2.exe …)
and interoperate with the C++ ones; the Java launchers are jraisub2.cmd, jraipub2.cmd, jraiping2.cmd.
Any program accepts -help. The ms_server console shows the connections: telnet 127.0.0.1 2222, then show ports, show subs.
Note for PowerShell: an empty argument must be written '""' (as above for -form); cmd.exe takes plain "".
Either from Settings → Apps → Apps & features (entries RaiMS 1.52.0-109 and Rai MD API 1.0.0-1), or from an Administrator prompt:
& "C:\Program Files\RaiMdApi\uninstall.exe" /S & "C:\Program Files\RaiMS\uninstall.exe" /S
The RaiMS uninstaller stops and removes the service, removes the firewall rule and the PATH entry. The
config\ directory with the generated keys is left behind so a reinstall
keeps the same identity; delete C:\Program Files\RaiMS\config by hand to remove it.
Reinstalling over a running installation is supported (the installer stops the old service first).
raisvc status RaiMS, then log\ms_server.out and log\ms_server.log.Get-NetFirewallRule -DisplayName "RaiMS ms_server".ms_server by hand: the config directory has no key yet —
ms_gen_key -d config -s eval -y -f.UnsupportedClassVersionError means the JRE is older than 21.RaiMS is github.com/raitechnology/raims, Rai MD API is github.com/injinj/raimdapi; both are cross compiled on Linux with mingw-w64. Repositories for the sibling libraries, the build host packages, and the commands that produce these installers (and the native Linux builds) are on the build page.
Built 2026-09-04 with the mingw-w64 cross compiler. Questions: contact Rai Technology.