1,724 karma · joined August 24, 2016
Non updated personal page: https://rubenfiszel.github.io
Building my own thing at https://windmill.dev email: ruben@rubenfiszel.com / ruben@windmill.dev
Pipedream (which is probably Automatisch main competitor) also has a repo full of integrations: https://github.com/PipedreamHQ/pipedream. Their format is a bit more specific than Windmill.
Hopefully, we all agree on a format and differentiate ourselves on the quality of the orchestration, flow capabilities, performance etc ...
We use it extensively for Windmill (e.g: [2]) and couldn't be happier.
[1]: https://github.com/launchbadge/sqlx [2]: https://github.com/windmill-labs/windmill/blob/d60a770eb710e...
I'm the founder of the OSS project windmill [1] that, among others, separates the code logic from the management of secrets. We are in the same boat of being a small team doing too many features and hence have covered very lightly the secret management. I would love to see if we could write some integrations between our projects so that scripts and workflows could leverage advanced secret management.
We hesitated a lot before mentioning ETL in the OSS project windmill [1] but since we support any python including polars, passing data between steps through shared folders and since polars is blazingly fast, it is a suprisingly good system for ETL waiting for the need of using spark/materialize directly.
I legit think with your new workflows you are gonna kill the non open-source competition (Airplane, Superblocks) and now the question remains if being an open-source alternative is strong enough of a differentiation for the rest of us. Our case is slightly different as we bet on our open runtime and advanced workflows to serve different enterprise needs but needless to say, I wish you guys were not so good.
So it's close but not exactly the same.
For deno, as the article points out, it's easy, deno has this feature baked in and we just have to deno run the scripts, similar for go where the imports are pretty much a fully qualified pointer to their source and version.
For python, we have to do a bit of machinery: we parse the AST, look at the imports, use the heuristics that most import names correspond to their pypi package (we maintain also a list of exception-mappings), pip-compile [2] all the imports, and then get a requirement file that we attach to the script, pip-install it before running the script (then we do a LOT of magic to cache the dependencies so one doesn't actually have to install them 99.9% of the time).
Note: if you're interested in a collection of single-file scripts to many APIs, that you can just copy-paste and call the main function of, that's what windmill's hub is for [3]
[1]: https://github.com/windmill-labs/windmill [2]: https://github.com/jazzband/pip-tools [3]: https://hub.windmill.dev/
Because data pipeline is not the primary concerns of Windmill, we took the stance that Inputs and Output of steps were simply JSON in, JSON out. For all the languages, we simply extract the JSON object into the different parameters of the main, and then we wrap the return into the respective language native serializer for the output (e.g JSON.stringify in Typescript). Then each step can use a javascript expression executed by v8 to do some lightweight transformation between the output of any step to the input of that step.
A lot of the simplification we made is actually parsing the main function parameters into the corresponding jsonschema, supporting deeply nested objects when relevant.
That works great for automation that do not have big input/outputs, but not for data. So what we do for data is to use a folder that we symlink to be shared by all steps if a specific flag for that flow is set. It also force us to have the same worker process all the steps inside that flow when otherwise flow steps could have been processed by any workers. It is very fast since it's all local filesystem but not super scalable.
I am not pleased with that solution and believe that if we were to expand on the data problem, we would certainly rely on fast network and HDFS/Amazon EFS/etc to simply share that mounted folder across the network.
Anyway, sorry for the rambling but I do feel like we're all taking different approach to the same underlying problem of building the best abstraction for flows and believe we might learn from each other's choices.
ps: congrats Patterns on the launch, the tool look absolutely amazing.
nb: author of https://github.com/windmill-labs/windmill
Signup on https://app.windmill.dev -> New Script -> Next, that's it you can now play with deno and get a feel of the language and auto npm imports.
Foundry relies on Spark to do the actual ETL so they can focus on doing the products on top, the most interesting one is the integration with data lineage imho. But in practice, many business did not actually need big data since most of their ETL could run on top of a few non sharded sql queries on postgres. On the other hand, if you care about ETL there are a few amazing competing tools, dbt, airbyte, snowflake, the databricks platform and so on. And last, not being open-source is in my opinion a big risk for a large enterprises to bet and implement all their internal processes and golden tables on (or "ontologies" as palantir love saying). Even though Palantir would love to be product-led growth, their moat is strongly in their forward deployed engineer, half-consultant, half-software engineers that can push Foundry in big old-school companies and governments.
There is space for a new wave of less bloated, open-source tools and I for one am pretty excited about the new players in the field.
I do not think the comparison stands between Retool, or this tool and Foundry. There is indeed a sub-product in Foundry called 'Slate' which is an UI builder but it's a small part of Foundry. Foundry is mostly about data pipelines, to do spark transforms on large ETL, and then having lots of product on top of it to make it easy to make Spark work in an enterprise environment such as a UI builder (the slate mentioned above), a graph viewer of the ETL (monocle), a report builder, RBAC, a timeseries processor, data lineage, versioning of the code, a webeditor and so on.
We are building a tool in the same space with Windmill, also open-source [1]. The goal is not to hijack this thread since I do not believe we are that competitive.
We focus on workflows and more backendy/complex logic by converting automatically Python, Typescript, Go, Bash into endpoints and workflow modules that you can run at scale on workers that are deployable on one's own infra. We are currently also finishing an UI builder [2] but because it is not our prime focus, it will always be a much simpler alternative to what you and Retool are building. Hence, I see a lot of potential for integrations/collaboration for users with need of UIs similar to retool while needing more complex logic than REST or raw database queries.
In any case, congrats, I have played with the tool and you guys did an amazing job.
[1]: https://github.com/windmill-labs/windmill [2]: https://github.com/windmill-labs/windmill/pull/886
Also super excited about the lsp improvements. I believe we are the only project to have a webeditor that features lsp integration with deno in the web (to test, go on [3], New Script -> Next, it works really well). It's very pleasant to work with and make the webeditor experience match closely a local dev setup. We are super excited about the improvements and I am about to try tonight if we can have the inline hints work with monaco. As we are fully open-source, one can see how we are able to pull it off [4][5].
[1]: https://windmill.dev
[2]: https://github.com/windmill-labs/windmill
[4]: https://github.com/windmill-labs/windmill/blob/main/frontend...
[5]: https://github.com/windmill-labs/windmill/blob/main/lsp/pyls...