Skip to content

Commit c31c11e

Browse files
committed
readme: nits and toc
1 parent cdf042b commit c31c11e

13 files changed

+37
-40
lines changed

README.md

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ Windmill Labs offers commercial licenses, an enterprise edition, local hub mirro
4747
<b>Disclaimer: </b>Windmill is in <b>BETA</b>. It is secure to run in production but we are still <a href="https://github.com/orgs/windmill-labs/projects/2">improving the product fast<a/>.
4848
</p>
4949

50+
![Windmill Screenshot](./imgs/windmill-flow.png)
5051
![Windmill Screenshot](./imgs/windmill.png)
5152

5253
Windmill is <b>fully open-sourced (AGPLv3)</b>:
@@ -80,31 +81,21 @@ Windmill is <b>fully open-sourced (AGPLv3)</b>:
8081
1. Define a minimal and generic script in Python, Typescript, Go or Bash that solves a
8182
specific task. Here sending an email with SMTP. The code can be defined in
8283
the provided Web IDE or synchronized with your own github repo:
83-
![Step 1](./imgs/python-script.png)
84+
![Step 1](./imgs/windmill-editor.png)
8485

85-
2. Your scripts parameters are automatically parsed and generate a frontend. You
86-
can narrow down the types during task definition to specify regex for string,
87-
an enum or a specific format for objects. Each script correspond to an app by
88-
itself: ![Step 2](./imgs/arguments.png)
86+
2. Your scripts parameters are automatically parsed and generate a frontend.
87+
![Step 2](./imgs/windmill-run.png)
88+
![Step 3](./imgs/windmill-result.png)
8989

