What this is
Reamer Server is the order core of a mid-frequency trading stack: it owns order state, sequencing, and the pre-trade decision path between a strategy and a venue. It is delivered as a C ABI and a static library, not as a program you run.
There is no reamer-server binary in this kit and none is coming. You
write a main() that implements two vtables — a gate (your pre-trade
check, with rules you define) and a broker connector (your venue
session) — links lib/libreamer_server_core.a, and calls
reamer_server_run(). That call is your server process.
That split is deliberate. The core is the part that has to be right and is
the same for everyone; the gate and the venue connector are yours, because
your risk rules and your venue relationship are yours. You do not start
from nothing: reference/ ships a working FIX 4.4 connector, a strategy
relay, an event reader and a gate that take an order to a fill in one
command (see Start from working code). Nothing in
the kit talks to a real venue on your behalf.
Scope. Mid-frequency order execution on any instrument you name: market, limit, stop, stop-limit, trailing stop, trailing stop-limit, market-if-touched, limit-if-touched and market-to-limit orders; day, GTC, IOC, FOK, GTD, at-the-open and at-the-close time in force; attached take-profit and stop-loss exits, OCO/OTO/OUO links, iceberg display size, minimum quantity, post-only, reduce-only, hidden and all-or-none flags, account and destination routing, and a user-defined payload of up to 1024 bytes that core passes to your gate and connector untouched. Your connector decides which of these your venue supports. Built around per-intent decisions at the pace of a pre-trade check, on a core sized for that latency class rather than a full L2/L3 order book.
What ships
| Path | What it is |
|---|---|
include/reamer_server_abi.h |
The entire integration contract. Every struct, vtable, and entry point, with the threading and lifetime rules stated inline. Read this first. |
lib/libreamer_server_core.a |
The execution core you link. |
lib/libreamer_license.a |
License verification, linked by your binary. |
bin/reamer-license |
Activates this machine's license (activate / status / deactivate). |
bin/reamer-config-check |
Validates a config file offline, without starting a server. |
bin/reamer-diag-bundle |
Point-in-time diagnostic bundle for a support request. |
bin/release-sign |
Verifies the detached signature over this kit's checksum. |
bin/server-bench |
Runs the concurrent-strategy sweep on your own hardware after activation, reproducing BENCHMARK.md's sizing curve — whose core-count-scaling shape is verified on a 64-core EPYC 9575F (BENCHMARK.md, "Many-Core Verification"). See "Measuring on your own hardware" there. |
EXTENSION_PROTOCOL.md |
Both extension points and both strategy wire protocols, in full. With the header, this is everything needed to integrate. |
reference-skeleton/, reference-skeleton-rust/ |
An accept-all gate and in-memory paper broker, in C++ and Rust. The smallest thing that runs: confirms your reamer_server_run() wiring before you write anything real. |
reference/ |
A worked integration: FIX 4.4 session, broker connector, strategy relay, event-bus reader, and the 100-test suite that exercises them. demo-trade.sh runs the whole path to a fill in one command — start here. Reference material, not a supported surface — see its README, including why it must not be used to benchmark the core. |
VENDOR_QUESTIONNAIRE_PACK.md |
The standing answer to an infra/risk/procurement team's security questionnaire, support model, vulnerability disclosure policy, data-handling statement, and business-continuity/escrow note — hand it to your own security review. Published as the vendor questionnaire pack. |
SECURITY_HARDENING.md |
The internal adversarial security pass already performed against the ABI/IPC and license boundaries: the defect classes found and closed, and the sanitizer + regression-test verification each fix carries. |
THIRD_PARTY_NOTICES, sbom.cdx.json |
Every open-source dependency linked into the libraries, with version and license. |
LICENSE.txt |
The licence terms governing this kit. bin/reamer-license activate reads this file from the kit root and will not activate until you accept it, so do not move bin/ out of the extracted tree. |
SHA256SUMS |
Manifest covering every file above, for post-extraction verification. |
SUPPORTED_PLATFORMS.md |
OS, arch, and glibc floor for both products — this server's floor is the higher of the two. |
Every binary in bin/ answers --version, so you can confirm which build
you have:
bin/reamer-license --version # reamer-license 4.5.0
Docs: DEPLOYMENT.md (quickstart and operations), CONFIG.md (every
config field), EXTENSION_PROTOCOL.md (the extension points in detail),
LICENSING.md (seat policy, term anchoring, activation failure modes,
business-continuity/escrow), MONITORING.md, CAPACITY_AND_LIMITS.md,
BENCHMARK.md, TIMING_INSTRUMENTATION.md, RESEARCH_TO_SERVER.md (for
teams coming from Reamer Research), VENDOR_QUESTIONNAIRE_PACK.md and
SECURITY_HARDENING.md (procurement and the security-hardening
record), and CHANGELOG.md.
Where to start
See a number in about a minute —
bin/server-bench. The cheapest thing to try, and the one to do first. It is a prebuilt binary: no compiler, no Go toolchain, no open ports, no setup. Activate a key (next section), then, from the kit root:bin/reamer-license activate <license-key> # once per machine bin/server-bench # a real number on your hardwareIt runs the concurrent-strategy sweep against
reamer_server_run()and prints the throughput/latency curve for this box, directly comparable toBENCHMARK.md. The curve's shape — clean latency up to roughly one strategy per physical core, tail (not median) degrading past that — is verified on hardware from a 4-core laptop to a 64-core EPYC 9575F, so expect your own elbow near your own core count. That is the whole ask to get a first result — everything below is there when you want to go deeper. For run-to-run repeatability, pin each strategy to its own core: it collapses the unpinned scheduler-driven variance (BENCHMARK.md, "pinning ... is a repeatability lever"). See "Measuring on your own hardware" inBENCHMARK.mdfor how to read the shape.Close the whole path:
reference/demo-trade.sh. When you want to see a live order rather than a benchmark, run it. It starts a simulated FIX venue, a strategy relay and a gate, waits for FIX Logon, and drives an order burst across three instruments through the full path — gate decision, venue fill, position book, and the updates back to the strategy:$ cd reference && ./demo-trade.sh {"type":"order_update","intent_id":"aapl-open","instrument":"AAPL","status":2,"filled_quantity":100,"last_price":190,"venue_order_id":"aapl-open"} {"type":"ack","request_id":"aapl-open","accepted":true} {"type":"order_update","intent_id":"spy-open","instrument":"SPY","status":2,"filled_quantity":250,"last_price":530,"venue_order_id":"spy-open"} {"type":"ack","request_id":"spy-open","accepted":true} {"type":"order_update","intent_id":"qqq-short","instrument":"QQQ","status":2,"filled_quantity":50,"last_price":470,"venue_order_id":"qqq-short"} {"type":"ack","request_id":"qqq-short","accepted":true} {"type":"ack","request_id":"tsla-blocked","accepted":false,"reason":"instrument not in approved list"} ...Five orders fill across AAPL/SPY/QQQ on both sides; the TSLA order is rejected by the gate's policy before it reaches the venue (
accepted:false). The acceptor log shows the position book moving on each fill; the gate log shows the accept/reject decision per intent. Cold, including the Go build, the whole run is about twenty seconds. It needs a Go toolchain, a C compiler,nc, and ports 4000/9100/8090 free.go test ./...in the same tree runs the 100-test suite in ~8s. You now have a working reference deployment exercising real order flow to read against, rather than a specification to imagine against.include/reamer_server_abi.h. Twenty minutes in this file answers most integration questions — it is the whole contract, and it is written to be read. Everything else is either a way to run what this file describes or a worked example of it.reference/, to see what a real integration looks like. A FIX session that logs on, sequences, heartbeats and reconnects, a connector that turns execution reports into ABI structs, a relay, and an event-bus reader. Read its README first, particularly the latency section — do not benchmark the core with this tree (bin/server-benchat step 1 is the tool for that);BENCHMARK.mdstates the conditions for every number the product claims.Write your own two vtables against the header. A gate that accepts and a broker connector that fills is about a hundred lines of C or C++, linked against
lib/libreamer_server_core.a, with your ownmain()callingreamer_server_run(). That is the whole integration, and no reference code is required to reach a running server —reference-skeleton/(C++ and Rust) is the smallest version of it.EXTENSION_PROTOCOL.md, "Strategy socket protocol". How a strategy talks to core in the defaultlocalmode, byte for byte, so you can drive your server from any language. Read the framing table and the two message tables; that is enough to write a client.DEPLOYMENT.md. Steps 1–2 verify the download and licence the machine; Steps 3–7 are config, your own gate and connector, and the operational checks around a live server.
Your license key
This archive contains no license key, deliberately. Your key arrives by email on payment, with this kit's download link. It carries the term you bought: a 30-day trial or 1 year. Nothing in this zip will activate on its own.
reamer_server_run() refuses to enter its loop without an active license,
so Step 4 of DEPLOYMENT.md will not run until a key is activated. If
your key did not arrive, write to:
[email protected] — missing or failed keys.
Activation is per-machine and keyed to a host fingerprint, so a
containerized deployment needs a word of setup — LICENSING.md's "Self-Service Activation Failure
Modes" covers this, and it is worth reading before you activate rather
than after.
Keys are also per-product: this kit's bin/reamer-license activates
Reamer Server licences only. A Reamer Research key will not activate it,
and a machine running both products activates each separately.
reamer-license activate presents LICENSE.txt and requires you to type
accept before it contacts the licence server. Declining consumes no seat.
The acceptance is recorded next to the activation record and is not
re-prompted for the same terms. For unattended provisioning, set
REAMER_ACCEPT_LICENSE=accept in the environment — activation without a
terminal and without that variable fails rather than defaulting to
acceptance. Amended terms carry a different hash and prompt again.
Other contacts:
| For | Address |
|---|---|
| Purchases, invoices, commercial terms | [email protected] |
| Licensing and technical support | [email protected] |
| Security correspondence | [email protected] |
What is not in this kit
Stated plainly, so you can scope the work rather than discover it:
- No venue adapter for your venue. A reference FIX 4.4 session and
broker connector ship in
reference/, exercised end to end against a simulated acceptor. They demonstrate whatReamerBrokerConnectorVtablerequires; they are not an adapter for your venue's dialect, your certification, or your credentials. That work is yours to build or to source. - No gate policy.
ReamerGateVtabledefines the decision point. The rules behind it are yours. - No strategy client.
EXTENSION_PROTOCOL.mdspecifies both wire protocols byte for byte; the client that speaks them is yours. - No OEMS, no allocation, no compliance layer.
- No product source. The core is closed-source and stays that way.
The header and
EXTENSION_PROTOCOL.mdremain the complete integration contract, and nothing inreference/is required to reach a running server. Reference code is sample material under this kit's licence — read it, copy from it, adapt it. It is not the core, and it carries no support commitment. - No key. See above.