These release notes are optimized for viewing inside Squeak, as they contain a lot of interactive examples. On this page, interactive links open in SqueakJS, which is a browser-based Smalltalk VM with some limitations. For the best experience, download Squeak and read the release notes there.
***** Squeak 6.1 "Vanessa" Release Notes *****
As Squeak approaches its 30th anniversary, we are proud to announce the next version of the system, Squeak 6.1. Some highlights of this release are:
- A new tree browser, which enables navigation through classes and categories using refurbished hierarchical morphs,
- The return of Objectland (also known as the "Worlds of Squeak"),
- Several changes and fixes for the kernel infrastructure for simulating, unwinding, and scheduling processes and reshaping classes,
- Miscellaneous improvements and additions to the toolset and user interface for inspecting, debugging, profiling, and versioning code.
Please find below a detailed listing of all the changes, which includes notes on Major Deprecations, Known Issues, and Compatibility Notes at the bottom.
About these release notes. Phew, what a release! Since the last release 4 years ago, we have merged 1700+ patches with 9000+ method changes. Beyond documenting technical changes in detail, these notes highlight the bigger picture and the overall impact of major developments. Along the way, you will find plenty of links to code pointers and interactive examples. Thus, these release notes serve not only as a changelog but also as a hands-on guide to exploring new features and mechanisms in Squeak. Click here to view an outline of this document.
In memory of Vanessa Freudenberg (1972-2025).
/^(o.o)^\ /^(o.o)^\ /^(o.o)^* ** /^(o.o)^\ /^(o.o)^* Detailed Improvements in Language, Tools, and the Environment**
~~~ GUI Frameworks ~~~
Morphic (up to Morphic-ct.2218/MorphicTests-ct.97)
- Major overhaul of - tree morphs- :- - Improves colors and mouse and keyboard shortcuts for navigating trees.
- Revises type-to-filtersimilar to lists, highlights search terms, and enables searching single columns via [TAB]. Adds a configurable filter mode to search within the current selection, all visible nodes, or the entire tree.
- Introduces a recursive "find"/"find again" feature available via [CMD] + [F]/[CMD] + [G].
- Adds a flag for automatic expansion of trees.
- Improves support for drag'n'dropby automatically expanding nodes during dragging after one second of hovering.
-
Miscellaneous stability and performance improvements for layouting, rendering, and event handling in trees.
-
In the world, supports dropping of class references, system and method categories, and inspector and explorer fields to display them in a new window/widget.
- For mouse interactions, adds new preferences to customize the double-click time and drag thresholds.
- In the docking bar window menu, adds an item to collapse windows. Makes "find workspace" easier to use by expanding the selected window if collapsed. Reorders and decorates items in the help menu.
- Text editors: - Underlines links (like this one!) during hovering and makes clicking and text selection through them more convenient.
-
When enclosing/unenclosing a selection in single/double quotes, nested quotes are now automatically escaped/unescaped.
-
Morphic API: Allows morphs to opt out of individual halo events and to specify a balloon text via a block instead of a selector.
- Menu construction:
- Revises the debug menus of several morphs by adding a time-profiler shortcut for buttons, providing access to the list and tree contents, and making existing "browse action" and "debug action" commands faster and more reliable.
- Honors the preference "Open Tools Attached to Mouse Cursor" in Morph>>openAsTool.
- Lots of UI tweaks and stability improvements: - Improves theme support for progress bars, text morph menus, and dialog windows.
- Improves high-DPI support for buttons, scroll panes, sliders, menus, multi-selection lists, trees, drop-shadows, the scratch pad, the keyboard exerciser, and others.
- Improves multilingual support in different places.
- Fixes slips regarding the world display depth menu, clock configuration changes, search-bar print-its, project view morph styling, and transcript counting.
- Fixes an issue when profiling code where user events were swallowed.
- Several layouting fixes regarding proportional layouts, text morphs, scroll panes, and transformation morphs.
- Fixes rendering issues with transform morphs, polygons, multi-selection lists, and trees.
- Fixes scrolling in nested scroll panes.
- In text morphs, improves stability of text selection and tweaks indentation regarding empty and blank lines.
- Fixes "browse senders" of true, false, and nil, adds missing access to workspace bindings during accept-its, and improves robustness of editor history.
- Fixes bugs in construction of text containers and conversion of paragraphs to texts.
- In lists, fixes automatic selection before dragging an item.
- Fixes incorrect yellow-button menu invocation on buttons and lists.
- Fixes a bug during menu construction, which depended on uninitialized state.
- Fixes scaling of color forms.
- Fixes introspection of event handlers in morph meta-menus.
- Improves compatibility between old and new balloon morphs.
- Fixes a remarkable slip that (1) prevented collapsed windows from applying a new UI theme and (2) introduced a possibly significant memory leak of windows.
- Fixes an issue on macOS where calling the VM with additional command line arguments or plugging in external devices led to an incorrect "The VM is configured as a singleton application" warning.
- Improves stability and backward compatibility when loading morphs from files.
- Fixes cross-compatibility and concurrency issues with MVC.
-
Improves reliability of halos.
-
Improves performance of large tree widgets, transformation morphs, and animated GIFs.
- Miscellaneous clean-ups and documentation improvements for input events, editor attributes, and others.
MorphicExtras (up to MorphicExtras-ct.360)
Etoys (up to EToys-ct.532)
ST80 (up to ST80-mt.311)
- Adds a close item to the world menu.
- Improves high-DPI support for system views.
- Adds View>>imageForm for taking a screenshot of a view and displays it in inspectors.
- Adds editor shortcut [CMD] + [SHIFT] + [D] for "debug it" (already exists in Morphic).
- Miscellaneous fixes and stability improvements: - Ensures confirmation dialog before closing the current MVC project.
- Prevents unexpected author-initials dialog when opening the ST80 world menu for the first time.
- Avoids an issue with stale deferred actions in an empty MVC world, which caused emergency debuggers to appear only after pressing a mouse button.
- In text editors, fixes pretty-printing and spawning if no compatible model is available. Gently handles nil selection provided by the model. Fixes an issue with recently introduced keyboard shortcuts.
- Repairs folder choosers.
CommandLine (up to CommandLine-eem.27)
~~~ Programming & Tools ~~~
Tools (up to Tools-mt.1366/ToolsTests-ct.137)
- Introduces a new - tree browser, which displays system categories, classes, and message categories in hierarchical panes and integrates Monticello packages. There are also five new preferences for configuring its appearance.
- In the Message Names tool, shows the definition, comment, and hierarchy for class results.
- Extends inspector support for custom fields:
- When inspecting large collections, allows disabling truncation to show all elements.
- Makes inspection and debugging of transparent proxy objects and unhashable objects more reliable by avoiding sending them any messages, to which they might react slowly or catastrophically.
- Debuggers:- - Adds - "send untilâ¦" commandto precisely search for a condition in nested message sends.
- Improves - "run to here" commandto reach expressions in blocks.
- Improves error handling for invalid run until/send until expressions. For "return entered value", uses the proper evaluatorClass of the receiver.
- To the stack list menu, adds "select home" option for finding the home contexts of (possibly deeply nested) blocks.
- Makes the signaled exception and suspended process accessiblein the debugger when no context frame is selected. Try it out!
- Adds a - byteCodes mode- ** to the debugger**to view and step through the single VM instructions of a method (similar to the byteCodes mode in browsers). Adds a new "simulate" button to debug how Squeak's metacircular evaluator (aka context simulator) interprets the next bytecode. The new mode is reachable through the window menu > "what to showâ¦", or, when extra debugger buttons are enabled, through the "source" button above the code pane.
-
Miscellaneous clean-ups and improvements for customizing inspector classes.
-
Welcomes - AndreasSystemProfiler- ** in the trunk**, which was previously hosted in the VMMaker repository. Improves report format, robustness for tallying primitives, and documentation.
- In workspaces, adds a "load contents from fileâ¦" option to the window menu.
- Improvements to - change recovery- :Improves parsing of class definitions, method removals, recategorizations, and more. Adds and revises menu items to select all changes of a given type or filter for changes to the currently selected type or selector.
- Adds utilities Process>>#browse and Context>>#tempNamed:[put:].
- Adds file services for viewing compressed
cszandstzarchives. - In truncated file lists, inserts a link for reading the entire file.
- Improves layout of code-point browsers for single-byte text-converters.
- Miscellaneous UI improvements and bug fixes: - Fixes for browsers: - Fixes shortcut inconsistency in single-category browsers.
- Improves robustness in browsers when defining traits.
- Fixes a slip in hierarchy browsers that spawned a new redundant browser when redefining the selected class.
- Fixes package pane browser to actually use the package organizer instead of parsing the system category list. If no category is selected, shows all classes from the package.
- Deduplicates menus in package pane browsers.
- Fixes missing UI updates and class-side do-its in package pane browsers and dependency browsers.
- Fixes UI proportions and styling of class definitions and comments in file contents browsers.
-
Consistently sorts classes in class list browsers.
-
Fixes for message traces: - Ensures consistent method labels in message traces.
- Improves robustness and dialogs for browsing senders/implementors.
-
Minor UI string fixes.
-
Fixes for message names:
- Improvements for versions browsers: - Displays the stamp and category of the selected version, rather than always the current version's.
-
When filing out a method, adds missing file extension.
-
Fixes for change lists: - Fixes change logging for methods that are recompiled from a browser without its existing category being selected.
- Improves robustness of recover changes scanning.
-
Improves stability for "remove older method versions".
-
Fixes for inspectors and explorers: - Fixes inspecting of forms in non-native display depths.
- Fixes nested temporary variables when inspecting blocks.
- Fixes inspecting dictionaries with non-storable keys.
- Adds styling of thisContextin context inspectors in debuggers.
- Fixes shortcut for opening an Etoys viewer ([CMD] + [V]).
- Improves robustness when exchanging the inspected object in an inspector.
- Improves robustness of "copy expression" for a selected field.
- Fixes handling of unsaved changes in inspectors and explorers by using new #okToChange: hook.
-
Harmonizes object explorer labels to match labels in the tree.
-
Fixes for debugger: - Fixes stepping through abort messages such as #mustBeBoolean and restarting from primitive methods that no longer fail, and updates window label accordingly. Improves tests.
- Fixes highlighting of next expression for to:do: statements and assignments.
- Fixes out-of-date context variables after restarting the top context.
- Fixes regression in runUntil when pressing shift.
- Fixes "return entered value" to properly detect unhandled errors during unwinding.
- When recompiling a method in a debugger, allows to proceed despite of no active home method. Fixes bug when recompilation is aborted.
- Improves stability and up-to-dateness of stack list.
-
Miscellaneous clean-ups.
-
Speeds up process browser for managing very large lists of processes.
- Improves high-DPI support for system browsers and FileList2.
- Miscellaneous improvements of multilingual support.
- Significantly improves test coverage of tree browsers and debuggers.
ToolBuilder (up to ToolBuilder-Kernel-ct.176/ToolBuilder-Morphic-ct.370/ToolBuilder-MVC-mt.77/ToolBuilder-Tests-ct.9)
SUnit (up to SUnit-mt.153/SUnitGUI-mt.95/SUnitTools-mt.9/ToolBuilder-SUnit-pre.22)
Nebraska (up to Nebraska-ct.65)
- Adds support for mouse-wheel scrolling in remote terminals.
- Improves reliability of event handling for remote terminals, making it possible to freely move, resize, and rotate terminals in the client's world again.
- Fixes default port selection for Nebraska connections.
- Improves error handling for refused peer-to-peer connections.
Protocols (up to Protocols-ct.91)
- Improves high-DPI support for lexicons.
- Fixes and cleans up window titles of lexicons.
Services
Shout (Syntax Highlighting) (up to ShoutCore-ct.98/ShoutTests-eem.34)
- Styles comments in - italics
- ** by default**and provides a preference for this behavior.
- Fixes parsing of unary selectors beginning and/or ending with underscores.
~~~ Core Language ~~~
Kernel (up to Kernel-ct.1688/KernelTests-ct.482)
- Numbers:
- Adds support for non-local exitswith values through BlockClosure>>valueWithExitValue.
- Models:Allows unsaved changes checks to be scoped to particular views, making it easier in some tools to, for example, select a different list item or open a menu without needing to cancel changes in an editor.
- Debugging utilities:Adds #haltOnceIf: as a union of #haltOnce and #haltIf:. Makes ObjectTracer/ObjectViewer capable of proxying true/false.
- Debugging & simulation:
- Processes & scheduling:
- Promises:- - New helpers for combining promises such as #all:, #anyOne:, and #race:.
- Adds and revises accessors for awaiting and testing promises. Promise>>value is now a synonym of #wait; if the promise rejects, both no longer wrap the error into a BrokenPromise but re-raise it directly (see Major deprecationsbelow). Accelerates waiting for already resolved promises.
-
Does not prematurely fail a promise when its resolution triggers a breakpoint or signals a (resumable) Notification.
-
Methods, context, and block closures:
- Classes and organizers:
- Persists the preferences processPreemptionYields and "map control keys to command keys" across image restarts.
- Improves multilingual support in various places.
- Miscellaneous improvements to documentation of suspension/resumption points, stack unwinding, and others.
- Miscellaneous improvements to test coverage, especially for simulation, unwinding, and process termination.
- Overall clean-ups and refactorings. Work continues on improving modularization and avoiding dependencies from core packages on ST80, MorphicExtras, and EToys.
Collections (up to Collections-ct.1115/CollectionsTests-ct.419)
- Adds many new conveniences for enumerating, copying, and modifying collections and streams(click to browse them all!). Improvesweak typingbetween magnitudes and dictionaries so that arithmetic can be applied to dictionaries (click here for examples!).
- Introduces AlternativeSortFunction for sorting collections based on binary predicates.
- Adds new string conveniencesfor prefix/suffix testing, escaping, and index-to-row/column conversion.
- Improves printStrings and object explorer representations of bags and sets, dictionaries and run arrays, strings and characters. Adds preview of formatted texts to object inspectors.
- Texts:Adds #addAttributeBack:* for adding new attributes beneath existing attributes and fixes TextStream>>withAttribute[s]:do: to preserve existing dominating attributes. Adds conveniences for testing texts for attributes and converting them to plain text. Improves polymorphism of texts with strings.
- Improves HTML parsingso that it now can correctly process most clipboard contents and rich-text emails (see below):
- Adds support for base32 encoding/decoding.
- Adds Object>>isAssociation.
- Miscellaneous performance improvements for sequenceable collection accessing, linked list enumeration, RunArray accessing and sorting, string substitution and tokenization, text formatting, and character printing.
- Several bug fixes for RawBitsArray accessing, matrix enumeration, stream resetting and binary streaming, and filing in of hashed collections. Enhances accuracy of String>>findSelector heuristics (used by [CMD] + [N] for "senders of it" et al.) by trying to reuse the actual Smalltalk parser first. Improves hashing, copying, and comparing of text attributes and sort functions.
- Improves multilingual support in several places. Switches #asCommaStringAnd to use the Oxford comma.
- Overall clean-ups, refactorings, and documentation improvements.
Chronology (up to Chronology-Core-ct.98/Chronology-Tests-ct.40)
Compiler (up to Compiler-ct.535)
Environments (up to Environments-ct.88)
PackageInfo (up to PackageInfo-ct.81)
Traits (up to Traits-ct.320)
MethodMassage (up to MethodMassage-ct.75)
Welcomes the MethodMassage package in the trunk, which makes it convenient to disassemble compiled methods as first-class objects with reified labels, inspect and rewrite them, and reassemble them. Previously, MethodMassage was developed and tested in the VMMaker repository for at least 10 years. Recent changes to the package include instance variable remapping to support class reshaping in the trunk, improved documentation and test coverage, several performance improvements, and full support for the V3PlusClosures bytecode set alongside SistaV1.
~~~ Graphics & Sound ~~~
Graphics (up to Graphics-nice.562)
- Adds support for basic CSS color functions to improve HTML parsing.
- Adds dithering for smoothly reducing the color depth of forms.
- Adds accessors for screen dimensions of multiple monitors.
- Improves font preview for symbol fonts.
- Fixes Color mercury, decoding of transparent pixel values, copying of forms and cursors, detection of missing glyphs in strike fonts, opening of GIF files, and loading of translucent interlaced PNG images.
- Several performance improvements for form filtering, color construction and crayon constants, rectangle merging, #px, and PNG reading. Removes unused font data to save space.
- Miscellaneous improvements for multilingual support, documentation, and test coverage.
- Deprecates AnimatedGIFReadWriter in favor of GIFReadWriter.
Balloon (up to Balloon-ct.36)
TrueType (Fonts) (up to TrueType-tpr.99)
Sound (up to Sound-ct.102)
~~~ Files & Network ~~~
Files (up to Files-mt.223)
Compression (up to Compression-ct.64)
Network (up to Network-nice.289/NetworkTests-pre.80)
SqueakSSL (up to SqueakSSL-Core-mt.36/SqueakSSL-Tests-ct.30)
WebClient (up to WebClient-Core-ul.138/WebClient-Tests-nice.66)
JSON (up to JSON-ul.68)
XML (up to XML-Explorer-eem.3)
~~~ System Services ~~~
System (up to System-ct.1522)
- Introduces - ephemerons, which support- instance-based - finalization, a major improvement over the post-mortem finalization provided by WeakArrays. By using ephemeron identity dictionaries instead of weak identity dictionaries, weak indirect cyclic dependencies can now be properly garbage-collected for the first time.
- Revises - extended clipboard interfacesand enables them by default. With this change, pasting rich text from the host system is supported in all operating systems. Copying rich text and copying/pasting other formats such as pictures is still experimental.
- Improves change recoveryby discovering class definitions and method removals in change records and parsing the selectors of do-its.
- System navigation:
- Adds facilities for enumerating the class names in a system category and the versions of a class comment.
- Adds convenient accessors for image header flags such as high-DPI support and threaded VMs. Facilitates responding to platform changes after VM restarts by remembering the previous platform name. Improves detection of headless mode.
- Adds support for plain-text diffing to complement existing rich-text diffing.
- Adds an optional preference for reusing the size of tool windows, which previously was available for debuggers only.
- For the emergency mode REPL, adds a
clearcommand and improves high-DPI support. - Miscellaneous UI improvements:
- Refactors debugger invocation and resumption for different GUI frameworks, making it easier to write and integrate a custom debugger. Introduces a debugger invocation cue for passing along additional context such as an exception to the debugger.
- Refactors and fixes the low-space watcher for Spur VMs and tunes thresholds to avoid premature redundant warnings.
- Miscellaneous fixes:
- Noteworthy optimizations for user interface theme requests (speeds up typical tool building by ~50%), window collapsing, changes enumeration, and space tallies.
- Improves documentation of several interfaces such as system navigation queries, VM parameters, and others.
- Cleans up unused preferences and project parameters.
Regex (up to Regex-Core-ct.93/Regex-Tests-Core-ct.38)
SystemReporter (up to SystemReporter-eem.68)
- Updates description for Cog VM parameters and image-header flags.
PreferenceBrowser (up to PreferenceBrowser-codefrau.159)
- Improves robustness of preference wizard when adjusting settings for low performance.
Additional packages:
- FFI- :
- OSProcess- :- - Enables buffered readers (such as PipeableOSProcess from companion package CommandShell) to stream over a very large input stream by implementing automatic pruning.
- Adds support for Cuis and Unicode strings.
- Sunsets support for the IOHandle package, which is no longer maintained for recent versions of Squeak.
-
Overall stability and performance improvements.
-
Refactoring tools: Minor bug fixes, extensions, and performance improvements for refactoring rules.
- A new version of Squotwas released, which adds support for
git revert, tags, and co-authors, contains several UI improvements, and improves overall stability and performance. - The first stable version of Squeak Inbox Talkwas released, which integrates the new HyperKitty archives for the Squeak mailing lists, adds support for rich-text messages and attachments (only available in the Squeak Trunk version), and contains several UI improvements.
~~~ Version Control & Package Management ~~~
Installer (VersionNumber, UpdateStream, Squeak-Version) (up to Installer-Core-ct.458/VersionNumber-eem.5)
Monticello (up to Monticello-ct.822/MonticelloConfigurations-codefrau.187)
SqueakMap (up to SMBase-ct.147/SMLoader-ct.102)
- Fixes a bug when installing missing WebClient via SqueakMap.
~~~ Help & Internationalization ~~~
GetText
Multilingual (up to Multilingual-mt.293)
- Fixes a bug in UTF16 conversion for applying line-end conventions in little endian.
- Improves documentation on UTF8 encoding/decoding.
Help (up to HelpSystem-Core-ct.159/Help-Squeak-Project-ct.105)
- Help contents:- - Adds a tutorial on - how to contribute to Squeak- .Includes a short description of Squeak's community model, our development process, and recommended tools such as Monticello and Squeak Inbox Talk. It has never been easier to join the community - go ahead and make your first contribution NOW! :-)
- Updates - keyboard shortcut referencewith global shortcuts and shortcuts for windows, menus, lists, and trees as well as instructions to customize shortcuts.
- Improves and updates several sections of the terse guide.
-
Minor clean-ups and improvements on various help topics. Updates collection of online resources.
-
Moves release notes (like this one!) into the image, which were previously managed on GitHub. They are mirrored to squeak.org/release_notes/, so you can view them and click on examples to run them in SqueakJS even if you have no image at hand (how dare you!).
- Help system:- - Expands support for - editing help through the help browser- ** without writing code.**Users can now manage custom help topics and file-based help topics by using the context menu in the tree view or dragging and dropping topics.
- Revises icons in help browsers for empty help books, references of generic classes, and search results.
- Refactors help search and integrations for files/directories and HTML sites into the help system. In directory-based help topics, now uses the same sorting strategy for child directories (recursively).
- Stability improvements for browsing single styled topics, editing contents of directory topics, and searching topics.
~~~ Deployment & Miscellaneous ~~~
Tests (up to Tests-ct.522)
- There are now over 5800 tests in this release that run in less than 3 minutes on our CI.
- Improves precision and coverage of tests for DataStreams, UI themes, and package dependencies.
- Improves safety of several tests that might have corrupted or crashed the image before.
ReleaseBuilder (up to ReleaseBuilder-mt.248)
- Minor improvements for setting preferences reproducibly when creating new release images.
Major Deprecations (up to 60Deprecated-ct.117/61Deprecated-ct.29)
Miscellaneous minor deprecations in different packages. We value backward compatibility and try to avoid breaking changes wherever possible (see Compatibility Notes below for exceptions). All non-private methods and classes that were removed during refactorings are preserved in the 61Deprecated package and signal a (suppressible) deprecation warning when used.
Known Issues
Compatibility Notes
    Text streamContents: [:stream |
        stream withAttributes: {TextColor blue. TextEmphasis bold} do:
            [stream nextPutAll: 'abc'.
            stream withAttribute: TextColor red do:
                [stream nextPutAll: 'def']]].
    'hi {1}' asText
        addAttribute: TextColor red;
        format: {'name' asText addAttribute: TextColor green}.
("*(**^.^)/") *("*(^.^)/") ("*(^.^)/") !!! THANK YOU ALL FOR YOUR CONTRIBUTIONS !!! ("*(**^.^)/") *("**(^*.^)/")*