If you've ever tried to connect a device to Azure IoT Hub and found yourself staring at a blank screen, a connection refused error, or a tool that simply refuses to detect your hardware, you're not alone. Azure IoT Explorer is one of the most powerful diagnostic and management tools in the Microsoft Azure ecosystem, but it can be surprisingly finicky to set up and use correctly. In this guide, I'll walk you through everything you need to know: how to install it, configure it properly, fix the most common errors, and get your IoT devices talking to the cloud the way they're supposed to.

What Is Azure IoT Explorer?

Azure IoT Explorer is a cross-platform desktop application built by Microsoft that lets you interact with devices connected to your Azure IoT Hub. Think of it as a universal remote control and diagnostic dashboard rolled into one. With it, you can:

  • View and manage devices registered in your IoT Hub
  • Send cloud-to-device messages and read device-to-cloud telemetry in real time
  • Inspect and update device twins (the digital shadow of your physical device)
  • Invoke direct methods on your devices
  • Work with IoT Plug and Play (PnP) models and interfaces
  • Monitor built-in event endpoints for live data streams

It replaced the older Device Explorer tool, which was Windows-only and hasn't been actively maintained. IoT Explorer runs on Windows, macOS, and Linux, making it the go-to choice for modern IoT development teams.

Whether you're a developer prototyping a new sensor device, an engineer debugging a production fleet, or a hobbyist connecting a Raspberry Pi to the cloud, IoT Explorer is the tool you'll reach for when you need to see what's actually happening between your device and Azure.

Why Problems Happen With IoT Explorer

Before we dive into fixes, it helps to understand why IoT Explorer runs into trouble in the first place. The issues almost always fall into one of these categories:

1. Connection String Misconfiguration

IoT Explorer connects to your IoT Hub using a connection string that contains your hub's hostname, a shared access policy name, and a cryptographic key. If any part of that string is wrong, even a single misplaced character, you'll get a connection failure that can look like a dozen different errors depending on which part fails.

2. Permissions and Policy Scope

Azure IoT Hub uses Shared Access Policies to control who can do what. The policy you use in IoT Explorer needs the right combination of permissions. Using a device-level connection string instead of a hub-level one, or using a policy that only has "Device Connect" permissions when you need "Registry Read" as well, causes silent failures that are hard to diagnose.

3. Outdated Application Version

IoT Explorer is actively developed, and newer features, especially around IoT Plug and Play, require specific versions. Running an old version against a modern IoT Hub configuration is a common source of unexpected behavior.

4. Firewall and Network Restrictions

IoT Hub communicates over AMQP (port 5671), MQTT (port 8883), and HTTPS (port 443). Corporate firewalls, VPNs, and proxy servers frequently block AMQP and MQTT ports, which causes IoT Explorer to either hang or report misleading errors about authentication failures.

5. Model Repository Issues

If you're working with IoT Plug and Play devices, IoT Explorer needs to resolve the device model from a repository. Misconfigured repository paths, missing model files, or network-blocked access to the public repository will prevent device interfaces from loading.

Step-by-Step: Installing Azure IoT Explorer

1
Download the Latest Release

Go to the official Azure IoT Explorer GitHub releases page. You're looking for the latest stable release, at the time of writing, that's version 0.15.x or later. Download the appropriate installer for your platform:

  • Windows: Download the .msi installer
  • macOS: Download the .dmg file
  • Linux: Download the .AppImage or .deb package
Tip: Always download from the official GitHub repository at github.com/Azure/azure-iot-explorer/releases. Third-party mirrors may distribute outdated or modified builds.
2
Install the Application

On Windows, run the .msi installer and follow the prompts. No special configuration is needed during installation, just accept the defaults. On macOS, open the .dmg, drag IoT Explorer to your Applications folder, and when macOS Gatekeeper prompts you, go to System Preferences > Security & Privacy and click Open Anyway. On Linux with an AppImage, make the file executable first:

chmod +x azure-iot-explorer-*.AppImage
./azure-iot-explorer-*.AppImage
3
Gather Your IoT Hub Connection String

