UnderAutomation
Any question?

[email protected]

Contact us
UnderAutomation
⌘Q
Stäubli

Staubli SDKControl Stäubli robots from your own software

Quickly create applications in .NET, Python or LabVIEW that communicate with your Staubli industrial robot. A ready-to-use software library: your PC talks to the robot over the network cable.

Try it freeSee pricing

From 300 € / $350, paid once

Nothing to install on the robot
30-day free trial
Perpetual license, no subscription
.NET / C#
Python
Stäubli robot
Staubli SDK
1// dotnet add package UnderAutomation.Staubli
2using UnderAutomation.Staubli;
3
4var controller = new StaubliController();
5controller.Connect("192.168.0.254");
6
7double[] joints = controller.Soap.GetCurrentJointPosition(robot: 0);
8var tasks = controller.Soap.GetTasks();
9var ios = controller.Soap.GetAllPhysicalIos();
In short

What you get

Plug & Play

Connect your robot in just a few minutes. No license manager to install, no USB key. Only reference the library.

No plugins to install on the robot

Use of network protocols provided as standard by the robot controller.

VAL 3 add-onROS

30-day trial

Try it free for 30 days, no commitment, no registration required

Pay once, use forever

Perpetual license, no subscription required, regardless of the number of robots, developers, or redistributed software

Features

Staubli SDK Features: SOAP and FTP for CS8 & CS9

Each feature comes with a code sample. Click on it to see the full code.

Moving the robot

Powering remotely and sending of joint movement commands or Cartesian coordinates.

Frame intermediate = controller.Soap.ForwardKinematics(robot: 0, joints).Position;
intermediate.Py += 0.05;
controller.Soap.SetPower(true);
// Joint move to joint values, in radians
IMoveResult result = controller.Soap.MoveJJ(robot: 0, joints, mdesc);
// Joint move to a Cartesian frame
result = controller.Soap.MoveJC(robot: 0, target, mdesc);
// Straight line to a Cartesian frame
result = controller.Soap.MoveL(robot: 0, target, mdesc);
// Circle through an intermediate frame, to a target frame
result = controller.Soap.MoveC(robot: 0, intermediate, target, mdesc);
// The controller accepted the move, or tells why not
if (result.ReturnCode != MotionReturnCode.Success)
Console.WriteLine($"Move {result.Id} refused: {result.ReturnCode}");
controller.Disconnect();
}
Click to see the full code

Handling applications

Load, start, stop, pause and supervise the execution of tasks.

var controller = new StaubliController();
controller.Connect("192.168.0.254");
// Path of the project on the disk of the controller
string project = "Disk://myProject/myProject.pjx";
// Load the application in memory, without starting it
controller.Soap.LoadProject(project);
// Start it
controller.Soap.StartApplication(project);
controller.Disconnect();
}
Click to see the full code

File transfer

List, upload, download and delete the files of the controller, and send a complete VAL 3 application in one call. By FTP, or with the .controller file of a controller emulated by Staubli Robotics Suite.

var controller = new StaubliController();
controller.Connect(parameters);
// The application must not be in memory while its files are replaced
controller.Soap.StopAndUnloadAll();
// Copies C:\MyApps\myApp and its sub-folders to /usr/usrapp/myApp on the controller
string remoteFolder = controller.File.UploadApplicationToController(@"C:\MyApps\myApp",
progress => Console.WriteLine($"{progress:0}%"));
// /usr/usrapp/myApp/myApp.pjx is Disk://myApp/myApp.pjx for the SOAP methods
controller.Soap.LoadProject("Disk://myApp/myApp.pjx");
controller.Soap.StartApplication("Disk://myApp/myApp.pjx");
controller.Disconnect();
}
Click to see the full code

Position and kinematics

Read the joints and the Cartesian position of the robot, and compute the forward and inverse kinematics on the controller.

var controller = new StaubliController();
controller.Connect("192.168.0.254");
// Joint values in radians, here the current ones
double[] joints = controller.Soap.GetCurrentJointPosition(robot: 0);
// The controller computes the flange frame for these joints
IForwardKinematics fk = controller.Soap.ForwardKinematics(robot: 0, joints);
// Position of the frame origin, and its orientation as a rotation matrix
Frame frame = fk.Position;
Console.WriteLine($"P = [{frame.Px}, {frame.Py}, {frame.Pz}]");
// Configuration of the arm for this position (shoulder, elbow, wrist)
Config config = fk.Config;
Console.WriteLine(config);
controller.Disconnect();
}
Click to see the full code

