Windmill emerged as the most balanced and versatile orchestrator. In normal mode, it excelled at long-running tasks with minimal overhead. In dedicated worker mode, it matched or surpassed the performance of Temporal and Hatchet for lightweight, parallel workloads. With smart caching, cold-start isolation, and adaptive behavior, it consistently delivered top-tier performance across runtimes and load types.
We executed the Windmill benchmarks in both "normal" and "dedicated worker" mode. To implement the flows in Windmill, we first created a script simply computing the Fibonacci numbers:
Python
JavaScript
Go
# WIMDMILL script: `u/benchmarkuser/fibo_script` deffibo(n:int): if n <=1: return n else: return fibo(n -1)+ fibo(n -2) defmain( n:int, ): return fibo(n)
// WIMDMILL script: `u/benchmarkuser/fibo_script_go` package inner funcfibo(n int)int{ if n <=1{ return n }else{ returnfibo(n-1)+fibo(n-2) } } funcmain(n int)(interface{},error){ returnfibo(n),nil }
And then we used this script in a simple flow composed of a For-Loop sequentially executing the scripts. The JSON representation of the flow is as follow:
summary: Fibonacci benchmark flow description: Flow running 10 (resp. 40) times Fibonacci of 33 (resp. 10) value: modules: -id: a value: type: forloopflow modules: -id: b value: path: u/admin/fibo_script # respectively u/admin/fibo_script_ts or u/admin/fibo_script_go type: script input_transforms: n: type: static value:33# respectively 10 iterator: expr: Array(10) # respectively 40 type: javascript parallel:false# respectively true for more than one worker skip_failures:true schema: '$schema': https://json-schema.org/draft/2020-12/schema properties:{} required:[] type: object
When using more than one worker, we're also using the parallel parameter so that each iteration of the for-loop is executed in parallel. Under the hood, Windmill will spawn a sub-flow with a single job for each iteration.
Fibonacci 40 iterations, n=10
This benchmark measures the performance of Windmill when handling a large number of lightweight tasks. The tasks are Fibonacci calculations with 40 iterations and a base value of 10.
Python
Visualization
Statistics
Windmill
Windmill Dedicated
Total duration (in seconds)
4.383
2.092
Assignment
1.836 (41.89%)
1.795 (85.80%)
Execution
2.215 (50.54%)
0.122 (5.83%)
Transition
0.332 (7.57%)
0.175 (8.37%)
Timing details
View task timing details
Task
Created at
Started at
Completed at
task_00
0.000
0.003
0.059
task_01
0.067
0.113
0.171
task_02
0.180
0.226
0.280
task_03
0.290
0.335
0.389
task_04
0.398
0.446
0.501
task_05
0.510
0.558
0.614
task_06
0.622
0.669
0.725
task_07
0.732
0.780
0.834
task_08
0.842
0.889
0.942
task_09
0.950
0.997
1.052
task_10
1.061
1.108
1.166
task_11
1.175
1.220
1.274
task_12
1.283
1.330
1.385
task_13
1.394
1.440
1.494
task_14
1.503
1.550
1.605
task_15
1.612
1.661
1.716
task_16
1.723
1.770
1.823
task_17
1.831
1.878
1.930
task_18
1.939
1.986
2.041
task_19
2.049
2.096
2.152
task_20
2.161
2.209
2.266
task_21
2.274
2.320
2.376
task_22
2.384
2.431
2.486
task_23
2.495
2.542
2.596
task_24
2.604
2.652
2.706
task_25
2.715
2.761
2.816
task_26
2.825
2.872
2.925
task_27
2.933
2.979
3.033
task_28
3.042
3.090
3.145
task_29
3.154
3.201
3.269
task_30
3.278
3.325
3.382
task_31
3.391
3.437
3.493
task_32
3.501
3.548
3.602
task_33
3.611
3.660
3.715
task_34
3.723
3.770
3.823
task_35
3.833
3.879
3.934
task_36
3.942
3.990
4.045
task_37
4.053
4.101
4.157
task_38
4.165
4.212
4.268
task_39
4.277
4.324
4.383
Windmill Dedicated Comparison
Task
Created at
Started at
Completed at
task_00
0.000
0.019
0.022
task_01
0.029
0.073
0.077
task_02
0.081
0.125
0.128
task_03
0.134
0.179
0.182
task_04
0.187
0.231
0.234
task_05
0.239
0.284
0.287
task_06
0.292
0.338
0.341
task_07
0.345
0.391
0.394
task_08
0.398
0.444
0.447
task_09
0.451
0.497
0.500
task_10
0.505
0.549
0.552
task_11
0.557
0.603
0.606
task_12
0.610
0.655
0.659
task_13
0.663
0.709
0.712
task_14
0.716
0.761
0.764
task_15
0.768
0.814
0.817
task_16
0.821
0.867
0.870
task_17
0.876
0.921
0.924
task_18
0.929
0.973
0.976
task_19
0.981
1.027
1.030
task_20
1.035
1.080
1.083
task_21
1.087
1.132
1.135
task_22
1.139
1.186
1.189
task_23
1.193
1.238
1.241
task_24
1.246
1.292
1.295
task_25
1.299
1.345
1.348
task_26
1.352
1.398
1.401
task_27
1.405
1.451
1.454
task_28
1.458
1.504
1.507
task_29
1.512
1.557
1.560
task_30
1.564
1.611
1.614
task_31
1.618
1.664
1.667
task_32
1.671
1.717
1.720
task_33
1.724
1.770
1.773
task_34
1.777
1.823
1.826
task_35
1.830
1.876
1.879
task_36
1.884
1.930
1.933
task_37
1.937
1.983
1.986
task_38
1.991
2.036
2.039
task_39
2.043
2.089
2.092
Javascript
Visualization
Statistics
Windmill
Windmill Dedicated
Total duration (in seconds)
2.973
2.125
Assignment
1.427 (48.00%)
1.786 (84.05%)
Execution
0.289 (9.72%)
0.126 (5.93%)
Transition
1.257 (42.28%)
0.213 (10.02%)
Timing details
View task timing details
Task
Created at
Started at
Completed at
task_00
0.000
0.006
0.014
task_01
0.051
0.074
0.081
task_02
0.105
0.155
0.163
task_03
0.184
0.222
0.229
task_04
0.239
0.286
0.294
task_05
0.330
0.364
0.372
task_06
0.411
0.447
0.455
task_07
0.493
0.528
0.536
task_08
0.573
0.610
0.617
task_09
0.655
0.689
0.693
task_10
0.705
0.751
0.759
task_11
0.797
0.832
0.840
task_12
0.876
0.911
0.918
task_13
0.957
0.989
0.993
task_14
1.004
1.051
1.058
task_15
1.098
1.133
1.141
task_16
1.167
1.214
1.222
task_17
1.247
1.283
1.291
task_18
1.313
1.351
1.358
task_19
1.394
1.416
1.424
task_20
1.469
1.480
1.487
task_21
1.513
1.560
1.568
task_22
1.580
1.625
1.632
task_23
1.669
1.704
1.712
task_24
1.751
1.787
1.791
task_25
1.801
1.848
1.855
task_26
1.894
1.929
1.936
task_27
1.976
2.012
2.019
task_28
2.057
2.092
2.099
task_29
2.138
2.174
2.182
task_30
2.222
2.256
2.263
task_31
2.304
2.336
2.344
task_32
2.386
2.420
2.428
task_33
2.467
2.503
2.511
task_34
2.548
2.583
2.591
task_35
2.629
2.666
2.673
task_36
2.712
2.746
2.754
task_37
2.796
2.825
2.832
task_38
2.869
2.903
2.908
task_39
2.920
2.966
2.973
Windmill Dedicated Comparison
Task
Created at
Started at
Completed at
task_00
0.022
0.053
0.057
task_01
0.061
0.105
0.109
task_02
0.113
0.158
0.161
task_03
0.166
0.212
0.215
task_04
0.221
0.266
0.270
task_05
0.275
0.318
0.321
task_06
0.326
0.372
0.375
task_07
0.380
0.424
0.427
task_08
0.433
0.477
0.480
task_09
0.485
0.531
0.534
task_10
0.538
0.584
0.588
task_11
0.592
0.637
0.640
task_12
0.645
0.690
0.693
task_13
0.698
0.743
0.746
task_14
0.751
0.796
0.799
task_15
0.804
0.849
0.852
task_16
0.857
0.902
0.905
task_17
0.910
0.956
0.959
task_18
0.964
1.009
1.012
task_19
1.016
1.061
1.064
task_20
1.069
1.113
1.116
task_21
1.122
1.166
1.169
task_22
1.174
1.220
1.223
task_23
1.228
1.273
1.276
task_24
1.281
1.325
1.328
task_25
1.332
1.378
1.381
task_26
1.385
1.430
1.433
task_27
1.439
1.484
1.487
task_28
1.492
1.537
1.540
task_29
1.544
1.589
1.593
task_30
1.597
1.643
1.646
task_31
1.650
1.695
1.698
task_32
1.704
1.747
1.750
task_33
1.756
1.800
1.804
task_34
1.809
1.853
1.856
task_35
1.861
1.906
1.909
task_36
1.914
1.960
1.963
task_37
1.967
2.014
2.017
task_38
2.023
2.068
2.071
task_39
2.076
2.122
2.125
Go
Visualization
Statistics
Windmill
Total duration (in seconds)
2.973
Assignment
1.427 (48.00%)
Execution
0.289 (9.72%)
Transition
1.257 (42.28%)
Timing details
View task timing details
Task
Created at
Started at
Completed at
task_00
0.000
0.006
0.014
task_01
0.051
0.074
0.081
task_02
0.105
0.155
0.163
task_03
0.184
0.222
0.229
task_04
0.239
0.286
0.294
task_05
0.330
0.364
0.372
task_06
0.411
0.447
0.455
task_07
0.493
0.528
0.536
task_08
0.573
0.610
0.617
task_09
0.655
0.689
0.693
task_10
0.705
0.751
0.759
task_11
0.797
0.832
0.840
task_12
0.876
0.911
0.918
task_13
0.957
0.989
0.993
task_14
1.004
1.051
1.058
task_15
1.098
1.133
1.141
task_16
1.167
1.214
1.222
task_17
1.247
1.283
1.291
task_18
1.313
1.351
1.358
task_19
1.394
1.416
1.424
task_20
1.469
1.480
1.487
task_21
1.513
1.560
1.568
task_22
1.580
1.625
1.632
task_23
1.669
1.704
1.712
task_24
1.751
1.787
1.791
task_25
1.801
1.848
1.855
task_26
1.894
1.929
1.936
task_27
1.976
2.012
2.019
task_28
2.057
2.092
2.099
task_29
2.138
2.174
2.182
task_30
2.222
2.256
2.263
task_31
2.304
2.336
2.344
task_32
2.386
2.420
2.428
task_33
2.467
2.503
2.511
task_34
2.548
2.583
2.591
task_35
2.629
2.666
2.673
task_36
2.712
2.746
2.754
task_37
2.796
2.825
2.832
task_38
2.869
2.903
2.908
task_39
2.920
2.966
2.973
Fibonacci 10 iterations, n=33
This benchmark measures the performance of Windmill when handling a small number of heavyweight tasks. The tasks are Fibonacci calculations with 10 iterations and a base value of 33.
Python
Visualization
Statistics
Windmill
Windmill Dedicated
Total duration (in seconds)
8.347
7.701
Assignment
0.428 (5.13%)
0.370 (4.80%)
Execution
7.832 (93.83%)
7.205 (93.56%)
Transition
0.087 (1.04%)
0.126 (1.64%)
Timing details
View task timing details
Task
Created at
Started at
Completed at
task_00
0.000
0.002
0.846
task_01
0.858
0.906
1.705
task_02
1.715
1.761
2.539
task_03
2.548
2.595
3.365
task_04
3.375
3.421
4.206
task_05
4.215
4.263
5.033
task_06
5.042
5.089
5.857
task_07
5.866
5.913
6.684
task_08
6.693
6.740
7.519
task_09
7.529
7.579
8.347
Windmill Dedicated Comparison
Task
Created at
Started at
Completed at
task_00
0.000
0.023
0.745
task_01
0.776
0.797
1.518
task_02
1.546
1.571
2.292
task_03
2.298
2.340
3.057
task_04
3.063
3.114
3.845
task_05
3.874
3.889
4.608
task_06
4.614
4.661
5.380
task_07
5.385
5.433
6.151
task_08
6.158
6.208
6.925
task_09
6.933
6.981
7.701
Javascript
Visualization
Statistics
Windmill
Windmill Dedicated
Total duration (in seconds)
0.935
1.077
Assignment
0.054 (5.78%)
0.239 (22.19%)
Execution
0.773 (82.67%)
0.765 (71.03%)
Transition
0.108 (11.55%)
0.073 (6.78%)
Timing details
View task timing details
Task
Created at
Started at
Completed at
task_00
0.023
0.026
0.106
task_01
0.115
0.118
0.202
task_02
0.211
0.218
0.298
task_03
0.308
0.315
0.393
task_04
0.403
0.411
0.487
task_05
0.496
0.503
0.578
task_06
0.589
0.596
0.671
task_07
0.680
0.682
0.760
task_08
0.769
0.771
0.845
task_09
0.854
0.862
0.935
Windmill Dedicated Comparison
Task
Created at
Started at
Completed at
task_00
0.022
0.056
0.134
task_01
0.140
0.163
0.241
task_02
0.246
0.268
0.346
task_03
0.352
0.373
0.449
task_04
0.456
0.478
0.554
task_05
0.560
0.582
0.659
task_06
0.664
0.688
0.764
task_07
0.769
0.793
0.869
task_08
0.874
0.897
0.972
task_09
0.978
1.002
1.077
Go
Visualization
Statistics
Windmill
Total duration (in seconds)
0.780
Assignment
0.423 (54.23%)
Execution
0.275 (35.26%)
Transition
0.082 (10.51%)
Timing details
View task timing details
Task
Created at
Started at
Completed at
task_00
0.000
0.003
0.031
task_01
0.040
0.086
0.113
task_02
0.122
0.170
0.197
task_03
0.206
0.252
0.279
task_04
0.288
0.334
0.362
task_05
0.372
0.418
0.446
task_06
0.455
0.502
0.529
task_07
0.538
0.585
0.612
task_08
0.621
0.668
0.696
task_09
0.705
0.752
0.780
Fibonacci 100 iterations, n=38
This benchmark measures the performance of Windmill when handling a large number of lightweight tasks. The tasks are Fibonacci calculations with 100 iterations and a base value of 38.
Go
Visualization
Statistics
Windmill
Total duration (in seconds)
27.648
Assignment
0.679 (2.46%)
Execution
25.938 (93.82%)
Transition
1.031 (3.73%)
Timing details
View task timing details
Task
Created at
Started at
Completed at
task_00
0.022
0.025
0.286
task_01
0.295
0.303
0.561
task_02
0.570
0.573
0.832
task_03
0.840
0.847
1.105
task_04
1.115
1.122
1.383
task_05
1.394
1.397
1.657
task_06
1.670
1.677
1.935
task_07
1.945
1.952
2.210
task_08
2.221
2.227
2.488
task_09
2.497
2.505
2.763
task_10
2.774
2.779
3.036
task_11
3.046
3.053
3.313
task_12
3.322
3.329
3.587
task_13
3.597
3.604
3.861
task_14
3.871
3.878
4.136
task_15
4.145
4.153
4.419
task_16
4.428
4.435
4.699
task_17
4.707
4.715
4.972
task_18
4.982
4.989
5.247
task_19
5.255
5.263
5.525
task_20
5.534
5.542
5.801
task_21
5.811
5.818
6.078
task_22
6.088
6.093
6.351
task_23
6.360
6.368
6.628
task_24
6.638
6.641
6.903
task_25
6.913
6.920
7.177
task_26
7.187
7.194
7.452
task_27
7.462
7.464
7.723
task_28
7.733
7.740
8.001
task_29
8.011
8.017
8.276
task_30
8.285
8.293
8.554
task_31
8.563
8.566
8.824
task_32
8.835
8.842
9.102
task_33
9.111
9.119
9.379
task_34
9.389
9.395
9.654
task_35
9.665
9.673
9.931
task_36
9.940
9.948
10.206
task_37
10.215
10.223
10.481
task_38
10.490
10.498
10.758
task_39
10.767
10.773
11.031
task_40
11.041
11.049
11.307
task_41
11.317
11.323
11.583
task_42
11.594
11.601
11.863
task_43
11.872
11.881
12.140
task_44
12.155
12.160
12.418
task_45
12.428
12.434
12.698
task_46
12.710
12.718
12.977
task_47
12.987
12.995
13.253
task_48
13.262
13.269
13.527
task_49
13.538
13.545
13.805
task_50
13.815
13.823
14.081
task_51
14.090
14.097
14.364
task_52
14.375
14.380
14.643
task_53
14.653
14.661
14.921
task_54
14.930
14.938
15.199
task_55
15.209
15.215
15.474
task_56
15.485
15.494
15.753
task_57
15.764
15.770
16.030
task_58
16.040
16.047
16.306
task_59
16.316
16.322
16.580
task_60
16.590
16.599
16.859
task_61
16.868
16.871
17.130
task_62
17.140
17.147
17.405
task_63
17.415
17.421
17.680
task_64
17.691
17.699
17.960
task_65
17.970
17.977
18.234
task_66
18.245
18.249
18.508
task_67
18.518
18.526
18.784
task_68
18.793
18.802
19.061
task_69
19.070
19.078
19.336
task_70
19.347
19.354
19.611
task_71
19.621
19.628
19.886
task_72
19.897
19.904
20.164
task_73
20.198
20.202
20.461
task_74
20.471
20.478
20.736
task_75
20.744
20.751
21.011
task_76
21.021
21.028
21.286
task_77
21.297
21.302
21.562
task_78
21.572
21.579
21.838
task_79
21.849
21.856
22.117
task_80
22.127
22.134
22.397
task_81
22.407
22.415
22.674
task_82
22.684
22.692
22.951
task_83
22.961
22.969
23.229
task_84
23.239
23.245
23.503
task_85
23.514
23.521
23.780
task_86
23.790
23.796
24.055
task_87
24.065
24.072
24.334
task_88
24.344
24.348
24.612
task_89
24.622
24.630
24.888
task_90
24.898
24.906
25.164
task_91
25.174
25.180
25.440
task_92
25.450
25.456
25.714
task_93
25.725
25.732
25.992
task_94
26.000
26.009
26.269
task_95
26.278
26.286
26.543
task_96
26.553
26.561
26.818
task_97
26.827
26.835
27.094
task_98
27.104
27.112
27.372
task_99
27.383
27.390
27.648
10 Workers
Visualization
Statistics
Windmill
Total Duration: 11.899 seconds
First Task Scheduled: 0.024 seconds
First Task Started: 0.377 seconds
Worker
Tasks
Active Time
Active %
Idle Time
Idle %
Avg Task Time
Worker 0
10
11.000s
92.44%
0.899s
7.56%
1.100s
Worker 1
10
11.249s
94.54%
0.650s
5.46%
1.125s
Worker 2
9
10.938s
91.92%
0.961s
8.08%
1.215s
Worker 3
10
10.858s
91.25%
1.041s
8.75%
1.086s
Worker 4
10
11.104s
93.32%
0.795s
6.68%
1.110s
Worker 5
10
11.214s
94.24%
0.685s
5.76%
1.121s
Worker 6
11
11.087s
93.18%
0.812s
6.82%
1.008s
Worker 7
10
10.807s
90.82%
1.092s
9.18%
1.081s
Worker 8
10
10.845s
91.14%
1.054s
8.86%
1.084s
Worker 9
10
10.597s
89.06%
1.302s
10.94%
1.060s
Timing details
View task timing details
Task
Created at
Started at
Completed at
Worker ID
task_00
0.024
2.476
3.619
8
task_01
0.024
2.824
3.934
0
task_02
0.024
3.901
5.000
1
task_03
0.024
5.864
7.042
8
task_04
0.024
7.411
8.648
5
task_05
0.024
8.162
9.277
2
task_06
0.024
8.513
9.485
0
task_07
0.024
9.485
10.517
8
task_08
0.024
10.899
11.791
6
task_09
0.024
0.380
1.685
4
task_10
0.024
0.418
1.569
2
task_11
0.024
1.536
2.809
0
task_12
0.024
2.731
3.871
1
task_13
0.024
3.621
4.747
7
task_14
0.024
4.824
5.814
3
task_15
0.024
5.832
7.070
3
task_16
0.024
6.717
7.869
9
task_17
0.024
7.950
9.178
9
task_18
0.024
8.573
9.729
6
task_19
0.024
9.743
10.854
6
task_20
0.024
10.544
11.496
8
task_21
0.024
1.496
2.651
5
task_22
0.024
2.652
3.843
3
task_23
0.024
3.885
4.883
4
task_24
0.024
0.383
1.482
5
task_25
0.024
1.432
2.519
7
task_26
0.024
2.226
3.196
6
task_27
0.024
2.880
4.167
2
task_28
0.024
4.202
5.541
2
task_29
0.024
5.017
6.311
1
task_30
0.024
6.101
7.359
5
task_31
0.024
7.067
8.258
8
task_32
0.024
8.234
9.315
3
task_33
0.024
9.511
10.744
0
task_34
0.024
10.434
11.681
2
task_35
0.024
1.523
2.611
3
task_36
0.024
6.606
7.504
6
task_37
0.024
0.380
1.524
0
task_38
0.024
1.341
2.195
9
task_39
0.024
1.700
2.817
4
task_40
0.024
2.834
3.840
4
task_41
0.024
3.859
4.811
3
task_42
0.024
4.555
5.525
9
task_43
0.024
7.031
8.210
7
task_44
0.024
7.596
8.557
6
task_45
0.024
8.277
9.320
7
task_46
0.024
8.336
9.454
8
task_47
0.024
9.347
10.371
7
task_48
0.024
9.366
10.540
3
task_49
0.024
10.602
11.551
3
task_50
0.024
10.811
11.656
0
task_51
0.024
0.394
1.417
7
task_52
0.024
0.396
1.410
8
task_53
0.024
0.412
1.510
3
task_54
0.024
1.380
2.216
6
task_55
0.024
0.377
1.329
9
task_56
0.024
0.380
1.513
1
task_57
0.024
0.392
1.360
6
task_58
0.024
1.427
2.457
8
task_59
0.024
1.521
2.711
1
task_60
0.024
1.592
2.863
2
task_61
0.024
2.674
3.812
5
task_62
0.024
3.837
4.885
5
task_63
0.024
3.949
5.116
0
task_64
0.024
4.775
5.944
7
task_65
0.024
5.142
6.146
0
task_66
0.024
5.541
6.707
9
task_67
0.024
6.159
7.268
0
task_68
0.024
7.329
8.472
0
task_69
0.024
8.693
9.929
1
task_70
0.024
9.784
11.021
4
task_71
0.024
11.162
11.872
1
task_72
0.024
2.208
3.308
9
task_73
0.024
3.332
4.534
9
task_74
0.024
4.687
5.839
8
task_75
0.024
5.555
6.797
2
task_76
0.024
6.140
7.325
4
task_77
0.024
6.889
8.103
2
task_78
0.024
7.375
8.604
4
task_79
0.024
9.205
10.034
9
task_80
0.024
9.982
11.144
1
task_81
0.024
11.072
11.811
4
task_82
0.024
2.530
3.614
7
task_83
0.024
3.212
4.335
6
task_84
0.024
3.629
4.664
8
task_85
0.024
4.378
5.462
6
task_86
0.024
5.483
6.571
6
task_87
0.024
5.962
6.998
7
task_88
0.024
7.093
8.190
3
task_89
0.024
8.713
9.998
5
task_90
0.024
9.304
10.376
2
task_91
0.024
10.049
11.177
5
task_92
0.024
11.192
11.899
5
task_93
0.024
4.895
6.054
5
task_94
0.024
4.899
6.117
4
task_95
0.024
6.333
7.442
1
task_96
0.024
7.483
8.659
1
task_97
0.024
8.702
9.772
4
task_98
0.024
10.065
11.209
9
task_99
0.024
10.400
11.436
7
Fibonacci 400 iterations, n=10
This benchmark measures the performance of Windmill when handling a large number of lightweight tasks. The tasks are Fibonacci calculations with 400 iterations and a base value of 10.