Metadata-Version: 2.4
Name: liblinks_and_nodes
Version: 2.9.0
Summary: Python packaging wrapper for the links_and_nodes C/C++ library and Python bindings
Author-email: Florian Schmidt <florian.schmidt@dlr.de>
License-Expression: GPL-3.0-or-later
Project-URL: Homepage, https://gitlab.com/links_and_nodes/links_and_nodes
Project-URL: Repository, https://gitlab.com/links_and_nodes/links_and_nodes
Classifier: Development Status :: 5 - Production/Stable
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: COPYING
Requires-Dist: numpy
Requires-Dist: libstring_util<1.4.0,>=1.3.0
Requires-Dist: cmeel-boost<1.91,>=1.90
Provides-Extra: manager
Requires-Dist: PyGObject<4.0,>=3.5; extra == "manager"
Dynamic: license-file

[![Build Status Gitlab](https://gitlab.com/links_and_nodes/links_and_nodes/badges/master/pipeline.svg?ignore_skipped=true)](https://gitlab.com/links_and_nodes/links_and_nodes/-/pipelines?scope=branches&ref=master) [![PyPI](https://img.shields.io/pypi/v/liblinks-and-nodes.svg)](https://pypi.org/project/liblinks-and-nodes/)


# Links and Nodes (LN)

Links and Nodes (LN) is an open-source middleware for building distributed real-time robotic systems. It combines process management with fast publish/subscribe messaging and request/response services, allowing complex multi-process systems to be configured and reproduced from a single text configuration file (`.lnc`).

Developed at the German Aerospace Center (DLR) since 2010, LN supports robotics applications that require deterministic behavior, low-latency communication, and coordinated process control across multiple hosts and programming languages (C, C++, Python).

## Key Features

- **Process management** -- Spawn, monitor, and control processes with dependency ordering, priorities, and real-time introspection.
- **Publish/subscribe topics** -- Low-latency messaging via shared memory (local), UDP, or TCP.
- **Services (request/response)** -- Reliable RPC via Unix domain sockets (local) or TCP (network).
- **Multi-language APIs** -- C, C++, and Python client libraries with a shared message-definition format.
- **Single configuration** -- Define processes, topics, services, and dependencies in one `.lnc` file.
- **Manager GUI & CLI** -- `ln_manager` for interactive system monitoring and control (web UI included).



## Platform Support

**Native install is officially supported on Linux (Ubuntu 22.04+, Debian 12+, ...) only.** For macOS and Windows, use the Docker-based installation.


## Getting Started

| Goal | Guide |
|------|-------|
| **Install LN** | [Installation Guide](documentation/INSTALL.md) — Native Linux or Docker |
| **Run examples** | [ln_manager_example](https://gitlab.com/links_and_nodes/ln_manager_example) repository |
| **Full documentation** | [User Guide & Tutorials](https://links-and-nodes.readthedocs.io/) |



## Documentation

- [User Guide & Tutorials](https://links-and-nodes.readthedocs.io/) -- Getting started, configuration, API reference
- Source API: `libln/include/ln/ln.h` (C), `libln/include/ln/cppwrapper.h` (C++), `python/links_and_nodes/` (Python)


## Docker Images

If you prefer to run LN from a container, see [docker/README.md](docker/README.md) for complete Docker usage documentation.


## License

The core library (`libln`) is released under **LGPLv3** so it can be dynamically linked into non-GPL projects. All other components (`ln_daemon`, `ln_manager`, Python bindings) are released under **GPLv3**.


## How To Contribute

If you want to contribute, please read [**CONTRIBUTING.md**](./CONTRIBUTING.md) guide first.

---

## DLR-RMC Instructions

For DLR-RMC systems, see [README.RMC.md](./README.RMC.md).

<!-- TODO(antonin): update after JOSS submission-->
<!--## Citing the Project

To cite this repository in publications:

```bibtex
@article{links-and-nodes,
...
}
```-->
