CtrlLensCtrlLens
CtrlLens Documentation

Bring software-engineering discipline to PLC code

CtrlLens turns a Studio 5000 project into a version-controlled, reviewable, AI-ready codebase. This guide walks the full workflow — from install to CI/CD — feature by feature. Works in VS Code and Cursor on Windows, macOS, and Linux.

Overview

What CtrlLens does

Git was built for text. A Studio 5000 project is a proprietary binary (.ACD) or one dense XML file (.L5X) — so plain Git gives you no diff, no review, no merge. CtrlLens closes that gap: it explodes the project into a per-routine tree, renders every change visually, resolves merge conflicts rung by rung, and keeps an always-current briefing on disk for your AI assistant.

CtrlLens is not a replacement for Studio 5000 — it is complementary. Studio 5000 owns hardware configuration, compilation, download, and online monitoring. CtrlLens owns the software-engineering layer Studio 5000 leaves open: version control, code review, multi-developer collaboration, CI/CD, and cross-platform access.

Readable diffs

Ladder, FBD, SFC, and ST rendered on a canvas — added green, deleted red, modified yellow. No raw XML hunks.

Fearless merge

Conflicts resolved rung by rung with one-click Accept Ours / Accept Theirs, re-validated before commit.

AI-ready

Auto-generated project context so any file-aware agent works from ground truth, not guesses.
Freemium. L5X preview and ACD ↔ L5X sync are free for everyone. Git VCS, Visual Diff, interactive editing, Merge UI, and AI Context require CtrlLens Pro. See Licensing & platform for the full split.
Getting started

Install & activate the extension

Install CtrlLens from the VS Code Marketplace — it runs in both VS Code and Cursor, from a single VSIX, on Windows, macOS, and Linux. Free features work immediately with no account and no network. The extension activates automatically when the workspace contains any Logix-related files, and stays dormant otherwise.

Auto-activation triggers

  • RSLogix5000Content/RSLogix5000Content.xml — an exploded project
  • acd_sync_config.yaml — a configured project
  • any *.l5x or *.L5X file

Requirements

  • l5xplode / l5xgit — the .NET CLI tools for L5X explode/implode, required for any L5X-level work on every platform.
  • Logix Designer SDK (Windows only, optional) — needed only for ACD ↔ L5X auto-conversion. CtrlLens auto-detects the install directory; Git, diff, merge, preview, and editing all work without it.

Extension settings

SettingPurpose
ctrllens.l5xplodePathPath to the l5xplode executable (default: l5xplode).
ctrllens.l5xgitPathPath to the l5xgit executable (default: l5xgit).
ctrllens.logixDesignerSdkPathLogix Designer SDK install directory (Windows). Leave empty to auto-detect; the detected path is written back so it appears in the Settings UI.
ctrllens.defaultViewModeDefault view mode: preview or xml.
ctrllens.validateInViewModePro. Live-validate routines while only viewing them (red-highlight invalid operands and the rung wire). Off by default — edit mode always validates regardless of this setting.
ctrllens.merge.showReviewOnSuccessAfter a no-conflict git merge, show a Merge Review panel summarising the routine changes about to be committed (default: true).
ctrllens.git.historyLimitMaximum commits fetched for git history queries — routine history, branch picker, and repo commit list (default: 100).
Getting started

New / Open / Close a project

The VCS Sync panel exposes the universal IDE triad. Each verb maps to a command:

ActionWhat it doesPlatform
New Project…One unified picker for an .ACD or an .L5X. An .L5X is exploded directly (SDK-free) → git init → initial commit. An .ACD is auto-converted (acd2l5x) → exploded → committed..L5X: all platforms. .ACD: Windows + SDK
Open Project…Attach an existing exploded folder; validates the RSLogix5000Content/ marker, offers git init if needed, and auto-links the ACD from acd_sync_config.yaml when present.All platforms — never touches the SDK
CloseReset the configured paths (deletes nothing on disk).All platforms

