Tool · Simulator
asyncua uaserver --populate
| Vendor | FreeOpcUa (opcua-asyncio) |
|---|---|
| Cost | Open source |
| Platforms | Any platform with Python (Linux, Windows, macOS) |
| Type | Simulator |
asyncua ships a uaserver command that starts a demo OPC UA server, and its populate option fills the address space with sample nodes. It is the fastest way to get a local server for a client test: one pip install and one command, with no container runtime, installer or registration.
What you actually use it for
- Getting any OPC UA server running in under a minute so a client test is not blocked.
- Unit and integration tests in Python projects, where the server can be started and stopped from the test harness.
- Teaching, where every participant needs a private server and the only shared prerequisite is Python.
- Reproducing a client bug in isolation against a server you can modify in a few lines of Python.
- Pairing with asyncua's CLI tools (uals, uaread, uawrite, uasubscribe, uacall) for a complete command-line loop.
Walkthrough
- Install asyncuapip install asyncua into a virtual environment. This gives you the server, the library and the CLI client tools together, so both ends of every test come from the same version.
- Start the demo server with a populated address spaceRun uaserver with the populate option to get a server with sample nodes. Note the endpoint URL it prints, including the port and path, and use that exact string in your client.
- Browse it from the command lineUse uals against the endpoint to list nodes, then uaread on a specific NodeId. Doing this before you write client code confirms that the server, the endpoint string and your environment are all sound.
- Exercise write and call pathsUnlike the read-only public servers, this one is yours. Use uawrite and uacall to test writes and method calls, including the failures: write the wrong type on purpose and read the status code you get back.
- Subscribe and watch the revised parametersuasubscribe gives you a quick subscription. Request an aggressive publishing interval and see what the server revises it to, so your production client learns to read the revised values rather than assume.
- Graduate to a scripted server when the demo model runs outWhen you need specific types, structures or a companion specification, write a small asyncua server that imports a NodeSet2 file. The CLI server is a starting point, not a modelling tool.
What it will not do
- Generic sample nodes only: no companion specification semantics, no state machines, no realistic machine model.
- Not a performance or scalability reference; do not use it to size a production server.
- Alarms, conditions, historical access and PubSub coverage is limited or absent.
- Security defaults are development-oriented; a client that connects here has not proven it can survive a properly secured server.
- CLI option names have changed across asyncua versions, so a command from older documentation may not work.
Alternatives
| Instead of this | When |
|---|---|
| microsoft-opc-plc-simulator | When you want a container in a pipeline rather than a Python process on a laptop. |
| umati-sample-server | When the test needs real machinery companion specification types. |
| prosys-simulation-server | When you want a GUI to create nodes and configure users and security interactively. |
| consolereferenceserver | When you need reference-implementation behaviour rather than a convenience server. |
Verify before you rely on this: The exact CLI names and options for uaserver and the client tools, and the minimum Python version, change between asyncua releases. Check the current project readme and the installed tool's help output for the correct flags rather than copying a command from older material, and confirm the library's licence terms before embedding it in a distributed product.
Related tools
Related status codes
Concepts on this page
Last verified 7 September 2026 against OPC UA 1.05.07. OPC UA Connect is an educational resource and is not affiliated with the OPC Foundation.