ZeroC

2 min read Original article ↗

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.


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

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

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.

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

Company

Ice

IceRPC

Help Center

Legal

Subscribe to our newsletter

Subscribe to the ZeroC newsletter to stay updated on new releases, announcements,
and blog posts.