Client Libraries¶
The client libraries let an external program, in Python, C++ or Java, connect to 3forge Enterprise and work with its data directly, without the browser UI. A client can run SQL, subscribe to live tables and receive row-level changes as they happen, publish realtime objects, and register commands that the platform can call back. It is how you wire an existing trading, risk, or research program into the data fabric.
Three libraries:
- The Python client: the
pyamipackage. Four layers: a native realtime client, a DB-API 2.0 driver, a SQLAlchemy dialect, and a pure-Python JDBC client. - The C++ client: the
ami_client_commonlibrary. A single header,ami_client.hpp, with one entry point,ami::Client. - The Java client: classes shipped inside the install. Publishing and commands through one class, subscribing through another. It does not run SQL.
The Python native layer is built on the C++ library, so the two share the same object model and the same method names. Learn one and the other reads the same.
Features¶
- Run SQL from your program: query, insert, and bulk-load Center tables over JDBC, from Python or C++, synchronously or with a callback.
- Subscribe to live row changes: receive
add/update/deletedeltas as rows change, and merge them by rowid. - Publish into the data fabric: stream objects to the Relay with per-object keys, batching, and an outbox that replays on reconnect.
- Query straight into pandas: read tables into DataFrames through the Python DB-API or the SQLAlchemy dialect.
- Connect securely and at scale: mutual-TLS client-certificate authentication, multi-server sharding, and transparent failover.
What a client can do¶
| Capability | Protocol | Python | C++ |
|---|---|---|---|
| Run SQL (query, DDL, DML) | JDBC | sql, sql_async |
sql, sql_async |
| High-throughput insert / replace | JDBC | sql_insert, sql_replace, sql_bulk_insert |
sql_insert, sql_replace (+ Table) |
| Subscribe to a live table | Center | subscribe + on_update |
subscribe + on_update |
| Publish realtime objects | Relay | publish, publish_batch, publish_dataframe |
publish_object, publish_raw |
| Register / answer commands | Relay | register_command, send_command_response |
same |
The three protocols¶
A client reaches the server over three separate connections, each with its own configuration on a named cluster:
- JDBC: request/response SQL. Query, insert, replace.
- Center: a live subscription. You get the current rows once, then a stream of
add/update/deletechanges. - Relay: publish realtime objects into the fabric, and register commands.
You use only the protocols your program needs; a read-only analytics job uses JDBC alone, a feeder uses Relay alone, a dashboard uses Center.
Where to start¶
- Concepts: the mental model: clusters, the three protocols, callbacks, and the type system. Read this first.
- Quickstart: connect, run one query, and watch one live subscription, in both languages.
- Python client / C++ client: the full reference for each.
- Java client: publishing to a Relay, answering commands, and subscribing to Center tables from an external Java application.
- Configuration: ports, authentication, TLS, timeouts, failover, sharding.
- Use cases: market data to a live dashboard, a realtime risk and P&L loop, and quant analytics with pandas.
This page introduces the Python and C++ clients
The ODBC driver has its own page in this section. The Excel add-in (RTD server and XLL) is documented separately.
Verified live via the Python client (build 32437)
The Python client flows in this section, connect over mutual TLS, run SQL, subscribe and receive
updates, insert rows, and merge by id, were reproduced end-to-end against a live instance.
The C++ snippets share the same object model but were not separately compiled and run.