Release notes
v0.13.0
Features
Dark mode
Can now enable dark-mode from the hamburger menu in the modules overview panel, or is otherwise activated automatically based on your browser settings.
Live traces
Traces are now streamed live to the editor.
Partial function application
Function instances using a function pointer (via the top-right output socket) now behave as curried functions if any input values are set. This enables limited closure support and is particularly useful when passing functions as arguments to other functions, allowing specific inputs to be pre-set within the scope where the function is instantiated.
Misc
- Made popout text editor store position and size in local storage
- Several visual fixes to popout text editor
- Added an 'add panel' button by the bottom right controls to make it easier to add new panels
- When selecting nodes, arrows not connected to any of the selected nodes will be faded out.
- Lots of ux fixes
- Lots of bug fixes
- Added a search bar to the package manager
- Fixed bug in bundler which caused projects depending on projects with comments or portals in them to fail.
v0.12.1
Features
- Made it possible to zoom the canvas using ctrl-[+|-]
- Now also showing transitive dependencies in the modules overview panel
Bug fixes
- Fixed a bug which caused duplicating functions from external dependencies
to not work properly.
v0.12.0
Dec 19, 2024
Features
Popout editor for text input
Node inputs can now be expanded into a popout editor, making it a lot
easier to edit larger bodies of text.
Streamed Http Fetch API
We've introduced two new functions in the Http namespace (FetchUrlStreamed
and NextMessage). These can be used to fetch web resources utilizing the
serer-sent-events (SSE) protocol. This is very useful for a lot of LLM
APIs, which support streaming tokens as they are generated.
Changes
- Updated default project template to include some AI agent examples.
Bug fixes
- Fixed bug where preview dots on arrows appeared above other nodes
- Tooltips in Panels now appear above or below their buttons. If the button
is selected the tooltip is not shown
- Truncates in items names in Module overview instead of breaking lines
- Fixed bug where hovering on back arrow in Modules overview broke styling
of panels
Std Lib
Additions
- Http.FetchUrlStreamed - Like FetchUrl, but returns a streamed response
context, which can be used by Http.NextMessage to read streamed content.
- Http.NextMessage - Waits for the next message from a streamed response.
- Strings.StartsWith - Returns true if a string starts with a given prefix
- Strings.EndsWith - Returns true if a string ends with a given suffix
- Strings.RemovePrefix - Returns a string with the prefix removed if it
exists
- Strings.RemoveSuffix - Returns a string with the suffix removed if it
exists
v0.11.0
Dec 20, 2024
Features
More stable ports for Http.Endpoint
Adding Http.Endpoint nodes to a project implicitly starts an HTTP server
which is assigned an available port by the Midio platform. An unfortunate
consequence of the way we assigned ports was that refreshing the editor
would result in your HTTP server getting assigned a new port. With this
release, we are now being much a bit smarter when assigning ports by
reusing the same port when reloading a project. The port will eventually be
released to the pool of available ports when you close the editor for a
while, but this change should at least make the port stable while you're
working.
User defined events
Midio now supports user defined events, which means that you can wrap other
events into reusable event nodes. We anticipate this being a very useful
feature, allowing our users much more flexibility when creating reusable
packages. Unfortunately, we still miss some features to enable a good way
of making these events parameterizable, but this is something we hope to
address very soon.
PDF functionality
There is now support for converting a buffer to PDF document. The document
can be viewed in the editor and a function to extract all text has been
added.
Changes
Misc
- shift+scroll on Mac will horizontally pan screen.
- Right-clicking on empty space in modules overview will show context menu.
Bug fixes
- Fixes bug where Shift+Enter in input text field did not work in WebKit
browsers
- A bunch of bugs related to the value visualizer showing up on connections
between nodes has been fixed.
- Fixed bug where text boxes within nodes were focused and selected while
the node was being dragged in Safari.
- A bunch of fixes to the markdown editor in comment nodes.
- Fixed a bug which caused images not to show as 'null' in value
visualizers.
- Data editor text fields not properly supports new lines
Std lib
Additions
-
Python.Eval - Evaluates the given python code with the provided arguments
-
Json.GenerateJsonSchema - Generates a json schema for the given node
based on its type signature.
-
Reflection.Name - Returns the Name of the given input nodes declaration.
-
Reflection.QualifiedName - Returns the Qualified Name of the given input
nodes declaration, which includes its namespaces.
-
Query.FindWherePathEquals - Which finds the first item in a list where a
given path matches a given value. This function expects a list of
objects, each of which the path is used to index into.
-
Http.UrlDecodeComponent - Which only performs simple percent-decodes
-
Std.Join - Lets one join with a child process.
-
Std.JoinAll - Lets one join with a fanned out set of child processes
-
Some experimental web scraping utilities
- Scraping.Http.ParseDocument
- Scraping.Http.ParseFragment
- Scraping.Http.SelectAll
-
Markdown.Parse - Parses a markdown string into a list of text events
-
Markdown.ToMessageList - Parses a markdown string into a list of objects
of the form { role: string, content: string }
, where all H1 titles are
put in the role
field, and its content in the content
field. This
makes it easier to construct message lists for LLM APIs, which follow
this convention.
Renames
- Renamed Std.IterList to Std.FanOutList
- Renamed Std.IterRange to Std.FanOutRange
Changes
- Json.Parsed - Now returns null instead of crashing the thread if it
doesn't receive String input.
v0.10.0
Nov 1, 2024
Features
Markdown support in comments and function documentation
Midio now supports markdown in both comments and function documentation.
The supported markdown features are CommonMark plus typographic
enhancements, tables, footnotes, abbreviations, and definition lists.
Misc
- Improved design for variable getter and setter nodes.
Bug fixes
- Fixed inconsistent border on data nodes.
Std lib
Breaking changes
- Removed triggers from Std.Math.Random
Bug fixes
- Made Std.Math.Random not panic if range is empty or inverted.
v0.9.0
Oct 25, 2024
Dependency version locking and explicit updating
When installing a package using the package manager, we now lock on the
exact version of the package found at that time. If the author of that
package releases a new version, the user now has to explicitly upgrade to
this newer version. This makes it a lot safer to release new versions of
packages as it doesn't risk breaking any dependant packages until they are
ready to upgrade. Note: Downgrading and choosing specific versions is not
yet implemented.
Misc
- Shortcuts on Mac should be more stable
- cmd+scroll for zoom in/out
- cmd-0 for reset zoom/pan
- cmd-c for copy
- cmd-x for paste
- New Shortcuts
- cmd|ctrl-. for hiding interfaces (zen mode 🧘) - cmd|ctrl-0 for reset
zoom/pan
- Optimized memory layout of traces, which are now much more compact.
- We now limit how large traces can grow in terms memory used - If a trace
grows to be too large, we stop emitting more information, but the data
captured thus far is still transmitted.
- Optimized how we chunk and compress large messages from the server, which
improves performance when working with larger amounts of data.
- The Log panel now automatically scroll to the bottom unless the user
scroll up. There is also a new button on this panel which toggles this
behavior.
- Added a 'Find usages' action available through the context menu on
functions in the left side panels, making it easy to find instances of
your functions.
Std lib
- Added Std.Strings.IsEmpty - a predicate function that checks if a string
is empty or not.
- Added Std.List.SortOn - Which lets you specify a to sort a list of
objects on a given key.
- Added Std.Query.Select - Which lets you transform a list of objects by
selecting the keys you want select from each object.
- Added Std.Query.InnerJoinOn - Which lets you easily match two lists of
objects against each other, merging items where a given key match.
- Added Std.Query.Filter - Which lets you filter out values based on a
simple expression>
- Added Std.Query.Find - Which lets you search for an item matching a
simple expression.
- Added Std.Query.Pick - Which extracts a given key from the object in a
list of objects.
Bug fixes
- The problems panel should now display more up to date errors as they
occur.
- Fixed a problem in the data editor which made it hard to remove fields.
- Fixed visual bug with long lines in the data editor
- Fixed bug which made cancelling a search using escape not correctly
restore the previous editor state.
v0.8.0
Oct 23, 2024
Features
- Made it possible to select various tracing levels using a dropdown menu
in the 'trace history' panel. The following modes are available
- Full - This is the same as the previous behaviour - all function calls
and values are traced.
- Without values - This level still captures information about which
functions have been called, by whom and in what order, but doesn't
capture values
- Off - No tracing except for execution time.
- Traces now group very small spans together, which makes them more useful
in those cases, as well as making trace rendering much more performant.
Bug fixes
- Fixed compiler error for certain cases that would occur when converting
selection with portal to function
- Fixed cases where arrows from triggers would look like data arrows.
- Fixed potential stack overflow in code gen.
Misc
- Made 'Add inline function' context menu item only show on properties that
are actually inputs
- Added a max call stack depth (defaults to 8192), instead of just running
forever until going out of memory. If a Midio process reaches this limit,
the process will crash, and the editor will display an error message.
- Optimized how traces are captured, letting us support tracing much larger
workflow. Still lots of optimization left, but this is a step in the
right direction.
- Middle mouse button can now be used for panning the canvas, and works no
matter what element is under the cursor.
- The borked 'detach connection' behavior has been replaced by a context
menu option on connections, making it much easier to move connections.
v0.7.0
Oct 14, 2024
Features
- The editor now displays an error message if you've forgotten to respond
to an Http.Endpoint request.
- Removed the play button from nodes requiring a context by their first
trigger (like Endpoint.Response and Test.Assert*). Triggering these using
this button has never worked.
- Disallow clicking the play button on nodes inside functions - previously
this would always produce an error notification
- Horizontal panning using a track pad now works as expected
- Made it possible to retrieve runtime information about event nodes by
connecting their top right connection as input to a node. This lets you
for example retrieve information about ports and urls from Http.Endpoint.
Std lib
- Http.Endpoint now by default responds with status 500 internal error if
you've forgotten to respond to a request.
- Added Std.Hashing.HMAC.Compute and Std.Hashing.HMAC.Verify
- Added Std.Base64.Decoded as a trigger free alternative to
Std.Base64.Decode
Breaking
- Simplified Std.Hashing functions to not have triggers
- Simplified Std.Base64 function to not have triggers
Bug fixes
- Fixed bug which caused parsing error when assigning a type to data
objects
- Added a slight delay to the shadow transition on nodes so that the shadow
doesn't blink when the user click on a property.
v0.6.0
Oct 7, 2024
Features
Misc
- Added a confirmation dialog when trying to add an arrow which would cause
an anonymous function to be deleted.
- Made it possible to align nodes based on a seletion of arrows. This can
be useful when you want to automatically place nodes in order to get
straight lines. Do this by selecting an arrow and pressing shift-w or
shift-d.
Bug fixes
Fixed crash bug when copying a node with an anonymous function inside it.
Std lib
Added Base64.Encode and Base64.Decode
v0.5.0
Oct 3, 2024
Features
Variables
The Midio langauge now has support for local variables, which can be used
by adding a variable getter or setter from the node palette (press space
and search for 'getter' or 'setter'). Check out the variable docs here.
Misc features
- Added action for continuing all paused processes. A button can be found
on the processes panel, through the command palette.
- Stepping while debugging now jumps to the next node debugging pauses at.
- Added a new 'breakpoints' panel to view all active breakpoints
- Made it possible to see value summaries for unconnected node properties
- Improved UX of property input boxes for larger inputs. When the input
gets past a certain size, a larger text area appears which is easier to
use.
- The URL you get when hovering the globe icon on Http.Endpoint nodes
should now display the correct URL used to reach it. Click the icon to
copy the URL to your clipboard.
- Increased max memory available to each midio process, and made them
handle out of memory exceptions mode gracefully.
- External dependencies (added from the package manager) can now be
inspected in the left side overview panel. Note that they are read only
(even if the UI lets you editor them for now, which will only have a
local and non-persistent effect). This makes it easier to see what
functions a package contains, and lets a package author add usage
examples.
- While step debugging, stepping causes the view to jump to the next node.
This makes it easier to follow what is happening when the next node is
inside a function, for example. We will add more options for step
debugging in the future, but this felt like a sensible default.
- Added the ability to view documentation for nodes in the editor.
Bug fixes
- Fixed bug which caused operations on selection between different blocks
to affect each other, which could make you delete or move nodes you
didn't intend to.
- Fixed bug which caused several indexes in a row in waypoints to be
interpreted wrongly.
- Context checker now handles cycles, and only reports errors if a context
is actually missing.
- Our internal messaging system is now more robust for large messages.
- Fixed a bunch of scenarios where 'convert to function' didn't work
properly.
- Fixed bug which caused the frontend to crash when renaming the project.
- Fixed some situations where type errors weren't reported to the editor.
Misc changes
- The popup edior used for editing anonymous functions has been removed.
Anonymous functions are now edited in the same kind of editor as any
other function.
- Anonymous functions now get an entry in the left side overview panel.
They currently don't get any meaningful names, but this will be added in
a future release.
- Added a new starter template for new projects, which contains some usage
examples and examples of various useful patterns. Should be a better
starting point than an empty module for new users.
- When renaming a module or function in the left side overview, the
existing name is now preselected in the input field.
- Waypoint input box now has no max width so that you can always see the
full content.
Std lib
Changes and bug fixes
- Input and output names of functions are now more consistent.
- Fixed bug in Strings.Template, which didn't work correctly with non-ascii
characters.
- Std.Strings.Join.separator now defaults to ''
- Changed order of Http.Response inputs to match Http.Endpoint
- Made Http.FetchUrl more efficient at allocating header values.
Additions
- Added Std.Strings.Contains - which checks if a string is a substring of
another string
Removed the ability to create new types (for now)
Until we've fixed our type editor, it felt wrong to have it available as it
was practically impossible to use. The type editor will be reworked, and is
an important feature for Midio.
v0.4.0
Sep 13, 2024
New release is out
Most important, the editor got a new URL and is now accessed using
http://editor.midio.com/ see details below.
Features
Portals
- Connections between nodes can now be "split" in two through the context
menu. This creates a 'portal,' where the entrance and exit can be placed
individually. This makes it much easier to avoid a messy node graph by
eliminating long connections and loops.
Package manager
- Added support for using external packages through a brand new package
manager. You can now publish your projects as reusable packages; however,
for now, all published packages are public. Support for private packages
is planned. Note that all code in your project will be public, and there
is no way to remove a package once it is published (we're avoiding
another left-pad situation here!). If you need to make changes to your
package, publish a new version by increasing one of the version numbers.
Read more about the package manager in our documentation at
docs.midio.com.
Highlight data dependencies while step debugging
- We now highlight the next triggable node while debugging as well as its
data dependencies to make it a lot easier to understand how Midio
executes code.
Trace history timeline slider
- Trace history items now have a slider that lets you scrub through various
points in an execution and see the values at those times. This makes it
much easier to understand the execution of flows that include loops.
Misc
- Showing error notification when the user tries to add an arrow from a
property to trigger.
- Added a timeout to rpc calls.
- One can now pan using two finger gesture on track pads, and zoom with two
fingers + control.
- Zoom has been moved to control+scroll
- Waypoints now return null when their field access fails instead of
exiting the process.
- Error notifications are now cleared when running a new flow.
Changes to URLs
- The Midio editor is now available at:
editor.midio.com
- The editor now exposes HTTP endpoint through:
<project-name>.midio.dev:<port>
- Deployed apps are now available at:
<project-name>.midio.app
Bugfixes
- Fixed bug which caused 'double click arrow to add waypoint' to not work.
- Fixed bug where some arrows didn't show inline values after running
- Fixed a bug that causes traces to not report a correct call hierarchy
- Double click waypoint to edit them - This makes it much easier to move
them instead of just ending up selecting the text
- Fixed a small bug in input property text boxes that caused selection not
to be cleared when input box loses focus.
- Fixed a bunch of interaction bugs with waypoints
- One now has to double click the waypoint to enter a field access
- Fixed bug which caused some nodes to get wrong z-ordering.
- Fixed bug which caused comments to not be editable
- Fixed bug which caused node selection to be dropped when summoning the
context menu on a node. This made it hard to perform actions on a node
selection.
- Fixed bug which cause
\
(backslash) to cause compilation errors when
used in identifiers.
- Properly support backticks (`) in identifiers
- Fixed bug which sometimes caused continue-in-fork to make the process
enter an eternal waiting state.
Std-lib
- Added a new option to FetchURL.respone_type: 'json'
- Added Std.List.Empty - which creates an empty list
- Added Std.Buffer.Concat
- Added Std.Buffer.ToByteList
- Added Std.Buffer.Append
- Added Std.Buffer.Length
- Added Std.Buffer.Empty
- Added Std.Buffer.EncodeUtf8
- Added Std.Buffer.DecodeUtf8