Before you launch IoT Explorer for the first time, you need your IoT Hub's shared access policy connection string. Here's how to find it:

  1. Open the Azure Portal and navigate to your IoT Hub
  2. In the left menu, under Security settings, click Shared access policies
  3. Click on the iothubowner policy (or any policy with Registry Read + Registry Write + Service Connect permissions)
  4. Copy the Primary connection string
Warning: The iothubowner policy has full access to your hub. For production environments, create a dedicated policy with only the permissions IoT Explorer actually needs. For read-only monitoring, "Registry Read + Service Connect" is sufficient.
4
Add Your IoT Hub to IoT Explorer

Launch IoT Explorer. On the home screen, click Add connection. Paste your connection string into the field and click Save. IoT Explorer will immediately attempt to connect and, if successful, will display your hub's hostname at the top of the screen along with a list of registered devices.

5
Verify the Connection

You should now see a list of devices registered in your hub. Click on any device to open its detail view. If you see the device twin, module identities, and the telemetry tab, you're fully connected and ready to go.

Fixing the Most Common IoT Explorer Errors

Error: "Unable to connect to IoT Hub" or "Connection refused"

This is the most common error and it has several possible causes. Work through them in order:

1
Verify Your Connection String Format

A valid IoT Hub connection string looks exactly like this:

HostName=your-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=abc123...==

Common mistakes include extra spaces, missing semicolons, using a device connection string (which starts with HostName=...;DeviceId=...;SharedAccessKey=...) instead of a hub-level string, or accidentally copying only part of the key. If your key doesn't end with ==, you likely didn't copy the full string.

2
Check Network Connectivity to Your Hub

Open a terminal and run:

nslookup your-hub.azure-devices.net

If this fails, your DNS resolution is broken. If it succeeds, test HTTPS connectivity:

curl -I https://your-hub.azure-devices.net

A response of any kind (even a 4xx error) confirms the host is reachable. A timeout or "connection refused" means a firewall is blocking you.

3
Check for Proxy Configuration

If you're on a corporate network, you may need to configure a proxy. IoT Explorer respects system-level proxy settings on Windows, but on macOS and Linux you may need to set environment variables before launching the application:

export HTTPS_PROXY=http://your-proxy:8080
./azure-iot-explorer

Error: "Unauthorized" or "403 Forbidden"

This error means your connection string is syntactically valid but the permissions are wrong.

1
Check Policy Permissions

In the Azure Portal, go to your IoT Hub's Shared access policies and verify that the policy you're using has at minimum:

  • Registry read, required to list devices
  • Service connect, required to read telemetry and send messages

If you want to update device twins or send cloud-to-device messages, you also need Registry write.

2
Regenerate the Key

If the connection string was copied days or weeks ago and the key was rotated in Azure AD or through an automated process, your key may have expired. In the portal, click Regenerate primary key on your policy, then copy the new connection string.

Warning: Regenerating a key will immediately disconnect any other service currently using that key. If you're not sure, regenerate the secondary key first and use that instead.

No Devices Showing in the Device List

If you connect successfully but the device list is empty when you know devices exist, try these steps:

1
Confirm You're Looking at the Right Hub

If you have multiple IoT Hubs in your Azure subscription, make sure the connection string you entered belongs to the hub with your devices. The hostname at the top of IoT Explorer is your confirmation, match it against what you see in the Azure Portal.

2
Refresh the Device List

Click the refresh icon next to the device list. IoT Explorer doesn't always auto-refresh on first load, especially if the hub has a large number of devices and is performing an internal query.

3
Check Device Registration Status

In the Azure Portal, navigate to IoT Hub > Devices. If devices are listed there but not in IoT Explorer, re-check your connection string permissions. The "Registry read" permission is specifically required for the device listing API.

Telemetry Not Appearing in Real-Time

You've clicked on a device, opened the Telemetry tab, started monitoring, and... nothing. Here's the diagnostic flow:

1
Confirm the Device Is Actually Sending Data

