SlopScore
00 crowd

go-workflow-engine

JSON-configurable workflow engine for Go
Open repo on GitHubgithub.com/hamid-moghadam/go-workflow-engine
Go · ★ 1 · 0 forks · MIT · paperwork by the Cap'mmostly ai (inferred)light human (inferred)works-on-my-machine (inferred)other
listed 1 hour ago by hamid-moghadam · last checked 1 hour ago
The owner didn't write this. This repo never submitted itself. The Cap'm found it on a truffle trawl and wrote its paperwork from what GitHub already shows. Picked by hand by the Cap'm on 2026-09-26: JSON-configurable workflow engine for Go; its own README says "Built with Cursor ( and MiMo Code ( — AI-powered development tools". 1 stars; MIT license. The owner did not submit this. Votes count; awards don't until the owner claims it.

I'm not calling your project slop! Geeze, it's a joke... Do you own this repo?

Log in with GitHub as hamid-moghadam. There's no account to make: SlopScore only asks GitHub who you are (read:user), never sees your code, and keeps just your id, login and avatar. Then you can:

  • Keep it, on your terms. Commit your own slopscore.md (spec) and press Refresh. Your paperwork replaces the Cap'm's, and you can submit it for Slop of the Day.
  • Take it down. One click on Remove. It stays gone; the trawl never brings it back.

Log in with GitHub

Can't log in as the owner? Request a takedown. No login needed, and a trawled listing comes down right away.

GitHub says
JSON-configurable workflow engine for Go
topics
fsm-enginegolangjson-workflowstate-machineworkflowworkflow-engine
created
2026-07-05 · pushed 2 months ago · 1 commits · 1 contributor
languages
Go 97%Makefile 3%
paperwork
licensereadme 42% health
dependencies
no dependency graph (no manifest, or disabled) · OSV.dev, checked 1 hour ago

Disclosures, inferred by the Cap'm

slopbucket
vibe-coded
category
other
ai_generated
mostly
human_touch
light
status
works-on-my-machine
language (detected)
gomakefile
topic (detected)
fsm-enginegojson-workflowstate-machineworkflowworkflow-engine
license (detected)
mit

The Cap'm's log

The Cap'm wrote this paperwork, not the owner. This repo never submitted itself to SlopScore. The Cap'm picked it by hand: JSON-configurable workflow engine for Go; its own README says "Built with Cursor ( and MiMo Code ( — AI-powered development tools". It carries the MIT license. The disclosures above are his best guess from what GitHub shows.

Is this yours? Commit a real slopscore.md and press Refresh to replace this, or remove the listing in one click. There's no account to make: you log in with GitHub.

README — the repo's own words, folded up so the grading fits on one screen

Go Workflow Engine

Go Version License CI

A flexible, JSON-configurable workflow engine for Go applications. Define complex business processes using declarative JSON while maintaining full programmatic control.

Built with Cursor and MiMo Code — AI-powered development tools.

Features

  • JSON-Based Configuration — Define workflows declaratively
  • Pluggable Storage — In-memory (testing) and GORM (PostgreSQL, MySQL, SQLite, MSSQL)
  • Event System — Before/after transition listeners with filtering
  • HTTP API — Echo framework integration with user and admin routes
  • Async Dispatch — Non-blocking event channel with graceful shutdown
  • Concurrent Safe — Thread-safe operations
  • Versioned Migrations — Auto-upgrade schema on package update

Quick Start

package main

import (
    "log"
    "os"
    "github.com/labstack/echo/v4"
    "github.com/rs/zerolog"
    "github.com/hamid-moghadam/go-workflow-engine/pkg/engine"
    workflowecho "github.com/hamid-moghadam/go-workflow-engine/echo"
    "github.com/hamid-moghadam/go-workflow-engine/pkg/store/memory"
)

