# ๐ OCPP Client
> **A lightweight, embedded-friendly Rust OCPP communication framework for building real charge points and CSMS integrations.**
[](https://www.rust-lang.org/)
[](#license)
[](https://crates.io/crates/ocpp-client)
[](https://docs.rs/ocpp-client)
[](https://github.com/flowionab/ocpp-client/actions/workflows/ci.yaml)
[](#features)
---
## ๐ Overview
**OCPP Client** is the communication layer of the **Flowion Rust OCPP ecosystem**, providing the networking and transport foundation required to build OCPP-enabled charge points and backend integrations.
The library handles the complexities of establishing and managing OCPP connections, including:
* Connection lifecycle management
* Transport handling
* Message routing
* Communication reliability
OCPP message types and protocol definitions are provided by [`ocpp-types`](https://github.com/flowionab/ocpp-types), while OCPP Client focuses on the communication layer required to exchange messages between charge points and Charge Station Management Systems (CSMS).
Designed for both cloud/server environments and resource-constrained embedded systems, OCPP Client supports standard WebSocket connections as well as `no_std` compatible transports for STM32-based platforms.
The library currently supports **OCPP 1.6J**, **OCPP 2.0.1**, and **OCPP 2.1**.
---
## โจ Features
* ๐ฆ Native Rust implementation
* ๐ OCPP communication layer
* โก OCPP **1.6J support**
* ๐ OCPP **2.0.1 support**
* โก OCPP **2.1 support**
* ๐ WebSocket transport
* ๐ Secure WebSocket (WSS)
* ๐ STM32-compatible transport layer
* ๐ Connection lifecycle management
* ๐จ Message routing
* ๐งฉ Transport abstraction
* ๐ชถ Lightweight runtime
* ๐พ `no_std` support for embedded environments
* ๐ฅ๏ธ `std` support enabled by default for desktop and server applications
---
## ๐ Supported Protocols
| OCPP 1.6J | โ
Supported |
| OCPP 2.0.1 | โ
Supported |
| OCPP 2.1 | โ
Supported |
---
## ๐ Supported Transports
| WebSocket | โ
Supported |
| Secure WebSocket (WSS) | โ
Supported |
| STM32 transport | โ
Supported |
---
## โ๏ธ Feature Flags
OCPP Client supports both standard Rust environments and embedded systems.
By default, the `std` feature is enabled:
```toml
[dependencies]
ocpp-client = "0.x"
```
For embedded targets or `no_std` environments:
```toml
[dependencies]
ocpp-client = { version = "0.x", default-features = false }
```
This allows the same OCPP communication foundation to run on resource-constrained devices such as STM32 microcontrollers while still supporting traditional server-side applications.
---
## ๐๏ธ Architecture
OCPP Client separates protocol definitions from communication.
```text
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Your Application โ
โ Charge Point / CSMS Logic โ
โโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโ
โ
โ
โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโ
โ ocpp-charge-point โ
โ โ
โ Complete charge point firmware framework โ
โ Add hardware bindings and deploy โ
โโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโ
โ
โ
โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโ
โ ocpp-client โ
โ โ
โ OCPP communication runtime โ
โ Transport abstraction โ
โ WebSocket / embedded transports โ
โโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโ
โ
โ
โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโ
โ ocpp-types โ
โ โ
โ OCPP message types โ
โ Protocol models โ
โ Serialization โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
---
## ๐ Flowion OCPP Ecosystem
OCPP Client is designed as a modular building block within the **Flowion Rust OCPP ecosystem**.
Each project has a focused responsibility, allowing developers to choose the right level of abstraction for their application.
---
### ๐ฆ ocpp-types
**OCPP protocol definitions and data models**
[`ocpp-types`](https://github.com/flowionab/ocpp-types) provides the foundation for working with OCPP messages in Rust.
It contains:
* OCPP message types
* Protocol models
* Serialization and deserialization
* Version-specific protocol definitions
OCPP Client builds on top of `ocpp-types` to provide communication capabilities.
---
### ๐ ocpp-client
**OCPP communication and transport layer**
This repository provides the runtime required to connect OCPP-enabled systems.
It handles:
* Connection management
* Transport abstraction
* Message routing
* WebSocket communication
* Embedded-compatible transports
* `no_std` environments
It is designed to run in both:
* ๐ฅ๏ธ Server environments
* ๐ Embedded charge point environments
---
### โก ocpp-charge-point
**Complete charge point firmware framework**
[`ocpp-charge-point`](https://github.com/flowionab/ocpp-charge-point) provides a complete framework for building OCPP-enabled charge point firmware.
The goal is to make developing custom charging hardware as simple as implementing the required hardware bindings.
Developers provide hardware-specific implementations such as:
* GPIO control
* Contactor control
* Metering interfaces
* Connector handling
* LEDs and user interfaces
* Hardware drivers
while the framework handles:
* Charge point state management
* OCPP communication
* Charging workflows
* Backend communication
* Protocol integration
This allows manufacturers and developers to build custom OCPP-compatible chargers without implementing the complete protocol stack from scratch.
---
## ๐ฏ Use Cases
OCPP Client can be used for:
* ๐ Building EV charge point firmware
* ๐ญ Developing OCPP-enabled hardware
* ๐ฅ๏ธ Building CSMS integrations
* ๐งช Testing OCPP implementations
* ๐ Connecting embedded devices to charging platforms
* โก Creating custom charging solutions
* ๐ค Automated integration testing
---
## ๐ฆ Installation
Add the dependency to your `Cargo.toml`:
```toml
[dependencies]
ocpp-client = "0.x"
```
---
## ๐ Quick Example
```rust
use ocpp_client::Client;
#[tokio::main]
async fn main() {
let client = Client::new();
client
.connect("wss://example.com/ocpp")
.await
.unwrap();
}
```
---
## ๐งช Testing
OCPP Client is designed for:
* Integration testing
* Charge point development
* Embedded testing
* CSMS validation
* Automated test environments
It can be combined with simulators and real charging hardware to validate complete OCPP workflows.
---
## ๐ฃ๏ธ Roadmap
Planned improvements:
* ๐ Additional embedded transports
* ๐ More examples
* ๐งช Expanded integration tests
* ๐ง Improved developer tooling
---
## ๐ค Contributing
Contributions are welcome!
You can help by:
* ๐ Reporting issues
* ๐ก Suggesting improvements
* ๐ Improving documentation
* ๐ง Submitting pull requests
---
## ๐ License
OCPP Client is dual licensed:
* MIT License
* Apache License 2.0
You may choose either license.
---
## ๐ข About Flowion
**OCPP Client** is developed by **Flowion AB** as part of our effort to make EV charging development more accessible through modern, open-source tooling.
Flowion builds software solutions for electric vehicle charging using open standards such as **OCPP**, helping developers and businesses build reliable and scalable charging infrastructure.
---
## โญ Support the Project
If you find this library useful:
* โญ Star the repository
* ๐ Report issues
* ๐ก Suggest improvements
* ๐ค Contribute
Together we can make EV charging development easier and more accessible.