Before blaming IoT Explorer, verify the device is transmitting. If you're running device code locally, check its console output for successful sendEvent or publish confirmations. A device can be registered in IoT Hub but powered off or not running its telemetry loop.

2
Check the Consumer Group

IoT Hub's built-in endpoint uses consumer groups to allow multiple readers without interfering with each other. IoT Explorer uses the $Default consumer group by default. If another application, Azure Stream Analytics, an Azure Function, or another IoT Explorer instance, is already consuming from $Default, you'll see no data.

Fix this by creating a dedicated consumer group in the Azure Portal under IoT Hub > Built-in endpoints > Consumer Groups, then entering that group name in IoT Explorer's telemetry settings.

3
Check Message Routing

If your IoT Hub has custom message routes configured, messages might be routed away from the built-in endpoint entirely. In the Azure Portal, go to IoT Hub > Message routing and look for routes that are set to "Enabled" and don't have the built-in endpoint as a destination. If you have a "catch-all" route sending everything to a custom endpoint, IoT Explorer won't see those messages.

Tip: The built-in endpoint always receives a copy of messages unless you explicitly check "Route" and set the built-in endpoint to disabled. You can also add a route with the filter true that points to the built-in endpoint to ensure it always gets a copy.

Advanced Troubleshooting

Working With IoT Plug and Play (PnP) Models

IoT Plug and Play is Azure's framework for self-describing IoT devices, and IoT Explorer has first-class support for it. When it works, you can connect a PnP-capable device and IoT Explorer will automatically load the device's interface model, showing you properly labeled telemetry, properties, and commands. When it doesn't work, the interface panel stays blank or shows a "model not found" error.

To configure model resolution, go to Home > IoT Plug and Play Settings in IoT Explorer. You'll see options for:

  • Public repository: Resolves models from the public Azure device model repository
  • Local folder: Points to a directory on your machine containing .json DTDL model files
  • Company model repository: Connects to a private repository using a connection string

If you're developing a custom device, you almost certainly need the "Local folder" option. Create a directory, drop in your DTDL interface and model files, and point IoT Explorer to it. Your DTDL model ID must match exactly what the device reports in its model ID announcement, even a version number mismatch will prevent resolution.

Enabling Verbose Logging

When an error message isn't telling you enough, you can enable verbose logging to see the raw HTTP requests and responses between IoT Explorer and Azure. Launch IoT Explorer from a terminal with the --log-level flag:

# Windows (PowerShell)
& "C:\Program Files\Azure IoT Explorer\Azure IoT Explorer.exe" --log-level verbose

# macOS
/Applications/Azure\ IoT\ Explorer.app/Contents/MacOS/azure-iot-explorer --log-level verbose

# Linux
./azure-iot-explorer-*.AppImage --log-level verbose

The verbose output will be written to stdout and to a log file in your application data directory. On Windows, that's typically %APPDATA%\AzureIoTExplorer\logs.

Resetting IoT Explorer to Factory Defaults

If IoT Explorer is behaving strangely, missing UI elements, persistent errors after fixing the underlying issue, or crashes on startup, the fastest fix is often to clear its stored configuration. IoT Explorer stores its settings (including saved connection strings) in a JSON file. Deleting it forces the application to start fresh.

Location of the settings file:

  • Windows: %APPDATA%\AzureIoTExplorer\settings.json
  • macOS: ~/Library/Application Support/AzureIoTExplorer/settings.json
  • Linux: ~/.config/AzureIoTExplorer/settings.json
Warning: Deleting this file will remove all saved connection strings. Export or manually note them down before deleting if you have multiple hubs configured.

Using IoT Explorer With IoT Edge

If you're working with Azure IoT Edge, IoT Explorer can manage Edge devices and their modules just like regular IoT devices, with a few extra steps. Edge devices appear in the device list with a small "Edge" badge. Clicking on one will show you not just the device twin but also the module identities for each deployed module.

To view module twins and module-specific telemetry, click on the device, then navigate to the Module identities tab. You can click into individual modules (like $edgeAgent, $edgeHub, or your custom modules) to see their twins and, where applicable, their telemetry streams.

