Thunder Client
GitHub Overview
thunderclient/thunder-client-support
Thunder Client is a lightweight Rest API Client Extension for VS Code.
Topics
Star History
Development Tool
Thunder Client
Overview
Thunder Client is an API development extension exclusively designed for Visual Studio Code. Complete API testing within the editor with excellent development workflow integration. With GUI-based scriptless testing, collection management, and environment variable support, it serves as a lightweight alternative to Postman, gaining support from many developers. It maintains high popularity even after partial monetization in January 2025.
Details
Thunder Client is a lightweight REST API client extension designed to optimize the API development experience within VS Code. Its greatest feature is the ability to perform API testing through a GUI-based interface without writing scripts. While traditional Postman requires extensive boilerplate code for basic testing, Thunder Client uses an intuitive interface with dropdown menus to easily execute status code checks and response validation. Data is stored locally with Git repository integration, enabling team sharing of request collections. By completing everything within VS Code, there's no need to switch between code editor and API testing, significantly improving development efficiency. The environment variable feature includes encrypted environment support for secure management of sensitive information like tokens and API keys. It provides comprehensive functionality required for modern API development, including GraphQL support, OAuth 2.0 authentication, AWS authentication, and NTLM authentication. The Postman collection import feature makes migration from existing workflows easy.
Advantages & Disadvantages
Advantages
- Complete VS Code Integration: API testing completed within editor without workflow interruption
- Scriptless Testing: Basic testing executable through GUI operations only
- Lightweight & Fast: Operates as VS Code extension with low resource consumption
- Git Integration: Request management as project files, easy team sharing
- Encrypted Environments: Secure storage of sensitive information with encryption
- Rich Authentication: Supports OAuth 2.0, AWS, NTLM, Bearer authentication, etc.
- Import Functionality: Easy migration from Postman collections
- Local Storage: Privacy protection without cloud dependency
Disadvantages
- VS Code Dependency: Constraint of only being usable within VS Code
- Monetization: Commercial use requires paid plans since January 2025
- Feature Limitations: Advanced features are limited compared to Postman
- Small Ecosystem: Fewer plugin and extension options
- Team Features: Limited enterprise collaboration functionality
Reference Links
- Thunder Client Official Site
- VS Code Marketplace
- GitHub - Thunder Client Support
- Thunder Client Documentation
- Thunder Client Pricing
Usage Examples
Basic HTTP Request
// Thunder Client GUI configuration example
{
"method": "GET",
"url": "https://api.example.com/users/{{userId}}",
"headers": {
"Authorization": "Bearer {{accessToken}}",
"Content-Type": "application/json",
"Accept": "application/json"
},
"params": {
"page": "1",
"limit": "10"
}
}
// Environment variables configuration
{
"baseUrl": "https://api.example.com",
"accessToken": "your-jwt-token",
"userId": "12345",
"apiVersion": "v2"
}
POST Request with JSON Body
// Request configuration
{
"method": "POST",
"url": "{{baseUrl}}/users",
"headers": {
"Authorization": "Bearer {{accessToken}}",
"Content-Type": "application/json"
},
"body": {
"name": "John Doe",
"email": "[email protected]",
"age": 30,
"department": "engineering",
"skills": ["JavaScript", "Python", "React"]
}
}
// GUI Test configuration
[
{
"type": "status-code",
"operator": "equal",
"value": "201"
},
{
"type": "json-query",
"path": "$.id",
"operator": "exists"
},
{
"type": "json-query",
"path": "$.email",
"operator": "contains",
"value": "@"
}
]
Dynamic Environment Variable Setting
// Setting environment variables from response
{
"setEnvVar": [
{
"varName": "userId",
"source": "json",
"path": "$.data.id"
},
{
"varName": "userToken",
"source": "header",
"path": "Authorization"
},
{
"varName": "sessionId",
"source": "cookie",
"path": "session_id"
}
]
}
// Encrypted environment variables
{
"encrypted": true,
"variables": {
"apiKey": "encrypted:abc123...",
"secretToken": "encrypted:def456...",
"dbPassword": "encrypted:ghi789..."
}
}
GraphQL Queries
// GraphQL configuration
{
"method": "POST",
"url": "{{baseUrl}}/graphql",
"headers": {
"Authorization": "Bearer {{graphqlToken}}",
"Content-Type": "application/json"
},
"body": {
"query": "query GetUserProfile($userId: ID!) { user(id: $userId) { id name email posts { id title content } } }",
"variables": {
"userId": "{{currentUserId}}"
}
}
}
// GraphQL Testing
[
{
"type": "json-query",
"path": "$.data.user",
"operator": "exists"
},
{
"type": "json-query",
"path": "$.data.user.email",
"operator": "contains",
"value": "@"
}
]
Authentication Configuration
// OAuth 2.0 configuration
{
"auth": {
"type": "oauth2",
"authUrl": "https://auth.example.com/oauth/authorize",
"tokenUrl": "https://auth.example.com/oauth/token",
"clientId": "{{clientId}}",
"clientSecret": "{{clientSecret}}",
"scope": "read write",
"grantType": "authorization_code"
}
}
// AWS authentication
{
"auth": {
"type": "aws",
"accessKey": "{{awsAccessKey}}",
"secretKey": "{{awsSecretKey}}",
"region": "us-west-2",
"service": "apigateway"
}
}
// Bearer Token
{
"auth": {
"type": "bearer",
"token": "{{accessToken}}"
}
}
// Basic authentication
{
"auth": {
"type": "basic",
"username": "{{username}}",
"password": "{{password}}"
}
}
Collection Management
// Collection structure
{
"collectionName": "User Management API",
"requests": [
{
"name": "Login",
"method": "POST",
"url": "{{baseUrl}}/auth/login",
"folder": "Authentication"
},
{
"name": "Get Users",
"method": "GET",
"url": "{{baseUrl}}/users",
"folder": "User Operations"
},
{
"name": "Create User",
"method": "POST",
"url": "{{baseUrl}}/users",
"folder": "User Operations"
}
],
"folders": [
"Authentication",
"User Operations",
"Admin Functions"
]
}
// Git repository integration
// thunder-tests/
// ├── thunderclient.json // Collection data
// ├── thunderEnvironment.json // Environment variables
// └── thunderCollection.json // Request details
VS Code Integration and Workflow
// VS Code settings (settings.json)
{
"thunder-client.saveToWorkspace": true,
"thunder-client.showActivityFromCollection": true,
"thunder-client.followRedirects": true,
"thunder-client.certificates": [],
"thunder-client.proxy": ""
}
// Workspace configuration
{
"folders": [
{
"path": "./src"
}
],
"settings": {
"thunder-client.workspaceRelativePath": "api-tests",
"thunder-client.saveRequestOnSend": true
}
}
// Keyboard shortcuts example
{
"key": "ctrl+alt+r",
"command": "thunder-client.new-request"
},
{
"key": "ctrl+alt+e",
"command": "thunder-client.change-environment"
}