Overview Getting Started Reference Latest News


Ice for Constrained devices

“IceC is an object oriented communication middleware, specifically designed for highly constrained devices. Written in C/C++, and with a binary protocol, it uses a minimal footprint, not only on processor and memory resources, but also in network bandwith usage.”


Written in ANSI C (with some endpoints in C++), you can use IceC wherever you have a compliant C compiler. Moreover, the core units are decoupled from non-standard libraries, which makes porting very easy.


IceC uses a plug-in system to implement the communication endpoints. With a very straightforward interface, it is easy to add support for additional network protocols or hardware adapters.

For many protocols

Currently, IceC has endpoints for TCP/IP or UDP/IP, but also for Serial, RS-485 (using a custom protocol called RRP), FIFO buffers, ZigBee, nRF24... and growing. Need more? Tell us!

Ready for IoT

You can use IceC to send the value of your sensors or change the state of your actuators from anywhere (even more seamlessly with IDM). IceC is compatible with cloud and cloud-less applications.

Small hardware needs

It is designed for highly resource constrained hardware (like Class 0 devices, as specified in RFC 7228). Thus, it works perfectly on AVR based devices (like many Arduinos), with only 32 KiB of code and 2 KiB of RAM. Of course, it is ported to "bigger" platforms, like the ESP8266, many ARMs and even some FPGA, like the Zynq.

Full of features

IceC is a minimal implementation of IceP, the protocol used by ZeroC Ice. It supports the core features of IceP v1.0, along some "extra" features, like Dynamic Ice or Default Servants, and Ice core services, like the IceStorm event service.


Using a binary and well-designed protocol, IceP, you will use your network bandwith wisely. Given that IceC does not need to parse complex plain-text headers or markup, also is very efficient in computational resources, like CPU time and memory, reducing latency too.

Intuitive IDL

Define you API (the contract between clients and servers) using Ice's IDL, called Slice. IceC, again, supports all basic features: modules, interfaces, methods, basic types, custom structs, dictionaries, sequences...

Easy to use

IceC handles the communication part, lets you focus on your application solution! Please, go to Getting Started if you want to start right now!