Zero-Cost AI: Accessing Premium Models in VS Code Without API Keys
How I built a VS Code extension that gives you free access to Qwen-Max and DeepSeek models using only your existing web account — no billing, no tokens, no limits.
🎯 The Problem with Modern AI Tools
The state of AI development has become expensive:
API keys needed for every provider
Per-token pricing that adds up quickly
Rate limits blocking your workflow
Multiple subscriptions to different services
Browser sessions constantly expiring
Premium AI services charge significant monthly fees:
ChatGPT Plus: $20/month
Claude Pro: $20/month
Gemini Advanced: $20/month
That's over $600/year for basic access! And you still need separate accounts for each service.
What if there was another way?
💡 The Solution: Browser-Based Authentication
I developed AI Free VSCode — an open-source extension that leverages your existing free tier accounts from AI providers through browser automation.
Key Innovation
Instead of requiring API keys (which often have strict rate limits), the extension:
- Uses Playwright to automate a real Chromium browser session
- Stores authentication cookies locally
- Makes requests through the official web APIs
- Gives you full access to the same free tier available on their websites
Result?
✅ Zero cost - uses existing free accounts
✅ No API keys - just sign in once
✅ Higher limits - same as browsing the website
✅ Native integration - works directly in Copilot Chat
✅ Agent mode - full tool calling support
🏗 Architecture Overview
Extension Structure
ai-free-vscode/
├── src/
│ ├── extension.mjs # Entry point & commands
│ ├── lmProvider.mjs # Unified LM provider interface
│ ├── deepseek/
│ │ ├── auth.mjs # Browser login with Playwright
│ │ ├── client.mjs # API client implementation
│ │ ├── provider.mjs # Model logic & session management
│ │ └── config.mjs # Configuration constants
│ ├── qwen/
│ │ ├── auth.mjs # Qwen authentication
│ │ ├── client.mjs # Qwen API client
│ │ └── provider.mjs # Qwen model implementation
│ ├── utils/
│ │ ├── logger.mjs # Debug logging
│ │ ├── rateLimiter.mjs # Rate limiting protection
│ │ ├── responseValidator.mjs
│ │ └── tokenValidator.mjs
│ └── promptUtils.mjs # Message formatting
├── package.json # Extension manifest
└── README.md # Documentation
Core Components
1. Authentication Flow
The extension registers commands for users to authenticate:
context.subscriptions.push(
vscode.commands.registerCommand("deepseek.login", async () => {
await clearProfileSession(); // Clear old session
const result = await loginAndSaveAuth(); // New login via Playwright
auth.cookieHeader = result.cookieHeader;
auth.token = result.token;
}),
);
Process:
- Opens Chromium browser via Playwright
- User signs into provider normally
- Session cookies captured and stored locally
- Cookies used for subsequent API requests
2. Unified Provider Interface
All models are unified under a single vendor namespace:
class AiFreeVscodeChatModelProvider {
async provideLanguageModelChatResponse(
model,
messages,
options,
progress,
token,
) {
// Convert VS Code messages to API format
const convertedMessages = convertMessages(messages);
const tools = convertToolSchemas(options?.tools);
const prompt = messagesToPrompt(convertedMessages, tools);
// Route to appropriate provider
switch (model.family) {
case "deepseek":
await deepseekComplete({ modelId, prompt, auth, onText, signal });
break;
case "qwen":
await qwenComplete({
modelId,
prompt,
auth,
onText,
onThinking,
signal,
});
break;
}
}
}
Process:
- Routes VS Code chat requests to appropriate provider
- Handles both DeepSeek and Qwen models
- Converts messages to API format
- Manages streaming responses
3. Smart Session Management
Maintains conversation continuity with session caching:
const sessionIdCache = new Map();
async function runComplete({
modelId,
prompt,
auth,
threadKey,
messagesCount,
}) {
// Start fresh session for first message in thread
if (messagesCount === 1) {
sessionIdCache.delete(threadKey);
}
// Try cached session first (for conversation continuity)
const cachedSessionId = sessionIdCache.get(threadKey);
if (cachedSessionId) {
const ok = await attempt(cachedSessionId);
if (ok) return; // Success!
}
// Retry with new session
const sessionId = await client.createSession({ signal });
sessionIdCache.set(threadKey, sessionId);
await attempt(sessionId);
}
🔧 Installation & Setup
Step 1: Install the Extension
Download the latest .vsix file from
Add new models - Implement additional AI providers
Improve docs - Clarify setup instructions
Enhance UX - Better error messages, UI improvements
Write tests - Increase coverage for edge cases
Getting started:
git clone https://github.com/AppsGanin/ai-free-vscode
cd ai-free-vscode
npm install
# Edit code, press F5 to test
Contributions welcome! PRs are always appreciated.
📝 Legal Disclaimer
This extension is unofficial and not affiliated with any AI provider.
Use at your own risk - Automating web sessions may violate ToS
No guarantees - May stop working if providers change APIs
No liability - Authors not responsible for consequences
Always review Terms of Service before use.
🎯 Conclusion
AI Free VSCode demonstrates that you don't need expensive API keys or multiple subscriptions to access premium AI capabilities. By leveraging browser automation and existing free tiers, we've created a solution that:
- 💰 Costs nothing - literally $0 monthly subscription
- 🚀 Works instantly - one-time sign-in, perpetual access
- 🔒 Respects privacy - all data stays local
- 🛠️ Integrates seamlessly - native VS Code experience
Whether you're a student learning to code, a indie developer building your startup, or just someone who wants powerful AI tools without breaking the bank - this extension removes financial barriers and puts cutting-edge technology in your hands.
Ready to try it?
👉 Download the extension
⭐ Star the repo if it helps your workflow
📣 Share with fellow developers
Let's democratize AI access together! 🚀
SOCIAL SHARE CARD GENERATOR