/up-spec

uProtocol Specifications

Apache License 2.0Apache-2.0

uProtocol Logo

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in IETF BCP14 (RFC2119 & RFC8174)

SPDX-FileCopyrightText: 2023 Contributors to the Eclipse Foundation

See the NOTICE file(s) distributed with this work for additional
information regarding copyright ownership.

This program and the accompanying materials are made available under
the terms of the Apache License Version 2.0 which is available at
https://www.apache.org/licenses/LICENSE-2.0

SPDX-FileType: DOCUMENTATION
SPDX-License-Identifier: Apache-2.0

1. Overview

uProtocol is a communication protocol that enables software (uEs) to easily communicate with each other running in distributed systems. The protocol is designed to be lightweight, efficient, easy to use, and run on top of any other communication middleware (transport) such as SOME/IP, MQTT, zenoh, HTTP, etc…​

To achieve the above mentioned objectives, we have split the specifications into sections (folders) that are:

  • The Basics: Foundational principles and concepts of uProtocol (ex. such as addressing, IDs, message header definitions, etc…​).

  • Transport layer (uP-L1): Common interface for sending and receiving of messages intended to be implemented employing a particular communication middleware technology (ex. MQTT, SOME/IP, HTTP, Zenoh, etc…​).

  • Communication Layer (uP-L2): The common transport agnostic, programming language specific, API for the publisher/subscriber, notification, and RPC messaging patterns used by application/service developers to communicate with each other.

  • Application Layer (uP-L3): Service contracts for subscription management, service/device discovery, and event caching that is common across all deployments (implementations) of uProtocol.

2. How to get started?

It is always best to start with the basics to familiarize yourself with common terminology used with uProtocol.

If you’re a developer who would like to use uProtocol in your application or service, please refer to the appropriate language library (ex. up-cpp, up-java, up-rust, etc..) README.adoc.

If you would like to contribute to uProtocol to develop a new language library or transport implementation, please checkout the CONTRIBUTING.adoc.