Open-source developer platform to turn scripts into endpoints, workflows and UIs

Join Server

Community questions


There was a significant performance

There was a significant performance improvement for windmill_app for large results. We now avoid unecessary de/serialization which is both much faster and have a lighter memory footprint.


Build your own meta components aka container groups

Here is one of the alpha of one of those features announced today, you can now transform containers into groups so that you can make them generic by having the inner components of it connect to the group fields. The next iteration will allow to save those groups in the workspace. Inside those "container groups", you can refer to "group.x" to refer to one of those group field which make this independent of the id of the container itself

Eval V2 are here!

Eval V2 are here!
Apps go from already really fast to super blazing fast.. We now parse your eval and frontend scripts using the swc parser compiled to wasm to extract any references to outputs. It allows windmill to suggest dependencies for frontend scripts as shown in the video. More importantly, now evals are only evaluated on changes to the outputs that have been identified. It means that most likely a properly made windmill app could be as fast or faster than full code apps. Prior evals wer...

We ve enhanced the Runs page with an

We've enhanced the Runs page with an improved UI for filters and a more compact view.

We improved the Audit Logs page design

We improved the Audit Logs page design and we added more filters!

Table rows now have properties similar

Table rows now have properties similar to List but instead of using iter.index, iter.value, one uses row.index, and row.value. It allows to do things like the example above. There is also a new 'inputs' output that contains the inputs of every rows.

here Introducing Concurrency Limits

@here Introducing Concurrency Limits. Define them for scripts and flow's inline scripts and ensure that you never hit the API Limit of the targeted api. They work globally and across flow runs. You can define a time window so that it's not just instantaneous concurrency limits. No more hacking around with worker groups, do it in a few clicks!
Implementation by @buldau

Resource Types

import type Resource from https://...
export async function main(db: Resource<'postgresql'>)

type Postgresql = {
  host: string,
  port: number,
  user: string,
  dbname: string,
  sslmode: string,
  password: string



type Postgresql = object

export async function main(db: Postgresql) 

windmill - Visual Studio Marketplace

@here sorry for the spam but we now have a working vscode extension, it's a web extension so it works with github codespaces as well! It works without wmill dev
Just configure your remote, workspace, token in the extension settings, press shift+enter (or cmd+enter but it overlap with github copilot) and enjoy the instant preview and args parsing. It detects code and file change without need for saving


Just a note that Codeium is the first extension that enable that but if there is enough demand for it, we will:
- Bake it in the frontend instead of it being an extension
- allow to select your completion provider among all the major ones

Worker groups

Introducing worker groups:
You can now assign workers and scripts to different worker groups so that some workers can be specialized to process all deno jobs (which are more lightweight and can be run on super light workers or worker with high NUM_WORKERS ) and also create your own worker groups, for instance to run some heavy ML jobs on instances with GPUs. It increases enormously the way you can use windmill as your sole infra layer.

We merged our redis queue work we still

We merged our redis queue work, we still need to do more testing to switch production to it. It won't matter to you unless you want to run 500+jobs/secs. It's an optional replacement for our postgres queue.

types with local import

I read the deno lsp codebase, I'm gonna give it a try and might have something ready in a few hours.

We now have onSuccess actions for forms

We now have onSuccess actions for forms and buttons. The actions available are setting a tab, going to a url, sending a toast. It's a small change in appearance but it's a big change under the hood as we now support "oneOf" kind of configurations. Some typescript fun implementation details in thread

Keyboard shortcut

Implemented copy/cut and paste for components in the App editor with Ctrl+C/X + Ctrl+V, added more hints for the keybindings:

frustrated with the lack of memory

- frustrated with the lack of memory visibility, implemented live mem peak usage, and also visible for a completed job
(See the new Mem Peak on both screenshots)