Visual Environment
- Camera is panned to newly created nodes.
 - Long names on the Node Searcher's list are truncated. The part of the
name that doesn't fit in the Searcher's window is replaced with an ellipsis
character ("…"). - Magnet Alignment algorithm is used while placing new nodes. When we
find an available free space for a new node, the node gets aligned with the
surrounding nodes horizontally and vertically. This helps to preserve a nice
grid-like layout for all the nodes. - Nodes created via the TAB key or by clicking the (+) button on the
screen are now placed below all the selected nodes when more than one node is
selected. (Previously, they were placed below the first node that was
selected.) This makes it easier to achieve a compact, vertical layout of the
graph. - Nodes created near existing nodes via the TAB key or by dropping a
connection are now repositioned and aligned to existing nodes. This is
to make the resulting graph prettier and avoid overlapping. In such cases,
created nodes will be placed below an existing node or on the bottom-left
diagonal if there is no space underneath. - Nodes can be added to the graph by double-clicking the output ports of
existing nodes (or by clicking them with the right mouse button). - Node Searcher preserves its zoom factor. The visible size of the node
searcher and edited node is now fixed. It simplifies node editing on
non-standard zoom levels. - Nodes can be added to the graph by clicking (+) button on the screen.
The button is in the bottom-left corner. Node is added at the center or pushed
down if the center is already occupied by nodes. - Maximum zoom factor is limited to 1.0x if IDE is not in Debug Mode.
 - Debug Mode for Graph Editor can be activated/deactivated using a
shortcut. It allows access to a set of restricted features. See
debug-shortcuts. - New nodes can be created by dragging and dropping a connection on the
scene. - Node connections can be dropped by pressing the Esc key while dragging
them. - Added support of source maps for JS-based visualizations.
 - Fixed the alignment of newly created nodes to existing nodes with
visualizations enabled. When applicable, new nodes are now placed below
visualizations. (Previously, they were placed to the left of the
visualizations.) - Fixed histograms coloring and added a color legend.
 - Lazy visualization for scatter plot.
 - Fixed broken node whose expression contains non-ASCII characters.
 - Fixed developer console warnings about views being created but not
registered. - Fixed developer console errors related to Language Server (mentioning code
3003 and "Invalid version"), occurring during project opening and after new
node cration. - Fixed developer console error about failing to decode a notification
"executionContext/visualisationEvaluationFailed" - New Version of the Node Searcher - the Component Browser The available
methods, atoms and functions are presented in nice, categorized view. The most
popular tools are available at hand. The panel is unstable, and thus is
available under the--enable-new-component-browserflag. - Fixed error handling during startup. This prevents entering IDE into a
"zombie" state, where processes were started but not visible to user. They
could cause issues with starting further IDE instances. - New nodes are created in the project source when the searcher is opened and a
new node is created. - Proper Polyglot Vector and Array Support
 - IDE uses new visualization API.
 - Visualization of long textual values improved
 - Selecting a suggestion from the searcher or component browser now updates the
visualisation of the edited node to preview the results of applying the
suggestion. - Remove here keyword from IDE.
 
EnsoGL (rendering engine)
- You can change font and set letters bold in the 
text::Area
component. Use theset_fontand
set_bold_bytesrespectively. - Fixed a text rendering issue in nested sublayer.
 - Added a new component: Grid View. It's parametrized by Entry object,
