What We Built
A Docker image based on cloudron/base:4.2.0
Why 4.2.0 ?
I use 5.0.0.
Supports more recent Node
If you're happy, share your repo and maybe someone can take a look.
Cloudron App Packagers
What We Built
A Docker image based on cloudron/base:4.2.0
Why 4.2.0 ?
I use 5.0.0.
Supports more recent Node
If you're happy, share your repo and maybe someone can take a look.
Despite my few years on Cloudron and packaging some apps, I have never used the demo server ! Embarrassing. Must try harder.
So much more to know about Cloudron, so little time, such small brain.
@robi thank you
May not help others, but does help me.
Struggled a bit with SKILL for Nanobot, worked, then didn't, but now working correctly.
I packaged Zoneminder and generally it is working, but getting a lot of OOM which I cannot get to the bottom of.
I struggled a bit with ZeroNet, need to get back to it, but you can do it better ?
I based my package on ZernNet Conservancy but there is maybe a better one.
I have not upgraded to 9.1 (waiting for stable release) so I can't release as a Community App yet.
@james Quick update — I just shipped a full Cloudron-native refresh of ISOMan (v0.3.8).
This version is now properly aligned with Cloudron expectations and based on a cleaner packaging approach.
Key updates:
• Cloudron packaging aligned for production: proxyAuth + LDAP addons, persistent /app/data, internal port 8080, and healthcheck at /api/health.
• Added optional create-only protection for POST /api/isos with LDAP-first authentication (Basic fallback still supported).
• Fixed frontend create-flow issues when auth challenges returned HTML/non-JSON responses.
• Added credential prompt handling for create-only auth and improved dialog accessibility.
• Updated app icon handling for Cloudron login compatibility (PNG).
• Deployment docs refreshed and fully translated to English.
Result:
Global access control remains managed by Cloudron proxyAuth, while ISO creation can now be protected independently without breaking the normal read/list UX.
@james Thanks for the feedback!
I’m going to rebase the project on a proper Cloudron base image — that will definitely make things simpler and align with the expected defaults.
Indeed, the current version you’re seeing isn’t really suitable. It was more of a local development build from my PC 
I’ll work on a cleaner image based on the official deployment guide and adapt it for Cloudron:
https://github.com/aloks98/isoman/blob/master/docs/DEPLOYMENT.md
I’ll keep you posted once I have a proper build ready.
I have been packaging apps for a while and looking to get back into the swing of it - if anyone would like to see any apps, please reply with it below, I'll see if I can mix up one or two. 
Mar 03 15:37:42 2026-03-03T21:37:42.190 request_id=GJlyiUIE9OJthqsAAMcB [info] GET /admin/shared-senders/new
Mar 03 15:37:42 2026-03-03T21:37:42.202 request_id=GJlyiUIE9OJthqsAAMcB [info] Sent 500 in 11ms
Mar 03 15:37:42 2026-03-03T21:37:42.203 request_id=GJlyiUIE9OJthqsAAMcB [error] ** (Phoenix.Template.UndefinedError) Could not render "_config.html" for KeilaWeb.SenderView, please define a matching clause for render/2 or define a template at "lib/keila_web/templates/sender/*". The following templates were compiled:
Mar 03 15:37:42 %{form: %Phoenix.HTML.Form{source: #Ecto.Changeset<action: nil, changes: %{config: #Ecto.Changeset<action: :insert, changes: %{type: "ses"}, errors: [], data: #Keila.Mailings.Sender.Config<>, valid?: true, ...>}, errors: [], data: #Keila.Mailings.SharedSender<>, valid?: true, ...>, impl: Phoenix.HTML.FormData.Ecto.Changeset, id: "form", name: "shared_sender", data: %Keila.Mailings.SharedSender{__meta__: #Ecto.Schema.Metadata<:built, "mailings_shared_senders">, id: nil, name: nil, config: nil, inserted_at: nil, updated_at: nil}, action: nil, hidden: [], params: %{}, errors: [], options: [method: "post", id: "form", multipart: false, class: "mt-8 max-w-md flex flex-col gap-4", "@change": "setUnsavedReminder(true)", "x-data": true], index: nil}, sender_adapters: ["ses"]}
Mar 03 15:37:42 (keila 0.19.0) lib/keila_web/controllers/shared_sender_admin_controller.ex:1: KeilaWeb.SharedSenderAdminController.action/2
Mar 03 15:37:42 (keila 0.19.0) lib/keila_web/templates/shared_sender_admin/edit.html.heex:60: anonymous fn/3 in KeilaWeb.SharedSenderAdminView."edit.html"/1
Mar 03 15:37:42 (phoenix 1.7.21) lib/phoenix/controller.ex:1008: anonymous fn/5 in Phoenix.Controller.template_render_to_iodata/4
Mar 03 15:37:42 (phoenix 1.7.21) lib/phoenix/controller.ex:974: Phoenix.Controller.render_and_send/4
Mar 03 15:37:42 (phoenix_live_view 1.1.24) lib/phoenix_live_view/engine.ex:130: Phoenix.HTML.Safe.Phoenix.LiveView.Rendered.to_iodata/1
Mar 03 15:37:42 (phoenix_live_view 1.1.24) lib/phoenix_live_view/engine.ex:142: Phoenix.HTML.Safe.Phoenix.LiveView.Rendered.to_iodata/3
Mar 03 15:37:42 (phoenix_view 2.0.4) lib/phoenix_view.ex:694: Phoenix.View.__not_found__!/3
Mar 03 15:37:42 (telemetry 1.3.0) /app/code/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3
@joseph I tried implementing the proxyAuth addon, but I wasn’t able to properly sync it with OIDC or LDAP.
The only way I managed to make it work was with a static login defined via environment variables stored in the app data. I’m not really comfortable with that approach, so I rolled it back for now 
I’m going to study the original project more deeply to see if I can implement a proper unique token mechanism for downloads instead. I’m not a big fan of keeping secrets in a file.