9090
3. Make it flow! You can chain your scripts or scripts made by the community
91-
shared on [WindmillHub](https://hub.windmill.dev). There is tight integration
92-
between Windmill and the hub to make it easy to build flows from a soon-to-be
93-
exhaustive library of generic modules. In flows, one can pipe output to input
94-
using rich expressions that are just plain Javascript underneath. Flows
95-
support for-loops, branching, approval steps. As such and coupled with
96-
inputs being able to refer to any step's output, they are actual DAG rather
97-
than just linear sequences. They are backed by an open JSON spec we call
98-
[OpenFlow](https://docs.windmill.dev/docs/openflow)
99-
100-
Both scripts and flows are not restricted to be triggered by the UI. They can be
101-
triggered by a schedule, watch for changes (using
102-
[internal states](https://docs.windmill.dev/docs/reference#internal-state)) or
103-
triggered through API with either an async or sync webhook. The latter kind of
104-
endpoints make Windmill akin to a self-hostable AWS Lambda. Windmill can be the
105-
central place to host, build and run all of your integrations, automation and
106-
internal apps. We include credentials management and OAuth integration, groups
107-
and much more!
91+
shared on [WindmillHub](https://hub.windmill.dev).
92+
![Step 4](./imgs/windmill-flow.png)
93+
94+
4. (Coming soon) Build complex UI on top of your scripts and flows.
95+
96+
Scripts and flows can also be triggered by a cron schedule '*/5 * * * *' or through webhooks.
97+
98+
You can build your entire infra on top of Windmill!
10899

109100
## CLI
110101

backend/windmill-api/src/apps.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ async fn list_apps(
127127
let sqlb = SqlBuilder::select_from("app")
128128
.fields(&[
129129
"id",
130-
"workspace_id",
131-
"path",
130+
"app.workspace_id",
131+
"app.path",
132132
"summary",
133133
"versions[array_upper(versions, 1)] as version",
134134
"policy->>'execution_mode' as execution_mode",
@@ -138,7 +138,7 @@ async fn list_apps(
138138
.left()
139139
.join("favorite")
140140
.on(
141-
"favorite.favorite_kind = 'app' AND favorite.workspace_id = o.workspace_id AND favorite.path = o.path AND favorite.usr = ?"
141+
"favorite.favorite_kind = 'app' AND favorite.workspace_id = app.workspace_id AND favorite.path = app.path AND favorite.usr = ?"
142142
.bind(&authed.username),
143143
)
144144
.order_desc("favorite.path IS NOT NULL")

frontend/src/lib/components/flows/map/FlowBranchAllMap.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
: ''
6565
)}
6666
>
67-
<Icon data={faCodeBranch} class="mr-2" />
67+
<Icon data={faCodeBranch} scale={1.1} class="mr-2" />
6868
<span
6969
class="text-xs flex flex-row justify-between w-full flex-wrap gap-2 items-center truncate"
7070
>

frontend/src/lib/components/flows/map/FlowBranchOneMap.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
: ''
6262
)}
6363
>
64-
<Icon data={faCodeBranch} class="mr-2" />
64+
<Icon data={faCodeBranch} scale={1.1} class="mr-2" />
6565
<span
6666
class="truncate text-xs flex flex-row justify-between w-full flex-wrap gap-2 items-center"
6767
>
@@ -87,7 +87,7 @@
8787
: ''
8888
)}
8989
>
90-
<Icon data={faCodeBranch} class="mr-2" />
90+
<Icon data={faCodeBranch} scale={1.1} class="mr-2" />
9191
<span
9292
class="text-xs flex flex-row justify-between w-full flex-wrap gap-2 items-center truncate"
9393
>

frontend/src/lib/components/flows/map/MapItem.svelte

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import FlowBranchOneMap from './FlowBranchOneMap.svelte'
99
import FlowBranchAllMap from './FlowBranchAllMap.svelte'
1010
import {
11+
faArrowRotateForward,
1112
faBuilding,
1213
faCode,
1314
faCodeBranch,
@@ -16,6 +17,7 @@
1617
} from '@fortawesome/free-solid-svg-icons'
1718
import Icon from 'svelte-awesome'
1819
import IconedResourceType from '$lib/components/IconedResourceType.svelte'
20+
import LanguageIcon from '$lib/components/common/languageIcons/LanguageIcon.svelte'
1921
2022
export let mod: FlowModule
2123
@@ -51,7 +53,7 @@
5153
{...itemProps}
5254
>
5355
<div slot="icon">
54-
<Icon data={faRepeat} scale={0.8} />
56+
<Icon data={faArrowRotateForward} scale={1.1} />
5557
</div>
5658
</FlowModuleSchemaItem>
5759
<div class="flex flex-row w-full">
@@ -74,7 +76,7 @@
7476
label={mod.summary || 'Run one branch'}
7577
>
7678
<div slot="icon">
77-
<Icon data={faCodeBranch} scale={0.8} />
79+
<Icon data={faCodeBranch} scale={1} />
7880
</div>
7981
</FlowModuleSchemaItem>
8082
<FlowBranchOneMap bind:module={mod} />
@@ -90,7 +92,7 @@
9092
label={mod.summary || 'Run all branches'}
9193
>
9294
<div slot="icon">
93-
<Icon data={faCodeBranch} scale={0.8} />
95+
<Icon data={faCodeBranch} scale={1} />
9496
</div>
9597
</FlowModuleSchemaItem>
9698
<FlowBranchAllMap bind:module={mod} />
@@ -109,14 +111,16 @@
109111
>
110112
<div slot="icon">
111113
{#if mod.value.type === 'rawscript'}
112-
<Icon data={faCode} scale={0.8} />
114+
<LanguageIcon lang={mod.value.language} width={16} height={16} />
113115
{:else if mod.value.type === 'identity'}
114-
<Icon data={faLongArrowDown} scale={0.8} />
116+
<Icon data={faLongArrowDown} scale={1.1} />
115117
{:else if mod.value.type === 'script'}
116118
{#if mod.value.path.startsWith('hub/')}
117-
<IconedResourceType name={mod.value.path.split('/')[2]} silent={true} />
119+
<div class="w-5">
120+
<IconedResourceType name={mod.value.path.split('/')[2]} silent={true} />
121+
</div>
118122
{:else}
119-
<Icon data={faBuilding} scale={0.8} />
123+
<Icon data={faBuilding} scale={1.1} />
120124
{/if}
121125
{/if}
122126
</div>

frontend/src/lib/components/sidebar/MenuLink.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
{#if !isCollapsed}
4747
<span
4848
class={classNames(
49-
'whitespace-pre text-white',
49+
'whitespace-pre text-white truncate',
5050
isSelected ? ' text-gray-700 font-bold' : 'text-white group-hover:text-gray-900'
5151
)}
5252
>

frontend/src/lib/components/sidebar/SidebarContent.svelte

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,12 @@
5959
<MenuLink class="text-lg" {...menuLink} {isCollapsed} />
6060
{/each}
6161
<div class="h-2" />
62-
<div class="max-h-40 overflow-y-auto flex flex-col space-y-1.5 max-w-xs">
63-
{#each favoriteLinks as menuLink (menuLink.href)}
64-
<MenuLink class="text-xs max-w-xs truncate" {...menuLink} {isCollapsed} icon={faStar} />
65-
{/each}
62+
<div class="max-h-40 overflow-y-auto max-w-xs truncate">
63+
<div class="flex flex-col max-h-min">
64+
{#each favoriteLinks as menuLink (menuLink.href)}
65+
<MenuLink class="text-xs max-w-xs truncate" {...menuLink} {isCollapsed} icon={faStar} />
66+
{/each}
67+
</div>
6668
</div>
6769
<div class="h-2" />
6870
</div>

imgs/python-script.png

79 KB
Loading

imgs/windmill-editor.png

364 KB
Loading

imgs/windmill-flow.png

318 KB
Loading

imgs/windmill-result.png

233 KB
Loading

imgs/windmill-run.png

213 KB
Loading

imgs/windmill.png

37.6 KB
Loading

0 commit comments

Comments
 (0)