Cloudron makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server. Find out more or install now.


Skip to content

App Packaging & Development

302 Topics 2.8k Posts

App package development & help

Subcategories


  • Looking to collaborate? Post here if you need help or willing to offer help.

    36 284
    36 Topics
    284 Posts
    osoboO
    Hi @andreasdueren, Thanks for reaching out. I’m currently using the paid cloud version of Kitsu. The Docker version works for testing purposes. I installed it locally following this tutorial: . I understand that many professional studios self-host and use this app for production, but it requires technical skills for setup and maintenance, as many of the Docker files seem to be deprecated. As well as the GitHub page, there is a dedicated Kitsu community Discord server where users can discuss installation and usage issues: https://discord.gg/kJ7SmmUPM Best whises
  • Matrix Signal Bridge

    4
    5 Votes
    4 Posts
    302 Views
    robiR
    @timconsidine challenge accepted? You grow either way.
  • Matrix WhatsApp Bridge

    30
    6 Votes
    30 Posts
    7k Views
    andreasduerenA
    @Eliahou I packaged the signal bridge and now wanted to see how I can make encryption work. Root Cause: Synapse 1.141+ explicitly blocks appservice users from using /sync. The mautrix bridges were configured to poll /sync for encryption data, which caused HTTP 500 errors. Solution: Enabled appservice mode for end-to-bridge encryption, which uses MSC3202/MSC2409 to receive encryption data via appservice transactions instead of /sync. In specific this means: Changes Made Synapse: Added experimental features to homeserver.yaml: experimental_features: msc3202_transaction_extensions: true msc2409_to_device_messages_enabled: true Added org.matrix.msc3202: true to both bridge registration files Signal Bridge: Updated start.sh to set encryption.appservice = true Built and deployed andreasdueren/mautrix-signal:1.0.2 WhatsApp Bridge: Updated start.sh to set encryption.appservice = true Built and deployed andreasdueren/mautrix-whatsapp:2.0.2
  • 0 Votes
    4 Posts
    419 Views
    timconsidineT
    @LoudLemur late reply not sure I understand your question so this answer may not be what you want but in picture form ... [image: 1768330247721-mermaid-diagram-2026-01-13-185009-resized.png]
  • cloudron cli uninstall not working ?

    8
    0 Votes
    8 Posts
    506 Views
    jamesJ
    Hello @timconsidine I can really recommend nvm to manage Node.js and NPM versions.
  • Garage packaging status, next steps

    13
    1 Votes
    13 Posts
    912 Views
    timconsidineT
    @robi said in Garage packaging status, next steps: More options is better than less IMHO In that spirit, I made my own package, principally so I could learn about Garage : https://forum.cloudron.io/post/117911
  • Wildcard Alias added, but no https

    9
    0 Votes
    9 Posts
    520 Views
    sfeldkampS
    I see, I think. I'll try to work the API example into the start.sh script that runs when the app is started.
  • appsmith

    5
    4 Votes
    5 Posts
    334 Views
    D
    i was hardening it here is the repository link and tag samcorepa/appsmith-cloudron-ce:20251230-135540 [image: 1767103309577-333dfbea-62fc-4c51-a7a3-e6629bd2e248-image-resized.png]
  • Advice for testing a packaged app

    4
    1 Votes
    4 Posts
    288 Views
    J
    The only "danger" of using a production Cloudron is that you use some CLI command by mistake. Like cloudron uninstall --app <some-domain-by-typo> . The CLI command is less forgiving when it comes to mistakes like that. i.e there is confirmation .
  • 0 Votes
    4 Posts
    296 Views
    saikarthikS
    This is a custom app based I am packaging on react-admin. I am currently just redirecting the user to {app}/logout on clicking logout. Any way to enable it for just the custom app?
  • Is the OIDC Addon a kind of... "instant App Proxy" for packaging apps?

    Moved
    3
    1 Votes
    3 Posts
    277 Views
    jadudmJ
    Absolutely. That's an excellent and thorough answer, @james . Many, many thanks. Possible text: This add-on is intended for applications that already support OpenID Connect-based (OIDC) authentication. Apply this add-on to use Cloudron as an OpenID provider with an application that supports OIDC-based authentication. Possible improvement for proxyauth: The proxyauth add-on allows you to put an authentication wall in front of an application. This is useful in situations where the application has no authentication mechanisms of its own, or where there are features that you cannot easily turn off (for the general public), and you want to restrict access using Cloudron's built-in user and group management tools. I think the idea being that, in both cases, a bit more "why" might help. Either way, thank you. All of my questions are answered (including "oh, hey, there was an app packaging topic!").
  • Building custom packages

    8
    4 Votes
    8 Posts
    4k Views
    timconsidineT
    @tronical personally I do this process : fork the repo make changes docker build etc. docker push etc cloudron install etc. Maybe I should learn cloudron build but I am an old dog with limited brain space My build script (usually in folder above the app dev folder) : #!/bin/bash if [ "$#" -lt 1 ]; then echo "Usage: $0 <image-name> [cache|nocache] <appname.yourdomain.tld>" exit 1 fi # Get the directory from which the script was called BUILD_DIR="$(pwd)" if [ "$2" = "cache" ]; then echo "Building with cache ..." docker build --platform linux/amd64 -t $1 "$BUILD_DIR" else echo "Building with no cache ..." docker build --no-cache --platform linux/amd64 -t $1 "$BUILD_DIR" fi docker push $1 cloudron install --image $1 --location $3 e.g. ../cld.sh dockerregistry.yourdomain.tld/appname:version cache appname.yourdomain.tld
  • Blossom Server package

    10
    6 Votes
    10 Posts
    3k Views
    scookeS
    @nostrdev-com I've installed it, went smooth, and have even uploaded a blob. How do I make this private? I really don't want some random to upload nasty stuff! Here is some of my config: discovery: # find files by querying nostr relays nostr: enabled: true relays: - wss://relay.mynostr.com # - wss://nostrue.com # - wss://relay.damus.io # - wss://nostr.wine # - wss://nos.lol # - wss://nostr-pub.wellorder.net # find files by asking upstream CDNs # NOTE: do not set this to your own server, it will create an infinite loop upstream: enabled: true domains: - https://cdn.satellite.earth storage: # local or s3 backend: local # Imminently removes a blob when there are no owners removeWhenNoOwners: false # local storage local: dir: ./data/blobs # rules are checked in descending order. if a blob matches a rule it is kept # "type" (required) the type of the blob, "*" can be used to match any type # "expiration" (required) time passed since last accessed # "pubkeys" (optional) a list of owners # any blobs not matching the rules will be removed rules: # mime type of blob - type: text/* # time since last accessed expiration: 1 month - type: "image/*" expiration: 1 year - type: "video/*" expiration: 5 days - type: "model/*" expiration: 1 week - type: "*" expiration: 2 days upload: # enable / disable uploads enabled: true # require auth to upload requireAuth: true # only check rules that include "pubkeys" requirePubkeyInRule: false list: requireAuth: true allowListOthers: false tor: enabled: false proxy: ""
  • Stuck on packaging

    3
    2 Votes
    3 Posts
    524 Views
    jadudmJ
    Many thanks, @james. The text was absolutely helpful. Also, that diff hint is gold. I may end up with a PR against the docs when I'm done, because that kind of hint is a nice trick to figure out quickly all the places an app touches the disk.
  • Translators hall of fame

    Moved
    27
    16 Votes
    27 Posts
    10k Views
    nebulonN
    Currently this is not possible, we only manually add translators to avoid spam. Due to the vast changes of translation strings for the new UI, we are yet to purge and merge strings. So may not be too useful at the moment to suggest changes, but I am very happy to create an account for you for the future. Please mail your preferred email address to support@cloudron.io for this and we can handle it there.
  • Deepcode successfully installed in LAMP App

    3
    0 Votes
    3 Posts
    433 Views
    robiR
    @joseph Yes, I thought I mentioned that just before the apache app.conf. It does. Thanks for chiming in!
  • [Package] Typesense Search Engine - Fast, Typo-Tolerant Search

    15
    8 Votes
    15 Posts
    3k Views
    Dave SwiftD
    Hi @girish, @nebulon, and team, I've updated the Typesense package to address the backup roadblock from the docs (https://typesense.org/docs/guide/backups.html#backup-steps). This should make it compatible with Cloudron's strategy for database-like apps. Key changes in v29.0.1: Added "localstorage" addon for persistent /app/data (includes DB files and snapshots). Defaulted data-dir to /app/data in start.sh. Added backup.sh to trigger a full server snapshot via /operations/snapshot API, saving to snapshots/latest.tar (relative to /app/data). It backs up all collections automatically and checks for success. Added restore.sh to untar latest.tar on startup if present, ensuring consistent restores. Improved logging for the API key in start.sh. Tested on my live install (search.daveswift.com with existing collections)—backup creates the snapshot file, and restore loads it on restart without issues. The snapshot is a complete dump of all data, per Typesense docs. Repo: https://github.com/clientamp/typesense-cloudron (changes on main, see CHANGELOG.md). Latest image: clientamp/typesense-cloudron:29.0.1 (or timestamped builds like 20250929-111100). For integration, Cloudron could run backup.sh via a hook before filesystem backup, then ignore raw DB files. Happy to add more (e.g., compression). Thanks!
  • Installing custom Apps on Cloudron

    71
    7 Votes
    71 Posts
    21k Views
    timconsidineT
    @scooke raises some valid points about user expectations, and I will freely admit that I am not sure where or how the line should be drawn. Conceptually there is indeed some friction between : user is not comfortable installing CLI tools and docker and using them, effectively setting a competence bar and edging them out of this activity making it easier to do what they're not comfortable with, effectively lowering that bar and inevitably encountering support requests if/when it becomes normal/easy to install unsupported apps (via @Kubernetes scripts, my tool or an official way) However I am clear on these points : installing custom apps should be easier (hence my app) : on one level, it's purely and simply a timesaver, e.g. for a user who is competent in installing apps, at least that's how I am using my tool currently nothing wrong in concept with Cloudron providing an official GUI for installing custom apps (Cloudron has already provided the CLI and know-how for non-gui) support line must be clear : Cloudron as a team/business are not responsible for custom apps (not supported, not maintained) if properly handled, easier installation of custom apps can reduce forum pressure on Cloudron team for new apps into the AppStore I like @scooke idea of a pop-up confirmation box or similar : clarity and disclaimer is good. Whether it goes as far as requiring a reboot of the Cloudron instance, I'm not sure. But I will add a disclaimer box to my app. Beyond that, it gets a bit unclear for me : does the packager provide support (my view : only optionally / voluntary / reasonable efforts) do packagers need a reputation score (my view : nice but not viable as a formal rating, who has time and authority to set these, instead maybe some unofficial star rating 1-5 from users with successful deployment of a custom app) can an installer for custom apps provide a monetisation mechanism (comment from @girish) which effectively incentivises packagers to work through the AppWishlist (my view : yes, it could, but it's another layer on-top) should support for installed custom apps be channelled (a) into an UNSUPPORTED category of existing Cloudron forum, or (b) very deliberately into a different forum (my view : B makes a point but A is easier and more natural) @scooke said in Installing custom Apps on Cloudron: Please do not turn Cloudron into another messy Yunohost. I agree 100% on this. It must definitely be the goal of any efforts in this area. Equally, IMHO, standing still is not an option. We have too many well-intentioned but actually not-our-business "lectures" about how Cloudron should expand, and also too many "please please please" requests, pointing to unmet user demand. We cannot be like King Canute trying to push the waves back.
  • Separate build and runtime images?

    3
    0 Votes
    3 Posts
    490 Views
    E
    Yes, thank you, this has worked perfectly!
  • Install new custom app with environment variables?

    8
    1 Votes
    8 Posts
    2k Views
    E
    @girish said in Install new custom app with environment variables?: @ekevu123 cloudron install --env ENV1=1 ENV2=2 --location subdomain . Then, you can verify using cloudron env list. Thank you! I think this is the best solution for this problem.
  • tcpPort routing

    routing ports
    3
    0 Votes
    3 Posts
    736 Views
    timconsidineT
    Thank you @James In the interim, I am attempting a workaround <can't find fingers-crossed emoji>