Choose Your Client#
The Nominal stack is layered. Choose a client based on your language preference and/or level in the stack. They all interface with the same Nominal data store.
The Stack#
---
config:
layout: elk
themeVariables:
fontFamily: Verdana, Geneva, Arial
fontSize: 20px
---
%% bottom to top, so the data store is at the top
flowchart BT
%% the logos are the home page's (landing/logos/), with the xmlns an <img> needs, and the
%% instro wordmarks are instro's docs logos. The Nominal mark and the wordmarks come in white
%% for dark pages and black for light. Paths start from the project's or the site's root, which
%% _ext/snippet_paths.py turns into paths from the page that includes this snippet, and
%% mermaid.css sizes the logos and shows one of each pair
subgraph tools["SW Connectors"]
teststand["<img src='../_static/logos/teststand.svg' alt=''>NI TestStand"]
veristand["<img src='../_static/logos/veristand.svg' alt=''>NI VeriStand"]
flexlogger["<img src='../_static/logos/flexlogger.svg' alt=''>NI FlexLogger"]
simulink["<img src='../_static/logos/simulink.svg' alt=''><span>MathWorks<br>Simulink</span>"]
%% invisible links stack the connectors in two rows, TestStand and VeriStand on top
flexlogger ~~~ teststand
simulink ~~~ veristand
end
subgraph domain["Proprietary Languages"]
labview["<img src='../_static/logos/labview.svg' alt=''>NI LabVIEW"]
matlab["<img src='../_static/logos/matlab.svg' alt=''><span>MathWorks<br>MATLAB</span>"]
end
subgraph languages["General Languages"]
rust["<img src='../_static/logos/rust.svg' alt=''>Rust"]
go["<img src='../_static/logos/go.svg' alt=''>Go"]
python["<img src='../_static/logos/python.svg' alt=''>Python"]
end
subgraph hw["HW Connectors"]
instro["<img src='../_static/logos/instro.svg' alt=''><img class='wordmark on-dark' src='../_static/logos/instro-logo-solid-white.svg' alt='instro'><img class='wordmark on-light' src='../_static/logos/instro-logo-solid-black.svg' alt='instro'>"]
end
%% no Grafana logo: Grafana Labs' trademark policy needs its written permission to use one on
%% a website, so the box has an original dashboard icon (_static/logos/dashboard.svg). Its
%% marks go before a noun ("Grafana plugin"), with ® on first use
subgraph viz["Visualization"]
grafana["<img src='../_static/logos/dashboard.svg' alt=''><span>Grafana®<br>plugin</span>"]
end
autogen["Generated Bindings"]
subgraph access["Access Layer"]
%% in this order, the layout draws REST, gRPC, Postgres from left to right
grpc["gRPC API"]
pgwire["Postgres protocol"]
rest["REST API"]
end
%% the data store stands out: .hero (mermaid.css) sets its logo large, above a bold label,
%% with a heavier outline, and its style line below gives it a denser fill
store[("<img class='hero on-dark' src='../_static/logos/nominal-white.svg' alt=''><img class='hero on-light' src='../_static/logos/nominal-black.svg' alt=''><span>Nominal data store</span>")]
tools --> domain
domain --> autogen
%% dotted, as instro streams to Nominal only if you choose to
hw -.-> languages
languages --> autogen
viz --> autogen
autogen --> access
access --> store
click teststand href "../../ni-teststand/" "NI TestStand"
click veristand href "../../ni-veristand/" "NI VeriStand"
click flexlogger href "../../ni-flexlogger/" "NI FlexLogger"
click simulink href "../../simulink/" "Simulink"
click instro href "../../instro/" "instro"
click grafana href "https://grafana.com/grafana/plugins/nominal-nominalds-datasource/" "Grafana plugin catalog"
click labview href "../../ni-labview/" "NI LabVIEW"
click matlab href "../../matlab/" "MATLAB client"
click python href "../../python/" "Python client"
click rust href "https://github.com/nominal-io/nominal-client-rs" "Rust client on GitHub"
click go href "https://github.com/nominal-io/nominal-streaming-go" "Go streaming client on GitHub"
click sql href "../../sql-guides/" "SQL"
click store href "../../platform/data-model/" "Data model"
click rest href "../../api/" "REST API reference"
click grpc href "../../api/grpc/" "gRPC API reference"
click pgwire href "../../sql-guides/postgres-clients/" "Postgres clients"
%% translucent greys work on light and dark pages; the text keeps the theme's color
classDef default fill:#8080801a,stroke:#808080
style tools fill:#8080800d,stroke:#80808080
style domain fill:#8080800d,stroke:#80808080
style languages fill:#8080800d,stroke:#80808080
style autogen fill:#8080800d,stroke:#80808080
style access fill:#8080800d,stroke:#80808080
style hw fill:#8080800d,stroke:#80808080
style viz fill:#8080800d,stroke:#80808080
style store fill:#80808040,stroke:#808080
Click on a box to see docs for a specific client.
Help Choosing a Client#
If you have no preference, start with the Python client. It’s the longest-running client, with optional extras for TDMS files, video, and dataframes. Its streaming uses Nominal’s Rust streaming library where it’s available, so you don’t need to change languages for streaming speed. Choose the Rust client when your application is written in Rust. Choose the Go library to stream time series from a Go service; streaming is all it does. If your tests already run in MATLAB, Simulink, or an NI tool, use the MATLAB client, built on the Rust client, or the connector for that tool.
Details#
Nominal provides libraries for the general languages Python, Rust, Go, as well as for the proprietary languages MATLAB and LabVIEW. It also provides software connectors for Simulink, TestStand, VeriStand, and FlexLogger. Each library and software connector writes data to the underlying data store, and some also read it back.
All of these tools are built on the access layer’s REST API and gRPC API. The generated bindings are Python, Rust, and Go packages generated from the REST API and gRPC API definitions.
Nominal’s hardware connector, instro, is an open-source Python library for test equipment. It can stream measurements to Nominal through the Python client, or write them to files instead.
For Grafana® dashboards, Nominal provides a data source plugin. It brings time series, logs, and SQL query results from Nominal into Grafana dashboards.
The underlying data store also answers SQL queries, sent through the SQL REST API or from a Postgres client.
NI®, NI LabVIEW®, NI TestStand®, NI VeriStand®, and NI FlexLogger® are registered trademarks of NI®. MATLAB® and Simulink® are registered trademarks of The MathWorks, Inc. Grafana® is a registered trademark of Grafana Labs. All other trademarks and logos are the property of their respective owners.