Happy to announce the official https://marketplace.visualstudio.com/items?itemName=jcoyle.fireworks
Live coding with dynamic inline previews.
Works with Deps, Leiningen, and Babashka Projects.
To get a quick taste, install the extension, then search in the command for Fireworks: Quick Start
Early days ... user feedback very welcome!
http://github.com/paintparty/…/extension are here.
A big thanks to Clojurists Together, who generously funded the prototyping for this as part of the recent https://www.clojuriststogether.org/news/q3-2025-funding-announcement/
If you find this work valuable, please consider http://github.com/paintparty/fireworks.
Thanks @hello571 !
Nice, reminds me a lot of https://albertzak.com/run-build-grow/. Congrats on the release
nice work, I should be able to get this running with jolt too since there don't look to be any jvm dependencies 😉
Hey @yogthos thanks! Giving it a spin with Jolt has been on my list to try since you dropped the release last week. I might not get a chance to try until next week so if you have any luck with it before that lmk! If it works I would be happy to add a Jolt project option to the extension if it made sense (alongside the current lein, deps, and bb new project commands)
sounds like a plan, I should have a chance to give it a spin tomorrow
current version of basic project setups https://github.com/paintparty/fireworks/tree/main/integrations/vscode/extension/examples , if that helps
https://github.com/amiorin/green 📗 - A babashka-compatible Clojure library for building idempotent devops CLIs: desired state in EDN, workflows as step graphs threaded by a map, Selmer-scaffolded configuration files, OpenTofu as the muscle).
• A step is a function opts -> opts, named by a qualified keyword.
• Outcomes are Unix-style: :green/exit (0 ok), :green/err, :green/trace.
• Multiple wire-fn successors (or next-fn pairs) run in parallel; branches converging on a step join it once, with results under :green/branches.
• Advice (Emacs nadvice-style, workflow-scoped): wrap, override, or filter steps by name (or all steps) without touching the wiring. At equal :depth, the most recently added advice is outermost; lower :depth runs farther outside. The advice how values cover specific use cases: :around (dry-run/retry/timing/locks), :override (replace or stub), :before (setup/prerequisites), :after (audit/metrics/cleanup), :before-while (precondition gates), :before-until (fast-path/no-op), :after-while (success-only follow-up), :after-until (recovery/fallback), :filter-args (normalize/scope input), and :filter-return (normalize/enrich output).
• Composition: (wf/step sub-workflow {:in … :out …}) turns a workflow into an ordinary step — wire it, advise it, fan it out. Inherited advice is preserved even if :in rebuilds opts; custom :in functions should carry ambient keys such as :green/event and :green/dry-run when the sub-workflow needs them. See examples/multi-zookeeper for two clusters built from one cluster workflow.
• Advice inheritance: advice on a parent workflow reaches steps inside embedded sub-workflows — names match flat at any depth. At equal :depth, parent advice stacks outside child advice; re-adding a child's advice id from the parent replaces it (e.g. swap the child's default ::backend). wf/advice-plan shows the composed stack for a step, with provenance.
• green.scaffold/scaffold renders flat file specs through Selmer; on delete the same specs name what to remove, pruning immediate empty parent directories.
• green.tofu/tofu-step runs tofu init + apply for any non-`:delete` event or init + destroy for :delete, and merges tofu output -json under :tofu/outputs by default (use a namespaced :output-key if you override it). Backends are explicit advices; the examples attach local-backend-advice, and s3-backend-advice/`gcs-backend-advice` are shipped alternatives.
• green.dry-run/advise + the --dry-run flag: advised steps print what they would do and are skipped.
Notes:
• Written with Fable 5
• Three examples so far: Zookeeper fake-cluster, Zookeeper multi-fake-cluster, and fake-Paas on a single VPS. Everything is fake and you only need OpenTofu installed because it uses locals and outputs blocks only.
• https://amiorin.github.io/green/
• https://amiorin.github.io/green/docco.html
The premise is false. :ns/fn does not invoke ns/fn. Check the wire-fn of the screenshot.
I have developed also the Python and the TypeScript versions if your DevOps team doesn't use Clojure. https://github.com/amiorin/red https://github.com/amiorin/blue
A step is a function opts -> opts, named by a qualified keyword.Does that mean :ns/fn results in invoking the function ns/fn?
If so this could be a security issue: just change the edn to invoke your function, e.g. invoke-tool (https://clojuredocs.org/clojure.tools.deps.interop/invoke-tool)