First-time setup

  1. 1Open the CtrlLens sidebar from the Activity Bar. The VCS Sync panel shows "No project configured".
  2. 2Click New Project… and pick an .L5X (works everywhere, no SDK) or an .ACD (auto-converted on Windows + SDK) — or Open Project… to attach an already-exploded folder.
  3. 3The ACD is an optional, per-project property. With no ACD linked the panel runs in L5X mode (Sync from L5X); ACD-only actions stay disabled with an explanatory tooltip until an ACD is linked or generated.

Joining an existing project (clone onboarding)

  1. 1git clone <repo-url> the project repository and open the folder in VS Code.
  2. 2CtrlLens detects the exploded structure and prompts: "Detected a CtrlLens project. Associate a local ACD file?"
  3. 3Click Select ACD File to link your local ACD, or Later to skip and work in L5X mode.

Manual path configuration

If the onboarding prompt was dismissed, configure paths directly in the VCS Sync panel: click ... next to GIT REPO to browse for the project folder, and ... next to ACD to browse for the ACD file.

Explore a project

Diagram preview — RLL, FBD, SFC, ST

Click any routine in the Project Organizer to open it. Graphical languages (RLL/FBD/SFC) render on a Konva canvas; Structured Text opens in VS Code's native Monaco editor with PM007-conformant syntax highlighting (100+ Rockwell instructions, bit access, region folding, conversion functions).

Canvas navigation

ActionInput
PanClick and drag on empty canvas area
Zoom in / outCtrl = / Ctrl -, or Ctrl + scroll
Reset zoomCtrl 0
Set exact zoomClick the percentage in the status bar and type a value (30%–300%)

Toolbar & status bar

  • Breadcrumb Task > Program > Routine path, with badges for routine type and rung count.
  • Edit button — toggles Preview ↔ Edit mode (exploded projects only). See Interactive editing.
  • </> XML button — exposes the routine source to AI tools. See AI context.
  • Status bar — rung info and modified indicator on the left, zoom controls on the right.
Explore a project

Tags table

Click Controller Tags (N) or Local Tags (N) to open a Studio 5000-style tags table.

ColumnDescription
NameTag name (monospace, blue)
ValueTag value, or {...} for arrays/structures
StyleRadix / display style
Data Typee.g. DINT, BOOL, MyUDT
DescriptionTag comment
External AccessRead/Write, Read Only, or None
ConstantCheckmark if constant
Alias ForSource tag name if aliased
Tag TypeBase, Alias, etc.
  • Filter — type in the search box to filter by name (real-time, case-insensitive).
  • Resize columns — drag any column-header border (minimum 40px).
  • Right-click the Tags folder for diff and history options (see Visual diff).
Edit & inspect · Pro

Interactive editing

Toggle the Edit button in the toolbar to enter edit mode. Editing is available for exploded projects only (not single .L5X files) and requires a Pro license.

Inline editing — three trigger zones (RLL)

ZoneTriggerEditor
Operand textDouble-click the operand labelTag editor with autocomplete from project tags + Tag Browser dropdown (Ctrl Space / Alt )
Mnemonic title barBlock: double-click above the wire. Contact/Coil/Res: double-click on the graphic stripMnemonic editor with autocomplete from the full Rockwell catalog + project AOIs; operands carry over by position
Numeric value cellDouble-click the value-below cell on a tall rowSingle-line value editor; persists to the tag XML on save

Press Enter or Tab to confirm (Tab also advances to the next operand in tag-edit mode); Escape cancels. Double-click the comment line above a rung for a multi-line comment editor.

Selection, drag & drop, context menu

  • Select — click an instruction or rung number; Ctrl+click to multi-select; Shift+click a rung number for a range; click a branch node (Start/Middle/End) to scope to the branch or path.
  • Drag an instruction to move it (within or across rungs); Ctrl+drag to duplicate; drag a rung number to reorder rungs.
  • Right-click an instruction, rung number, or branch node for Cut / Copy / Paste / Duplicate / Delete (plus Insert Rung After on rungs).
  • Branch editing +Branch inserts a branch at the selection; +BrLvl adds a parallel path. Deleting the second-to-last path auto-unwraps the branch.

SFC Action body / Transition editing

Inside the SFC editor, double-click an Action body or a Transition condition to open its ST code in a side Monaco tab (a virtual .st file). Edit, Ctrl S, and the content round-trips back into the SFC XML — the canvas refreshes automatically. Because the virtual file is a real document, AI tools can read and write these bodies directly.