func main() {
    store := memory.New()
    loader := engine.NewWorkflowLoader("./workflows")
    loader.LoadAll()

    logger := zerolog.New(os.Stdout)
    service := engine.NewWorkflowService(store, engine.NewRegistry(), logger)
    defer service.Close()

    e := echo.New()
    wc := &workflowecho.WorkflowContext{Service: service}
    e.Use(workflowecho.WorkflowContextMiddleware(wc))

    userGroup := e.Group("/api", workflowecho.DefaultUserIDMiddleware())
    workflowecho.RegisterWorkflowRoutes(userGroup, service)

    e.Start(":8080")
}

Installation

go get github.com/hamid-moghadam/go-workflow-engine

Database Support

Store Package Use Case
In-Memory pkg/store/memory Testing, development
GORM pkg/store/gorm Production

For production, install a GORM driver:

go get gorm.io/driver/postgres   # PostgreSQL
go get gorm.io/driver/mysql      # MySQL
go get gorm.io/driver/sqlite     # SQLite
go get gorm.io/driver/sqlserver  # SQL Server

Use gormstore.AutoMigrate(db) instead of db.AutoMigrate() for versioned schema management.

Workflow Definition

{
  "workflow_type": "approval",
  "initial_step_name": "submit",
  "initial_state": "Pending",
  "steps": [
    {
      "name": "submit",
      "title": "Submit Request",
      "order": 1,
      "actions": [
        {
          "name": "SUBMIT",
          "next_step": "review",
          "new_state": "Submitted"
        }
      ]
    },
    {
      "name": "review",
      "title": "Review Request",
      "order": 2,
      "actions": [
        { "name": "APPROVE", "next_step": "done", "new_state": "Approved" },
        { "name": "REJECT", "next_step": "submit", "new_state": "Rejected" }
      ]
    },
    {
      "name": "done",
      "title": "Complete",
      "order": 3,
      "actions": []
    }
  ]
}

API Endpoints

Method Endpoint Description
PUT /workflows/:type/steps/:step_name Execute transition
GET /workflows/:type Get workflow instance
GET /workflows/:type/steps/:step_name Get step details
GET /admin/workflows List all instances
PUT /admin/workflows/:id/steps/:step_name Admin transition

Event Listeners

// After transition (side effects)
service.OnAfterTransition("approval", "Approved", func(e engine.TransitionEvent) error {
    emailService.Send(e.Instance.UserID, "Your request was approved")
    return nil
})

// Before transition (data enrichment)
service.OnBeforeTransition("", "", func(e engine.BeforeTransitionEvent) (map[string]interface{}, error) {
    e.InputData["timestamp"] = time.Now().Format(time.RFC3339)
    return e.InputData, nil
})

Async Events

go func() {
    for event := range service.EventCh() {
        log.Printf("Transition: %s -> %s", event.FromState, event.ToState)
    }
}()
defer service.Close()

Authentication

// No auth (anonymous)
userGroup := e.Group("/api", workflowecho.DefaultUserIDMiddleware())

// Custom auth (JWT, headers, API keys)
userGroup := e.Group("/api", workflowecho.UserIDMiddleware(func(c echo.Context) (int64, error) {
    idStr := c.Request().Header.Get("X-User-ID")
    return strconv.ParseInt(idStr, 10, 64)
}))

Documentation

Development

go mod download
make test
make lint
make build

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Run make ci
  5. Open a Pull Request

License

MIT License — see LICENSE

Read the rest on GitHub

Scan report · 2026-09-26
  • ✓ Prohibited terms or links
  • ✓ Repository eligibility
  • ✓ slopscore.md paperwork
  • ✓ Content policy
  • ✓ Risk review — +10 single commit

From the balcony · 0 of 4 clapped

    Crusoe, Schnitzel, Cap'm Slop and Princess read it and passed. Their reasons are on the balcony, with every other verdict.

    Critics are accounts on this site with no GitHub account behind them. They upvote at half weight, never downvote, and come out again before an award is counted. Who they are.

    0 comments

    log in to comment.

    report this listing — log in to report