{"version":1,"pages":[{"id":"tj2tigWZ5nnVelUkoFo4","title":"Welcome","pathname":"/vernemq","siteSpaceId":"sitesp_u0oqb","description":""},{"id":"qPWdATl5JJSn0jAeyXGm","title":"Getting Started","pathname":"/vernemq/getting-started","siteSpaceId":"sitesp_u0oqb","description":"A quick and simple guide to get started with VerneMQ"},{"id":"lQrd6dHtBet6oNdDXkaU","title":"Running VerneMQ using Docker","pathname":"/vernemq/installing-vernemq/docker","siteSpaceId":"sitesp_u0oqb","description":"As well as being available as packages that can be installed directly into the operating systems, VerneMQ is also available as a Docker image. Below is an example of how to set up a couple of VerneMQ","breadcrumbs":[{"label":"Installing VerneMQ"}]},{"id":"U7rzuiWtmMiKq0aKJGg8","title":"Introduction","pathname":"/vernemq/configuring-vernemq/introduction","siteSpaceId":"sitesp_u0oqb","description":"Everything you must know to properly configure VerneMQ","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"L0TcvejLwhAsFGae8E63","title":"The VerneMQ conf file","pathname":"/vernemq/configuring-vernemq/the-vernemq-conf-file","siteSpaceId":"sitesp_u0oqb","description":"A closer look at an example vernemq.conf file (Note: This is a work-in-progress section)","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"VPh4fs1hsolnpWpfCNsk","title":"Auth using files","pathname":"/vernemq/configuring-vernemq/file-auth","siteSpaceId":"sitesp_u0oqb","description":"","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"CLHJYMVSLFrk4iumPtFR","title":"Auth using a database","pathname":"/vernemq/configuring-vernemq/db-auth","siteSpaceId":"sitesp_u0oqb","description":"VerneMQ supports multiple ways to authenticate and authorize new client connections using a database.","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"BYMJyxeto8FqA2GztDw9","title":"Enhanced Auth","pathname":"/vernemq/configuring-vernemq/customauth","siteSpaceId":"sitesp_u0oqb","description":"","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"SPunywQT9bHhatYtKecm","title":"MQTT Options","pathname":"/vernemq/configuring-vernemq/options","siteSpaceId":"sitesp_u0oqb","description":"Configure how VerneMQ handles certain aspects of MQTT","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"kFJajLtHRJmxuOrdEz6w","title":"MQTT Listeners","pathname":"/vernemq/configuring-vernemq/listeners","siteSpaceId":"sitesp_u0oqb","description":"VerneMQ supports multiple ways to configure one or many MQTT listeners.","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"4UneJeWIS5ZjoyfGYR4U","title":"HTTP Listeners","pathname":"/vernemq/configuring-vernemq/http-listeners","siteSpaceId":"sitesp_u0oqb","description":"How to setup and configure the HTTP listener.","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"hZfNKBsSPvaRwpSeebTF","title":"Non-standard MQTT options","pathname":"/vernemq/configuring-vernemq/nonstandard","siteSpaceId":"sitesp_u0oqb","description":"Configure Non-Standard MQTT Options VerneMQ Supports.","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"3JReswNg1rVEsyDVWl5D","title":"Websockets","pathname":"/vernemq/configuring-vernemq/websockets","siteSpaceId":"sitesp_u0oqb","description":"Configure WebSocket Listeners for VerneMQ.","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"UbHrOvGA4wXTKTCfCXNc","title":"Logging","pathname":"/vernemq/configuring-vernemq/logging","siteSpaceId":"sitesp_u0oqb","description":"Configure VerneMQ Logging.","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"x5DfG6xQBwWb3ZWGw51c","title":"Consumer session balancing","pathname":"/vernemq/configuring-vernemq/balancing","siteSpaceId":"sitesp_u0oqb","description":"MQTT consumers can share and loadbalance a topic subscription.","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"VCsklvdMBW13PqkRoFrD","title":"Plugins","pathname":"/vernemq/configuring-vernemq/plugins","siteSpaceId":"sitesp_u0oqb","description":"Managing VerneMQ Plugins","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"QIYq6Z0EySgt7GUZSVZ1","title":"Shared subscriptions","pathname":"/vernemq/configuring-vernemq/shared_subscriptions","siteSpaceId":"sitesp_u0oqb","description":"Working with shared subscriptions","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"0q2SwwkbMRBFFoxFLofj","title":"Advanced Options","pathname":"/vernemq/configuring-vernemq/advanced_options","siteSpaceId":"sitesp_u0oqb","description":"Configure a couple of hidden options for VerneMQ","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"8sBijVVVt8CueeBSnM1j","title":"Storage","pathname":"/vernemq/configuring-vernemq/storage","siteSpaceId":"sitesp_u0oqb","description":"","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"w8HTwagrGkTFY9sxh6eN","title":"No Op Engine","pathname":"/vernemq/configuring-vernemq/noopengine","siteSpaceId":"sitesp_u0oqb","description":"Configure how VerneMQ implements message persistence","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"dSc8LbxlIgTLG0EFQGt9","title":"Generic offline store","pathname":"/vernemq/configuring-vernemq/genericofflinestore","siteSpaceId":"sitesp_u0oqb","description":"Configure offline message store.","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"y0RogVwT9Hew27PnPcLH","title":"Redis based message passing","pathname":"/vernemq/configuring-vernemq/messagepassing","siteSpaceId":"sitesp_u0oqb","description":"New message passing model for VerneMQ","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"AUUsKzD7877Qqp9e292O","title":"Redis based subscription store","pathname":"/vernemq/configuring-vernemq/routing","siteSpaceId":"sitesp_u0oqb","description":"Configure Routing store.","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"AhxODzaAtm0swiMvXNtn","title":"MQTT Bridge","pathname":"/vernemq/configuring-vernemq/bridge","siteSpaceId":"sitesp_u0oqb","description":"VerneMQ can interface with other brokers (and itself) via MQTT bridges.","breadcrumbs":[{"label":"Configuring VerneMQ"}]},{"id":"GPRieSpwaxZ88nF1WOFN","title":"Introduction","pathname":"/vernemq/vernemq-clustering/introduction","siteSpaceId":"sitesp_u0oqb","description":"Everything you must know to properly configure and deploy a VerneMQ Cluster","breadcrumbs":[{"label":"VerneMQ Clustering"}]},{"id":"CEP1XRBkjOdrzEeVoxHN","title":"Inter-node Communication","pathname":"/vernemq/vernemq-clustering/communication","siteSpaceId":"sitesp_u0oqb","description":"Everything you must know to properly configure and deploy a VerneMQ Cluster","breadcrumbs":[{"label":"VerneMQ Clustering"}]},{"id":"WOZ1nt5eKfMjNNtgHKKw","title":"Dealing with Netsplits","pathname":"/vernemq/vernemq-clustering/netsplits","siteSpaceId":"sitesp_u0oqb","description":"How does VerneMQ deals with Network Partitions aka. Netsplits.","breadcrumbs":[{"label":"VerneMQ Clustering"}]},{"id":"YDdrHkJAnTnGPIbe9e0n","title":"Introduction","pathname":"/vernemq/live-administration/introduction","siteSpaceId":"sitesp_u0oqb","description":"","breadcrumbs":[{"label":"Live Administration"}]},{"id":"HRmi9NQKRonnHjY3b6hi","title":"Inspecting and managing sessions","pathname":"/vernemq/live-administration/managing-sessions","siteSpaceId":"sitesp_u0oqb","description":"Inspecting and managing MQTT sessions","breadcrumbs":[{"label":"Live Administration"}]},{"id":"52RSttVSml82HdukN6ye","title":"Retained messages","pathname":"/vernemq/live-administration/retained-store","siteSpaceId":"sitesp_u0oqb","description":"Inspecting the retained message store","breadcrumbs":[{"label":"Live Administration"}]},{"id":"pxe8rZFLTqlW0c1Di11V","title":"Live reconfiguration","pathname":"/vernemq/live-administration/config_values","siteSpaceId":"sitesp_u0oqb","description":"Managing VerneMQ live config values.","breadcrumbs":[{"label":"Live Administration"}]},{"id":"YNSakKrnhB5GcXbBCt4Y","title":"Managing Listeners","pathname":"/vernemq/live-administration/listeners","siteSpaceId":"sitesp_u0oqb","description":"Managing VerneMQ tcp listeners","breadcrumbs":[{"label":"Live Administration"}]},{"id":"LpsV5PBTnShzf6CgSg3N","title":"HTTP API","pathname":"/vernemq/live-administration/http-administration","siteSpaceId":"sitesp_u0oqb","description":"Everything you need to know to work with the VerneMQ HTTP administration interface","breadcrumbs":[{"label":"Live Administration"}]},{"id":"As5QaghZ0EyYBOMb4N1H","title":"Tracing","pathname":"/vernemq/live-administration/tracing","siteSpaceId":"sitesp_u0oqb","description":"Real-time inspection","breadcrumbs":[{"label":"Live Administration"}]},{"id":"e5gTg8e493hPVepeCLPa","title":"Introduction","pathname":"/vernemq/monitoring/introduction","siteSpaceId":"sitesp_u0oqb","description":"Description and Configuration of the built-in Monitoring mechanism","breadcrumbs":[{"label":"Monitoring"}]},{"id":"UcNyAgCXT2gpJObqE6lm","title":"$SYSTree","pathname":"/vernemq/monitoring/systree","siteSpaceId":"sitesp_u0oqb","description":"Description and Configuration of the $SYSTree Monitoring Feature","breadcrumbs":[{"label":"Monitoring"}]},{"id":"jhNO9LO7D4eTcIo0gMC1","title":"Graphite","pathname":"/vernemq/monitoring/graphite","siteSpaceId":"sitesp_u0oqb","description":"Description and Configuration of the Graphite exporter","breadcrumbs":[{"label":"Monitoring"}]},{"id":"g2l9RSjZSbelj3ZLCFzt","title":"Netdata","pathname":"/vernemq/monitoring/netdata","siteSpaceId":"sitesp_u0oqb","description":"Netdata Metrics","breadcrumbs":[{"label":"Monitoring"}]},{"id":"TxcK9eMvlxazjiPDlREg","title":"Prometheus","pathname":"/vernemq/monitoring/prometheus","siteSpaceId":"sitesp_u0oqb","description":"Description and Configuration of the Prometheus exporter","breadcrumbs":[{"label":"Monitoring"}]},{"id":"rE8RUpAGCGGgmDGLdVAK","title":"Health Checker","pathname":"/vernemq/monitoring/health-check","siteSpaceId":"sitesp_u0oqb","description":"The VerneMQ health checker","breadcrumbs":[{"label":"Monitoring"}]},{"id":"D5UqDiAajrn0ATVtiJla","title":"Status Page","pathname":"/vernemq/monitoring/status","siteSpaceId":"sitesp_u0oqb","description":"The VerneMQ Status Page","breadcrumbs":[{"label":"Monitoring"}]},{"id":"nRetcyOcOcKci0NmOOSR","title":"Introduction","pathname":"/vernemq/plugin-development/introduction","siteSpaceId":"sitesp_u0oqb","description":"Learn how to implement VerneMQ Plugins for customizing many aspects of  how VerneMQ deals with client connections, subscriptions, and message flows.","breadcrumbs":[{"label":"Plugin Development"}]},{"id":"mAY50etQ7NmGN0P2I1BI","title":"Session lifecycle","pathname":"/vernemq/plugin-development/sessionlifecycle","siteSpaceId":"sitesp_u0oqb","description":"","breadcrumbs":[{"label":"Plugin Development"}]},{"id":"eeYtOgyiupwImlJ6Famj","title":"Subscribe Flow","pathname":"/vernemq/plugin-development/subscribeflow","siteSpaceId":"sitesp_u0oqb","description":"","breadcrumbs":[{"label":"Plugin Development"}]},{"id":"AFG00Gzq2wEuFJozAc7z","title":"Publish Flow","pathname":"/vernemq/plugin-development/publishflow","siteSpaceId":"sitesp_u0oqb","description":"","breadcrumbs":[{"label":"Plugin Development"}]},{"id":"zkg6ynkJK1Ar47Ymw3kR","title":"Enhanced Auth Flow","pathname":"/vernemq/plugin-development/enhancedauthflow","siteSpaceId":"sitesp_u0oqb","description":"","breadcrumbs":[{"label":"Plugin Development"}]},{"id":"irjh4Wy4pUPmy0IUrPCw","title":"Erlang Boilerplate","pathname":"/vernemq/plugin-development/boilerplate","siteSpaceId":"sitesp_u0oqb","description":"","breadcrumbs":[{"label":"Plugin Development"}]},{"id":"tk9Ri4iHYZVyG9jRCqv9","title":"Lua Scripting Support","pathname":"/vernemq/plugin-development/luaplugins","siteSpaceId":"sitesp_u0oqb","description":"Learn how to implement VerneMQ plugins using the Lua Scripting Language.","breadcrumbs":[{"label":"Plugin Development"}]},{"id":"yNx91n6bb9KagThRwFVF","title":"Webhooks","pathname":"/vernemq/plugin-development/webhookplugins","siteSpaceId":"sitesp_u0oqb","description":"How to implement VerneMQ plugins using a HTTP interface","breadcrumbs":[{"label":"Plugin Development"}]},{"id":"uoCFQNRwU9qgecgNEXJb","title":"Events sidecar Plugin","pathname":"/vernemq/plugin-development/eventssidecarplugins","siteSpaceId":"sitesp_u0oqb","description":"How to implement VerneMQ plugins using a TCP sidecar","breadcrumbs":[{"label":"Plugin Development"}]},{"id":"uXmiYZhr8DACz8cR1SxX","title":"Loadtesting VerneMQ","pathname":"/vernemq/misc/loadtesting","siteSpaceId":"sitesp_u0oqb","description":"Loadtesting VerneMQ with vmq_mzbench","breadcrumbs":[{"label":"Misc"}]},{"id":"UoQaq3xbmTVv0WRzFsaT","title":"Not a tuning guide","pathname":"/vernemq/misc/not-a-tuning-guide","siteSpaceId":"sitesp_u0oqb","description":"","breadcrumbs":[{"label":"Misc"}]},{"id":"kwG4YyBeYQo1oM8m2JNH","title":"Change Open File Limits","pathname":"/vernemq/misc/change-open-file-limits","siteSpaceId":"sitesp_u0oqb","description":"How to change the open file limits","breadcrumbs":[{"label":"Misc"}]},{"id":"2W2jJL24S3R2sDh320Hp","title":"A typical VerneMQ deployment","pathname":"/vernemq/guides/typical-vernemq-deployment","siteSpaceId":"sitesp_u0oqb","description":"In the following we describe how a typical VerneMQ deployment can look and some of the concerns one have to take into account when designing such a system.","breadcrumbs":[{"label":"Guides"}]},{"id":"oZCLNVRvvsow1ee6b3RR","title":"VerneMQ on Kubernetes","pathname":"/vernemq/guides/vernemq-on-kubernetes","siteSpaceId":"sitesp_u0oqb","description":"This guide describes how to deploy a VerneMQ cluster on Kubernetes","breadcrumbs":[{"label":"Guides"}]},{"id":"Al2tGXfUjoJfV8qfI1Dc","title":"Loadtesting VerneMQ","pathname":"/vernemq/guides/loadtesting","siteSpaceId":"sitesp_u0oqb","description":"Loadtesting VerneMQ with vmq_mzbench","breadcrumbs":[{"label":"Guides"}]},{"id":"CgoQhx4yu3V5IPwFEPKt","title":"Clustering during development","pathname":"/vernemq/guides/clustering-during-development","siteSpaceId":"sitesp_u0oqb","description":"This describes a quick way to create a VerneMQ cluster on developer's machines","breadcrumbs":[{"label":"Guides"}]},{"id":"lTkTY0Ii8kgJ1WMa6s4o","title":"Not a tuning guide","pathname":"/vernemq/guides/not-a-tuning-guide","siteSpaceId":"sitesp_u0oqb","description":"","breadcrumbs":[{"label":"Guides"}]},{"id":"PXdrVgHFRf7LCVJnfmFH","title":"Change Open File Limits","pathname":"/vernemq/guides/change-open-file-limits","siteSpaceId":"sitesp_u0oqb","description":"A guide that shows how to change the open file limtits","breadcrumbs":[{"label":"Guides"}]}]}