webofbits

webofbits

Squidie - workflow automation runtime for Elixir applications

Squid Mesh is an open source workflow automation runtime for Elixir applications.

It is aimed at Phoenix and OTP apps that want to define and run durable workflows in code without rebuilding the runtime layer around retries, replay, inspection, cancellation, and scheduling.

Core Idea

  • define workflows declaratively with triggers, payload contracts, steps, transitions, and retries
  • run them durably on top of an existing Repo and Oban
  • inspect run history with step and attempt details
  • replay and cancel runs through a small public API
  • activate recurring workflows through cron-backed triggers

Current Features

  • manual triggers
  • cron triggers
  • step retries with exponential backoff
  • built-in :wait and :log steps
  • run inspection with history
  • replay and cancellation
  • HTTP tool adapter support

Example Workflow

defmodule Content.Workflows.PostDailyDigest do
  use SquidMesh.Workflow

  workflow do
    trigger :daily_digest do
      cron("0 9 * * 1-5", timezone: "Etc/UTC")

      payload do
        field(:feed_url, :string, default: "https://example.com/feed.xml")
        field(:discord_webhook_url, :string)
        field(:posted_on, :string, default: {:today, :iso8601})
      end
    end

    step(:fetch_feed, Content.Steps.FetchFeed)
    step(:build_digest, Content.Steps.BuildDigest)

    step(:post_to_discord, Content.Steps.PostToDiscord,
      retry: [
        max_attempts: 5,
        backoff: [type: :exponential, min: 1_000, max: 30_000]
      ]
    )

    transition(:fetch_feed, on: :ok, to: :build_digest)
    transition(:build_digest, on: :ok, to: :post_to_discord)
    transition(:post_to_discord, on: :ok, to: :complete)
  end
end

Running from Host App

SquidMesh.start_run(Content.Workflows.PostDailyDigest, %{
  discord_webhook_url: System.fetch_env!("DISCORD_WEBHOOK_URL")
})

Under the Hood

  • Oban for durable execution and scheduling

  • Jido for custom step actions

  • Postgres for persisted run state

Status

This is still an early alpha release.

Current focus:

  • API shape

  • workflow contract

  • runtime model

Links

https://github.com/ccarvalho-eng/squid_mesh

Most Liked

webofbits

webofbits

i started laying the foundations and milestones for https://github.com/dark-trench/squid_studio (the visual editor)
it should help identify the remaining gaps in squidie to support visual editors
also, new name → new logo :sweat_smile:

webofbits

webofbits

Longer term, this is something I could imagine building after the runtime matures further: a visual companion for inspecting Squid Mesh workflows and run state. For now I’m staying focused on the runtime, durability, and host-app integration, but I like the idea of eventually making workflow shape, transitions, retries, and manual gates easier to see at a glance.

Where Next?

Popular in Announcing Top

tmbb
I’ve published the first version of my Makeup library. It’s a syntax highlighter for Elixir in the spirit of Pygments, Currently it highl...
New
sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
985 43657 311
New
mischov
import Meeseeks.CSS html = HTTPoison.get!("https://news.ycombinator.com/").body for story <- Meeseeks.all(html, css("tr.athing")) do...
New
gabrielpoca
Hello everyone! I want to share with you something that I’m really proud of: https://stillstatic.io/ Still is a static site builder for...
New
aesmail
Hello guys, I have finally made it. I created an admin interface for a framework. It’s been on my todo list for years and with the curre...
New
mindok
What is ContEx? A pure Elixir server-side data plotting/charting library outputting SVG. It has nice barcharts in particular and works g...
New
Hal9000
Here is my first stab at this. README pasted below. https://github.com/Hal9000/elixir_random Comments and critiques are welcome. Thank...
New
tfwright
After working on it for a couple of months and using it in production for most of that time, today I’ve released LiveAdmin, a LiveView ba...
New
wfgilman
I’ve cleaned up and open sourced three financial libraries I was using for my company. They are bindings for the APIs of these three comp...
New
trisolaran
Hi! :waving_hand: I would like to present LiveSelect, a little library that I wrote to easily add a dynamic selection input to your LV f...
198 10978 107
New

Other popular topics Top

WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
AstonJ
Please see the new poll here: Which code editor or IDE do you use? (Poll) (2022 Edition) It’s been a while since we first asked this, I...
208 31307 143
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
grych
Hi folks, Few months ago I have announced the proof-of-concept of the library to manipulate the browsers DOM objects directly from Elixi...
639 52774 488
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
hariharasudhan94
Lets say I have map like this fetching from my database %{"_id" => #BSON.ObjectId<58eb1a7a9ad169198c3dXXXX>, "email" => ...
New
vegabook
I’m brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

We're in Beta

About us Mission Statement