Information

Get controller and controlled robot characteristics, including model, software version, power status and more.

var controller = new StaubliController();
controller.Connect("192.168.0.254");
// The robots driven by the controller. The index in this array
// is the robot number that the other methods take.
Robot[] robots = controller.Soap.GetRobots();
for (int i = 0; i < robots.Length; i++)
{
Robot robot = robots[i];
Console.WriteLine($"Robot {i}: {robot.Arm}"); // for example TX2-60
Console.WriteLine($" Kinematic: {robot.Kinematic}"); // Anthropomorph6, Scara...
Console.WriteLine($" Mount type: {robot.MountType}"); // Floor, Ceiling, Wall
Console.WriteLine($" Tuning: {robot.Tuning}");
}
controller.Disconnect();
}
Click to see the full code

Inputs / Outputs

List, read and write entries and outputs of the controller

var controller = new StaubliController();
controller.Connect("192.168.0.254");
// Names as returned by GetAllPhysicalIos
string[] names = { @"BasicIO-1\%I0", @"BasicIO-1\%Q0" };
// One state per name, in the same order
PhysicalIoState[] states = controller.Soap.ReadIos(names);
for (int i = 0; i < names.Length; i++)
{
PhysicalIoState state = states[i];
// State tells if the name exists on this controller
if (state.State != PhysicalIoEnumState.Defined)
{
Console.WriteLine($"{names[i]}: {state.State}");
continue;
}
Console.WriteLine($"{names[i]} = {state.Value} locked={state.Locked} simulated={state.Simulated}");
}
controller.Disconnect();
}
Click to see the full code
Demo

See it in action

Video and screenshots of the demo application delivered with the SDK.

Windows application example

No code to write: test the SDK on your robot with the demo application.

Download (139 MB)By downloading, you accept the general conditions of use: See terms and conditions

Examples on GitHub

The sources of examples of use of this SDK are available on Github

Python example

Example of operation of this SDK with Python to recover the Cartesian position of a robot.

Installation

Install it in one command

Choose your language. The 30-day trial starts at the first use, with no registration.

.NET

NuGet package for C# and VB.NET, from .NET Framework to the latest .NET.

dotnet add package UnderAutomation.Staubli
See on NuGetSee on GitHubOpen the guide

Python

Python package on PyPI, for Windows, Linux and macOS.

pip install UnderAutomation.Staubli

AI agents

Skill for AI coding agents (Claude Code, Cursor, Copilot...): your assistant knows the API of the SDK.

npx skills add underautomation/skills --skill underautomation-staubli-csharp
Documentation

Browse the documentation

The documentation allows you to quickly start developing with the library. The same functionality is available in all supported languages.

Browse the documentation

The documentation allows you to quickly start developing with the library. The same functionality is available in all supported languages.

Getting started with .NET

Code your application in C# or VB with this 100% managed library, without dependencies and available on NuGet.org in the version and architecture of your choice (x86, x64, ARM, Linux, Windows, MacOS, .NET Framework, .NET Core, UWP, ...)

Get started with Python

Quickly develop a program in Python that communicates with your robot using this library. It is available on PyPI.

Guides and how-to articles

Each article explains how to do one task, step by step, with code you can copy.

Get the robot position

Read the position of a Staubli robot from C# or Python: joints, flange or tool position, and which method to choose. Complete program included.

Read and write I/O

Find the I/O names, wait for an input and switch an output of a Staubli CS8 or CS9 controller from C# or Python.

Move the robot from a PC

Power the arm and move a Staubli robot in a straight line from C# or Python, without a VAL 3 program. Which move to choose, and the frequent errors.

Run a VAL 3 program

Load a VAL 3 project from the disk of the controller, start it, check its tasks and stop it, from C# or Python.

Monitor the state of the robot

Poll the applications and the VAL 3 tasks of a Staubli controller, print each change of state and each runtime error.

Pricing

Libraries can be downloaded for free and can be tested for 30 days. After this period, you can ask us to extend the trial period, or buy the license that suits you best: standard, pro or source. After purchasing, you have a maintenance period, giving you access to the support and the possibility of updating. When you buy a license to use, it is linked to a robot brand, you can use it forever, without recurring fee, regardless of the number of robot, developer or software that you redistribute to your customers. If you are a distributor and wish to offer your customers one of our products, please contact us to discuss special conditions and prices.

