<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Preecha</title>
    <description>The latest articles on Forem by Preecha (@preecha).</description>
    <link>https://forem.com/preecha</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3891818%2Ffc0ea1ab-a477-4892-93a0-711e6f361ce2.png</url>
      <title>Forem: Preecha</title>
      <link>https://forem.com/preecha</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/preecha"/>
    <language>en</language>
    <item>
      <title>API Tool for Game Server Backend Teams</title>
      <dc:creator>Preecha</dc:creator>
      <pubDate>Wed, 22 Apr 2026 09:48:56 +0000</pubDate>
      <link>https://forem.com/preecha/api-tool-for-game-server-backend-teams-4a2n</link>
      <guid>https://forem.com/preecha/api-tool-for-game-server-backend-teams-4a2n</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Game server backends rely on multiple protocols: REST for player accounts and matchmaking, WebSocket for real-time game state, and gRPC for internal service communication. Most API tools focus only on REST. This article breaks down what game backend teams need from API tooling, how &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog’s WebSocket and gRPC support&lt;/a&gt; fits in, and practical considerations for latency-sensitive testing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Try Apidog today&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Game server backend development brings protocol complexity that typical API tools ignore. REST endpoints handle player profiles, inventory, and matchmaking; WebSocket connections manage real-time state, movement, and chat; gRPC links internal services. Using multiple API tools for a single backend drains productivity and slows down debugging.&lt;/p&gt;

&lt;p&gt;Latency is another challenge. A 200ms REST response may be fine for a leaderboard, but in WebSocket-driven gameplay, that’s a broken experience. Game backend engineers need tooling that matches their protocol stack and surfaces latency issues.&lt;/p&gt;

&lt;p&gt;This guide targets backend engineers at studios and indie developers building multiplayer backends, showing how to test REST, WebSocket, and gRPC APIs in a unified way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The game backend protocol stack
&lt;/h2&gt;

&lt;p&gt;Map your backend protocols before selecting tools:&lt;/p&gt;

&lt;h3&gt;
  
  
  REST: Administrative layer
&lt;/h3&gt;

&lt;p&gt;REST covers stateless, cacheable endpoints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Player authentication/session management&lt;/li&gt;
&lt;li&gt;Player profiles/account management&lt;/li&gt;
&lt;li&gt;Inventory/economy endpoints&lt;/li&gt;
&lt;li&gt;Matchmaking queue operations&lt;/li&gt;
&lt;li&gt;Leaderboards/statistics&lt;/li&gt;
&lt;li&gt;Game configuration retrieval&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are low-frequency and tolerate higher latency. Standard REST API testing tools cover this well.&lt;/p&gt;

&lt;h3&gt;
  
  
  WebSocket: Real-time game state
&lt;/h3&gt;

&lt;p&gt;WebSocket enables high-frequency, bidirectional comms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Player position/movement updates (20-60/sec/player)&lt;/li&gt;
&lt;li&gt;Game state sync&lt;/li&gt;
&lt;li&gt;In-game chat/notifications&lt;/li&gt;
&lt;li&gt;Matchmaking status updates&lt;/li&gt;
&lt;li&gt;Server-to-client event pushes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Testing requires persistent connections, sending/receiving JSON or binary messages, and observing message streams over time.&lt;/p&gt;

&lt;h3&gt;
  
  
  gRPC: Internal services
&lt;/h3&gt;

&lt;p&gt;Service-oriented backends often use gRPC for efficiency and strong typing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Session manager ↔ game logic server&lt;/li&gt;
&lt;li&gt;Auth service ↔ game server&lt;/li&gt;
&lt;li&gt;Analytics ingestion&lt;/li&gt;
&lt;li&gt;Internal leaderboard pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;gRPC testing needs .proto imports, method calls with typed payloads, and is fundamentally different from REST.&lt;/p&gt;

&lt;h3&gt;
  
  
  What’s usually not needed
&lt;/h3&gt;

&lt;p&gt;Game backends rarely use binary WebSocket frames, MQTT, or UDP via API tools. These are often handled with custom test utilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  REST testing for game backends
&lt;/h2&gt;