Save flow

  • Ctrl S (or the Save button) runs roundtrip validation (parse → serialize → parse) before writing the exploded XML.
  • Closing a modified tab fires VS Code's native "Do you want to save the changes?"modal — Save / Don't Save / Cancel.
  • Triggering Sync from ACD, a branch switch, or Merge while routines are dirty aggregates all modified tabs into one combined save prompt; Cancel aborts the upstream operation cleanly.
Edit & inspect

Tag insight, live values & Cam Editor

Tag hover popup

Hover any tag-bearing element for 500 ms to see a Studio 5000-style tooltip, available across RLL, FBD, SFC, and ST. The field set adapts to the operand kind:

Operand kindFields shown
Plain tag (MyBit, Servo)Tag · Data Type · Scope · Usage · Alias For · Value · Description
Member access (MyTimer.PRE)Tag Element · Tag Data Type (base tag) · Usage · Scope · Alias For · resolved Value · Description
Non-tag slots (JSR / JMP / LBL / FOR / EVENT / SFR / GSV)Dedicated labels — Routine:, Label:, Task:, Step:, Class/Instance/Attribute:
Undefined tagRed border + Undefined Tag: <name>

The popup is read-only and never blocks clicks or drags. Sweeping to a different operand re-arms the 500 ms delay so it doesn't flicker.

Live tag values & power-flow

  • Block instructions — each numeric operand row shows the resolved value in a value box below the operand text (Studio 5000 data-monitor style).
  • BOOL highlight — BOOL operand rows get a green square at the right edge when the value is 1.
  • Contact / Coil power flow — when the underlying BOOL is 1, the left/right wire stubs highlight green.
  • Editing values (Edit mode, RLL) — double-click a value cell, type, Enter, then Ctrl S. CtrlLens writes back to the tag XML following program-local-then-controller scope rules; undo/redo keeps logic and values in lockstep.

Cam Editor (Motion CAM operands)

Block operand rows that accept a CAM-family tag render a affordance. Click it to open the Studio 5000-style Cam Editor:

Data typeMode
CAM / CAM_EXTENDEDFully editable — add/edit/delete points, edit Master/Slave/SegmentType; Save writes back to the tag XML
CAM_PROFILE / CAM_PROFILE_EXTENDEDRead-only — the L5K polynomial cache is generated by MCCP at runtime

Position / Velocity / Acceleration / Jerk curves are drawn with a natural cubic spline (analytic derivatives), styled to match Studio 5000 Graph Properties, with pan/zoom and a resizable point table.

Version control · Pro

VCS Sync panel

The VCS Sync panel is the central hub for all synchronization and Git operations. When configured it shows GIT REPO & ACD paths, the current branch, last commit time, ahead/behind sync status (e.g. ↑2 ↓1), and the remote URL.

ACD Modified banner

CtrlLens polls the ACD file's modification time every 10 seconds. When Studio 5000 saves the ACD, a yellow ACD Modified — needs sync banner appears.

Git operations

ButtonAction
PushPush commits to remote (prompts to set one up if none)
PullPull from remote (rebase/merge strategy selection)
BranchCreate / switch / delete branches; offers Stash & Switch if dirty
RestoreDiscard all uncommitted changes (with confirmation)
Stash / Pop (N)Stash working changes; Pop the most recent stash
MergeMerge another branch in; shows Abort during a merge

Sync operations

The panel adapts to the project's mode, derived from whether an ACD is linked and whether the SDK is available.

ModeButtons
ACD modeSync from ACD (ACD → L5X → Explode → diff), Restore to ACD (Implode → L5X → ACD), Restore to… (Save As), Refresh
L5X modeSync from L5X (SDK-free, all platforms), Generate ACD (optional upgrade once the SDK is available), Refresh

Content table

Shows per-component change status after syncing — Name (Program / Tags / DataTypes / Modules / Tasks), Status (Synced / Modified / Untracked), and a rung-level Changes summary (e.g. +2 ~1 -0 rungs). Click the Content header to collapse/expand; the state persists.

Commit

  1. 1Type a commit message in the text area at the bottom of the panel.
  2. 2Click Commit Changes (enabled only when modified items exist).
  3. 3CtrlLens commits all changes in the exploded project directory.

