{"id":275754,"date":"2026-01-21T23:46:57","date_gmt":"2026-01-21T23:46:57","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/mesh-plug\/"},"modified":"2026-03-09T20:39:58","modified_gmt":"2026-03-09T20:39:58","slug":"mesh-plug","status":"publish","type":"plugin","link":"https:\/\/twd.wordpress.org\/plugins\/mesh-plug\/","author":7574497,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.3.1","stable_tag":"1.3.1","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Mesh-Plug for Meshtastic","header_author":"potar","header_description":"Lightweight Meshtastic\/MQTT viewer for WordPress via MQTT over WebSocket (WS\/WSS).","assets_banners_color":"44795f","last_updated":"2026-03-09 20:39:58","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.paypal.com\/ncp\/payment\/4RV65EGN96SLS","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":219,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"0.6.6.3":{"tag":"0.6.6.3","author":"potar","date":"2026-01-21 23:53:32"},"1.1.8":{"tag":"1.1.8","author":"potar","date":"2026-01-21 23:48:40"},"1.3.1":{"tag":"1.3.1","author":"potar","date":"2026-03-09 20:39:58"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3445810,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3445810,"resolution":"256x256","location":"assets","locale":""},"icon-512x512.png":{"filename":"icon-512x512.png","revision":3445810,"resolution":"512x512","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3445810,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3445810,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.6.6.3","1.1.8","1.3.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3444471,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3444471,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3444471,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3444471,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3444471,"resolution":"5","location":"assets","locale":""}},"screenshots":{"1":"Log: Where you can see mesh traffic moving","2":"Nodes: List of the Nodes in your local mesh","3":"Map: Nodes are required to use GPS\/share location","4":"Chat: Messages between connected Nodes","5":"Settings: MQTT required for Mesh-Plug"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[254440,126135,190408],"plugin_category":[],"plugin_contributors":[246848],"plugin_business_model":[],"class_list":["post-275754","plugin","type-plugin","status-publish","hentry","plugin_tags-meshtastic","plugin_tags-mqtt","plugin_tags-websocket","plugin_contributors-potar","plugin_committers-potar"],"banners":{"banner":"https:\/\/ps.w.org\/mesh-plug\/assets\/banner-772x250.png?rev=3445810","banner_2x":"https:\/\/ps.w.org\/mesh-plug\/assets\/banner-1544x500.png?rev=3445810","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/mesh-plug\/assets\/icon-128x128.png?rev=3445810","icon_2x":"https:\/\/ps.w.org\/mesh-plug\/assets\/icon-256x256.png?rev=3445810","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/mesh-plug\/assets\/screenshot-1.png?rev=3444471","caption":"Log: Where you can see mesh traffic moving"},{"src":"https:\/\/ps.w.org\/mesh-plug\/assets\/screenshot-2.png?rev=3444471","caption":"Nodes: List of the Nodes in your local mesh"},{"src":"https:\/\/ps.w.org\/mesh-plug\/assets\/screenshot-3.png?rev=3444471","caption":"Map: Nodes are required to use GPS\/share location"},{"src":"https:\/\/ps.w.org\/mesh-plug\/assets\/screenshot-4.png?rev=3444471","caption":"Chat: Messages between connected Nodes"},{"src":"https:\/\/ps.w.org\/mesh-plug\/assets\/screenshot-5.png?rev=3444471","caption":"Settings: MQTT required for Mesh-Plug"}],"raw_content":"<!--section=description-->\n<p>Mesh-Plug provides a simple shortcode that connects to your MQTT broker over WebSocket and prints incoming messages to a live log.<\/p>\n\n<p>Shortcode: [mesh_plug]<\/p>\n\n<p>Map shortcode options:\n- map_tiles=\"voyager|osm|light|dark\" (default: voyager)\n- map_zoom=\"13\" map_min_zoom=\"2\" map_max_zoom=\"18\"\n- fit=\"1|0|once\" fit_max_zoom=\"13\" center=\"lat,lon\"<\/p>\n\n<h3>External services<\/h3>\n\n<p>Mesh-Plug can connect to external services depending on how you configure and use it.<\/p>\n\n<h4>MQTT broker (configured by the site administrator)<\/h4>\n\n<p>Mesh-Plug connects directly from the visitor's browser to the MQTT broker WebSocket URL you enter in Settings \u2192 Mesh-Plug.\nThis is required for the plugin to receive and display Meshtastic\/MQTT messages.<\/p>\n\n<p>Data sent: the visitor's browser establishes a WebSocket connection to your broker; it may send a client ID and (optionally) the username\/password you configured; it subscribes to the topic filter you configured.\nWhen: whenever a page containing the [mesh_plug] shortcode is loaded and the user connects (or auto-connect is enabled).<\/p>\n\n<p>Terms\/Privacy: this depends on the broker provider you choose. If you use a third-party MQTT hosting provider, review their terms and privacy policy.<\/p>\n\n<h4>Map tile providers (CARTO \/ OpenStreetMap)<\/h4>\n\n<p>If you use the Map tab, Mesh-Plug downloads map tiles from a free provider to render the basemap.\nBy default, Mesh-Plug uses CARTO Voyager tiles. You can switch to OpenStreetMap tiles with shortcode map attributes.<\/p>\n\n<p>Data sent: standard HTTP requests for map tiles; this typically includes the visitor's IP address, user agent, and the requested tile coordinates.\nWhen: whenever the Map tab is opened\/visible and the map needs to load tiles.<\/p>\n\n<p>CARTO basemaps: https:\/\/carto.com\/basemaps\nOpenStreetMap tile usage policy: https:\/\/operations.osmfoundation.org\/policies\/tiles\/\nOpenStreetMap privacy policy: https:\/\/osmfoundation.org\/wiki\/Privacy_Policy<\/p>\n\n<h3>License<\/h3>\n\n<p>GPLv2 or later.<\/p>\n\n<h3>Credits<\/h3>\n\n<p>Developed by <strong>Michael Winchester<\/strong><br \/>\nFor documentation and updates, visit <a href=\"https:\/\/meshplug.michaelwinchester.com\/\">https:\/\/meshplug.michaelwinchester.com\/<\/a><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to \/wp-content\/plugins\/mesh-plug or install via the Plugins screen.<\/li>\n<li>Activate Mesh-Plug.<\/li>\n<li>Go to Settings \u2192 Mesh-Plug and configure your broker URL, topic, and credentials.<\/li>\n<li>Add [mesh_plug] to any page.<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Upgraded map rendering to Leaflet with drag\/pan, zoom controls, and GPS-accurate marker placement.<\/li>\n<li>Added shortcode map options: map_tiles, map_zoom, map_min_zoom, map_max_zoom, fit, fit_max_zoom, center.<\/li>\n<li>Improved MQTT WebSocket compatibility and close-code logging for broker troubleshooting.<\/li>\n<li>Fixed duplicate-message filtering so valid repeated node updates are not suppressed.<\/li>\n<li>Hardened schema upgrades on MariaDB by moving index creation out of dbDelta parser edge cases.<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li>Updated frontend output to use WordPress enqueue\/inline-script APIs (plugin check compliance).<\/li>\n<li>Documented external services (OpenStreetMap tiles; optional broker connections).<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>Chat now displays node longname (fallback: shortname, then node ID).<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Added message de-duplication to prevent double-posted chat and repeated entries.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>Map zoom is admin-controlled (shortcode); removed end-user zoom controls.<\/li>\n<li>Added Mesh-Plug logo branding to the Settings page.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Map tab now renders a real basemap using OpenStreetMap raster tiles (no external JS libraries required).<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added Map and Charts tabs for a richer dashboard experience.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Added simple tabs (Log, Nodes, Chat) for non-technical viewing.<\/li>\n<li>Binary\/protobuf payloads now display as a byte count instead of garbled text.<\/li>\n<li>Default topic updated to msh\/2\/json\/# to show human-readable Meshtastic JSON by default.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Fix shortcode rendering and JavaScript mount errors.<\/li>\n<li>Fix password handling: leaving password blank keeps the stored value.<\/li>\n<li>Allow ws:\/\/ and wss:\/\/ broker URLs.<\/li>\n<\/ul>","raw_excerpt":"Lightweight Meshtastic\/MQTT viewer for WordPress via MQTT over WebSocket (WS\/WSS).","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/275754","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=275754"}],"author":[{"embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/potar"}],"wp:attachment":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=275754"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=275754"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=275754"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=275754"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=275754"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=275754"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}