Releases: atgreen/icl
Release v1.16.0
ICL 1.16.0 Release Notes
New Features
Cached SBCL Image for Faster Startup
ICL now caches a pre-built SBCL image with Slynk already loaded, dramatically reducing startup time after the first run:
- Automatic Caching: On first startup, ICL creates
~/.cache/icl/icl-<version>-sbcl-<version>-slynk.core - Version-Aware: Cache automatically invalidates when ICL or SBCL version changes
--no-cacheOption: New CLI flag to disable cached image creation/usage
Inline Tree Expansion in Browser Inspector
The browser inspector now supports Clouseau-style inline expansion:
- Expandable Entries: Click the arrow next to inspectable values to expand them inline
- Nested Depth Colors: Nested expansions use color-coded borders (yellow, orange, purple, blue, green)
- Cached Children: Expanded children are cached for instant collapse/expand toggling
GitHub Pages Landing Page
New landing page at the project site with:
- Animated floating parentheses background
- Interactive terminal preview
- Auto-completing Lisp implementation showcase
Bug Fixes
- Fixed inspector CAR/CDR buttons incorrectly showing as enabled for non-cons objects
- Keep REPL focus when opening visualization panels
Breaking Changes
None.
Release v1.15.2
ICL 1.15.2 Release Notes
New Features
Function Disassembly Visualization
The ,viz command now supports functions, displaying their disassembly in a dedicated panel:
,viz #'mapcarThis opens a themed panel showing the function's machine code disassembly. The display automatically adapts to light/dark mode.
Bug Fixes
- Fixed refresh handling for function visualizations in browser mode
Release v1.15.1
ICL 1.15.1 Release Notes
Security Enhancements
Visualization Security Hardening
- HTML sanitization: Custom
visualizemethods returning HTML are now sanitized server-side to remove scripts and event handlers - Mermaid strict mode: Diagrams render with
securityLevel: 'strict'to block click handlers - Vega sandboxing: Expression functions disabled and AST-based evaluation enforced
- Content Security Policy: Browser interface now sends CSP headers blocking inline scripts
- WebSocket origin validation: Only accepts connections from localhost
These protections ensure that loading untrusted Lisp libraries with custom visualize methods cannot execute arbitrary JavaScript in your browser.
Unsafe Mode Option
New --unsafe-visualizations CLI option disables security restrictions for trusted code that requires JavaScript in visualizations:
icl -b --unsafe-visualizationsWhen enabled:
- Mermaid uses 'loose' security level (allows click handlers)
- Vega allows custom expression functions
- HTML content bypasses server-side sanitization
Bug Fixes
- Fixed crash when pressing up/down arrows with empty command history in browser mode
- Fixed escape sequence parsing in browser terminal (up arrow no longer shows
[A)
Other Changes
- Removed examples from
--helpoutput for cleaner display
Release v1.15.0
ICL 1.15.0 Release Notes
New Features
About Dialog
- New "About ICL" menu item in browser hamburger menu
- Shows ICL version and connected Lisp implementation (e.g., "SBCL 2.5.10")
- Author information with GitHub and LinkedIn links
- Link to Open Source Notices for all third-party licenses
Check for Updates
- New "Check for Updates" menu item queries GitHub releases
- Compares current version with latest release
- Shows update availability with link to release page
- Includes note for package manager users (apt, dnf, choco, brew)
Browser UI Polish
- Connection indicator: Green dot shows connection status, turns red on disconnect
- Dynamic tab title: Browser tab shows "ICL - SBCL 2.5.10" (or connected Lisp)
- Empty state messages: Helpful prompts in panels ("Select a package to see symbols")
- Favicon support: Custom ICL favicons for browser tabs and bookmarks
Startup Banner Enhancement
- Banner now includes author credit and GitHub URL
- Format:
icl 1.15.0 (SBCL 2.5.10) [paredit] by Anthony Green - https://github.com/atgreen/icl
Improvements
Self-Contained Distribution
- All JavaScript libraries now embedded (highlight.js, Vega, Vega-Lite, Vega-Embed, Mermaid)
- No external CDN dependencies - works fully offline
- Combined Open Source Notices file for all third-party licenses
CI/CD
- Updated all installers (RPM, DEB, NSIS, MSI) with improved license handling
- Streamlined release workflow
Release v1.14.1
ICL 1.14.1 Release Notes
New Features
Mermaid Diagram Support
- Added Mermaid diagram rendering in the browser interface
- Automatic detection of Mermaid diagrams (flowchart, sequence, class, state, ER, Gantt, pie, journey, gitgraph, mindmap, timeline)
- Theme-aware rendering (dark/light mode support)
- Responsive to panel resizing
- Use
,vizcommand with Mermaid definition strings
Custom Visualization Enhancement
- Added
:mermaidtype foricl-runtime:visualizemethods - See
examples/mermaid.lispfor a complete example
Documentation
- Added
examples/mermaid.lispwith flowchart, sequence diagram, class diagram, and state machine examples - Updated README with Mermaid diagram support
Release v1.13.0
ICL 1.13.0 Release Notes
New Features
Extended Visualization Types for ,viz
The ,viz command now supports additional data types:
JSON Strings
- Strings starting with
{or[are recognized as JSON - Pretty-printed with proper indentation
- Syntax highlighting via highlight.js with automatic language detection
- Theme adapts to light/dark mode
(defvar *json* "{\"name\": \"test\", \"values\": [1, 2, 3]}")
,viz *json*Image Byte Arrays
- Byte vectors containing image data are automatically detected by magic bytes
- Supported formats: PNG, JPEG, GIF, WebP
- Images are base64-encoded and sent directly over WebSocket as data URLs
- No server-side file storage required
(defvar *img* (alexandria:read-file-into-byte-vector #P"photo.png"))
,viz *img*SVG Strings
- Strings starting with
<svgor<?xmlare rendered as inline SVG graphics
HTML Strings
- Strings starting with
<!DOCTYPEor<htmlare rendered in a sandboxed iframe
Unified Visualization Refresh
All visualization panels now use a unified refresh system:
- Panels automatically update when REPL evaluations complete
- Type changes are handled seamlessly (e.g., if a variable changes from JSON to hash-table, the panel updates accordingly)
- Refreshes are limited to real REPL activity (from ICL or Emacs/SLY/SLIME), not internal queries
Emacs Integration
ICL now integrates with Emacs via icl.el:
- Start ICL browser with
M-x iclwhen you have an active SLY or SLIME connection - Visualization panels automatically refresh when you evaluate code in SLY/SLIME REPL
- Supports both SLY (
slynk-mrepl) and SLIME (swank) backends - Auto-stops ICL when the Lisp connection closes (configurable via
icl-auto-stop-on-disconnect)
;; Add to your Emacs config
(load "/path/to/icl/icl.el")
;; Start ICL browser (requires active SLY/SLIME connection)
M-x icl
;; Stop ICL browser
M-x icl-stopTechnical Changes
ICL Runtime Package
A new icl-runtime package is automatically injected into the inferior Lisp on connection. This package provides utility functions needed by ICL's visualization features:
- Base64 encoding for image data (avoids external dependencies)
- Eval generation tracking via wrappers around
slynk-mrepl:mrepl-eval(SLY) orswank:listener-eval(SLIME) to detect real REPL activity
Breaking Changes
None.
Release v1.12.0
ICL 1.12.0 Release Notes
Highlights
FSet Venn diagram visualization. Visualize FSet sets as interactive Venn diagrams showing membership and intersections.
Auto-refreshing visualizations. Hash-table, class hierarchy, and Venn diagram panels now automatically update after each REPL evaluation.
New Features
FSet Set Visualization
Visualize FSet sets as Venn diagrams:
- Single set: Circle displaying members inside
- Two sets: Classic Venn diagram with intersection
- Three sets: Triangle arrangement showing all 7 regions
Examples:
ICL> ,viz *fruits* ; Single set as circle
ICL> ,viz *fruits* *red-things* ; Two-set Venn diagram
ICL> ,viz *set-a* *set-b* *set-c* ; Three-set Venn diagramFeatures:
- Custom SVG rendering (no external dependencies)
- Theme-aware colors using CSS variables
- Catppuccin-inspired colors (blue/pink/green)
- Members displayed in each region
Auto-Refreshing Visualizations
All visualization panels now refresh automatically after REPL evaluation:
- Hash-tables: Re-query and display updated contents
- Class hierarchies: Refresh to show definition changes
- Venn diagrams: Re-evaluate sets to reflect modifications
Panel Maximize/Restore
New ways to maximize panels in the browser interface:
- Double-click tab: Toggle maximize/restore
- F11 key: Toggle maximize for focused panel
- Escape key: Exit maximized state
Responsive Class Hierarchy
The class hierarchy graph now resizes when its panel is resized, using ResizeObserver with debounced re-rendering.
Improvements
Command Rename
- Renamed
,browsecommand to,browserfor clarity
Browser Lifecycle
- Browser view automatically closes when ICL process terminates
- WebSocket
onclosehandler detects disconnection
Bug Fixes
- Fixed class graph node click incorrectly switching to Symbol Info tab
- Added
sourcefield to symbol-click messages to preserve panel focus
Technical Details
- Venn diagrams use pure SVG (no D3 or external libraries)
- Set intersection computed client-side using JavaScript Sets
- ResizeObserver used for responsive panel content
- Panel state tracked in Maps for refresh coordination
Breaking Changes
- The
,browsecommand has been renamed to,browser
Requirements
- Browser interface for visualizations (
,browseroricl -b) - FSet library for set visualization (
(ql:quickload :fset))
Release v1.9.3
ICL 1.9.3 Release Notes
Bug Fixes
Browser Inspector
- Fix macro inspection in browser. Macros now use
(macro-function 'sym)instead of#'symwhich caused "X is a macro, not a function" errors. - Fix case sensitivity for mixed-case symbol names (e.g., Java method signatures like
java/lang/Thread). Symbol names with lowercase letters are now properly escaped with|...|to preserve case through the Lisp reader.
Breaking Changes
None.
Release v1.9.2
ICL 1.9.2 Release Notes
Bug Fixes
Browser Assets
- Fix browser assets (CSS/JS) not loading in installed packages (RPM/DEB). The assets directory path was computed at build time instead of runtime, causing 404 errors for dockview.css, xterm.css, etc.
Breaking Changes
None.
Release v1.9.1
ICL 1.9.1 Release Notes
Bug Fixes
Backend Loading
- Try ASDF/ocicl first for loading Slynk, then fall back to Quicklisp. This supports users with ocicl-configured init files.
Browser Inspector
- Include package name in symbol info for proper inspector qualification
- Handle inspection errors gracefully with user-visible error messages
- Fix race condition where inspection data could arrive before panel initialization
- Inspector now shows error details instead of silently failing
Cursor Positioning
- Fix cursor positioning for lines that wrap beyond terminal width (fixes #9)
- Ctrl-A now correctly moves to the beginning of wrapped lines
Text Selection
- Fix text selection in browser REPL - click-and-drag now works for copying text (fixes #10)
Breaking Changes
None.