
The software I2C libraries are generally master-mode only. In fact, since the design of the TwoWire class does not allow polymorphism (see ), it is often better for the 3rd party class to avoid inheriting its implementation from TwoWire or even Stream (see ).

Some 3rd party I2C libraries will inherit from the TwoWire class, but it is also possible to provide API compatibility without subclassing TwoWire. The default Wire library for each platform will use a class named TwoWire. In this context, compatibility means source-code API level, instead of runtime level. In the table below, the "Arduino Wire compatible functions" column indicates whether the given library is mostly compatible with the original Arduino AVR Wire library. Most 3rd party I2C libraries will also try to follow the same API as the original AVR Wire library. These alternative Wire libraries are mostly compatible with API of the original AVR Wire library, but many of them will deviate slightly from the AVR version to implement additional functionality that is available only for the particular microcontroller. Different platforms using different microcontrollers will provide their own versions of the library and are preinstalled when their "Arduino Core" is installed.

The original Wire library for AVR processors is described in. This pages gives an overview of many libraries for I2C for Arduino boards. The number of software I2C libraries are still increasing.
