Communication & Toolkit
Universal Robots Software Library

Quickly create applications that communicate with your Universal Robots cobot in .NET, Python, Labview or Matlab.


The library implements all native protocols of Universal Robots cobots in several languages, allowing your computer to synchronize and control the robot arm remotely.

Remote control

The "Dashboard Server" protocol that allows you to send commands to the robot remotely via TCP/IP. You can for example switch the robot arm on or off, release the brakes, load a program, run it or stop it.

Dashboard Server
// Create a new robot instance
var robot = new UR();
// Connect to the robot
// Power on the robot arm and release brakes
// Load program file to polyscope
// Start the program
// Get program name and state
var state = robot.Dashboard.GetProgramState();
Console.WriteLine($"Program name : {state.Value.Name}");
Console.WriteLine($"Stopped, Playing or Paused ? : {state.Value.State}");
// Display a popup on the pendant
robot.Dashboard.ShowPopup("I just remote-controlled my robot!");

Exchanging measurements

"Primary interface" and "RTDE" (Real-Time Data Exchange) allow to receive a measurement stream from the robot up to 500Hz which contains a lot of information: position, status, inputs and outputs, the value of program variables, ... Your application can thus synchronize with the robot. Also, it is possible to write shared registers to the robot at high speed.

Primary / Secondary interface
// Display robot TCP pose
var pose = robot.Rtde.OutputDataValues.ActualTcpPose;
// pose.X, pose.Y, pose.Z, pose.Rx, ...
// Display robot TCP force
var force = robot.Rtde.OutputDataValues.ActualTcpForce;
// Write data in robot controler
var inputs = new RtdeInputValues();
inputs.StandardAnalogOutput0 = 0.2;
inputs.InputBitRegisters.X64 = true;
// Display all program and installation variables
var variables = robot.PrimaryInterface.GlobalVariables.GetAll();
string name = variables[0].Name;
Pose value = variables[0].ToPose();
GlobalVariableTypes type = variables[0].Type;

Script and program

  • You can send on TCP/IP socket URScript script lines to be executed.
  • Functions allow you to build and edit a *.urp program file locally and then transfer it to the UR controller for execution.

Primary interface
// Ask robot to execute a movej
robot.PrimaryInterface.Script.Send("movej([-1.5,-1.5,-2,-0.5,1.8,0], a=1.4, v=1.05, t=0, r=0)");
// Enumerates files and folder
SftpFile[] items = robot.Sftp.ListDirectory("/home/ur/ursim-current/programs/");
// Download program file prg.urp to your local disk
robot.Sftp.DownloadFile("/home/ur/ursim-current/programs/prg.urp", @"C:\temp\prg.urp");
// Send a local file to the robot
robot.Sftp.UploadFile(@"C:\temp\prg.urp", "/home/ur/ursim-current/programs/prg.urp");
// Manipulate files and directories
robot.Sftp.RenameFile("/home/ur/prg.urp", "/home/ur/prg2.urp");
bool exists = robot.Sftp.Exists("/home/ur/prg.urp");
robot.Sftp.WriteAllText("/home/ur/file.txt", "Hello robot !");
// ...

Custom Socket Communication

Your software can be a server and allow the robot to connect to it to retrieve information:

  • XML-RPC: The robot can connect with the "rpc_factory" function and call methods with remote arguments in your program that can return values.
  • Socket: Classic TCP/IP server to which the robot can connect with the "socket_open" function and then dialogue with your application in both directions.

Socket communication
// Robot connects with URScipt function socket_open()
robot.SocketCommunication.SocketClientConnection += (o, e) =>
// Reply to the robot
e.Client.SocketWrite("Hello cobot <3");
// Event raised when the robot sends a message with socket_write()
robot.SocketCommunication.SocketRequest += (o, e) =>
string robotMessage = e.Message;
// Send a message to all connected clients

Offline toolbox

This library offers features that can be used without having a UR robot on the network. For example, it is possible to convert position types. Your software can also open the native program *.urp and installation *.installation files and edit their content.

// Create X, Y, Z, RX, RY, RZ pose
var pose = new Pose(0.1, 0.2, -0.1, 0, 0.05, 0.1);
// Convert cartesian pose type to RPY or rotation vector
var rpy = pose.FromRotationVectorToRPY();
var vectorPose = pose.FromRPYToRotationVector();
// Decompile program and installation files and access inner XML
URInstallation installation = URInstallation.Load("C:\\temp\\default.installation");
URProgram prg = URProgram.Load("C:\\temp\\prg.urp");
XElement internalXml = prg.XML;

And more...

  • Primary / Secondary interface
  • RTDE (Real-Time Data Exchange)
  • Dashboard server
  • Sockets
  • SSH
  • SFTP
  • ...

UR+ Certification

Universal Robots' technical and sales teams have audited this library. They certify that it is compliant and integrates perfectly with their robots and its ecosystem.


It is an industrial-strength software library that requires a license. The purchase of a license allows your company, regardless of the number of developers, to develop in any of the languages offered and to distribute an unlimited number of software products to an unlimited number of your customers without recurring costs.

See terms and conditions


30 day trial
  • Access to all features for 30 days
  • Examples provided for several platforms including Python, Winforms, Console (for Windows, Linux and MacOS) and LabVIEW
  • Possibility to ask us for an extension of the trial period

Site license

  • Full-featured SDK forever : no recurring subscription required
  • Can be used within Licensee’s organization at the location specified
  • May be used by multiple developers at the location specified
  • Any application developed with the SDK can be delivered to an unlimited number of customers without royalties
  • 1 year maintenance included (access to updates)
  • Contact us for a payment by bank transfer. Once the license of this SDK is purchased, you will receive your license number and your invoice by email.

Site license for academic research



  • Site license with 40% off
  • Discount exclusively for academic or research projects

Frequently asked questions

What is the point of such a software library?

This software library saves you development time and guarantees its operation regardless of the model and firmware of your robot.

How can I test the library?

The download page of this website allows you to get examples in the language of your choice. You can then consult the documentation to get started with the library.

Can I get a quote?

You can immediately request a quote directly from the order page of this website. You can also contact us.

Some examples do not work

Please check in the properties of the downloaded archive that Windows has not locked the file. If the examples launch correctly, please check that the PING command on the robot is successful. Also check that your firewall and your antivirus software allow a connection with the robot. Finally check the security settings of the robot.

What's new in each version?

Each version includes patches and new features. You will find on GitHub the history of the versions as well as the changes made. Don't hesitate to contact us to submit your ideas of evolution.

After updating, my application does not compile anymore

Little by little, the library has been enhanced with new features. Until version 5, all functions and protocols were developed in the same class, which became confusing. From version 6 and higher, all features are independent and developed in separate classes. Please contact us to help you migrate, or download the latest version 5.X.X.X from GitHub, which remains compatible with all older versions.