Thanks to visit codestin.com
Credit goes to Github.com

Skip to content

Releases: atgreen/icl

Release v1.16.0

27 Dec 04:20

Choose a tag to compare

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-cache Option: 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

26 Dec 14:31

Choose a tag to compare

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 #'mapcar

This 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

26 Dec 14:22

Choose a tag to compare

ICL 1.15.1 Release Notes

Security Enhancements

Visualization Security Hardening

  • HTML sanitization: Custom visualize methods 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-visualizations

When 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 --help output for cleaner display

Release v1.15.0

26 Dec 12:39

Choose a tag to compare

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

24 Dec 13:59

Choose a tag to compare

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 ,viz command with Mermaid definition strings

Custom Visualization Enhancement

  • Added :mermaid type for icl-runtime:visualize methods
  • See examples/mermaid.lisp for a complete example

Documentation

  • Added examples/mermaid.lisp with flowchart, sequence diagram, class diagram, and state machine examples
  • Updated README with Mermaid diagram support

Release v1.13.0

23 Dec 15:19

Choose a tag to compare

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 <svg or <?xml are rendered as inline SVG graphics

HTML Strings

  • Strings starting with <!DOCTYPE or <html are 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 icl when 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-stop

Technical 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) or swank:listener-eval (SLIME) to detect real REPL activity

Breaking Changes

None.

Release v1.12.0

22 Dec 22:10

Choose a tag to compare

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 diagram

Features:

  • 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 ,browse command to ,browser for clarity

Browser Lifecycle

  • Browser view automatically closes when ICL process terminates
  • WebSocket onclose handler detects disconnection

Bug Fixes

  • Fixed class graph node click incorrectly switching to Symbol Info tab
  • Added source field 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 ,browse command has been renamed to ,browser

Requirements

  • Browser interface for visualizations (,browser or icl -b)
  • FSet library for set visualization ((ql:quickload :fset))

Release v1.9.3

21 Dec 00:44

Choose a tag to compare

ICL 1.9.3 Release Notes

Bug Fixes

Browser Inspector

  • Fix macro inspection in browser. Macros now use (macro-function 'sym) instead of #'sym which 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

20 Dec 20:47

Choose a tag to compare

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

20 Dec 20:35

Choose a tag to compare

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.