Skip to main content

VS Code Extension

Surface SkySignal APM insights directly in your editor while you work on your Meteor.js application. See method latency, error rates, N+1 queries, observer leaks, and more -- right where you write your code.

Installation

Install SkySignal APM from the VS Code Marketplace, or search for "SkySignal" in the Extensions panel (Ctrl+Shift+X).

Requirements
  • VS Code 1.85.0 or later
  • A Meteor.js workspace (the extension activates when a .meteor/ directory is detected)
  • A SkySignal account with the @skysignal/agent package installed in your application
  • SkySignal server v2.x or later (REST API v2 required)

Getting Started

  1. Open your Meteor.js project in VS Code
  2. Open the Command Palette (Ctrl+Shift+P) and run SkySignal: Login
  3. Enter your SkySignal server URL, email, and password
  4. Select the site to monitor (or let auto-detection match it from your settings*.json)

The extension begins polling immediately. Hover over any Meteor construct to see live data.

Auto-detection

If your workspace has a settings*.json file containing a skysignal.apiKey field, the extension will automatically match it to the correct site -- no manual site selection needed.

Features

Hover Tooltips

Hover over any Meteor.methods, Meteor.publish, Meteor.subscribe, or Mongo.Collection reference to see live performance data:

  • Color-coded type badge -- METHOD, PUBLICATION, COLLECTION, or SUBSCRIPTION
  • Headline metrics -- latency (avg/p95), error rate, call volume, observer counts
  • Warning pills -- critical issues like N+1 queries, COLLSCAN, or observer leaks
  • Detail link -- click "View Details" to open a rich detail panel

Code Lenses

Clickable annotations appear above method and publication definitions showing key metrics:

847 calls/24h | avg 142ms | 2.3% errors | 2 issues

Each metric can be individually toggled in settings. Click a code lens to open the detail panel.

A dedicated activity bar panel organizes your application's performance data:

SKYSIGNAL (my-app)                       [refresh] [settings]
Methods (24)
orders.create 285ms 4.1%
users.search 89ms 0.2%
...
Publications (8)
userData 12 observers
...
Collections (15)
Errors (3 active groups)
Code Health
Deprecated APIs: 7 sync calls
Vulnerabilities: 2 high
Observer Leaks: 1 suspected
  • Single-click navigates to the definition in your codebase
  • Double-click opens a rich detail panel
  • Sortable by name, latency, error rate, or call volume
  • Refreshes automatically on each poll cycle

Inline Diagnostics

The extension publishes diagnostics to VS Code's Problems panel and renders inline squiggly underlines for production issues detected in your code:

DiagnosticWhat it flags
Error rateMethods with error rate above threshold
LatencyMethods with p95 latency above threshold
N+1 queriesMethods with repeated identical DB queries
COLLSCANQueries missing an index (full collection scan)
Deprecated APIsSync Meteor API calls that should be async
Missing projectionsPublications fetching all fields instead of projecting
Observer leaksSuspected observer leaks above confidence threshold
Vulnerabilitiesnpm packages with known high/critical CVEs

Each category can be individually enabled or disabled.

Detail Panels

Rich webview panels with charts and tables for deep-diving into specific constructs:

Method Detail -- latency time series, time breakdown (db/http/async/wait/compute), N+1 patterns, slow queries, recent errors with stack traces

Publication Detail -- observer type distribution (changeStream/oplog/polling), over-fetching analysis, linked observer table with leak confidence scores

Collection Detail -- index list with sizes, slow queries with explain hints, methods that read/write the collection

Error Detail -- occurrence frequency chart, full stack trace with clickable file paths that navigate to your workspace, triggering method context

Status Bar

A persistent status bar item shows connection status and data freshness:

SkySignal: 30s ago

Click to refresh. A warning icon appears when data is stale or the connection is lost.

Commands

CommandShortcutDescription
SkySignal: Login--Authenticate with your SkySignal server
SkySignal: Logout--Disconnect and clear stored credentials
SkySignal: Refresh Data--Force an immediate data refresh
SkySignal: Select Site--Switch the monitored site
SkySignal: Open Detail Panel--Open a detail panel for a specific construct

All commands are available from the Command Palette (Ctrl+Shift+P).

Configuration

All settings are under the skysignal.* namespace in VS Code settings.

Connection

SettingDefaultDescription
skysignal.serverUrlhttps://dash.skysignal.appSkySignal instance URL
skysignal.siteId""Manual site ID override (leave empty for auto-detection)
skysignal.autoDetectSitetrueAuto-detect site from Meteor settings files

Data