&lt;p&gt;REST is the baseline. For game backends, focus on:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Environment management:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Test against local, dev, staging, and prod servers. Use environment variables for base URLs, tokens, and region endpoints.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auth header automation:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Game backends use JWT or custom tokens. Automate token refresh with pre-request scripts that fetch and inject tokens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chained requests:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Matchmaking flows often require sequential requests (create player → enqueue → poll status → get match). Use request chaining to pass outputs between calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Assertions:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Check leaderboard order, inventory after purchases, and error responses with assertion scripts.&lt;/p&gt;

&lt;p&gt;Apidog supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre/post request JavaScript scripting&lt;/li&gt;
&lt;li&gt;Environment variable injection&lt;/li&gt;
&lt;li&gt;Chained requests&lt;/li&gt;
&lt;li&gt;Test assertions
All available in the free tier.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  WebSocket testing for game backends
&lt;/h2&gt;

&lt;p&gt;WebSocket testing is where most tools fall short.&lt;/p&gt;
&lt;h3&gt;
  
  
  What good WebSocket testing needs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Connect to WebSocket server with custom headers (auth/session IDs)&lt;/li&gt;
&lt;li&gt;Send messages or sequences&lt;/li&gt;
&lt;li&gt;Observe incoming messages in real time&lt;/li&gt;
&lt;li&gt;Verify message order/timing after actions&lt;/li&gt;
&lt;li&gt;Test connection stability (reconnect, heartbeats, drops)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  How Apidog helps
&lt;/h3&gt;