SDK detection & platform gating

.ACD conversion requires the Logix Designer SDK (Windows only); the .L5X path is SDK-free everywhere. New Project… / Open Project… / Refresh are never gated — only ACD-specific buttons are.

EnvironmentACD path rowSync from ACD / RestoreSync from L5X
Windows + SDK detectedVisible, enabledEnabledAvailable when no ACD linked
Windows + SDK missingVisible, disabled with tooltipDisabled, tooltip points to ctrllens.logixDesignerSdkPathAvailable
macOS / LinuxHiddenHiddenAvailable

Auto-detection checks your configured path first, then the standard Rockwell install locations; the detected directory is written back to the setting so it shows in the Settings UI. Override it via File → Preferences → Settings → "ctrllens" — the Sync panel re-renders immediately, no reload needed.

Version control · Pro

Visual diff & code review

Default diff mode (HEAD vs working tree)

The Project Organizer decorates nodes against the last commit: ~M modified (yellow), +A added (green), -D deleted (red). Click any decorated node to open its diff.

Commit-to-commit diff

  1. 1Click Compare Commits (git-compare icon) in the Project Organizer title bar.
  2. 2Pick the FROM and TOcommits (or "Working Tree"). The picker spans all branches; branch tips show ref labels like HEAD -> main.
  3. 3The tree updates with decoration badges. Click the Home button to return to HEAD vs Working Tree.

Routine-level diff

Right-click a Routine for View Diff — Compare Two Commits or Show Routine Commit History. Each language gets its own diff view:

LanguageDiff view
RLLSide-by-side Konva canvas; added green / deleted red / modified yellow / unchanged collapsed; Toggle Unchanged, Reselect FROM/TO, zoom controls
FBDSide-by-side canvas with element-border status colors, dimmed unchanged elements, a change navigator, and a sheet selector
SFCSide-by-side canvas with a collapsible Detail Panel showing text-level diff of Action bodies / Transition conditions
STBlock-level structural diff (IF/FOR/WHILE/CASE) plus an Open Monaco Diff button for native line-by-line

Tags & program diff

  • Right-click a Tags folder for View Tags Diff — Compare Two Commits or history — added/deleted/modified tags with name, type, value, and comment changes.
  • Right-click a Program for Diff All Routines in Program vs HEAD — a summary of every routine change in the program.
Version control · Pro

Visual merge & conflict resolution

When a Git merge conflicts in a graphical routine, CtrlLens opens a visual side-by-side merge view. It reads the three Git index stages (base / ours / theirs) directly rather than parsing conflict markers, so both sides always render as valid diagrams. Granularity depends on the language:

LanguageMerge unitAccept options
RLLRung-by-rungAccept Ours / Theirs / All per rung, plus batch All Ours / All Theirs
FBDPer-sheetAccept Ours / All (keep both) / Theirs per changed sheet
SFCWhole-routineAccept Ours / Theirs (single connected chart, no per-element pick)
  1. 1Click Merge in the Sync Panel after a conflicted pull.
  2. 2Conflicted routines appear in the tree with U (unresolved) status; click one to open the matching Merge View.
  3. 3Pick a winner per unit. For FBD, base-aware auto-seeding pre-resolves sheets that changed on only one side.
  4. 4Click Confirm & Resolve to write the merged result. In-flight picks are saved to .git/ctrllens-merge-draft.json and restored if VS Code restarts mid-merge.
  5. 5Conflicts CtrlLens cannot render (ST, tag definitions, add/add with no base) fall back to VS Code's native merge editor. Abort Merge returns to the pre-merge state.
Element-level (per-block / per-action) granularity is intentionally deferred — FBD resolves at the sheet level and SFC at the routine level to avoid corrupting graph element IDs and wire references.

Merge Review on a clean merge

Even when a git merge finishes with no conflicts, CtrlLens pops a Merge Review panel summarising the routine changes about to be committed — so an automated or fast-forward merge never lands unseen. Turn it off with ctrllens.merge.showReviewOnSuccess: false.

Version control · Pro

Verify, validate & the pre-commit gate

