# Multi-language support
Since 4.1, EMQ X provides multi-language support. It allows users to use Python, Java or other programming languages to handle EMQ X's hooks, or parse your private protocol on TCP/UDP transport. In this way, you can customize EMQ X with other programming languages.
In 4.1 and 4.2, this functional was implemented using erlport (opens new window) as the low-level communication support, and it was upgraded to gRPC (opens new window) in the 4.3. These two version interface are not compatible. Please check the corresponding documentation for the older implemented.
After 4.3, all hooks are publicly supported.
# Extension Hook
The Extension Hook is supported by the emqx-exhook plugin. It allows users to process EMQ X's Hooks using other programming languages. For example:
- Check the login permission for a client.
- Check the PUB/SUB operation privileges for a client.
- Bridge or Store a message
See: Extension Hook.
# Extension Protocol
The Extension Protocol is supported by the emqx-exproto plugin. It allows users to implement their private access protocol using other programming languages. In the
emqx-exproto, you can:
- Establish a connection based on TCP/SSL/UDP/DTLS
- Subscribe a topic to receive messages and deliver it to your client
- Parse bytes and publish it to EMQ X
# Historical Legacy
Prior to EMQ X 4.1, only Lua support was included, and it was implemented by
emqx-lua-hook. This plugin only supports handling of hooks, not protocol access.
See: Lua Support.