&lt;p&gt;Apidog offers a dedicated WebSocket interface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enter &lt;code&gt;ws://&lt;/code&gt; or &lt;code&gt;wss://&lt;/code&gt; URL, add headers, and connect&lt;/li&gt;
&lt;li&gt;Send JSON messages directly (e.g. &lt;code&gt;{ "type": "join_room", "room_id": "abc123" }&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Incoming messages appear in a formatted log&lt;/li&gt;
&lt;li&gt;Supports sending raw binary (hex/base64) payloads for games using binary protocols&lt;/li&gt;
&lt;li&gt;Custom headers for authentication (via handshake)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Apidog’s WebSocket testing is interactive/manual. For automated sequence or latency assertions (e.g., “receive message B within 500ms of sending A”), you’ll need custom scripts or test frameworks.&lt;/p&gt;
&lt;h2&gt;
  
  
  gRPC testing for game backends
&lt;/h2&gt;

&lt;p&gt;gRPC testing requires .proto service definitions.&lt;/p&gt;
&lt;h3&gt;
  
  
  Workflow with Apidog
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Import your &lt;code&gt;.proto&lt;/code&gt; files.&lt;/li&gt;
&lt;li&gt;Apidog parses and lists all RPC methods.&lt;/li&gt;
&lt;li&gt;Select a method; a typed form for the request appears.&lt;/li&gt;
&lt;li&gt;Fill in fields, send request, inspect response.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Streaming RPCs:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Apidog supports unary and server-side streaming. Client/bidirectional streaming support is more limited—check &lt;a href="https://apidog.com/docs?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog docs&lt;/a&gt; for latest status.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TLS support:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
gRPC over TLS with configurable certificate verification is supported.&lt;/p&gt;
&lt;h2&gt;
  
  
  Latency testing considerations
&lt;/h2&gt;

&lt;p&gt;API tools don’t directly solve game-specific latency needs, and Apidog is no exception, but you can still get useful data.&lt;/p&gt;
&lt;h3&gt;
  
  
  Measuring latency with Apidog
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;REST:&lt;/strong&gt; Response time is displayed for each request. Repeat runs to observe variance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSocket:&lt;/strong&gt; No automatic round-trip latency. Timestamp messages manually and compute deltas from server responses.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  When to use other tools
&lt;/h3&gt;

&lt;p&gt;For load/performance testing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use k6 or Locust for REST under load&lt;/li&gt;
&lt;li&gt;Use WebSocketBenchmark or custom scripts for concurrent WebSocket tests&lt;/li&gt;
&lt;li&gt;Gatling for scenario-based loads&lt;/li&gt;
&lt;li&gt;Custom tools for protocol-specific latency (e.g., physics update to client broadcast round-trip)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apidog is best for development/debugging—not load or stress testing.&lt;/p&gt;
&lt;h2&gt;
  
  
  Practical game backend testing setup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Workspace structure:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- auth/
- matchmaking/
- inventory/
- leaderboards/
- player-profiles/
- websocket-connections/
- internal-services/   # for gRPC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Environments:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Set up local, dev, staging, and prod.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Centralized environment vars:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;BASE_URL = http://localhost:3000
WS_URL = ws://localhost:3000/game
GRPC_HOST = localhost:50051
PLAYER_TOKEN = {{generated via pre-request script}}
TEST_PLAYER_ID = player_001
TEST_ROOM_ID = room_test_001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Auth token automation:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Write a collection-level pre-request script to fetch and store JWT tokens. Apply to all requests for seamless token refresh.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WebSocket session flows:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Create a document per major flow (join session, matchmaking, reconnection). Each establishes the connection with correct headers and documents expected message sequences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;gRPC service testing:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Import .proto files, test each RPC with valid and invalid inputs. Pay attention to error codes for invalid player IDs or session tokens.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does Apidog support WebSocket binary frames for custom protocols?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Yes. You can send hex- or base64-encoded binary payloads. For highly custom non-standard framing, you may need a custom tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can Apidog test gRPC bidirectional streaming?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Apidog supports unary and server streaming. For bidirectional streaming, support may be limited—check docs. For advanced cases, use grpcurl or BloomRPC.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to test across server regions?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Create one Apidog environment per region with region-specific URLs/addresses. Switch environments to run the same suite against different regions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to test matchmaking flows needing multiple clients?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Apidog tests one client at a time. For multi-client scenarios, use two sessions or custom integration tests with your language’s HTTP/WebSocket libraries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does Apidog support custom WebSocket headers for authentication?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Yes. Add custom headers (e.g., auth tokens) before connecting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can Apidog replay a WebSocket message sequence automatically?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No. For automated message sequence replay, use a framework like Playwright (with WebSocket support) or custom scripts with &lt;code&gt;ws&lt;/code&gt; (Node.js) or &lt;code&gt;websockets&lt;/code&gt; (Python).&lt;/p&gt;




&lt;p&gt;Game backend teams need API tools that cover REST, WebSocket, and gRPC in one workflow. &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; consolidates these protocols, streamlining development and debugging. While it won’t replace your load-testing or low-level binary debugging tools, it covers everyday testing needs for game backend engineering—without the context switching.&lt;/p&gt;

</description>
      <category>api</category>
      <category>backend</category>
      <category>gamedev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>API Platform for IoT Development</title>
      <dc:creator>Preecha</dc:creator>
      <pubDate>Wed, 22 Apr 2026 09:06:51 +0000</pubDate>
      <link>https://forem.com/preecha/api-platform-for-iot-development-4148</link>
      <guid>https://forem.com/preecha/api-platform-for-iot-development-4148</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;IoT APIs have unique requirements: limited bandwidth, binary payloads, device-focused authentication, and non-HTTP protocols. This post explains what IoT developers need from API tools, where standard tools like &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; fit, where they don’t (like MQTT), and how to test the HTTP-facing layer of your IoT backend.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Try Apidog for Free&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;IoT development involves two main API layers. Device-facing protocols (MQTT, CoAP, custom binary, WebSocket) focus on efficiency for constrained devices and networks. Platform-facing APIs (REST) handle provisioning, firmware updates, telemetry ingestion, and management dashboards.&lt;/p&gt;

&lt;p&gt;Most API tools only cover the platform-facing REST layer—not device protocols like MQTT. Don’t expect a standard API platform to handle MQTT natively. The best approach: use standard API tools for HTTP/WebSocket, and specialized tools for MQTT or CoAP.&lt;/p&gt;

&lt;p&gt;This article maps IoT protocol needs, shows what &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; covers, and provides actionable steps for testing the HTTP layer of your IoT backend.&lt;/p&gt;

&lt;h2&gt;
  
  
  The IoT Protocol Landscape
&lt;/h2&gt;

&lt;h3&gt;
  
  
  MQTT: Core protocol for device-cloud messaging
&lt;/h3&gt;

&lt;p&gt;MQTT is the main protocol for device-to-cloud communication. Designed for unreliable, bandwidth-limited environments, it uses a publish/subscribe model with topics, QoS, retained messages, and LWT.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apidog does not support MQTT natively.&lt;/strong&gt; For MQTT testing, use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://mqtt-explorer.com/" rel="noopener noreferrer"&gt;MQTT Explorer&lt;/a&gt;: Desktop GUI for broker/topic inspection&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://mqttx.app/" rel="noopener noreferrer"&gt;MQTTX&lt;/a&gt;: Cross-platform GUI and scripting&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mosquitto_sub&lt;/code&gt;/&lt;code&gt;mosquitto_pub&lt;/code&gt;: CLI tools from &lt;a href="https://mosquitto.org/" rel="noopener noreferrer"&gt;Mosquitto&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.hivemq.com/mqtt-cloud-broker/" rel="noopener noreferrer"&gt;HiveMQ Broker&lt;/a&gt;: Free tier with web client&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Always plan for a dedicated MQTT tool alongside your HTTP API tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  HTTP/REST: Managing devices and data
&lt;/h3&gt;

&lt;p&gt;Every IoT platform exposes REST APIs, even if devices use other protocols for telemetry. Typical REST use-cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Device provisioning: Registration, cert creation, identity assignment&lt;/li&gt;
&lt;li&gt;OTA firmware updates: Check for and deliver firmware&lt;/li&gt;
&lt;li&gt;Configuration: Push new settings to devices/groups&lt;/li&gt;
&lt;li&gt;Telemetry ingestion: Many accept HTTP POST telemetry&lt;/li&gt;
&lt;li&gt;Device management: Fleet status, remote commands, grouping&lt;/li&gt;
&lt;li&gt;Data queries: History, logs, alerts&lt;/li&gt;
&lt;li&gt;Webhook setup: Outbound event notifications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;REST APIs are fully testable with tools like &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  WebSocket: Real-time bidirectional communication
&lt;/h3&gt;

&lt;p&gt;WebSocket bridges the gap between REST and MQTT for real-time, two-way messaging:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Device command streams&lt;/li&gt;
&lt;li&gt;Live telemetry updates to dashboards&lt;/li&gt;
&lt;li&gt;Bidirectional config updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; supports WebSocket testing, including custom connection headers for most IoT scenarios.&lt;/p&gt;

&lt;h3&gt;
  
  
  CoAP: For the most constrained devices
&lt;/h3&gt;

&lt;p&gt;CoAP is an HTTP-like protocol for microcontrollers and tight bandwidth constraints, running over UDP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not supported by Apidog.&lt;/strong&gt; Use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/mkovatsc/Copper4Cr" rel="noopener noreferrer"&gt;copper4cr&lt;/a&gt;: Browser extension&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://libcoap.net/" rel="noopener noreferrer"&gt;libcoap&lt;/a&gt;: CLI tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Binary Payloads
&lt;/h3&gt;

&lt;p&gt;IoT devices often use binary encodings (Protocol Buffers, MessagePack, CBOR, or custom formats) instead of JSON.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; allows raw binary HTTP request bodies, supporting hex or base64-encoded payloads for platforms that accept binary over HTTP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Device Authentication Patterns in IoT
&lt;/h2&gt;

&lt;p&gt;IoT device auth differs from standard web API auth. While OAuth2 and API keys are supported by most tools, IoT adds:&lt;/p&gt;

&lt;h3&gt;
  
  
  Mutual TLS (mTLS)
&lt;/h3&gt;

&lt;p&gt;Cloud IoT platforms (AWS, Azure, Google) use mTLS for device authentication. Each device has a client certificate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testing mTLS in Apidog:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Load device certificate and private key in SSL settings&lt;/li&gt;
&lt;li&gt;Connect to endpoints requiring mTLS authentication&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Device-specific API Keys
&lt;/h3&gt;

&lt;p&gt;Some platforms issue per-device keys or token pairs. Use as Bearer tokens or API key headers—&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; handles both.&lt;/p&gt;

&lt;h3&gt;
  
  
  JWTs with Device Claims
&lt;/h3&gt;

&lt;p&gt;Platforms may issue JWTs with device info. Use Bearer auth; handle token refresh via pre-request scripts if needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom Header Auth
&lt;/h3&gt;

&lt;p&gt;Some platforms use proprietary headers (e.g., &lt;code&gt;X-Device-Token&lt;/code&gt;). &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; supports arbitrary custom headers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing IoT REST APIs with Apidog
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Device Provisioning Flows
&lt;/h3&gt;

&lt;p&gt;Provisioning usually involves multiple REST steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;POST&lt;/strong&gt; device registration (serial, model, firmware)&lt;/li&gt;
&lt;li&gt;Receive device ID/credentials in response&lt;/li&gt;
&lt;li&gt;Configure device with credentials&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GET&lt;/strong&gt; to verify registration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Implementation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use chained requests in &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Extract device ID with a post-request script and set as environment variable&lt;/li&gt;
&lt;li&gt;Use the variable in subsequent requests for full flow automation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  OTA Firmware Update Endpoints
&lt;/h3&gt;

&lt;p&gt;Common OTA steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GET&lt;/strong&gt; &lt;code&gt;/devices/{id}/update-check&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GET&lt;/strong&gt; &lt;code&gt;/devices/{id}/firmware&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;POST&lt;/strong&gt; &lt;code&gt;/devices/{id}/update-status&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Test with &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inspect firmware binary responses (headers, content)&lt;/li&gt;
&lt;li&gt;Validate correct download and reporting flows&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Telemetry Ingestion (HTTP)
&lt;/h3&gt;

&lt;p&gt;Many platforms accept telemetry as HTTP POST, often in binary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To test binary ingestion:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set body type to &lt;code&gt;raw&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Choose &lt;code&gt;binary&lt;/code&gt; format&lt;/li&gt;
&lt;li&gt;Paste hex or base64-encoded payload&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;Content-Type: application/octet-stream&lt;/code&gt; (or required type)&lt;/li&gt;
&lt;li&gt;Send and check response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Protobuf:&lt;/strong&gt; Encode test payload with your language’s protobuf library, then paste the binary.&lt;/p&gt;

&lt;h3&gt;
  
  
  SSL Certificate Testing
&lt;/h3&gt;

&lt;p&gt;IoT backends often use self-signed or pinned certs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; SSL settings let you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Disable SSL verification for dev/self-signed certs&lt;/li&gt;
&lt;li&gt;Load custom CA for private deployments&lt;/li&gt;
&lt;li&gt;Load client certificate for mTLS&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  WebSocket Testing for IoT Device Streams
&lt;/h2&gt;

&lt;p&gt;Common real-time use-cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Device shadow/twin updates (AWS IoT, Azure IoT)&lt;/li&gt;
&lt;li&gt;Live telemetry to dashboards&lt;/li&gt;
&lt;li&gt;Command delivery to devices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Test with Apidog:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connect using required auth headers (Bearer/API key)&lt;/li&gt;
&lt;li&gt;Send subscription messages if needed&lt;/li&gt;
&lt;li&gt;Monitor incoming messages&lt;/li&gt;
&lt;li&gt;Send test commands and observe device response&lt;/li&gt;
&lt;li&gt;Specify subprotocols via &lt;code&gt;Sec-WebSocket-Protocol&lt;/code&gt; if required&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to Use for MQTT Testing
&lt;/h2&gt;

&lt;p&gt;Since &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; doesn’t support MQTT:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MQTTX:&lt;/strong&gt; Full-featured GUI, scripting, TLS/mTLS, all protocol versions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MQTT Explorer:&lt;/strong&gt; Visualize topic trees and broker state&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mosquitto_pub/sub:&lt;/strong&gt; CLI tools for quick, scripted tests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD:&lt;/strong&gt; Use language-native MQTT libraries (e.g., &lt;code&gt;paho-mqtt&lt;/code&gt; for Python, &lt;code&gt;MQTT.js&lt;/code&gt; for Node)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practical IoT Backend Testing Setup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Environment configuration:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;Environments&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;local-dev&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;base_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http://localhost:8080&lt;/span&gt;
    &lt;span class="na"&gt;ssl_verify&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
  &lt;span class="na"&gt;staging&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;base_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://iot-staging.example.com&lt;/span&gt;
    &lt;span class="na"&gt;ssl_verify&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;prod&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;base_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://api.iot.example.com&lt;/span&gt;
    &lt;span class="na"&gt;ssl_verify&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="na"&gt;Variables&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;device_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dev_test_001&lt;/span&gt;
  &lt;span class="na"&gt;device_serial&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;SN-TEST-00001&lt;/span&gt;
  &lt;span class="na"&gt;auth_token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;fetched via pre-request script&lt;/span&gt;&lt;span class="pi"&gt;}}&lt;/span&gt;
  &lt;span class="na"&gt;firmware_version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2.1.4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Folder structure:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- provisioning/         # Registration/credential flows