One thing to be aware of: module-to-cloud messages in IoT Edge are routed through the $edgeHub before being forwarded to IoT Hub. If $edgeHub isn't running or its routing rules aren't configured correctly, module telemetry will never reach IoT Hub and therefore won't appear in IoT Explorer.

Debugging With the Azure CLI as a Backup

When IoT Explorer is giving you results you don't trust, the Azure CLI with the IoT extension is your ground truth. Install it if you haven't already:

az extension add --name azure-iot

Then monitor telemetry directly:

az iot hub monitor-events --hub-name your-hub-name --output table

If this command shows telemetry but IoT Explorer doesn't, the issue is definitely in IoT Explorer's configuration (almost always the consumer group conflict described earlier). If neither shows data, the problem is on the device side.

Prevention: Best Practices for a Smooth IoT Explorer Experience

Use Dedicated Consumer Groups

Never use the $Default consumer group for any long-running monitoring session. Create a dedicated consumer group for IoT Explorer and another for each production service (Stream Analytics, Functions, etc.). This takes thirty seconds in the Azure Portal and saves hours of debugging when telemetry mysteriously disappears.

Create a Least-Privilege Shared Access Policy

Rather than using iothubowner for day-to-day work with IoT Explorer, create a dedicated policy called something like iotexplorer-readonly with only "Registry Read + Service Connect" permissions. Reserve the write-capable policies for automated systems and use the read-only one for interactive exploration.

Keep IoT Explorer Updated

New Azure IoT Hub features often require updated API versions, and IoT Explorer releases closely track new hub capabilities. Set a reminder to check for updates monthly, the GitHub releases page is the canonical source.

Document Your Connection Strings Securely

Store your IoT Hub connection strings in a password manager or Azure Key Vault, not in plaintext files or sticky notes. If a connection string is ever exposed, rotate the key immediately from the Azure Portal.

Test With a Simple Device First

When setting up a new IoT Hub or testing a new device type, always validate the entire pipeline with the simplest possible device code first, a ten-line script that sends a static JSON payload every five seconds. This gives you a known-good baseline before introducing complex firmware, SDKs, or PnP models.

Monitor Your IoT Hub's Quotas

Free-tier and basic-tier IoT Hubs have daily message limits. When you hit the limit, devices can still connect but their messages are dropped, which looks exactly like a telemetry gap in IoT Explorer. Check your hub's metrics in the Azure Portal under Monitoring > Metrics and watch the "Total number of messages used" counter.

Frequently Asked Questions

