Changelog
See what's new with Windmill.
April 2024
March 2024 - v1.298.0
February 2024 - v1.280.0
January 2024 - v1.252.0
December 2023 - v1.227.0
4/24/2024 |
DocsThe AgGrid Infinite Table component allows you to display an Ag Grid table with infinite scrolling.
New Features
- Specific syntax to let component manage rows display.
- Search function.
4/24/2024 |
DocsLabels allow to add static or dynamic tags to jobs with property "wm_labels" followed by an array of strings.
New Features
- Runs are tagged with labels.
- Labels can be filtered from Runs menu.
- Jobs support multiple labels.
- In Runs menu, click on a Label to filter by it.
4/12/2024 |
DocsAgGrid and Database Studio rows now support actions, components that will be displayed at each row of the table.
New Features
- Support the following components:
- Button
- Toggle
- Select
4/2/2024 |
DocsWhen enabled, the flow will continue to the next step after going through all the retries (if any) even if this step fails.
New Features
- The flow will continue to the next step after going through all the retries (if any) even if this step fails.
- This enables to process the error in a branch one for instance.
- By default, each step is set to "Stop on error and propagate error up".
4/2/2024 |
DocsWhile loops execute a sequence of code indefinitely until the user cancels or a step set to Early Stop stops.
New Features
- The loop will continue to run until canceled, either manually or with an Early Stop for step or loop.
- Skip failure mode.
- Test and iteration.
3/27/2024 |
DocsImproved the experience with approval steps.
New Features
- You can now remove the deny button from approval page to force more complex patterns using forms with enums processed in ulterior steps.
- Now approval steps resume forms at any level will be displayed at the top-level, regardless of their depths.
- We have updated the default template and there is a new field description to add very clear instructions which support the whole range of of rich display rendering.
3/27/2024 |
DocsMap support in Rich Display Rendering.
New Features
- Display a map from lat and long.
- Marker with specific location and colors.
- Example: `return { "map": { lat: 40, lon: 0, zoom: 3, markers: [{lat: 50.6, lon: 3.1, title: "Home", radius: 5, color: "yellow", strokeWidth: 3, strokeColor: "Black"}]}`
3/27/2024 |
DocsWe now support GH flavored markdown for description of scripts, flows, resources.
New Features
- Markdown support for scripts descriptions.
- Markdown support for flows descriptions.
- Markdown support for resources descriptions.
3/26/2024 |
DocsYou can set and retrieve a value given a key from any step of flow and it will be available from within the flow globally.
New Features
- Set custom flow states from any step.
- Retrieve custom flow states from any step.
- Supported in TypeScript and Python.
3/23/2024 |
DocsFrom Variables tab, admins can create custom contextual variables that will act as env variables for all jobs within a workspace.
New Features
- Create custom contextual variables that will act as env variables for all jobs within a workspace.
- For admins only.
- We still recommend using user-defined variables but in some cases (e.g. your imports depend on env variables), this might be a good escape hatch.
3/23/2024 |
DocsOne of our large scale customers noticed that their database disk usage was much much higher than they anticipated. After investigation, we realized that our use of the database for streaming was very suboptimal in a few ways due to the nature of update in postgres. When you update a row in Postgres, it will actually keep the prior row as a dead tuple until it is collected. It doesn't matter in much case but it will if you're appending a few log lines to a 25MB log row, every 500ms.
We have completely refactored the way we deal with logs in major ways and starting on 1.295.0 you should feel comfortable having extremely large logs on Windmill
First action we took was to extract the logs from the queue table to a separate table. That was to avoid update unrelated to logs creating dead tuples. Second action was to make the streaming rate from the worker adaptive to the the duration of the job, a longer job does not need to update its log every 500ms, every 2.5s is reasonable for jobs of more than 10s, 5s for 60s+, etc...
But that was still not enough, even every 2.5s an update on a 25mb log would create lots of heavy dead tuples. And 25MB is not that large, our customer should feel confident streaming GBs of logs per job with jobs that run for months.
So we completely revisited the way we store logs to only treat the database as a buffer for streaming purpose rather than long term storage. We keep the db as a 5000 char buffer to still provide the same instant preview as before but
1. On EE, the logs will be streamed to S3 if you connected your instance to S3, everything is seamless and you can still download the entire log, Windmill will take care of streaming from S3
2. non EE, the excess log (>10000 chars) will be stored on disk of the worker (mount /tmp/windmill/logs to persist those).
Now the db only stores at most 5Kb of logs per job rows, reducing the pressure on it by order of magnitudes, while users can now run jobs with unlimited logs with minimal impact on the worker or db. And the logs are still as live as before
New Features
- Logs moved to a separate table to reduce database clutter.
- Adaptive log update frequency based on job duration to lessen database load.
- Database used as a buffer for instant log previews, storing up to 5000 characters.
- S3 streaming for EE users and local storage for non-EE users for extensive logs.
- Significantly reduced database pressure, supporting unlimited log sizes with minimal impact.
3/22/2024 |
DocsOn self-hosted instances, workspaces can have names and IDs updated from the workspace settings.
New Features
- Change name and/or ID of each workspace.
- For admins only.
3/13/2024 |
DocsWindmill supports many languages, but organizations usually only use a few, now you can configure the languages that are visible and their order.
New Features
- Applies to scripts, flows and apps.
- Global to all users within a workspace.
- Only configurable by admins.
3/4/2024 |
DocsFlows are not the only way to write distributed programs that execute distinct jobs. Another approach is to write a program that defines the jobs and their dependencies, and then execute that program. This is known as workflows as code.
New Features
- Define workflows as code in a single script intuitive and lightweight syntax.
- Support for Python.
- Support for TypeScript.
2/27/2024 |
DocsPin database resource path directly within a SQL script instead of filling it through the UI.
New Features
- Use "-- database resource_path" in your script.
- Works with PostgreSQL, MySQL, BigQuery, Snowflake, MS SQL, GraphQL.
2/15/2024 |
DocsAll secrets of a workspace are encrypted with a symmetric key unique to that workspace. This key is generated when the workspace is created and is stored in the database in the workspace_settings. You can now manually update the encryption key of a workspace, it will be re-encrypted with the new key and the previous key will be replaced by the new one.
New Features
- Manually update the encryption key of a workspace.
2/15/2024 |
DocsThe Flow & Metadata Copilot is an assistant powered by an OpenAI resource that simplifies your script & flows building experience by population fields (summaries, descriptions, step input expressions) automatically based on context and prompts.
New Features
- Fills summary of script & flow steps.
- Links flow step inputs to previous steps results.
- Fills flow loops iterator expressions from context.
- Completes branches predicate expressions from prompts.
- Defines CRON schedules from prompts.
1/24/2024 |
DocsIf configured, users who are operators in this workspace will be redirected to this app automatically when logging into this workspace.
New Features
- Set an app to pop up when an operator logs into the workspace.
- Make sure the default app is shared with all the operators of this workspace before turning this feature on.
1/23/2024 |
DocsIntroducing the Database Studio, a web-based database management tool that leverages Ag Grid for table display and interaction. In apps, interaction with database content made easy; from a SQL resource, display, edit, add rows, delete rows ... and connect to other components.
New Features
- Display the content of a table.
- Edit the content of a table by directly editing the cells (only when the cell is editable).
- Add a new row.
- Delete a row.
- Support of Postgresql, MySql, MS Sql, BigQuery, Snowflake.
1/23/2024 |
DocsAdded rich results render for arrays of objects and markdown in scripts and flows.
New Features
- Support for arrays of objects.
- Download as CSV and JSON.
- Pagination.
- Hide/show columns.
- Search and filter.
- Support for markdown.
1/15/2024 |
DocsWindmill provides a true NodeJS compatibility mode using Bun. This means that you can run your existing NodeJS code without any modifications. Only comment //nodejs
on the first line of your Bun script.
New Features
- Node.js support without any code modification.
1/11/2024 |
DocsThe Ag Charts component integrates the Ag Charts library, enabling the visualization of data through various chart types. This component is designed to offer a flexible and powerful way to display data graphically within the application.
New Features
- Chart Display: Leverages the Ag Charts library to present data in a visually appealing chart format.
- Diverse Chart Types: Supports multiple chart types including Bar, Line, Scatter, and both Area & Range Bar that are exclusive to Enterprise Edition (because Ag Charts key needed).
12/17/2023 |
DocsThis app component allows you to create a decision tree controlled by a flow-like structure. Each node in the tree represents a decision point with a dedicated subgrid and can lead to one or more subsequent nodes based on specified conditions.
New Features
- Each node has its dedicated container
- Condition behavior with branches
- Debug mode
- setTab to override flow-like structure