- telemetry/           # Ingestion endpoint tests (JSON, binary)
- ota/                 # Firmware update flows
- device-management/   # Device CRUD operations
- websocket/           # Real-time stream tests
- error-cases/         # Invalid/malformed tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Binary payload test checklist:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Valid binary payload&lt;/li&gt;
&lt;li&gt;Truncated/incomplete payload&lt;/li&gt;
&lt;li&gt;Wrong &lt;code&gt;Content-Type&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Max-size payload&lt;/li&gt;
&lt;li&gt;Correct/incorrect auth&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does Apidog support MQTT testing?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No. Use MQTTX, MQTT Explorer, or mosquitto CLI for MQTT. Apidog covers HTTP and WebSocket, not MQTT.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can Apidog test CoAP endpoints?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No. CoAP is UDP-based; use copper4cr or libcoap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to test binary protobuf payloads in Apidog?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Encode with your protobuf library, convert to hex/base64, paste into raw binary body, set appropriate &lt;code&gt;Content-Type&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does Apidog support mTLS/device certificate authentication?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Yes. Load client cert and key in SSL settings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can Apidog test AWS IoT, Azure IoT Hub, or Google Cloud IoT?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Yes—for their HTTP/REST APIs. Use MQTTX for MQTT connections.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best approach for low-bandwidth binary telemetry testing?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Create test fixtures (valid, truncated, malformed payloads), store as environment variables or files, send via Apidog, check responses.&lt;/p&gt;




