diff --git a/src/emqx.app.src b/apps/emqx/src/emqx.app.src similarity index 100% rename from src/emqx.app.src rename to apps/emqx/src/emqx.app.src diff --git a/src/emqx.app.src.script b/apps/emqx/src/emqx.app.src.script similarity index 100% rename from src/emqx.app.src.script rename to apps/emqx/src/emqx.app.src.script diff --git a/src/emqx.appup.src b/apps/emqx/src/emqx.appup.src similarity index 100% rename from src/emqx.appup.src rename to apps/emqx/src/emqx.appup.src diff --git a/src/emqx.erl b/apps/emqx/src/emqx.erl similarity index 100% rename from src/emqx.erl rename to apps/emqx/src/emqx.erl diff --git a/src/emqx_access_control.erl b/apps/emqx/src/emqx_access_control.erl similarity index 100% rename from src/emqx_access_control.erl rename to apps/emqx/src/emqx_access_control.erl diff --git a/src/emqx_access_rule.erl b/apps/emqx/src/emqx_access_rule.erl similarity index 100% rename from src/emqx_access_rule.erl rename to apps/emqx/src/emqx_access_rule.erl diff --git a/src/emqx_acl_cache.erl b/apps/emqx/src/emqx_acl_cache.erl similarity index 100% rename from src/emqx_acl_cache.erl rename to apps/emqx/src/emqx_acl_cache.erl diff --git a/src/emqx_alarm.erl b/apps/emqx/src/emqx_alarm.erl similarity index 100% rename from src/emqx_alarm.erl rename to apps/emqx/src/emqx_alarm.erl diff --git a/src/emqx_alarm_handler.erl b/apps/emqx/src/emqx_alarm_handler.erl similarity index 100% rename from src/emqx_alarm_handler.erl rename to apps/emqx/src/emqx_alarm_handler.erl diff --git a/src/emqx_app.erl b/apps/emqx/src/emqx_app.erl similarity index 100% rename from src/emqx_app.erl rename to apps/emqx/src/emqx_app.erl diff --git a/src/emqx_banned.erl b/apps/emqx/src/emqx_banned.erl similarity index 100% rename from src/emqx_banned.erl rename to apps/emqx/src/emqx_banned.erl diff --git a/src/emqx_base62.erl b/apps/emqx/src/emqx_base62.erl similarity index 100% rename from src/emqx_base62.erl rename to apps/emqx/src/emqx_base62.erl diff --git a/src/emqx_batch.erl b/apps/emqx/src/emqx_batch.erl similarity index 100% rename from src/emqx_batch.erl rename to apps/emqx/src/emqx_batch.erl diff --git a/src/emqx_boot.erl b/apps/emqx/src/emqx_boot.erl similarity index 100% rename from src/emqx_boot.erl rename to apps/emqx/src/emqx_boot.erl diff --git a/src/emqx_broker.erl b/apps/emqx/src/emqx_broker.erl similarity index 100% rename from src/emqx_broker.erl rename to apps/emqx/src/emqx_broker.erl diff --git a/src/emqx_broker_helper.erl b/apps/emqx/src/emqx_broker_helper.erl similarity index 100% rename from src/emqx_broker_helper.erl rename to apps/emqx/src/emqx_broker_helper.erl diff --git a/src/emqx_broker_sup.erl b/apps/emqx/src/emqx_broker_sup.erl similarity index 100% rename from src/emqx_broker_sup.erl rename to apps/emqx/src/emqx_broker_sup.erl diff --git a/src/emqx_channel.erl b/apps/emqx/src/emqx_channel.erl similarity index 100% rename from src/emqx_channel.erl rename to apps/emqx/src/emqx_channel.erl diff --git a/src/emqx_cm.erl b/apps/emqx/src/emqx_cm.erl similarity index 100% rename from src/emqx_cm.erl rename to apps/emqx/src/emqx_cm.erl diff --git a/src/emqx_cm_locker.erl b/apps/emqx/src/emqx_cm_locker.erl similarity index 100% rename from src/emqx_cm_locker.erl rename to apps/emqx/src/emqx_cm_locker.erl diff --git a/src/emqx_cm_registry.erl b/apps/emqx/src/emqx_cm_registry.erl similarity index 100% rename from src/emqx_cm_registry.erl rename to apps/emqx/src/emqx_cm_registry.erl diff --git a/src/emqx_cm_sup.erl b/apps/emqx/src/emqx_cm_sup.erl similarity index 100% rename from src/emqx_cm_sup.erl rename to apps/emqx/src/emqx_cm_sup.erl diff --git a/src/emqx_connection.erl b/apps/emqx/src/emqx_connection.erl similarity index 100% rename from src/emqx_connection.erl rename to apps/emqx/src/emqx_connection.erl diff --git a/src/emqx_ctl.erl b/apps/emqx/src/emqx_ctl.erl similarity index 100% rename from src/emqx_ctl.erl rename to apps/emqx/src/emqx_ctl.erl diff --git a/src/emqx_flapping.erl b/apps/emqx/src/emqx_flapping.erl similarity index 100% rename from src/emqx_flapping.erl rename to apps/emqx/src/emqx_flapping.erl diff --git a/src/emqx_frame.erl b/apps/emqx/src/emqx_frame.erl similarity index 100% rename from src/emqx_frame.erl rename to apps/emqx/src/emqx_frame.erl diff --git a/src/emqx_gc.erl b/apps/emqx/src/emqx_gc.erl similarity index 100% rename from src/emqx_gc.erl rename to apps/emqx/src/emqx_gc.erl diff --git a/src/emqx_gen_mod.erl b/apps/emqx/src/emqx_gen_mod.erl similarity index 100% rename from src/emqx_gen_mod.erl rename to apps/emqx/src/emqx_gen_mod.erl diff --git a/src/emqx_global_gc.erl b/apps/emqx/src/emqx_global_gc.erl similarity index 100% rename from src/emqx_global_gc.erl rename to apps/emqx/src/emqx_global_gc.erl diff --git a/src/emqx_guid.erl b/apps/emqx/src/emqx_guid.erl similarity index 100% rename from src/emqx_guid.erl rename to apps/emqx/src/emqx_guid.erl diff --git a/src/emqx_hooks.erl b/apps/emqx/src/emqx_hooks.erl similarity index 100% rename from src/emqx_hooks.erl rename to apps/emqx/src/emqx_hooks.erl diff --git a/src/emqx_inflight.erl b/apps/emqx/src/emqx_inflight.erl similarity index 100% rename from src/emqx_inflight.erl rename to apps/emqx/src/emqx_inflight.erl diff --git a/src/emqx_json.erl b/apps/emqx/src/emqx_json.erl similarity index 100% rename from src/emqx_json.erl rename to apps/emqx/src/emqx_json.erl diff --git a/src/emqx_keepalive.erl b/apps/emqx/src/emqx_keepalive.erl similarity index 100% rename from src/emqx_keepalive.erl rename to apps/emqx/src/emqx_keepalive.erl diff --git a/src/emqx_kernel_sup.erl b/apps/emqx/src/emqx_kernel_sup.erl similarity index 100% rename from src/emqx_kernel_sup.erl rename to apps/emqx/src/emqx_kernel_sup.erl diff --git a/src/emqx_limiter.erl b/apps/emqx/src/emqx_limiter.erl similarity index 100% rename from src/emqx_limiter.erl rename to apps/emqx/src/emqx_limiter.erl diff --git a/src/emqx_listeners.erl b/apps/emqx/src/emqx_listeners.erl similarity index 100% rename from src/emqx_listeners.erl rename to apps/emqx/src/emqx_listeners.erl diff --git a/src/emqx_logger.erl b/apps/emqx/src/emqx_logger.erl similarity index 100% rename from src/emqx_logger.erl rename to apps/emqx/src/emqx_logger.erl diff --git a/src/emqx_logger_formatter.erl b/apps/emqx/src/emqx_logger_formatter.erl similarity index 100% rename from src/emqx_logger_formatter.erl rename to apps/emqx/src/emqx_logger_formatter.erl diff --git a/src/emqx_message.erl b/apps/emqx/src/emqx_message.erl similarity index 100% rename from src/emqx_message.erl rename to apps/emqx/src/emqx_message.erl diff --git a/src/emqx_metrics.erl b/apps/emqx/src/emqx_metrics.erl similarity index 100% rename from src/emqx_metrics.erl rename to apps/emqx/src/emqx_metrics.erl diff --git a/src/emqx_misc.erl b/apps/emqx/src/emqx_misc.erl similarity index 100% rename from src/emqx_misc.erl rename to apps/emqx/src/emqx_misc.erl diff --git a/src/emqx_mod_acl_internal.erl b/apps/emqx/src/emqx_mod_acl_internal.erl similarity index 100% rename from src/emqx_mod_acl_internal.erl rename to apps/emqx/src/emqx_mod_acl_internal.erl diff --git a/src/emqx_mod_delayed.erl b/apps/emqx/src/emqx_mod_delayed.erl similarity index 100% rename from src/emqx_mod_delayed.erl rename to apps/emqx/src/emqx_mod_delayed.erl diff --git a/src/emqx_mod_presence.erl b/apps/emqx/src/emqx_mod_presence.erl similarity index 100% rename from src/emqx_mod_presence.erl rename to apps/emqx/src/emqx_mod_presence.erl diff --git a/src/emqx_mod_rewrite.erl b/apps/emqx/src/emqx_mod_rewrite.erl similarity index 100% rename from src/emqx_mod_rewrite.erl rename to apps/emqx/src/emqx_mod_rewrite.erl diff --git a/src/emqx_mod_subscription.erl b/apps/emqx/src/emqx_mod_subscription.erl similarity index 100% rename from src/emqx_mod_subscription.erl rename to apps/emqx/src/emqx_mod_subscription.erl diff --git a/src/emqx_mod_sup.erl b/apps/emqx/src/emqx_mod_sup.erl similarity index 100% rename from src/emqx_mod_sup.erl rename to apps/emqx/src/emqx_mod_sup.erl diff --git a/src/emqx_mod_topic_metrics.erl b/apps/emqx/src/emqx_mod_topic_metrics.erl similarity index 100% rename from src/emqx_mod_topic_metrics.erl rename to apps/emqx/src/emqx_mod_topic_metrics.erl diff --git a/src/emqx_modules.erl b/apps/emqx/src/emqx_modules.erl similarity index 100% rename from src/emqx_modules.erl rename to apps/emqx/src/emqx_modules.erl diff --git a/src/emqx_mountpoint.erl b/apps/emqx/src/emqx_mountpoint.erl similarity index 100% rename from src/emqx_mountpoint.erl rename to apps/emqx/src/emqx_mountpoint.erl diff --git a/src/emqx_mqtt_caps.erl b/apps/emqx/src/emqx_mqtt_caps.erl similarity index 100% rename from src/emqx_mqtt_caps.erl rename to apps/emqx/src/emqx_mqtt_caps.erl diff --git a/src/emqx_mqtt_props.erl b/apps/emqx/src/emqx_mqtt_props.erl similarity index 100% rename from src/emqx_mqtt_props.erl rename to apps/emqx/src/emqx_mqtt_props.erl diff --git a/src/emqx_mqueue.erl b/apps/emqx/src/emqx_mqueue.erl similarity index 100% rename from src/emqx_mqueue.erl rename to apps/emqx/src/emqx_mqueue.erl diff --git a/src/emqx_os_mon.erl b/apps/emqx/src/emqx_os_mon.erl similarity index 100% rename from src/emqx_os_mon.erl rename to apps/emqx/src/emqx_os_mon.erl diff --git a/src/emqx_packet.erl b/apps/emqx/src/emqx_packet.erl similarity index 100% rename from src/emqx_packet.erl rename to apps/emqx/src/emqx_packet.erl diff --git a/src/emqx_pd.erl b/apps/emqx/src/emqx_pd.erl similarity index 100% rename from src/emqx_pd.erl rename to apps/emqx/src/emqx_pd.erl diff --git a/src/emqx_plugins.erl b/apps/emqx/src/emqx_plugins.erl similarity index 100% rename from src/emqx_plugins.erl rename to apps/emqx/src/emqx_plugins.erl diff --git a/src/emqx_pmon.erl b/apps/emqx/src/emqx_pmon.erl similarity index 100% rename from src/emqx_pmon.erl rename to apps/emqx/src/emqx_pmon.erl diff --git a/src/emqx_pool.erl b/apps/emqx/src/emqx_pool.erl similarity index 100% rename from src/emqx_pool.erl rename to apps/emqx/src/emqx_pool.erl diff --git a/src/emqx_pool_sup.erl b/apps/emqx/src/emqx_pool_sup.erl similarity index 100% rename from src/emqx_pool_sup.erl rename to apps/emqx/src/emqx_pool_sup.erl diff --git a/src/emqx_pqueue.erl b/apps/emqx/src/emqx_pqueue.erl similarity index 100% rename from src/emqx_pqueue.erl rename to apps/emqx/src/emqx_pqueue.erl diff --git a/src/emqx_psk.erl b/apps/emqx/src/emqx_psk.erl similarity index 100% rename from src/emqx_psk.erl rename to apps/emqx/src/emqx_psk.erl diff --git a/src/emqx_reason_codes.erl b/apps/emqx/src/emqx_reason_codes.erl similarity index 100% rename from src/emqx_reason_codes.erl rename to apps/emqx/src/emqx_reason_codes.erl diff --git a/src/emqx_router.erl b/apps/emqx/src/emqx_router.erl similarity index 100% rename from src/emqx_router.erl rename to apps/emqx/src/emqx_router.erl diff --git a/src/emqx_router_helper.erl b/apps/emqx/src/emqx_router_helper.erl similarity index 100% rename from src/emqx_router_helper.erl rename to apps/emqx/src/emqx_router_helper.erl diff --git a/src/emqx_router_sup.erl b/apps/emqx/src/emqx_router_sup.erl similarity index 100% rename from src/emqx_router_sup.erl rename to apps/emqx/src/emqx_router_sup.erl diff --git a/src/emqx_rpc.erl b/apps/emqx/src/emqx_rpc.erl similarity index 100% rename from src/emqx_rpc.erl rename to apps/emqx/src/emqx_rpc.erl diff --git a/src/emqx_sequence.erl b/apps/emqx/src/emqx_sequence.erl similarity index 100% rename from src/emqx_sequence.erl rename to apps/emqx/src/emqx_sequence.erl diff --git a/src/emqx_session.erl b/apps/emqx/src/emqx_session.erl similarity index 100% rename from src/emqx_session.erl rename to apps/emqx/src/emqx_session.erl diff --git a/src/emqx_shared_sub.erl b/apps/emqx/src/emqx_shared_sub.erl similarity index 100% rename from src/emqx_shared_sub.erl rename to apps/emqx/src/emqx_shared_sub.erl diff --git a/src/emqx_stats.erl b/apps/emqx/src/emqx_stats.erl similarity index 100% rename from src/emqx_stats.erl rename to apps/emqx/src/emqx_stats.erl diff --git a/src/emqx_sup.erl b/apps/emqx/src/emqx_sup.erl similarity index 100% rename from src/emqx_sup.erl rename to apps/emqx/src/emqx_sup.erl diff --git a/src/emqx_sys.erl b/apps/emqx/src/emqx_sys.erl similarity index 100% rename from src/emqx_sys.erl rename to apps/emqx/src/emqx_sys.erl diff --git a/src/emqx_sys_mon.erl b/apps/emqx/src/emqx_sys_mon.erl similarity index 100% rename from src/emqx_sys_mon.erl rename to apps/emqx/src/emqx_sys_mon.erl diff --git a/src/emqx_sys_sup.erl b/apps/emqx/src/emqx_sys_sup.erl similarity index 100% rename from src/emqx_sys_sup.erl rename to apps/emqx/src/emqx_sys_sup.erl diff --git a/src/emqx_tables.erl b/apps/emqx/src/emqx_tables.erl similarity index 100% rename from src/emqx_tables.erl rename to apps/emqx/src/emqx_tables.erl diff --git a/src/emqx_topic.erl b/apps/emqx/src/emqx_topic.erl similarity index 100% rename from src/emqx_topic.erl rename to apps/emqx/src/emqx_topic.erl diff --git a/src/emqx_tracer.erl b/apps/emqx/src/emqx_tracer.erl similarity index 100% rename from src/emqx_tracer.erl rename to apps/emqx/src/emqx_tracer.erl diff --git a/src/emqx_trie.erl b/apps/emqx/src/emqx_trie.erl similarity index 100% rename from src/emqx_trie.erl rename to apps/emqx/src/emqx_trie.erl diff --git a/src/emqx_types.erl b/apps/emqx/src/emqx_types.erl similarity index 100% rename from src/emqx_types.erl rename to apps/emqx/src/emqx_types.erl diff --git a/src/emqx_vm.erl b/apps/emqx/src/emqx_vm.erl similarity index 100% rename from src/emqx_vm.erl rename to apps/emqx/src/emqx_vm.erl diff --git a/src/emqx_vm_mon.erl b/apps/emqx/src/emqx_vm_mon.erl similarity index 100% rename from src/emqx_vm_mon.erl rename to apps/emqx/src/emqx_vm_mon.erl diff --git a/src/emqx_ws_connection.erl b/apps/emqx/src/emqx_ws_connection.erl similarity index 100% rename from src/emqx_ws_connection.erl rename to apps/emqx/src/emqx_ws_connection.erl diff --git a/src/emqx_zone.erl b/apps/emqx/src/emqx_zone.erl similarity index 100% rename from src/emqx_zone.erl rename to apps/emqx/src/emqx_zone.erl