
Security News
PHP Foundation Says Chainguard Broke Security Embargo Ahead of Emergency Patches
The PHP Foundation says Chainguard broke a security embargo ahead of critical RCE patches, as leaks disrupted the coordinated release.
@devlens/vue
Advanced tools
Automatic runtime error detection for Vue 3 apps. One plugin. Zero config.
Vue's app.config.errorHandler gives you a raw error and a component name. That's it. No path, no context, no suggestion. You're on your own.
DevLens catches Vue errors, Vue warnings, failed API calls, null property access, and missing render data -- then tells you exactly what went wrong, where, and how to fix it.
Vue silently swallows many issues that cause blank UIs:
app.config.errorHandler fires, but you forgot to set one -- error lostapp.config.warnHandler fires in dev, but you never check the consolenull because the API hasn't responded yet -- template renders blankundefined silently -- no error, no cluefetch fails with 500 -- the Promise resolves, you destructure nullDevLens catches all of these the moment they happen, with full context.
npm install @devlens/core @devlens/vue
Requirements: Vue >= 3.3.0
import { createApp } from 'vue';
import { createDevLensPlugin } from '@devlens/vue';
const app = createApp(App);
app.use(createDevLensPlugin());
app.mount('#app');
That's it. DevLens auto-installs:
app.config.errorHandlerapp.config.warnHandlerReplace ref() with useGuardedRef(). Same reactivity, but null/undefined property access is detected automatically:
import { useGuardedRef } from '@devlens/vue';
// In setup() or <script setup>
const user = useGuardedRef(initialUser, 'UserProfile');
// In your template:
// <img :src="user.profile.avatar" />
//
// If user.profile.avatar is null, DevLens immediately logs:
//
// [NULL] DevLens [WARN] null-access: Property "avatar" is null
// at path "user.profile.avatar"
// |- Path: user.profile.avatar
// |- Value: null
// |- Source: UserProfile
// \- Suggestion: Check if "avatar" is loaded before accessing
How it works: The ref value is wrapped in an ES6 Proxy. When the source ref changes, the proxy is recreated. The original data is untouched -- the proxy only observes.
Watch multiple values for null/undefined. Perfect for components that depend on async data:
import { useGuardedWatch } from '@devlens/vue';
// In setup() or <script setup>
const user = ref(null);
const posts = ref(undefined);
const settings = ref({ theme: 'dark' });
useGuardedWatch({ user, posts, settings }, 'Dashboard');
// DevLens logs:
//
// [RENDER] DevLens [WARN] render-data: "user" is null in Dashboard
// |- Path: Dashboard.user
// |- Value: null
// \- Suggestion: "user" is null -- check data loading in Dashboard
//
// [RENDER] DevLens [WARN] render-data: "posts" is undefined in Dashboard
// |- Path: Dashboard.posts
// |- Value: undefined
// \- Suggestion: "posts" is undefined -- check data loading in Dashboard
Runs immediate: true and deep: true, so it catches issues on mount and on every change.
The plugin auto-installs app.config.errorHandler and app.config.warnHandler:
[ERR] DevLens [ERROR] unhandled-error: Vue error in UserProfile: Cannot read property of null
|- Component: UserProfile
|- Lifecycle Hook: mounted
|- Source: Vue:UserProfile
\- Suggestion: Error in mounted of UserProfile -- check the component logic
[ERR] DevLens [WARN] unhandled-error: Vue warning in Dashboard: Invalid prop type
|- Component: Dashboard
|- Source: Vue:Dashboard
\- Suggestion: Check the Vue warning above -- it may indicate a potential issue
Every captured error includes the component name, lifecycle hook, and a suggestion.
app.use(createDevLensPlugin({
enabled: true,
minSeverity: 'warn',
throttleMs: 1000,
maxIssues: 100,
modules: {
network: {
fetch: true,
xhr: true,
ignoreUrls: ['/health'],
},
catcher: {
windowErrors: true,
unhandledRejections: true,
},
},
ignore: {
messages: [/ResizeObserver/],
},
}));
| Export | Description |
|---|---|
createDevLensPlugin(options?) | Vue 3 plugin. Installs engine, error/warn handlers, network interceptor, global catcher. Returns plugin with install(), uninstall(), getEngine(). |
useDevLens() | Composable that injects the DevLensEngine instance (or null if disabled). Use for custom reporting. |
useGuardedRef(initial, label?) | Returns a reactive ref wrapped in a Proxy that detects null/undefined property access at any depth. |
useGuardedWatch(data, label?) | Watches a Record<string, unknown> for null/undefined values. Runs immediately and deeply. |
| Export | Description |
|---|---|
DevLensPluginOptions | Same as DevLensConfig from @devlens/core |
DevLensKey | Vue injection key (Symbol) for the engine instance |
useGuardedWatchapp.use() and doneuseGuardedRef and useGuardedWatch work in setup() and <script setup>| Version | Feature | Status |
|---|---|---|
| v1.0 | Vue plugin with auto error/warn capture, guarded composables | Current |
| v2.0 | AI-powered analysis -- integrate Claude and Gemini models to analyze detected issues, explain root causes in the context of your Vue components, and suggest template/script fixes | Planned |
The v2.0 AI integration will understand Vue-specific patterns (reactivity pitfalls, lifecycle timing, prop validation) and provide targeted fix suggestions that account for your component structure.
FAQs
DevLens Vue integration - automatic error detection for Vue apps
The npm package @devlens/vue receives a total of 0 weekly downloads. As such, @devlens/vue popularity was classified as not popular.
We found that @devlens/vue demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
The PHP Foundation says Chainguard broke a security embargo ahead of critical RCE patches, as leaks disrupted the coordinated release.

Security News
PHP releases emergency patches for two critical RCE vulnerabilities as agencies urge organizations to take unpatched sites offline.

Threat Research
/Security News
A supply chain attack compromised LiteLLM 1.107.0 on PyPI and Docker, spreading malware that steals cloud credentials, developer secrets, and AI provider keys.