&lt;p&gt;No single tool covers every IoT protocol. Use &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; for HTTP/WebSocket (provisioning, management, telemetry, binary, mTLS), and MQTTX/mosquitto for MQTT. Knowing when to use which tool is key to efficient IoT development.&lt;/p&gt;

</description>
      <category>api</category>
      <category>iot</category>
      <category>testing</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Thunder Client Pro Paywall: What Changed and Your Best Alternatives</title>
      <dc:creator>Preecha</dc:creator>
      <pubDate>Wed, 22 Apr 2026 08:41:05 +0000</pubDate>
      <link>https://forem.com/preecha/thunder-client-pro-paywall-what-changed-and-your-best-alternatives-2jgm</link>
      <guid>https://forem.com/preecha/thunder-client-pro-paywall-what-changed-and-your-best-alternatives-2jgm</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Thunder Client has moved git sync—saving your collections as JSON files in your project—behind a Pro paywall. Free users can still send requests, but collections are now stored in VS Code's extension storage, not in your project or git. Your best free alternatives: REST Client (file-based, git-friendly), Apidog (cloud sync, free workspace), or sticking with an old Thunder Client version (limited support).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Try Apidog today&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Thunder Client was popular with developers because it was a lightweight, free, git-friendly API client inside VS Code—collections lived as JSON files in your project directory, making them version-controlled alongside your code.&lt;/p&gt;

