As duas versões ao mesmo tempo
MQTT 3.1.1 e MQTT 5.0 funcionam simultaneamente na mesma porta, e clientes de qualquer uma das versões trocam mensagens livremente. O codec codifica e decodifica todos os 15 tipos de pacote e valida os limites do Variable Byte Integer, propriedades duplicadas e bits reservados.
QoS 0, 1 e 2
Handshakes completos, supressão de duplicatas no QoS 2 e reenvio das trocas inacabadas após uma reconexão. As filas offline das sessões persistentes sobrevivem à reinicialização do broker.
Retain e Last Will
Um armazenamento de mensagens retidas com limpeza por payload vazio, inclusive de ramos inteiros, além de Retain Handling 0/1/2 e Retain As Published. O testamento é enviado em todos os cenários de desconexão, inclusive com o Will Delay Interval da versão 5.
Capacidades da versão 5
Aliases de tópicos nos dois sentidos, Session Expiry, Receive Maximum e controle de fluxo, Maximum Packet Size, identificadores de assinatura, assinaturas compartilhadas via $share, No Local, Message Expiry, Payload Format Indicator com validação UTF-8, Content Type, Response Topic, Correlation Data, User Properties, códigos de motivo em cada pacote, DISCONNECT do servidor e o pacote AUTH.
Tópicos de sistema $SYS
Versão, tempo em atividade e contadores de clientes, mensagens, bytes e erros são publicados como mensagens retidas. O ramo fica fechado por padrão: curingas não alcançam tópicos $, clientes anônimos têm todo o espaço de nomes negado, e um interruptor nas configurações desliga a publicação por completo.