ICS — Indented C# for VS Code
Edit C# using ICS (Indentation-based C# Syntax) — a brace-free view of C# where
indentation replaces curly braces and optional punctuation is removed. The extension
converts between .cs and .ics on the fly, so the canonical files on disk stay as
ordinary C#.
Prerequisites
The extension includes the ICS converter. Its Microsoft .NET Install Tool
dependency automatically installs and maintains the required user-level .NET 10
runtime. A system-wide .NET installation is not required. The first use may
need an Internet connection while that runtime is downloaded.
Installation
VS Code Marketplace
Open the Extensions view (Ctrl+Shift+X), search for ICS — Indented C#,
and choose Install.
Install a downloaded VSIX
Open the Extensions view (Ctrl+Shift+X), select ... at the top right,
choose Install from VSIX…, and select the downloaded package.
Configuration
No converter configuration is required after installing the VSIX. Open
Settings (Ctrl+,) and search for ICS to change conversion behavior.
Workflows
Live previews keep ordinary C# as the canonical file on disk. Standalone export
creates a separate .ics file when you want to store ICS directly.
Privacy
Source conversion and language processing run entirely on your machine. The
Microsoft .NET Install Tool may contact Microsoft to install or update the
required runtime. ICS also contacts api.lemonsqueezy.com for user-requested
license operations and periodic license validation.
If an ICS operation fails, Report Issue prepares a diagnostic in an
untitled local editor. It does not put that diagnostic in a URL or send it to
GitHub. After reviewing and editing it, you may explicitly copy the report and
open the public issue form. Do not submit proprietary code, license keys, or
other sensitive information.
1. Open a C# file as ICS (read/edit preview)
Right-click any .cs file in the Explorer → ICS: Open C# as ICS, or use
the editor title context menu, or press Ctrl+K I with a .cs file open.
An ICS editor opens alongside the C# file. While both are open:
- Edits in the C# file refresh the ICS view automatically (400 ms debounce).
- Edits in the ICS view can be pushed back to C# in two ways:
- Run ICS: Apply Preview to C# (command palette or title menu).
- Enable
ics.liveUpdateCSharpFromPreview to apply on every keystroke
(off by default — each reverse conversion reformats the whole file).
- Enable
ics.autoSaveCSharpFromPreview to save each successful live update
to disk even when VS Code's files.autoSave setting is disabled.
Rapid edits, undo, and redo are debounced to the latest editor state. Closing
a preview cancels its pending conversions. An unsynchronized split-view preview
cannot report a successful save: apply it to C# before choosing Save in the
dirty-tab close prompt, or explicitly choose Don't Save to discard the edit.
2. ICS-only mode
With ICS Pro active, set "ics.displayIcsOnly": true to replace the raw C# editor entirely.
Opening any .cs file shows an editable ICS view; saves write back to the
.cs file silently. Useful when you never want to see the generated braces.
ICS Pro licenses are issued by Lemon Squeezy. After purchase, run
ICS: Enter License Key and paste the key from the Lemon Squeezy order page
or email receipt. The extension activates that key for the current VS Code
machine and periodically validates it with Lemon Squeezy. Run ICS: Deactivate
License before moving a limited activation to another machine.
Toggle the mode for the active file with ICS: Toggle ICS View or Ctrl+K I.
The extension rejects an edit rather than applying a conversion that would lose
meaningful code or comments. It embeds no metadata in ICS and writes no sidecar
files. An unchanged preview returns the original C# exactly. Saves also detect
external source changes, and converter recovery preserves dirty editor buffers.
3. Sync ICS files to C#
If you keep .ics source files on disk (rather than working via preview):
- ICS: Sync Current File to C# — converts the active
.ics file and writes
the paired .cs file next to it.
- ICS: Generate C# for Workspace ICS Files — syncs every
.ics file in the
workspace.
- Enable
ics.syncOnSave to sync automatically whenever an .ics file is saved.
The output path is the same filename with .cs. If a .cs file already exists
and does not contain the <auto-generated marker (configurable via
ics.generatedFileMarker), the extension asks before overwriting. Set
ics.protectUserCSharpFiles to false to suppress that prompt.
4. Export a C# file to a standalone ICS file
Right-click a .cs (or .ics) file → ICS: Export as ICS File. Prompts for
an output path and writes a standalone .ics file. This does not create a
live-linked preview — it is a one-time export.
Settings reference
| Setting |
Default |
Description |
ics.syncOnSave |
false |
Auto-sync .ics → .cs on save. |
ics.displayIcsOnly |
false |
Replace .cs editors with editable ICS views. Requires ICS Pro. |
ics.liveUpdateCSharpFromPreview |
false |
Push ICS edits back to the C# editor while typing. Requires ICS Pro. |
ics.autoSaveCSharpFromPreview |
false |
Save paired C# after successful live updates. Requires live update and ICS Pro. |
ics.protectUserCSharpFiles |
true |
Ask before overwriting .cs files that don't look generated. |
ics.generatedFileMarker |
"<auto-generated" |
Text that marks a .cs file as safe to overwrite. |
ics.removeBraces |
false |
Remove property accessor braces ({ get; set; } → indented lines). |
ics.removeIfConditionParentheses |
false |
Strip parentheses from if/else if conditions. |
ics.matchLineNumbers |
false |
Insert blank lines in ICS so line numbers match the source C#. |
ics.tabWidth |
unset |
Optional spaces-per-tab override. Leave unset to use the nearest .editorconfig tab_width; ICS always uses spaces. |
ics.enableDiagnostics |
true |
Show ICS parse errors and generated-C# diagnostics in the Problems panel. Disable if you see false positives from missing project references. |
Changing conversion options (removeBraces, etc.) refreshes all open ICS
previews.
Commands reference
| Command |
Description |
| ICS: Open C# as ICS |
Open the selected or active .cs file as a live ICS preview. |
| ICS: Toggle ICS View |
Switch the active file between raw C# and ICS preview. |
| ICS: Apply Preview to C# |
Write the current ICS preview back to its paired .cs file. |
| ICS: Refresh ICS Preview |
Reload an open, clean preview from its paired C# file. |
| ICS: Revert Preview from C# |
Discard preview edits after confirmation and reload from C#. |
| ICS: Show Paired C# File |
Open the C# file paired with the active ICS file or preview. |
| ICS: Show Conversion Diagnostics |
Validate the active ICS document and open the Problems panel. |
| ICS: Copy Generated C# |
Convert the active ICS document and copy the generated C# to the clipboard. |
| ICS: Format ICS Document |
Canonicalize the active ICS document through the converter. The standard Format Document shortcut also works. |
| ICS: Export as ICS File |
Save a one-time copy of a .cs file as a standalone .ics file. |
| ICS: Sync Current File to C# |
Convert the active .ics file and write its paired .cs file. |
| ICS: Generate C# for Workspace ICS Files |
Convert every .ics file in the workspace after confirmation. |
| ICS: Validate Workspace ICS Files |
Check every workspace .ics file and publish errors to the Problems panel. |
| ICS: Restart Converter |
Restart the language server and rebuild open previews. |
| ICS: Open Control Panel |
Open the ICS extension control panel. |
| ICS: Enter License Key |
Activate and store a Lemon Squeezy ICS Pro license key. |
| ICS: Refresh License |
Re-check the saved ICS Pro license key. |
| ICS: Deactivate License |
Release this machine's Lemon Squeezy activation and remove its locally stored license data. |
| ICS: Upgrade to Pro |
Open the configured Pro purchase URL. |
| ICS: Report Issue |
Prepare a local diagnostic for review, then optionally copy it and open the public issue form. |
Keyboard shortcuts:
Ctrl+K I (Cmd+K I on Mac): Toggle ICS View.
Ctrl+Alt+S (Cmd+Option+S on Mac): Apply Preview to C#.
Ctrl+Alt+R (Cmd+Option+R on Mac): Refresh ICS Preview.
Shift+Alt+F (Shift+Option+F on Mac): VS Code's standard Format Document, now backed by the ICS formatter.
Workspace-wide generation, validation, preview reversion, and converter restart
remain Command Palette actions without default shortcuts.
License, product terms, and privacy
Lucid Programming claims no ownership of source code, ICS files, or generated
C# processed or produced using the extension.
Troubleshooting
"Open C# as ICS" shows nothing / no preview appears
Check the Output panel (Ctrl+Shift+U) and select ICS Language Server
from the dropdown. Converter errors are reported there.
The extension installs its own .NET 10 runtime, so system-wide dotnet is not
required. If automatic runtime installation fails, run .NET Install Tool:
Show Installation Log from the Command Palette and check network or proxy
settings.
Diagnostics show false errors (e.g. CS0122 inaccessible member)
The diagnostic pass runs Roslyn on the generated C# without loading a project
file, so it cannot resolve types from other assemblies. Set
"ics.enableDiagnostics": false to suppress these.
Conversion options are not applying
Options are read per-file scope. If you set them in workspace settings but open
a file outside the workspace, VS Code uses user-level settings. Confirm the
correct scope in Settings (Ctrl+,).
Reporting bugs
Run ICS: Report Issue from the Command Palette or the ICS control panel.
The diagnostic opens locally first and is never included in the GitHub URL.
Review or edit it, then choose whether to copy it and open the
public support tracker.
Do not submit proprietary source, license keys, or customer information.