&lt;p&gt;With git sync now restricted to the Pro tier, this core value is gone for free users. Below, you’ll find what changed, what’s missing, and how to migrate in 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  The timeline: how the paywall happened
&lt;/h2&gt;

&lt;p&gt;Originally, Thunder Client was a free VS Code extension, storing collections as JSON in a &lt;code&gt;.thunder-tests&lt;/code&gt; directory—naturally git-tracked. &lt;/p&gt;

&lt;p&gt;With the introduction of the Pro tier, several features moved behind the paywall:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Git sync:&lt;/strong&gt; Collections as JSON in your project directory (now Pro-only).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team sharing:&lt;/strong&gt; Share collections via git.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI runner:&lt;/strong&gt; Run collections from the command line for CI/CD.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The free tier still covers basic request sending, local collections, and environment variables. But if you relied on git for API collections, your workflow is affected unless you upgrade to Pro.&lt;/p&gt;

&lt;h2&gt;
  
  
  What free users actually lost
&lt;/h2&gt;

&lt;p&gt;After updating Thunder Client as a free user, these changes take effect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Collection location:&lt;/strong&gt; Collections move from project JSON files to VS Code’s internal extension storage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Not visible in your project directory&lt;/li&gt;
&lt;li&gt;Not tracked by git&lt;/li&gt;
&lt;li&gt;Not shared with teammates via repository&lt;/li&gt;
&lt;li&gt;Tied to your local VS Code install&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Git history:&lt;/strong&gt; Request changes and history are no longer tracked in git.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code review integration:&lt;/strong&gt; You can't review API collection changes via pull requests; sharing now requires manual export/import or Pro subscription.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Option 1: Stay on an older Thunder Client version
&lt;/h2&gt;