display them arranged in a Grid. It does not instantiate all entries, only
those visible, and re-use created entries during scrolling thus achieving
great performance. There are variants of grid view with selection and
highlight, scrollbars, and both. 
Enso Standard Library
- Implemented 
Vector.distinctallowing to remove duplicate elements from a
Vector - Implemented 
Duration.time_executionallowing timing of the execution of an
expression within the UI - Improved performance of 
Vector.filterandVector.each; implemented
Vector.filter_with_index. MadeVector.ataccept negative indices and
ensured it fails with a dataflow error on out of bounds access instead of an
internal Java exception. - Implemented the 
Table.select_columnsoperation. - Implemented the 
Table.remove_columnsandTable.reorder_columns
operations. - Implemented the 
Table.sort_columnsoperation. - Fixed 
Vector.sortto handle tail-recursive comparators - Implemented 
Range.find,Table.rename_columnsand
Table.use_first_row_as_namesoperations - Implemented 
Text.atandText.is_digitmethods - Implemented 
Runtime.get_stack_tracetogether with some utilities to process
stack traces and code locations - Implemented 
Vector.flatten - Significant performance improvement in 
Natural_Orderand newFaker
methods added toStandard.Test - Implemented 
Integer.parse - Made 
Text.compare_tocorrectly handle Unicode normalization - Extend 
Text.containsAPI to support regex and case insensitive
search. - Implemented new 
Text.takeandText.dropfunctions, replacing existing
functions - Implemented new 
Text.starts_withandText.ends_withfunctions, replacing
existing functions - Implemented 
Text.to_case, replacingText.to_lower_caseand
Text.to_upper_case - Implemented initial 
Table.group_byfunction on Standard.Table - Implemented 
Text.padandText.trim - Updated 
Text.repeatand added*operator shorthand - General improved Vector performance and new 
Vector.each_with_index,
Vector.fold_with_indexandVector.takemethods. - Implemented new 
Text.insertmethod - Implemented 
Bool.compare_tomethod - Implemented 
Map.first,Map.lastfunctions. ExpandedTable.group_byto
also compute mode, percentile, minimum, maximum. - Implemented 
Text.location_ofandText.location_of_allmethods. - Replaced 
Table.group_bywithTable.aggregate - Implemented 
Panic.catchand helper functions for handling errors. Added a
type parameter toPanic.recoverto recover specific types of errors. - Added warning handling to 
Table.aggregate - Improved performance of 
Table.aggregateand full warnings
implementation - Implemented 
Text.reverse - Implemented support for most Table aggregations in the Database
backend. - Update 
Text.replaceto new API. - Add encoding support to 
Text.bytesandText.from_bytes. Renamed and added
encoding toFile.read_text. NewFile.readAPI. - Improved the 
Rangetype. Added adown_tocounterpart toup_toand
with_stepallowing to change the range step. - Aligned 
Text.splitAPI with other methods and addedText.lines. - Implemented a basic reader for the 
Delimitedfile format. - Implemented a reader for the 
Excelfile format. - Added custom encoding support to the 
Delimitedfile format reader. - Implemented 
computemethod onVectorfor statistics calculations. - Promote get and put to be methods of Ref type rather than of Ref
module - Implemented 
Table.parse_values, parsing text columns according to a
specified type. - Promote with, take, finalize to be methods of Managed_Resource
instance - Implemented automatic type detection for 
Table.parse_values. - Integrated value parsing with the 
Delimitedfile reader. - Implemented the 
Infersetting for headers in theDelimitedfile format
and made it the default. - Implemented a 
Table.from Textconversion allowing to parse strings
representingDelimitedfiles without storing them on the filesystem. - Added rank data, correlation and covariance statistics for 
Vector - Implemented 
Table.order_byfor the SQLite backend. - Implemented 
Table.order_byfor the PostgreSQL backend. - Implemented 
Table.order_byfor the in-memory table. - Renamed 
File_Format.TexttoPlain_Text, updatedFile_Format.Delimited
API and added builders for customizing less common settings. - Allow control of sort direction in 
FirstandLastaggregations. - Implemented 
Text.write, replacingFile.write_text. - [Removed obsolete 
select,group,sortand releated types from tables.]
3519 - Removed obsolete 
from_xlsandfrom_xlsxfunctions. Added support for
reading column names from first row inFile_Format.Excel - Added 
File_Format.Delimitedsupport toTable.writefor new files. - Adjusted 
Database.connectAPI to new design. - Added 
File_Format.Excelsupport toTable.writefor new files. - identity,const,flip,curry,uncurry functions
 - Added append support for 