CtrlLens statically validates a project against the instruction catalog and Studio 5000 scope rules, surfacing issues in VS Code's native Problems panel.

CommandScope
CtrlLens: Verify RoutineThe open routine (also on the Ladder / FBD / SFC edit toolbar — uses the unsaved canvas snapshot so in-flight edits are checked)
CtrlLens: Verify ControllerThe whole project — also on the Project Organizer root Controller <name> right-click menu (Pro)

What it checks

  • Tag references resolve across all four scopes (Program-local / Controller / AOI parameter / AOI local tag)
  • Operand kind / Type / Format / exhaustive-enum, from the 346-mnemonic htm-extracted catalog
  • No duplicate rung numbers; routine names unique within a Program; no cross-scope duplicate tag names
  • FBD orphan blocks; SFC Step ↔ Transition alternation
  • Periodic-task overlap static estimate (rung-count × 10 µs vs Task rate)
  • Instruction ↔ editor-language compatibility (RLL / FBD / ST); ST syntax (bracket pairing, keyword spelling)

Navigation, live feedback & gate

  • Click a Problems entry to open the routine and scroll the canvas to the offending rung / block / element; F8 cycles natively.
  • Live red highlight — a rung wire turns red the instant an operand is invalid and recovers when you type a valid tag or Ctrl Z; FBD/SFC shapes border red the same way. On by default in edit mode only — view mode stays clean because an imported L5X is already Studio 5000-valid, so any view-mode red would be a validator false positive. Pro users can opt into view-mode highlighting with ctrllens.validateInViewMode; the on-demand Verify commands report to the Problems panel regardless of mode.
  • Pre-commit gate — before a Sync Panel commit, error-severity issues show a modal: Commit Anyway proceeds, Fix First jumps to the Problems panel.
Collaborate & automate

Multi-developer team workflow

Studio 5000 authors the logic; CtrlLens turns each project into a branchable, reviewable Git repo. Two PLC engineers work in parallel, while a senior engineer reviews and merges their pull requests — without ever installing Studio 5000, on any OS. Each step below is tagged with the tool that performs it, so you can see exactly where CtrlLens takes over from Studio 5000.

Tool per step: CtrlLens Studio 5000
Shared Git Repo

Exploded L5X · feature branches · pull requests

push → review → Merge / Rebase → pull

every role pushes & pulls against the same repo

Developer A

PLC Engineer

Studio 5000 + CtrlLens · Windows

  1. 1Author logic (RLL / FBD / ST)Studio 5000
  2. 2Save the ACD projectStudio 5000
  3. 3Sync ACD → L5X (explode to Git)CtrlLens
  4. 4Commit & push a feature branchCtrlLens
  5. 5Open a Pull Request for reviewCtrlLens
  6. 6Pull merged main, Restore to ACDCtrlLens
  7. 7Reopen the ACD to keep buildingStudio 5000
  8. 8Onsite CommissioningStudio 5000

Developer B

PLC Engineer

Studio 5000 + CtrlLens · Windows

  1. 1Author logic (RLL / FBD / ST)Studio 5000
  2. 2Save the ACD projectStudio 5000
  3. 3Sync ACD → L5X (explode to Git)CtrlLens
  4. 4Commit & push a feature branchCtrlLens
  5. 5Open a Pull Request for reviewCtrlLens
  6. 6Pull merged main, Restore to ACDCtrlLens
  7. 7Reopen the ACD to keep buildingStudio 5000
  8. 8Onsite CommissioningStudio 5000

Senior Engineer

Code Reviewer

CtrlLens only · any OS

  1. 1Pull the Pull Request branchCtrlLens
  2. 2Visual diff: RLL / FBD / SFC / STCtrlLens
  3. 3Comment & request changesCtrlLens
  4. 4Resolve merge conflicts visuallyCtrlLens
  5. 5Approve & merge to mainCtrlLens

Run PLC code review, version control, and merges anytime, on any OS — even on a machine that doesn't have Windows or Studio 5000 installed.

Local configuration

Each developer's machine-specific paths live in acd_sync_config.yaml at the project root. It is git-ignored on purpose:

# CtrlLens — local sync config (git-ignored)
source_acd_path: D:\Projects\MyProject.ACD
source_l5x_path: D:\Projects\MyProject.L5X
last_sync_timestamp: 1743465600000

A project carries whichever path key matches its mode; an L5X-mode project upgraded via Generate ACD gains a source_acd_path. last_sync_timestampdrives the 10-second ACD change detection that raises the "ACD Modified" banner.

Restore to a new ACD

If you cloned a project without a local ACD, click Restore to…, name a new .ACD in the Save As dialog — CtrlLens implodes the project → L5X → ACD — then open the result in Studio 5000.

Collaborate & automate · Pro

AI context — the agent already knows your project

CtrlLens is built to work alongside AI coding tools (Claude Code, Copilot, Cursor). Three layers cooperate so the agent reads, modifies, and extends a Logix project safely — without CtrlLens ever calling an AI API itself.

The </> XML bridge

AI tools can't see a Konva canvas — only files open in the text editor. The </> XMLbutton in the breadcrumb opens the routine's underlying XML so any agent in the IDE can read it. After the agent saves, a file watcher re-renders the canvas in under 300 ms.

The context bundle

On sync / open / Refresh Now, CtrlLens regenerates a deterministic markdown snapshot under <gitDir>/.ctrllens/context/, split across four files:

FileContents
PROJECT.mdController info, the Tasks → Programs → Routines tree, rules for AI-assisted editing, controller-scope constraints, and the scope-assignment procedure
TAGS.mdController / program-local / AOI tags as alphabetized tables, plus a Tag Creation Guide with live example tag XMLs and detected naming conventions
TYPES.mdEvery UDT with member signatures and every AOI with metadata, parameters, local tags, and routines (encrypted AOIs flagged 🔒)
InstructionReference.mdOnly the instructions this project uses, filtered from the 346-mnemonic catalog with operand specs

Everything is local-only and git-ignored. On first sync CtrlLens offers (once, declinable) to write an AGENTS.md at the root — the vendor-neutral standard read by Cursor / Copilot / Codex — plus a thin CLAUDE.md that imports it. Write your project-specific policies into AGENTS.md; CtrlLens never touches it again.

Cross-view validation & Tag Browser

If the AI references a tag that doesn't exist in scope, every shape that displays it turns red across all three views; when the AI creates the tag in a watched directory, the highlight clears within 2 seconds — no manual reload. The Studio 5000-style Tag Browser opens from any inline editor (Ctrl Space / Alt ) with virtual scrolling for 5k+ tag projects.

Supported AI tools

ToolHow it reads the context
Claude CodeAuto-loads CLAUDE.md → imports AGENTS.md → follows the pointer to the bundle; sees the open routine XML
Cursor / CodexAuto-read AGENTS.md → bundle + routine XML
GitHub Copilot ChatReference AGENTS.md / bundle / routine XML with #file or @workspace
Other toolsAny agent with file access to .ctrllens/context/
AI context is a Pro feature. The </> XML bridge, context-bundle generation, canvas auto-reload, and the cross-view validation loop all require a Pro license.
Collaborate & automate

CI/CD pipeline & any Git host

l5xplode / l5xgit are scriptable .NET CLI tools — run explode/implode and validation on any CI runner (GitHub Actions, Azure Pipelines, GitLab CI, …). The Verify pre-commit gate statically checks operand types, tag scope, and instruction signatures against the 346-mnemonic Rockwell catalog, blocking regressions before they reach a controller.

No vendor lock-in. CtrlLens uses standard Git. Push to GitHub, Azure DevOps, GitLab (cloud or self-hosted), Bitbucket, Gitea, or a bare server — anything that speaks git push. Your data stays portable.
Reference

Keyboard shortcuts

Ladder preview (canvas)

ShortcutAction
Ctrl =Zoom in
Ctrl -Zoom out
Ctrl 0Reset zoom to 100%
Ctrl + scrollZoom with the mouse wheel

Edit mode

ShortcutAction
Ctrl ZUndo
Ctrl Y / Ctrl Shift ZRedo
Ctrl SSave changes
DeleteDelete selected instruction(s) / rung(s) / branch
Ctrl C / X / V / DCopy / Cut / Paste / Duplicate
Ctrl+click / Shift+clickMulti-select / range-select rungs
Ctrl+dragDuplicate instruction via drag
Tab / Shift TabNavigate between editable operands
Enter / EscapeConfirm / cancel inline edit or drag
Reference