Standard Site License

•

$350lifetime
$210for universities (40% discount)
Designed for industrial environments, providing lifetime full-feature access.
1 year maintenance included (access to updates)
Same conditions as the Pro License, except that support is not prioritized and maintenance is 1 year.
There are no internal sources; only the obfuscated DLL is provided.
No assistance by videoconference (only via email).
Choose the right license for your project
Buy now
Most popular

Pro License

•

$700
$1060
lifetime
$420for universities (40% discount)
For critical production environments requiring priority support and longer-term maintenance.
3 years maintenance included (access to updates) with no renewal orders during this term (zero paperwork)
Complete and permanent SDK: no recurring subscription is required, the license is yours forever and works in all programming languages ​​for a robot brand.
Can be used only by the organization holding the license, at the postal address indicated. All team developers will share the same license, regardless of the number of development machine.
Any application developed using the SDK can be delivered to an unlimited number of your customers at no additional cost, regardless of the number of robots to connect.
The license is a kind of password to call in the code that unlocks the features. No additional software to install. No USB key.
Priority Support (<24h on average)
Remote assistance (email and up to 2h videoconference)
There are no internal sources; only the obfuscated DLL is provided.
Upgrade to Source anytime (pay the difference)
Buy now

Source license

•

$1400lifetime
$840for universities (40% discount)
For complete technical sovereignty, deep customization, and total independence.
Same conditions as the pro license
Complete internal code of the library in C#
Visual Studio solution that includes thousands of lines of code developed over several years
You can modify this source code and use it in your application, within the limits defined in the general terms of use
Works seamlessly with AI coding agents (Claude, Copilot, Cursor, Codex...) thanks to full source code access and included context files (AGENTS.md) that give the LLM the exact knowledge of the SDK internals
Buy now
FAQ

Frequently asked questions

No. The SDK uses the SOAP server of the controller, the interface that Staubli Robotics Suite (SRS) also uses, and its FTP server for the files. The controller must be reachable on the network, with a user account that has the rights for the requested operations.

CS8 and CS9 controllers, with the same API for both. The SDK reads the robots of the controller, their positions, the I/O and the VAL 3 applications, and can move the robot.

Yes. The emulator has no FTP server, but it keeps the files of the emulated controller in the folder of its .controller file, with the same tree as a real controller. Give the path of the .controller file as address: the same methods and the same paths then work, and the SDK reads the SOAP port of the emulated controller in its configuration. Use a UNC path when the emulator runs on another PC.

A license is permanent, with no subscription. Standard: 300 EUR / 350 USD. Pro: 600 EUR / 700 USD. Source: 1200 EUR / 1400 USD. It covers one organization at one address, with any number of developers, robots and delivered applications. Updates are included for 1 year with Standard and 3 years with Pro and Source. Universities get a 40% discount.

Yes. Every feature works for 30 days from the first use, with no registration. The trial can be extended on request. The Windows demo application lets you try the SDK on your robot without writing code.

Yes. The library is compiled for .NET Standard 2.0 and 2.1, which run on Windows, Linux and macOS, on x64 and ARM. For Python on Linux or macOS, install the .NET runtime and run export PYTHONNET_RUNTIME=coreclr before starting Python.

Yes. pip install UnderAutomation.Staubli installs the package and pythonnet, which loads the .NET library in the Python process. Python 3.7 to 3.13 is supported. The API is the same as in .NET, with Python names.

A LabVIEW library is available on request. Contact us to get it.

Yes, with the Source license: the full C# code of the library and its Visual Studio solution. You can modify it and use it in your applications, within the limits of the EULA. The Standard and Pro licenses provide the obfuscated DLL only.
GitHub

Libraries on GitHub

Each package is published on GitHub with its changelog.

Latest releases

Staubli.NET

Latest release

underautomation / Staubli.NET

Public

.NET library of the Stäubli SDK.

C#View on GitHub

underautomation / Staubli.py

Public

Python package of the Stäubli SDK.

PythonView on GitHub

Get started now !

Start the 30-day trial today, or ask for a quote.

Try it freeOrderRequest a quoteContact us