SettingDefaultDescription
skysignal.defaultTimeRange24hDefault time window: 1h, 6h, 24h, 7d, or 30d
skysignal.pollInterval60Background poll interval in seconds (minimum: 10)

Hovers

SettingDefaultDescription
skysignal.hovers.enabledtrueEnable hover tooltips
skysignal.hovers.methodstrueShow hovers for Meteor methods
skysignal.hovers.publicationstrueShow hovers for publications
skysignal.hovers.collectionstrueShow hovers for collections
skysignal.hovers.subscriptionstrueShow hovers for subscriptions

Code Lenses

SettingDefaultDescription
skysignal.codeLens.enabledtrueEnable code lenses
skysignal.codeLens.showCallstrueShow call count
skysignal.codeLens.showLatencytrueShow average latency
skysignal.codeLens.showErrorstrueShow error rate
skysignal.codeLens.showIssuestrueShow issue count

Diagnostics

SettingDefaultDescription
skysignal.diagnostics.enabledtrueEnable inline diagnostics
skysignal.diagnostics.errorRateThreshold5Error rate % to trigger a warning
skysignal.diagnostics.latencyP95Threshold500P95 latency in ms to trigger a warning
skysignal.diagnostics.n1DetectiontrueFlag N+1 query patterns
skysignal.diagnostics.collscanDetectiontrueFlag COLLSCAN (missing index)
skysignal.diagnostics.deprecatedApistrueFlag deprecated sync API usage
skysignal.diagnostics.missingProjectiontrueFlag publications without field projections
skysignal.diagnostics.observerLeakstrueFlag suspected observer leaks
skysignal.diagnostics.observerLeakConfidence60Minimum confidence score (0-100) to report a leak
skysignal.diagnostics.vulnerabilitiestrueFlag npm vulnerabilities
SettingDefaultDescription
skysignal.sidebar.sortByerrorRateSort order: name, latency, errorRate, or calls
skysignal.sidebar.showHealthytrueShow items with no issues

How It Works

The extension connects to SkySignal's REST API using JWT authentication. Credentials are stored securely in your OS keychain via VS Code's SecretStorage API -- they are never written to disk.

A background poller fetches summary data (methods, publications, collections, errors, code health) at a configurable interval (default: 60 seconds). Detail data for individual constructs is fetched on demand when you open a detail panel.

Meteor constructs in your source code are detected via regex pattern matching -- no AST parsing or build tooling required. The extension scans imports/** and server/** for patterns like:

PatternExample
Method definitionMeteor.methods({ 'orders.create': ... })
Method callMeteor.callAsync('orders.create', ...)
Publication definitionMeteor.publish('userData', ...)
Subscription callMeteor.subscribe('userData')
Collection definitionnew Mongo.Collection('orders')
Collection queryOrders.find(...), Orders.insertAsync(...)

These patterns are mapped to the corresponding server-side metrics from your SkySignal dashboard.

Security

  • JWT access tokens are short-lived (1 hour) and automatically refreshed
  • Refresh tokens (30 days) are stored in your OS keychain, never on disk
  • All API communication should use HTTPS in production
  • The extension is read-only -- it cannot modify your SkySignal data or application
  • Multi-tenant isolation is enforced server-side; you can only see data for sites you have access to

Troubleshooting

Extension not activating?

The extension activates when it detects a .meteor/ directory in your workspace. Make sure you have a Meteor project open.

No data after login?

  1. Check your server URL -- verify it's correct in settings (skysignal.serverUrl)
  2. Check site selection -- run SkySignal: Select Site to pick the right site
  3. Check the agent -- make sure skysignal:agent is installed and sending data to the dashboard
  4. Check the status bar -- it should show "SkySignal: Xs ago" with a recent timestamp

Hovers/code lenses not appearing?

  1. Check file type -- hovers only work in .js and .jsx files
  2. Check settings -- verify skysignal.hovers.enabled and skysignal.codeLens.enabled are true
  3. Force refresh -- run SkySignal: Refresh Data from the Command Palette
  4. Check for Meteor patterns -- the file must contain recognizable Meteor constructs (see How It Works)

Authentication errors?

  1. Token expired -- run SkySignal: Login again
  2. Wrong credentials -- verify your email and password work on the dashboard
  3. Network issues -- ensure VS Code can reach your SkySignal server URL

High CPU or memory usage?

  1. Increase poll interval -- set skysignal.pollInterval to a higher value (e.g., 120)
  2. Disable unused features -- turn off hovers, code lenses, or diagnostics you don't need
  3. Check workspace size -- very large workspaces may take longer to index

Next Steps