rcl consists of functions and structs (pure C) organized into ROS concepts:
- Nodes
 
- Publisher
 
- Subscription
 
- Service Client
 
- Service Server
 
- Timer
 
There are some functions for working with "Topics" and "Services":
- A function to validate a topic or service name (not necessarily fully qualified):
 
- A function to expand a topic or service name to a fully qualified name:
 
It also has some machinery that is necessary to wait on and act on these concepts:
- Initialization and shutdown management
 
- Wait sets for waiting on messages/service requests and responses/timers to be ready
 
- Guard conditions for waking up wait sets asynchronously
 
- Functions for introspecting and getting notified of changes of the ROS graph
 
Further still there are some useful abstractions and utilities:
- Allocator concept, which can be used to control allocation in 
rcl_* functions
 
- Concept of ROS Time and access to steady and system wall time
 
- Error handling functionality (C style)
 
- Macros
 
- Return code types
 
- Macros for controlling symbol visibility on the library