Download
Enso IDE
Enso IDE is the main product of the Enso project. The packages are stand-alone,
they contain both GUI and the backend.
Download links:
This is the recommended download for most users.
Enso Engine
If you are interested in using Enso Engine command line tools only, download the
Enso Engine bundle.
Download links:
These are archives containing the
Enso portable distribution.
User is responsible for setting up the environment variables and adding the
bin
directory to the PATH
.
Note that these distributions do not allow you to use the Enso IDE.
It is recommended only for advanced users, who want to just try the compiler
CLI.
Anonymous Data Collection
Please note that this release collects anonymous usage data which will be used
to improve Enso and prepare it for a stable release. We will switch to opt-in
data collection in stable version releases. The usage data will not contain your
code (expressions above nodes), however, reported errors may contain brief
snippets of out of context code that specifically leads to the error, like "the
method 'foo' does not exist on Number". The following data will be collected:
- Session length.
- Graph editing events (node creation, deletion, position change, connect,
disconnect, collapse, edit start, edit end). This will not include any
information about node expressions used. - Navigation events (camera movement, scope change).
- Visualization events (visualization open, close, switch). This will not
include any information about the displayed data nor the rendered
visualization itself. - Project management events (project open, close, rename).
- Errors (IDE crashes, WASM panics, Project Manager errors, Language Server
errors, Compiler errors). - Performance statistics (minimum, maximum, average GUI refresh rate).
Changelog
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 <kbd>TAB</kbd> 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 <kbd>TAB</kbd> 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 can be
disabled with the `--enable-new-component-browser=false` flag. - 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.
- Shortcut changes: Pressing `Enter` when no node is edited opens
Component Browser. Entering node shortcut changed to `cmd` + `Enter`. - Added support for scrolling by pressing and holding a mouse button on a
scrollbar. - Added scroll bounce animation which activates when scrolling past the
end of scrollable content. - Added project snapshot saving on shortcut
EnsoGL (rendering engine)
- You can change font and set letters bold in the <code>text::Area</code>
component. Use the <code>set_font</code> and
<code>set_bold_bytes</code> respectively. - 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. - Massive improvements of text rendering performance. Different text
instances are now reusing the shape shaders and the same sprite system under
the hood. This drastically reduces the amount of required draw calls for
scenes with a lot of text. - Text rendering quality improvements. Glyphs are now hinted in a better
way. Also, additional fine-tuning is performed per font and per host operating
system. - Display objects can now emit and receive events in the same style as
JavaScript DOM events. The events system implements very similar
behavior to the one described here:
https://javascript.info/bubbling-and-capturing. - Added a new component: Slider. It allows adjusting a numeric value
with the mouse. The precision of these adjustments can be increased or
decreased. - Added ProjectsGrid view for Cloud Dashboard. It provides the first
steps towards migrating the Cloud Dashboard from the existing React (web-only)
implementation towards a shared structure that can be used in both the Desktop
and Web versions of the IDE.
Enso Standard Library
- Implemented `Vector.distinct` allowing to remove duplicate elements from a
Vector - Implemented `Duration.time_execution` allowing timing of the execution of an
expression within the UI - Improved performance of `Vector.filter` and `Vector.each`; implemented
`Vector.filter_with_index`. Made `Vector.at` accept 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_columns` operation.
- Implemented the `Table.remove_columns` and `Table.reorder_columns`
operations. - Implemented the `Table.sort_columns` operation.
- Fixed `Vector.sort` to handle tail-recursive comparators
- Implemented `Range.find`, `Table.rename_columns` and
`Table.use_first_row_as_names` operations - Implemented `Text.at` and `Text.is_digit` methods
- Implemented `Runtime.get_stack_trace` together with some utilities to process
stack traces and code locations - Implemented `Vector.flatten`
- Significant performance improvement in `Natural_Order` and new `Faker`
methods added to `Standard.Test` - Implemented `Integer.parse`
- Made `Text.compare_to` correctly handle Unicode normalization
- Extend `Text.contains` API to support regex and case insensitive
search. - Implemented new `Text.take` and `Text.drop` functions, replacing existing
functions - Implemented new `Text.starts_with` and `Text.ends_with` functions, replacing
existing functions - Implemented `Text.to_case`, replacing `Text.to_lower_case` and
`Text.to_upper_case` - Implemented initial `Table.group_by` function on Standard.Table
- Implemented `Text.pad` and `Text.trim`
- Updated `Text.repeat` and added `*` operator shorthand
- General improved Vector performance and new `Vector.each_with_index`,
`Vector.fold_with_index` and `Vector.take` methods. - Implemented new `Text.insert` method
- Implemented `Bool.compare_to` method
- Implemented `Map.first`, `Map.last` functions. Expanded `Table.group_by` to
also compute mode, percentile, minimum, maximum. - Implemented `Text.location_of` and `Text.location_of_all` methods.
- Replaced `Table.group_by` with `Table.aggregate`
- Implemented `Panic.catch` and helper functions for handling errors. Added a
type parameter to `Panic.recover` to recover specific types of errors. - Added warning handling to `Table.aggregate`
- Improved performance of `Table.aggregate` and full warnings
implementation - Implemented `Text.reverse`
- Implemented support for most Table aggregations in the Database
backend. - Update `Text.replace` to new API.
- Add encoding support to `Text.bytes` and `Text.from_bytes`. Renamed and added
encoding to `File.read_text`. New `File.read` API. - Improved the `Range` type. Added a `down_to` counterpart to `up_to` and
`with_step` allowing to change the range step. - Aligned `Text.split` API with other methods and added `Text.lines`.
- Implemented a basic reader for the `Delimited` file format.
- Implemented a reader for the `Excel` file format.
- Added custom encoding support to the `Delimited` file format reader.
- Implemented `compute` method on `Vector` for 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 `Delimited` file reader.
- Implemented the `Infer` setting for headers in the `Delimited` file format
and made it the default. - Implemented a `Table.from Text` conversion allowing to parse strings
representing `Delimited` files without storing them on the filesystem. - Added rank data, correlation and covariance statistics for `Vector`
- Implemented `Table.order_by` for the SQLite backend.
- Implemented `Table.order_by` for the PostgreSQL backend.
- Implemented `Table.order_by` for the in-memory table.
- Renamed `File_Format.Text` to `Plain_Text`, updated `File_Format.Delimited`
API and added builders for customizing less common settings. - Allow control of sort direction in `First` and `Last` aggregations.
- Implemented `Text.write`, replacing `File.write_text`.
- [Removed obsolete `select`, `group`, `sort` and releated types from tables.]
3519 - Removed obsolete `from_xls` and `from_xlsx` functions. Added support for
reading column names from first row in `File_Format.Excel` - Added `File_Format.Delimited` support to `Table.write` for new files.
- Adjusted `Database.connect` API to new design.
- Added `File_Format.Excel` support to `Table.write` for new files.
- identity,const,flip,curry,uncurry functions
- Added append support for `File_Format.Excel`.
- Added support for custom encodings in `File_Format.Delimited` writing.
- Allow filtering caught error type in `Error.catch`.
- Implemented `Append` mode for `File_Format.Delimited`.
- Added `Vector.write_bytes` function and removed old `File.write_bytes`
- Added `line_endings` and `comment_character` options to
`File_Format.Delimited`. - Fixed the case of various type names and library paths
- Added support for parsing `.pgpass` file and `PG*` environment variables for
the Postgres connection - Added `Regression` to the `Standard.Base` library and removed legacy `Model`
type from `Standard.Table`. - Created `Index_Sub_Range` type and updated `Text.take` and
`Text.drop`. - Added `Vector.from_polyglot_array` to make `Vector`s backed by polyglot
Arrays - Updated `Vector.take` and `Vector.drop` and removed their obsolete
counterparts. - Short-hand syntax for `order_by` added.
- Expanded `Table.at` to support index access and added `Table.column_count`
method. - Removed `Array.set_at`.
- Added various date part functions to `Date` and `Date_Time`.
- Implemented `Table.take` and `Table.drop` for the in-memory backend.
- Implemented specialized storage for the in-memory Table.
- Implemented `Table.distinct` for the in-memory backend.
- Added `databases`, `schemas`, `tables` support to database Connection.
- Implemented `start_of` and `end_of` methods for date/time types allowing to
find start and end of a period of time containing the provided time. - Implemented `type_of` and `is_of_type` methods for getting the type of a
value and comparing types, respectively. - Implemented `work_days_until` for counting work dys between dates and
`add_work_days` which allows to shift a date by a number of work days. - Added `query` and `read` functions to Database connections.
- Added `Date_Period.Week` to `start_of` and `end_of` methods.
- Replaced `Table.where` with a new API relying on `Table.filter`.
- Added `Filter_Condition` to `Vector`, `Range` and `List`.
- Extended `Filter_Condition` with `Is_Empty`, `Not_Empty`, `Like` and
`Not_Like`. - Reimplemented `Duration` as a built-in type.
- Implemented `Table.replace_text` for in-memory table.
- Extended `Filter_Condition` with `Is_In` and `Not_In`.
- Replaced `Table.drop_missing_rows` with `filter_blank_rows` with an updated
API. - Replaced `Table.drop_missing_columns` with
`Table.remove_columns Column_Selector.Blank_Columns` by adding the new column
selector variant. - Implemented `Table.rows` giving access to a vector of rows.
- Define Enso epoch start as 15th October 1582
- Implemented `Period` type
- Implemented new functions on Column and added expression syntax support to
create derived Columns. - Added support for milli and micro seconds, new short form for rename_columns
and fixed issue with compare_to versus Nothing - Aligned `Text.match`/`Text.locate` API
- Added `transpose` and `cross_tab` to the In-Memory Table.
Enso Compiler
- Added overloaded `from` conversions.
- 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 `tagValues` for 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 `this` with `self`
- Introduce a smaller version of the standard library, just for testing
- Remove `here` and make method name resolution case-sensitive
- Explicit `self`
- Added benchmarking tool for the language server
- Support module imports using a qualified name
- Using parser written in Rust.
- 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: `type` has 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
- Notify node status to the IDE
- Make instance methods callable like statics
- Distinguish static and instance methods
- By-type pattern matching
- Fix performance of method calls on polyglot arrays
- Improved support for static and non-static builtins
- Missing foreign language generates proper Enso error
- Connecting IGV 4 Enso with Engine sources
- Made Vector performance to be on par with Array
- Introduced IO Permission Contexts
- Accept Array-like object seamlessly in builtins
- Initialize Builtins at Native Image build time
- Split Atom suggestion entry to Type and Constructor
- Any number can be converted to double
- Update to GraalVM 22.3.0
- Connecting IGV 4 Enso with Engine sources
- Add the `Self` keyword referring to current type
- Support VCS for projects in Language Server
- Support multiple exports of the same module
- Import modules' extension methods only with unqualified imports
- Don't export polyglot symbols
- From/all import must not include module in name resolution