Today’s update adds a long-requested feature for storing private static resources within your Losant application. We're also continuing to expand on our AI-assisted application development features.
Private Application Files
Losant's Application Files has long allowed for storing static resources used within IoT applications: device images, experience script files and stylesheets, and notebook execution outputs. The shortcoming of this feature has always been that the files are served through public URLs – meaning Application Files were not well-suited for storing sensitive data or device firmware images.
Today's release solves for those use cases by providing private file storage within your applications. Private files can be added to your application through several methods:
- Through the Losant interface's private file browser.
- Through Losant's API.
- As a notebook execution output.
- Through the File: Create Node.
- As part of an application import.

Once added, private Application Files can only be accessed through a signed URL that is only valid for a time period defined by you. There are several ways to generate these URLs for end user consumption:
- Selecting a file from the list in the Losant interface's private file browser.
- Making API requests to the Private Files and Private File resources.
- Using the new File: Get Node in a workflow.
- Using the
fileHandlebars helper with theprivate=trueflag and an optionalttl(in seconds) in an experience view.
We're thrilled to bring this much-requested feature to our users as it improves both the security and usability of our IoT platform. The introduction of private files means it's no longer necessary to separately manage sensitive or end-user-specific resources in a third-party storage provider like Amazon S3.
Custom HTML Block Code Generation
Today's release also exposes a new code generation service for helping users write custom HTML, CSS, and JavaScript for use within Losant dashboards. Given a detailed prompt and a set of data queries, this service creates dynamic custom visualizations that can even make use of third-party APIs and graphing libraries.
Losant's Custom HTML Block has long been an escape hatch for developing custom visualizations within our drag-and-drop dashboard builder that are not otherwise supported by our native blocks. By allowing builders to define the application data they would like to expose and to bring in open-source libraries through CDNs, they can create virtually any kind of interactive graph. However, it requires advanced web development skills to bring such a block to life, and many of our application engineers have expertise in other areas of the IoT product stack.
The block's new code generation service takes away most of the work in developing these visualizations. While some prompt responses may require a bit of tweaking to get exactly what you're looking for, the results speak for themselves.

The block above was created using the following prompt:
`queries['time-series-0']` depicts hourly temperatures, in Fahrenheit, over the last 7 days. Please create a chart that depicts this data as a heatmap, the cells of which have a background color corresponding to a standard hot vs. cold color temperature scale. The actual temperature should be displayed in a tooltip on hover of each cell.
The service can even pull in third-party graphing libraries (though some, like Google Maps, may require the manual addition of API keys).

This block is a fully interactive, three-dimensional chart powered by Plotly, and it was created by configuring three time series query segments within a Custom HTML Block and by providing the following prompt:
Plot the relationship between x (time-series-0), y (time-series-1), and z (time-series-2) in a 3D, interactive chart.
When we added Function Node code generation a few months ago, and followed that up with our AI-powered documentation agent, we knew that these were just the first steps in bringing the power of artificial intelligence and generated content to our IoT application developers. There are several other opportunities within our platform for reducing workload and time to market for our users, and we will continue rolling these features out in the coming months.
Other Updates
As always, this release comes with other features and improvements, including:
- We've added a File: Get Node for retrieving a link to – or the contents of – one of your Application Files. The node can also return signed URLs for private files.
- The File: Create Node now supports creating a new Application File by providing a URL from which to download the contents. This brings the node in line with the other static resource upload nodes, such as the FTP: Put Node and the AWS S3: Put Node.
- Data Tables now include a list of workflows that reference the table in a Data Table Trigger, a Table: Insert Row Node, or other nodes.
- The Array Node now supports new Deduplicate By and Filter operations.
- The SQL Node now accepts an "Instance Name" property, which is sometimes required for connecting to MSSQL databases.
- The HTTP Node now allows for passing a request body when making
DELETErequests. While rarely implemented by API providers, the HTTP spec does allow for such requests.
What’s Next?
With every new release, we listen to your feedback. By combining your suggestions with our roadmap, we can continue to improve the platform while maintaining its ease of use. Let us know what you think in the Losant Forums.
