Quick start
The fastest way to try VFault is the VS Code extension. It scans your code on save and underlines any hallucinated, deprecated, or verified functions inline.
1. Install the extension
Open VS Code or Cursor, then run:
Or use the command palette: search for VFault in the Extensions panel and click Install.
2. Open a PHP file
Open any PHP file containing WordPress function calls. Save the file. VFault will scan it automatically and show results.
3. Read the results
Red underline means the function doesn't exist — hover for suggestions. Yellow underline means it's deprecated — hover for the replacement. Green dotted underline means it's verified. The status bar at the bottom shows a summary.
4. Use quick fixes
Click the lightbulb icon on a red-underlined function. VFault offers one-click replacements based on fuzzy matching against the real API.
CLI tool
Clone the repo and run VFault from the command line.
VS Code settings
Open VS Code settings (Ctrl+,) and search for "VFault" to customise.
API base URL. Default: https://exceedweb.pythonanywhere.com. Change this if you self-host.
Automatically verify on file save. Default: true.
Toggle verification per language. PHP, Python, JavaScript, TypeScript, Blade all enabled by default.
Show green dotted underlines on verified functions. Default: true.
Delay before API call after save. Default: 500ms. Increase if on slow connection.
Commands
Press Ctrl+Shift+P and type "VFault" to see all available commands.
Manually trigger verification on the active file.
Verify only the highlighted code.
Enter a function name to look up directly.
Remove all VFault underlines from the current file.
Shards
Each shard is a verification database parsed from actual source code. Shards are isolated — no cross-ecosystem collisions.
25,306 triples · 402 deprecated
32,451 triples · 332 deprecated · 2,533 hooks
36,558 triples · 428 deprecated · 268 modules
31,605 triples · 755 deprecated
41,570 triples · 52 deprecated
335 triples · 17 deprecated · Hooks + DOM + Server
33,149 triples · Views + Models + Forms + Templates + URLs
More shards coming soon. Pro subscribers get new shards automatically.
Authentication
Free users don't need an API key — just call the endpoints directly. You get 100 requests per day, rate-limited by IP.
Pro and Team users authenticate by including an X-API-Key header with every request. You receive your API key automatically after subscribing.
In the VS Code extension, keys will be configurable via settings once paid shards go live.
Supported languages
The VS Code extension activates automatically for these file types:
| PHP | .php files — WordPress, Laravel |
| Python | .py files — standard library (Pro) |
| JavaScript | .js, .jsx files — Node, React (Pro) |
| TypeScript | .ts, .tsx files (Pro) |
| Blade | .blade.php files — Laravel templates |
You can enable or disable individual languages in VS Code settings under vfault.enabledLanguages.
API reference
Base URL: https://exceedweb.pythonanywhere.com
All endpoints accept an optional X-API-Key header. Without a key, you're on the free tier (100 requests/day). Pro users include their API key for higher limits.
whitelist array of namespace prefixes to skip your private/custom code.Unknown vs not found
VFault distinguishes between functions that should exist in a shard and don't (hallucinations) versus functions outside any shard's scope (private/custom code). Functions matching a known shard namespace (e.g. wp_, wc_, Python stdlib modules, JS built-ins) return not_found. Everything else returns unknown. Custom React hooks (e.g. useShoppingCart) are treated as unknown since custom hooks are expected. Hallucination rate only counts not_found.
Whitelist
Pass a whitelist array of namespace prefixes in your /verify request to skip your private functions. Any extracted function matching a whitelisted prefix gets whitelisted status and is excluded from verification.
Usage context rules (third pass)
VFault checks whether verified functions are used in the correct context. For example, wp_enqueue_script should be inside an add_action('wp_enqueue_scripts') callback, wp_redirect must be followed by exit;, useEffect must not be async directly, and eval() is flagged as a security risk. 45 rules across all 7 ecosystems. Issues are flagged with a severity of warning or error in the context_issues array.
Disabling rules
Pass a disable_rules array in your /verify request to skip specific context rules. You can pass function names (e.g. "eval") or stable rule IDs (e.g. "redirect_exit"). This only affects context rules. Existence checking, parameter comparison, and class/method pairing are not affected.
Parameter checking (second pass)
When your input contains function calls with PHP-style $param references, VFault automatically compares them against the stored signature. Renamed, missing, or extra parameters are flagged in the param_issues array.
Class/method pairing (second pass)
When your input contains ClassName::method or ClassName->method patterns, VFault checks that the method actually belongs to the stated class. Mismatches are flagged in the class_mismatches array.
Rate limits
Requests are limited per day and per minute. When you hit the limit, the API returns a 429 status code with details about your usage.
| Free (no key) | 100/day | 15/min |
| Pro (1 dev) | 5,000/day | 60/min |
| Team (5 devs) | 15,000/day | 90/min |
| Business (15 devs) | 50,000/day | 200/min |
| Enterprise | 100,000/day | 300/min |
Error responses
The API returns standard HTTP status codes. Error responses include a JSON body with details.
Invalid or inactive API key.
Daily or per-minute limit reached. Includes your current plan, limit, and usage.
Missing required fields or invalid input.
Input text exceeds the 50,000 character limit.
Self-hosting
Run VFault on your own infrastructure for unlimited requests and full control.
Then in VS Code settings, set vfault.apiUrl to http://localhost:8000.