Many types of devices can be grouped into a class, e.g. Sockets, Lights, Locks, Thermostats etc. While there are many different devices available, most of them share the same basic characteristics.

For example, a socket can always be turned on or off, and sometimes dimmed. Another example would be that a thermostat can always set a target temperature and often read the current temperature as well.

Most of these devices have been grouped in Homey within a class. Use the Reference to view which classes are supported already.

A class is a collection of:

  • Capabilities
  • Mobile Cards
  • Flow Cards
  • Speech Input

Upon creating your driver, it's possible to extend these basic behaviors with device-specific Capabilities, Mobile Cards, Flow cards or Speech. Yet the most common ones have already been made, for consistency and to ease development.


A class has a specific set of capabilities assigned, which are the capabilities this class already knows Flow Cards, Speech or Mobile Cards for.

Upon pairing, or in your app's /app.json, you can define a subset of these capabilities. Read more at Capabilities.

Mobile Cards

By default, a class has a mobile card defined, which will be automatically generated based upon the available capabilities of the device. For example, if a class light has support for onoff, dim and light_temperature, but your device only supports onoff and dim, then the mobile card will only show two components: an icon for onoff and a slider for dim.

The device class other has no mobile card defined, thus you're required to provide your own.

You can overwrite the class's mobile card by providing a mobile property during pairing or in your /app.json. Read more at Mobile.

When providing properties upon pairing, they take priority over /app.json, which in turn takes priority over the class.

When providing properties upon pairing, they are saved and cannot be changed later. Properties in the /app.json can be updated when the app is updated.

Flow Cards

Similar to mobile cards, a class has a set of default Flow cards, based upon the available capabilities. These cannot be overwritten, but additional cards can be added by defining them in your /app.json. Read more at Devices.

Speech Input

Devices with a class will automatically listen for speech events. For example, when the user says Turn off all lights, every device with the class light and capability onoff will receive a onoff: false command.

Extending speech for devices is also possible. Read more at Speech.