File_Format.Excel. - Added support for custom encodings in 
File_Format.Delimitedwriting. - Allow filtering caught error type in 
Error.catch. - Implemented 
Appendmode forFile_Format.Delimited. - Added 
Vector.write_bytesfunction and removed oldFile.write_bytes - Added 
line_endingsandcomment_characteroptions to
File_Format.Delimited. - Fixed the case of various type names and library paths
 - Added support for parsing 
.pgpassfile andPG*environment variables for
the Postgres connection - Added 
Regressionto theStandard.Baselibrary and removed legacyModel
type fromStandard.Table. - Created 
Index_Sub_Rangetype and updatedText.takeand
Text.drop. - Added 
Vector.from_polyglot_arrayto makeVectors backed by polyglot
Arrays - Updated 
Vector.takeandVector.dropand removed their obsolete
counterparts. - Short-hand syntax for 
order_byadded. - Expanded 
Table.atto support index access and addedTable.column_count
method. - Removed 
Array.set_at. - Added various date part functions to 
DateandDate_Time. - Implemented 
Table.takeandTable.dropfor the in-memory backend. - Implemented specialized storage for the in-memory Table.
 - Implemented 
Table.distinctfor the in-memory backend. - Added 
databases,schemas,tablessupport to database Connection. - Implemented 
start_ofandend_ofmethods for date/time types allowing to
find start and end of a period of time containing the provided time. - Implemented 
type_ofandis_of_typemethods for getting the type of a
value and comparing types, respectively. - Implemented 
work_days_untilfor counting work dys between dates and
add_work_dayswhich allows to shift a date by a number of work days. - Added 
queryandreadfunctions to Database connections. - Added 
Date_Period.Weektostart_ofandend_ofmethods. 
Enso Compiler
- Added overloaded 
fromconversions. - Upgraded to Graal VM 21.3.0
 - Added the ability to decorate values with warnings.
 - Fixed issues related to constructors' default arguments
 - Fixed compiler issue related to module cache.
 - Fixed execution of defaulted arguments of Atom Constructors
 - Converting Enso Date to java.time.LocalDate and back
 - Incremental Reparsing of a Simple Edits
 - Functions with all-defaulted arguments now execute automatically
 - Provide 
tagValuesfor function arguments in the language server - Delay construction of Truffle nodes to speed initialization
 - Frgaal compiler integration to allow for latest Java constructs
 - Support for Chrome developer tools --inspect option
 - Move Builtin Types and Methods definitions to stdlib
 - Reduce boilerplate by generating BuiltinMethod nodes from simple method
signatures - Generate boilerplate classes related to error handling and varargs in
builtins from method signatures - Avoid needless concatenations of warning/error messages
 - Added a full-blown DSL for builtins
 - Integration of Enso with Ideal Graph Visualizer
 - Lazy evaluation of RHS argument for || and &&
 - Drop Core implementation of IR
 - Replace 
thiswithself - Introduce a smaller version of the standard library, just for testing
 - Remove 
hereand make method name resolution case-sensitive - Explicit 
self - Added benchmarking tool for the language server
 - Support module imports using a qualified name
 - Enable caching in visualisation functions
 - Update Scala compiler and libraries
 - Support importing module methods
 - Support Autosave for open buffers
 - [Generate native-image for engine-runner][3638]
 - Support pattern matching on constants
 - Builtin Date_Time, Time_Of_Day and Zone types for better polyglot
support - Implement new specification of data types: 
typehas a runtime
representation, every atom has a type - main = "Hello World!" is valid Enso sample
 - Invalidate module's IR cache if imported module changed
 - Don't rename imported Main module that only imports names
 - Distinguish static and instance methods
 - Notify node status to the IDE