Can I use IoT Explorer with free-tier Azure IoT Hub?
Yes, absolutely. IoT Explorer works with all IoT Hub tiers including the free tier. The only limitation is the free tier's daily message cap (8,000 messages per day) and the fact that free-tier hubs don't support message routing or file uploads. For basic telemetry monitoring and device management, the free tier works perfectly with IoT Explorer.
Why does IoT Explorer say my device is "disconnected" even though it's sending data?
The connection status shown in IoT Explorer reflects the persistent MQTT or AMQP connection state, not whether messages are being received. A device that sends data over HTTPS will always appear as "disconnected" because HTTPS is a stateless protocol, there's no persistent connection to track. This is normal behavior. If you're using MQTT or AMQP and the device shows as disconnected while sending, check that the device is actually completing the connection handshake and not just publishing without establishing a session.
How do I send a cloud-to-device message using IoT Explorer?
Click on the target device in the device list, then navigate to the Cloud-to-device message tab. Type your message body in the text field, this can be plain text or a JSON string. Optionally add custom properties as key-value pairs. Click Send message to device. The message will be queued in IoT Hub and delivered to the device the next time it checks for pending messages. If your device uses MQTT with a persistent session or is actively connected, delivery is nearly instantaneous.
IoT Explorer crashes immediately on startup. How do I fix it?
Startup crashes are almost always caused by a corrupted settings file. Delete the settings file at the location described in the Advanced Troubleshooting section above, then relaunch. If the crash persists after deleting the settings file, try reinstalling the application from the latest release. On Windows, also make sure you have the Microsoft Visual C++ Redistributable installed, IoT Explorer depends on it and an outdated or missing redistributable causes immediate crashes on some systems.
Can I use IoT Explorer to manage devices at scale, like hundreds of devices at once?
IoT Explorer is designed for interactive, single-device work rather than bulk operations. For managing hundreds or thousands of devices simultaneously, use the Azure IoT Hub SDK for bulk device import/export, the Azure Portal's bulk operations interface, or the Azure CLI's IoT extension with scripting. IoT Explorer becomes sluggish with very large device registries (10,000+ devices) because it loads the device list in pages and the UI isn't optimized for bulk selection.
My device twin updates in IoT Explorer but the device doesn't receive them. Why?
Device twins have two sections: "desired" properties (written by the cloud, read by the device) and "reported" properties (written by the device, read by the cloud). When you update properties in IoT Explorer, you're updating the desired properties. The device only receives these updates if it has subscribed to twin update notifications in its SDK code. Check that your device code calls the equivalent of client.getTwin() and registers a handler for desired property changes. Also verify the device is actively connected, desired property updates for disconnected devices are queued and delivered on reconnection, but only if the device uses a persistent session (MQTT) or polls for updates on startup.
Does IoT Explorer work with Azure IoT Central?
Not directly. IoT Central is a managed IoT application platform that runs on top of IoT Hub, but it abstracts away the underlying hub, you don't get direct access to the IoT Hub connection string the way you do with a standalone hub. IoT Central has its own built-in data explorer and device management UI. If you need deeper access to devices in an IoT Central application, you can use the IoT Central REST API or export data to a dedicated IoT Hub using the data export feature, then connect IoT Explorer to that hub.
How do I view historical telemetry data in IoT Explorer?
You can't, and this is an important limitation to understand. IoT Explorer only shows live, real-time telemetry as it arrives at the IoT Hub endpoint. It does not persist or archive messages. If you need to query historical data, you need to route messages to a storage destination (Azure Blob Storage, Cosmos DB, or an Azure SQL database) and query that storage directly. For quick access to recent messages without a full storage pipeline, you can configure Azure Event Hubs message retention (up to 7 days on standard tier) and replay messages using a custom consumer application.

Quick Reference: IoT Explorer Keyboard Shortcuts and Tips

Once you've got IoT Explorer working reliably, here are a few workflow tips that will save you time on a daily basis:

  • Ctrl+R (Cmd+R on Mac): Refresh the current view without navigating away
  • Start monitoring before powering the device: If you start the telemetry monitor after the device has already sent its first batch of messages, you may miss them. Always start monitoring first, then trigger the device.
  • Use the JSON editor for device twins: In the device twin view, switch to the raw JSON editor to copy/paste large property sets instead of filling them in field by field.
  • Filter by device ID prefix: When you have many devices, use the search/filter box at the top of the device list to narrow by prefix. This is much faster than scrolling through hundreds of entries.
  • Save connection strings with friendly names: IoT Explorer lets you add a display name to each connection. Use something like "Production Hub - ReadOnly" instead of just leaving the raw hostname.

Summary

Azure IoT Explorer is an indispensable tool for anyone working in the Azure IoT ecosystem, but it rewards the users who take the time to understand it properly. The vast majority of problems people encounter, connection failures, missing telemetry, unauthorized errors, trace back to a small set of root causes: wrong connection strings, missing permissions, consumer group conflicts, or firewall blocks. Work through the checklist in this guide systematically and you'll resolve nearly any issue you encounter.

For the edge cases where the standard troubleshooting path doesn't get you there, the Azure CLI's az iot hub monitor-events command is your best friend. It bypasses IoT Explorer entirely and gives you a ground-truth view of what your hub is actually receiving. If that command shows data and IoT Explorer doesn't, you know exactly where to look.

Keep IoT Explorer updated, use dedicated consumer groups, follow least-privilege principles for your connection strings, and this tool will serve you well across development, testing, and production monitoring workflows.