IceRPC Logo

IceRPC

The RPC framework
for the QUIC era

IceRPC is a new open-source RPC framework that helps you build blazing fast networked applications with very little code.

License: Apache-2.0


Built for QUIC

A streamlined RPC framework for the QUIC multiplexed transport

Harness the power of QUIC with IceRPC's easy-to-use API.

Streaming icon

Streaming

Thanks to QUIC, bidirectional streaming is a breeze. Long-lasting audio/video streams or data feeds can share a network connection with small RPCs without any slowdown.

TCP with Slic icon

TCP with Slic

Still too soon for QUIC? IceRPC's Slic adapter is the answer. Slic emulates QUIC over traditional duplex transports such as TCP.

QUIC icon

QUIC

Multiplexed transport based on UDP

QUIC is a new connection-oriented transport protocol that powers the latest version of HTTP. It provides a wealth of features: multiplexing connections into independent streams, security, flow-control, connection migration, and more.

Learn about QUIC

Modular

A modular and extensible framework

Middleware diagram

Slice

Strongly-Typed Network Calls Made Easy

Slice is a serialization format for structured data that uses a simple and familiar syntax to define your API - think Protobuf but better.

Contract first icon

Contract First

Design your service API in Slice, a powerful and intuitive Interface Definition Language. Then let the Slice compiler implement this API for you with IceRPC.

Binary encoding icon

Binary Encoding

Enjoy lower bandwidth and CPU usage courtesy of Slice's compact and straightforward binary format.

StarTrek.slice
slice
module StarTrek
typealias Stardate = float64
enum Rank : uint8 { Captain, Engineer, Ensign, Doctor }
struct Officer {
id: int64
name: string
rank: Rank
}
struct StarlogEntry { date: Stardate, entry: string }
interface Starlog {
addEntry(entry: StarlogEntry)
getEntries(startAt: Stardate?) -> Sequence<StarlogEntry>
}
enum SystemError {
UnknownOfficer(id: int64)
SystemUnavailable
}
interface Starship {
engageWarpDrive(warpFactor: uint8)
getDetails() -> (name: string, registryCode: string)
getOfficer(id: int64) -> Result<Officer, SystemError>
startLongRangeScan(target: string) -> stream uint8
}

IceRPC + Protobuf

Protobuf

Full Protobuf Support

If you are already using Protobuf to exchange binary messages, IceRPC will fit right into your stack! The IceRPC + Protobuf integration implements Protobuf services with IceRPC.

Learn about Protobuf

Ready to get started?

Start building the next-gen app that leaves the competition behind!

Need help icon

Need help?

Get support and training directly from the developers who created IceRPC.

Support options
Want to learn more icon

Want to learn more?

Get to know IceRPC by reading its detailed documentation.

View docs