Soma Capital Portfolio Jobs

Founding Rust + Typescript Software Engineer

Windmill

Windmill

Software Engineering
Paris, France
Posted on Sunday, April 30, 2023
Windmill is the sweet-spot between Retool and Temporal, it is fully open-source and has a hub for sharing scripts, flows and UIs.

We are a small but mighty team and compete with well-funded proprietary alternatives such as Airplane, Pipedream, Superblocks or even Retool. As such, we need to make fast-paced, iterative and sustainable software design choices. Windmill is an enterprise platform that integrate all components to build all your internal tools such as a flow builder (with an open spec for flows) based on composing minimal and reusable scripts, and an highly available distributed systems with workers to run jobs and flows. It is built with Rust, Postgres, sandboxing (nsjail) and Svelte for the frontend. You will work independently but in a highly collaborative setting as an engineer to make Windmill a delightful, scalable and performant product.

The full architecture is available in our docs but the gist of it as follows: - PG database that store the resources, scripts, flows, users, etc - PG database also store the job queue, later we will provide adapters to kafka/redis/nats - We have an "api server" in Rust (sqlx + axum) - And workers that are HA/horizontally scalable that pick jobs from the queue, execute them (those tasks are Go/Python/Typescript being executed in an nsjail sandbox fork and then stream+store the result back on PG)

We have defined an open-source spec around flows called OpenFlow which is approximately a sequence of modules (where most modules are plain scripts inlined or from your hub/workspace or can contain flow themselves and do things such as for-loops). The state of the flow is stored in the database and modules are executed one-by-one by the first available worker. When a worker is done with a job, it updates the state of the flow and push the next job. As such, it is a distributed FSM.

Our full backend is in Rust but our CLI is in typescript (deno) and our frontend is in svelte + typescript.