189b8d48c1e2b9a12b0e99a782f0bb6df32ea098
- appsettings.json: bake in the reference HashedPassword/HashedPasswordSalt so
admin/password actually validates (the previous empty strings could never match)
- Program.cs: pin the SQLite DB into App_Data so the mounted volume persists it,
and route /elsa/api/{**rest} to a JSON 404 so unknown API paths stop returning
the Studio SPA HTML with a 200
Elsa Custom Server
Custom Elsa Workflows API server. Extends stock Elsa 3.x with our own activities.
Where activities live
src/Elsa.CustomServer/Activities/*.cs — anything marked [Activity(...)] under this
folder is auto-registered via AddActivitiesFrom<Program>() in Program.cs.
To add a new node type in the Studio designer:
- Drop a new file under
Activities/. - Inherit from
CodeActivity,CodeActivity<T>, orActivityfor triggerable ones. - Rebuild and redeploy — Studio picks it up automatically the next time it fetches the activity descriptors.
Example — see Activities/Shout.cs.
Local run
dotnet run --project src/Elsa.CustomServer
Listens on http://localhost:8080; API root is /elsa/api.
Docker
docker build -t elsa-custom-server .
docker run --rm -p 8080:8080 \
-e Identity__Tokens__SigningKey="$(openssl rand -base64 64)" \
elsa-custom-server
Deployment
Coolify builds this image from the Dockerfile at repo root when the app is created
with build_pack: "dockerfile". The Studio (separate container running the stock
elsaworkflows/elsa-studio-v3 image) needs its BACKEND__URL env var pointed at
this server's /elsa/api.
Description
Languages
C#
85.7%
HTML
10.7%
Dockerfile
3.6%