# The Nominal stack

Every library, connector, and API leads to one underlying data store. Click a box to see its docs.

```mermaid
---
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
```

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.
