Edit Custom JavaScript and Custom CSS for your Optimizely Web Experimentation experiments directly in VSCode. Your existing editor tooling — AI assistants (Copilot), linters (ESLint, Stylelint), snippets, key bindings — works against code that lives on Optimizely's servers.
Features
Sidebar browser — cascading account / project / experiment dropdowns. No numeric IDs to type.
Pinned defaults — star your most-used account and project; new windows pre-select them.
All three experiment types — A/B, Multivariate, and Personalization. Layer-shared JS/CSS plus per-variation Custom Code for every experiment type.
Per-Page Action JS and CSS for A/B Tests (Variation × Page).
JS timing toggle — flip any JS snippet between Sync and Async from the status bar, an inline tree action, or a CodeLens on the open file.
Byte-exact save — no normalization, formatting, or line-ending changes. What you save is what lands on the server.
Clear save-time permission errors — if your account lacks edit permission on the experiment, VSCode shows a specific "ask an admin for Editor access" message when you try to save, instead of a generic permission error. Expired sessions get a parallel "sign out and sign back in" prompt.
OAuth sign-in — one browser handshake, 8-hour session with silent refresh. All credentials in your OS keyring (macOS Keychain, Windows Credential Manager, or Linux gnome-keyring). No tokens on disk.
Getting started
Install the extension.
Click the Optimizely icon in the activity bar, then click Sign In in the status bar.
Your browser opens to Opti ID. Sign in; it hands control back to VSCode automatically.
In the Optimizely sidebar, pick an account, project, and experiment.
Click any resource in the tree to open it in a tab. Edit and save normally — Cmd+S writes to Optimizely.
(Optional) Click the star icon next to the account or project dropdown to pin it as a default for future windows.
Requirements
VSCode 1.95 or later.
An Opti ID identity with access to at least one Optimizely Web Experimentation account.
A working OS keyring (macOS Keychain, Windows Credential Manager, or Linux gnome-keyring or equivalent). The extension refuses to sign in without one — there is no fallback credential storage.
Settings
Setting
Default
Purpose
optimizely.log.level
off
Verbosity of the Optimizely Output channel: off, info, debug. All tokens are redacted at every level.
optimizely.tree.refreshDebounceSeconds
30
Minimum interval between automatic sidebar refreshes when it gains focus.
optimizely.auth.tokenExpiryBufferSeconds
60
Safety window before token expiry to trigger a silent refresh.