Licensing & platform

What's free vs Pro

CapabilityFreePro
L5X preview (Ladder / FBD / SFC / ST / Tags)
Project Organizer + ST syntax highlighting
ACD ↔ L5X sync
Git VCS (commit / push / pull / branch / stash / merge)
Visual Diff (RLL / FBD / SFC / Tags / ST)
Interactive editor + Cam Editor write
Merge conflict resolution UI
AI Context bundle + </> XML bridge

A free user who triggers a Pro feature gets a one-time-per-session upgrade prompt — nothing is blocked silently.

Activating Pro

Start a 14-day trial or buy Pro from your dashboard. You receive a license key like CTL-XXXX-XXXX-XXXX by email.

In My Licenses, click Activate on this machine; your browser verifies ownership and downloads a signed license.dat. Run CtrlLens: Import License File from the command palette to bind it to this device.

Concurrent (floating) license

One license holds one active online slot. Install on as many machines as you like; activating elsewhere takes over the slot, and the previous machine drops to free features on its next refresh.

For air-gapped or on-site work, borrow the license for offline use (7 / 14 / 30 days), then return it early or let it auto-expire.

License commands (Command Palette)

CommandUse
Activate License…Enter your key + machine label; opens the dashboard to authorize
Import License File…Import a license.dat downloaded from the dashboard (also the offline path)
Export Activation Request (Offline)…Produce a request to carry to a connected machine (air-gapped OT)
Borrow / Return LicenseLock to this device for 7 / 14 / 30 days, or return early
Take License Back to This Device…Reclaim the online slot when it is active elsewhere
Refresh / Deactivate / Show DetailsHeartbeat / release the slot / inspect current state

The status bar shows the current state — Free / Pro / Grace / Borrowed / Active Elsewhere / Expired; clicking an "Active Elsewhere" badge offers to take the slot back.

ACD Sync (free, Windows only)

ACD Sync converts ACD binaries to L5X on save and back — so you commit L5X to Git and still open the native ACD in your engineering tool. Free for everyone. Its only dependency is the Logix Designer SDK (Windows, auto-detected; ships with Studio 5000) — not Studio 5000 itself. Git, diff, merge, preview, and editing all work without it on every platform.

Cross-platform.All Pro features (Git VCS, Visual Diff, editing, Merge UI, AI Context) run on Windows, macOS, and Linux. The only Windows-only capability is ACD ↔ L5X Sync — and that is a free feature.
FAQ

Frequently asked questions

Do free features need an account?

No. L5X preview, project organizer, ladder / FBD / SFC rendering, ST syntax highlighting, the tag browser, live operand validation, and ACD ↔ L5X sync run 100% locally with no account and no network.

Does it work in Cursor?

Yes. CtrlLens is a standard VS Code extension and runs directly in Cursor — install it the same way and every feature behaves identically.

How does the concurrent license work?

One license = one active online slot. Install on any number of machines; activating on a new machine takes over the slot and the previous machine drops to free features on its next refresh. Borrow for 7 / 14 / 30 days for offline or air-gapped work.

Does it work offline or on air-gapped networks?

Yes. After one-time activation the license verifies offline; manual offline activation is supported for fully isolated machines, and the extension only attempts a biweekly refresh when it has network.

Where do I find my machine ID?

In VS Code or Cursor, run CtrlLens: Export Machine ID from the command palette and paste the value into the dashboard when starting a trial or activating.

Which AI tools are supported?

Any file-aware agent — Claude Code, GitHub Copilot, Cursor, or any tool with file-system access. CtrlLens generates the context files the agent reads; it never calls an AI API itself.

Do you collect telemetry?

Zero telemetry. No analytics, crash reports, or usage tracking. The extension only contacts our servers for license activation and biweekly refresh. Your PLC code never leaves your machine.

Customer testimonial — coming soon.
Customer testimonial — coming soon.
Customer testimonial — coming soon.

Need help?

Full tutorials and sample projects are being written. In the meantime, email [email protected] and we'll answer directly.