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