&lt;p&gt;You can freeze Thunder Client at an older version to keep git sync:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Disable auto-update:&lt;/strong&gt; Right-click Thunder Client in VS Code extensions panel &amp;gt; "Disable Auto Update".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install specific version:&lt;/strong&gt; Download &lt;code&gt;.vsix&lt;/code&gt; from the extension’s release history and install manually.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No bug fixes or security updates.&lt;/li&gt;
&lt;li&gt;Potential incompatibility with future VS Code versions.&lt;/li&gt;
&lt;li&gt;Maintenance hassle.&lt;/li&gt;
&lt;li&gt;Storage formats may change, reducing usefulness over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a short-term workaround, not a long-term solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 2: Switch to REST Client
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=humao.rest-client" rel="noopener noreferrer"&gt;REST Client by Huachao Mao&lt;/a&gt; is the top free, file-based replacement.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses &lt;code&gt;.http&lt;/code&gt; files—plain-text requests in your project, tracked by git.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Example request:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET https://api.example.com/products HTTP/1.1
Authorization: Bearer {{token}}
Accept: application/json
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Requests are version-controlled, diffable, and code-reviewable.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Migration steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install REST Client extension in VS Code.&lt;/li&gt;
&lt;li&gt;Export Thunder Client collections as JSON.&lt;/li&gt;
&lt;li&gt;Manually rewrite your key requests as &lt;code&gt;.http&lt;/code&gt; files.&lt;/li&gt;
&lt;li&gt;Remove or archive your old Thunder Client collections.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;No automated converter exists, but moving requests is usually straightforward.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Downside:&lt;/strong&gt; REST Client has no GUI—you author requests as plain text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 3: Switch to Apidog
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; solves the git sync problem via cloud workspaces, not plain files. Free tier supports up to 3 users, with synced collections across devices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Migration steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Export Thunder Client collections (File &amp;gt; Export).&lt;/li&gt;
&lt;li&gt;Create a free Apidog account at &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;apidog.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;In Apidog, click “Import” and upload your JSON export.&lt;/li&gt;
&lt;li&gt;Install the Apidog VS Code extension.&lt;/li&gt;
&lt;li&gt;Sign in to your Apidog account in the extension.&lt;/li&gt;
&lt;li&gt;Your imported collections appear inside VS Code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Benefits over Thunder Client free:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloud sync across devices&lt;/li&gt;
&lt;li&gt;Team sharing (up to 3 users free)&lt;/li&gt;
&lt;li&gt;Request history &amp;amp; API documentation&lt;/li&gt;
&lt;li&gt;Desktop app with the same workspace&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Trade-off:&lt;/strong&gt; Collections are in Apidog’s cloud, not local files in git. If you need git-based storage, REST Client is better.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparing the migration paths
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Git sync&lt;/th&gt;
&lt;th&gt;Free&lt;/th&gt;
&lt;th&gt;GUI&lt;/th&gt;
&lt;th&gt;Migration effort&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Old Thunder Client (frozen)&lt;/td&gt;
&lt;td&gt;Yes (old ver.)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Low (unsustainable)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;REST Client&lt;/td&gt;
&lt;td&gt;Yes (.http)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apidog&lt;/td&gt;
&lt;td&gt;Yes (cloud)&lt;/td&gt;
&lt;td&gt;Yes (3 users)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Low–Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thunder Client Pro&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No (~$10-15/mo)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;When did Thunder Client move git sync to Pro?&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Free users lost &lt;code&gt;.thunder-tests&lt;/code&gt; storage after updating.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Can I export my collections before migrating?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Yes. In Thunder Client, right-click a collection and export as JSON. Always export before switching tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is REST Client harder to use?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
It depends. If you prefer editing files and having versioned requests, it’s straightforward. If you rely on a GUI, expect an adjustment period.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does Apidog store collections in my git repository?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No, Apidog stores collections in the cloud. For git-based storage, use REST Client.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Will Thunder Client free tier lose more features?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
There’s no official announcement, but the move to paywalled git sync suggests the free tier could change again. For stability, consider migrating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fastest migration to Apidog?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Export from Thunder Client, create a free Apidog account, import your JSON, and install the VS Code extension. Most migrations take under 30 minutes.&lt;/p&gt;




&lt;p&gt;Thunder Client’s free tier no longer supports git-based collections. For a file-based workflow, use REST Client. For cloud sync and team sharing, Apidog offers what Thunder Client once did—choose based on your team’s needs.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>api</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
