Skip to content

About

Building Optix extensions and distributing them through the Optix marketplace.

Resources

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

Optix Extension Samples

Reference implementations and publish tooling for building Optix extensions and distributing them through the Optix marketplace.

What is an Optix extension?

An Optix extension (also called a workload) pairs two components:

  • A C# adapter (an FT Optix Additional Module) that exposes the extension's capabilities as OPC UA nodes in FT Optix Studio and Runtime
  • A Python service that runs as a separate process managed by a pre-installed extension framework (such as MLServices)

The two communicate over the extension framework's IPC bridge. The extension is packaged into a Margo workload bundle and published to the Optix marketplace catalog. From there it can be pulled and installed on a target machine using the optix CLI.

The extension framework must be pre-installed on every target machine. Workloads do not bundle the runtime.

Two authoring patterns

Generic Typed Instance
C# adapter Pre-built; shipped with the extension framework Custom, authored per workload
OPC UA surface Auto-generated from Python function signatures at design time Authored explicitly in Module.xml
Instance state Stateless Persistent per-instance state in the framework's KV store
C# authoring required No Yes
Best for Stateless compute, inference, transformation Named instances with lifecycle; domain-specific Studio UX

Samples in this repository

Directory Pattern Description
generic-ml-service/ Generic Power function — a single stateless math function
typed-ml-service/ Typed Instance Event Logger — named logs with append, query, and delete lifecycle
marketplace-publish/ — Python publish tooling and per-sample publish.ps1 scripts

Repository layout

optix-extensions-samples/
├── generic-ml-service/              # Generic pattern sample
│   ├── application-description.yaml
│   ├── workload/
│   │   ├── service/                 # Python service code (no adapter)
│   │   ├── install.ps1
│   │   └── install.sh
│   └── README.md
├── typed-ml-service/                # Typed Instance pattern sample
│   ├── application-description.yaml
│   ├── workload/
│   │   ├── adapter/                 # C# adapter source + Module.xml
│   │   ├── service/                 # Python service code
│   │   ├── optix.yaml               # Build manifest (read by optix build)
│   │   ├── install.ps1
│   │   └── install.sh
│   └── README.md
└── marketplace-publish/             # Publish tooling
    ├── core/                        # Python publish library
    ├── generic-ml-service/          # publish.ps1 + product.json for generic sample
    ├── typed-ml-service/            # publish.ps1 + product.json for typed sample
    └── README.md

Quick start

⚠️ Disclaimer & License

Rockwell Automation maintains these repositories as a convenience to you and other users. Although Rockwell Automation reserves the right at any time and for any reason to refuse access to edit or remove content from this Repository, you acknowledge and agree to accept sole responsibility and liability for any Repository content posted, transmitted, downloaded, or used by you. Rockwell Automation has no obligation to monitor or update Repository content

The examples provided are to be used as a reference for building your application and should not be used in production as-is. It is recommended to adapt the example for the purpose, of observing the highest safety standards.

License: Distributed under the MIT License.

About

Building Optix extensions and distributing them through the Optix marketplace.

Resources

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages