# How to install plugins without using a third-party host?

**URL:** https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009
**Category:** Self-hosting
**Created:** [June 24, 2026, 11:12am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009 "2026-06-24T11:12:49Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![Willy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/willy/32/499930_2.png) [@Willy](https://meta.discourse.org/u/Willy)
#### Post date: [June 24, 2026, 11:12am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/1 "2026-06-24T11:12:49Z")

</div>

Okay, so if I already have a well-developed plugin in development mode, how do I move that plugin to production without relying on third-party services? Is there even a way to do that?

---

<div class="post-metadata">

### Author: ![chapoi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/chapoi/32/537252_2.png) [@chapoi](https://meta.discourse.org/u/chapoi)
#### Post date: [June 24, 2026, 11:24am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/2 "2026-06-24T11:24:48Z")

</div>

Yes, it’s explained in this doc

> [@Install plugins on a self-hosted site](https://meta.discourse.org/t/install-plugins-on-a-self-hosted-site/19157):
>
> warning This guide assumes that you have a self-hosted standard installation. We only support the standard method of install here, so these instructions assume you have a [standard install](https://meta.discourse.org/t/142537?silent=true). warning This guide only applies to self-hosted Discourse instances. If you are using a managed hosting service, the available plugins are controlled by your hosting provider. For example, on our hosting [these specific plugins](https://www.discourse.org/plugins) are available by hosting tier. information_source As of mid-2025, [many p…](https://meta.discourse.org/t/373574)

---

<div class="post-metadata">

### Author: ![Willy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/willy/32/499930_2.png) [@Willy](https://meta.discourse.org/u/Willy)
#### Post date: [June 24, 2026, 11:26am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/3 "2026-06-24T11:26:41Z")

</div>

Are you serious? That whole tutorial relies on GitHub, and my question is about not relying on third parties.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [June 24, 2026, 11:26am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/4 "2026-06-24T11:26:55Z")

</div>

Host it on GitHub or GitLab, clone as usual.

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [June 24, 2026, 11:33am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/5 "2026-06-24T11:33:41Z")

</div>

> [@Willy](#):
>
> and my question is about not relying on third parties.

Discourse itself depends on quite a few external services like Github, Docker Hub, Rubygems, the NPM registry and LetsEncrypt. Just making your plugin deployment independent of Github does not make a lot of sense if you ask me.

---

<div class="post-metadata">

### Author: ![chapoi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/chapoi/32/537252_2.png) [@chapoi](https://meta.discourse.org/u/chapoi)
#### Post date: [June 24, 2026, 11:35am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/6 "2026-06-24T11:35:13Z")

</div>

Oh you’re right, missed that part. 🤷‍♀️

---

<div class="post-metadata">

### Author: ![Willy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/willy/32/499930_2.png) [@Willy](https://meta.discourse.org/u/Willy)
#### Post date: [June 24, 2026, 11:39am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/7 "2026-06-24T11:39:27Z")

</div>

It makes sense because I have developed many small plugins that do small things and therefore won’t need updates, managing GitHub to put those small plugins up is overkill, it’s too much work.

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [June 24, 2026, 11:43am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/8 "2026-06-24T11:43:34Z")

</div>

Putting a plugin up on Github is less than one minute of work. Create repository and copy/paste the shell script it outputs upon creation that does git init, git add and git push. That is the reason why you’re the first one to ask this. Having your plugins under version control is a good idea as well, no matter how small the plugin is.

You could copy the install script and modify it so it copies your plugin directories into the docker image directly. That assumes you have the plugin code locally already. However, I suspect that maintaining the modified install script against the updates it gets is 10x more work.

---

<div class="post-metadata">

### Author: ![Willy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/willy/32/499930_2.png) [@Willy](https://meta.discourse.org/u/Willy)
#### Post date: [June 24, 2026, 11:50am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/9 "2026-06-24T11:50:59Z")

</div>

I’m not the first to ask (others have asked before) but the discussion keeps getting more complicated, and in the end, you guys never actually answer anything.

There’s no justification for this approach that doesn’t allow for flexibility. At least try WordPress or another service once, and you’ll see that installing plugins isn’t the nightmare it is on Discourse.

Using GitHub is fine, but is wanting to work locally frowned upon?

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [June 24, 2026, 11:57am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/10 "2026-06-24T11:57:57Z")

</div>

> [@Willy](#):
>
> you guys

Just to be clear: I do not work for [Discourse.org](http://Discourse.org). I’m just a user here, just like you.

> [@Willy](#):
>
> There’s no justification for this approach that doesn’t allow for flexibility. At least try WordPress or another service once, and you’ll see that installing plugins isn’t the nightmare it is on Discourse.

At Communiteq we have developed our own control panel which allows for easy plugin installation/deinstallation. Fun fact: it does not replace Github, it built upon it.

If you ever _built_ (not installed) a Wordpress plugin you would have never said that, because now _that’s a nightmare_.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [June 24, 2026, 12:09pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/11 "2026-06-24T12:09:10Z")

</div>

Using proper source control will save you loads of heartache and issues down the line. It keeps your plugin safe for the future and helps keep an audit trail of updates.

It provides a modular way of separating concerns, reducing complexity.

It allows you to manage your instances independently, makes server migrations and rebuilds much simpler.

It’s also the professional approach.

---

<div class="post-metadata">

### Author: ![Lilly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lilly/32/575047_2.png) [@Lilly](https://meta.discourse.org/u/Lilly)
#### Post date: [June 24, 2026, 12:23pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/12 "2026-06-24T12:23:19Z")

</div>

i’m curious how you built and tested a “well-developed” plugin without using github or some other similar repository service? how did you develop “many small plugins” for discourse?

> [@Willy](#):
>
> but the discussion keeps getting more complicated, and in the end, you guys never actually answer anything.

being combative with people trying to help you isn’t going to go far. if you have developed plugins before like you say you have, then you’ll know it is not a nightmare to install them on discourse; using a repo and editing an app.yml file should be easy for someone self-hosting and experienced in plugin development.

---

<div class="post-metadata">

### Author: ![satonotdead](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/satonotdead/32/447830_2.png) [@satonotdead](https://meta.discourse.org/u/satonotdead)
#### Post date: [June 24, 2026, 12:56pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/13 "2026-06-24T12:56:20Z")

</div>

I don’t know if hosting on Codeberg should work on Discourse plugins. If it is, that’s probably what the OP is looking for.

I’m agree with questioning the use of Github. They removed ~300.000 repositories (DMCA related) with no prior communication and CMU study’s methodology — checking whether previously-observed repos were later deleted, suggests order-of-magnitude more repos have been removed via internal enforcement.

The CMU study alone found ~14,000 repos deleted in one _fake-star_ sweep, vs. ~20k–47k annually via DMCA. There is no total metrics because those repositories shows only 404 errors.

I mean, there is no actual risk for Discourse plugins, but now Farble is a national security concern, and we did not know what could happen in the near future if every human post needs to be KYCed through _Persona_ or something like that.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [June 24, 2026, 1:03pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/14 "2026-06-24T13:03:11Z")

</div>

So you recommend Discourse team move away from GitHub?

There are several alternatives and that’s fine. Use them if you must, but if you aren’t prepared to put in a _little_ work, don’t bother running Discourse imho.

---

<div class="post-metadata">

### Author: ![Willy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/willy/32/499930_2.png) [@Willy](https://meta.discourse.org/u/Willy)
#### Post date: [June 24, 2026, 1:12pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/15 "2026-06-24T13:12:48Z")

</div>

Is that what you call combative? I’m sorry, but nobody’s been fighting, you’re probably just being too sensitive. And I’m sorry if that sounded combative.

Anyway, to answer your question, I obviously did it with a disposable GitHub account, but they’re so small that I don’t really have to test them too much or write much code.

I’ve already installed them using the disposable account and tested that they work, but in the long run, I don’t want to have to keep an eye on the repository every time I want to make a change. I’m not kidding when I say they’re very small. For example, one of them just adds a button to an external page on the home page, and that’s it.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [June 24, 2026, 1:15pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/16 "2026-06-24T13:15:38Z")

</div>

It’s like saying you want a car, but can’t be bother getting the annual road-worthiness check.

It’s just the cost of doing business when hosting publicly on the open web.

I’m sure if you want to, you can work out a way to modify the install scripts and symlink them from somewhere on your server, but you don’t sound as if you want to do any work and it will be on you to write and support that solution.

> [@Willy](#):
>
> . I’m not kidding when I say they’re very small. For example, one of them just adds a button to an external page on the home page, and that’s it.

If you can boil that down to a Theme Component you could go Heath Robinson and use `discourse_theme` to push from your local machine to your server, but don’t cry if your local machine dies, is lost or stolen and you can’t get your code back (without then working out how to get a live copy from your server)

> [@Install the Discourse Theme CLI console app to help you build themes](https://meta.discourse.org/t/install-the-discourse-theme-cli-console-app-to-help-you-build-themes/82950):
>
> The [[discourse] Discourse Theme CLI](https://github.com/discourse/discourse_theme) is a ruby gem that allows you to use your editor of choice when developing Discourse themes and theme components. As you save files the CLI will update the remote theme or component and changes to it will appear live! Installing To play with it, make sure you have Ruby 2.5 or up installed. If you are on Windows, you have 2 options: Option 1: [Windows Subsystem for Linux](https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux). Windows 10 has access to a full Linux environment, you can use it to install …

---

<div class="post-metadata">

### Author: ![awesomerobot](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/awesomerobot/32/142900_2.png) [@awesomerobot](https://meta.discourse.org/u/awesomerobot)
#### Post date: [June 24, 2026, 1:28pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/17 "2026-06-24T13:28:01Z")

</div>

Even simpler if you don’t want to install the discourse\_theme gem, themes can be uploaded as a zip file and you could build quite a lot in the admin UI directly.

And to reiterate, unless you’re working with ruby you don’t need a plugin at all, so a theme is likely what you’re asking for… no git needed.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [June 24, 2026, 1:29pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/18 "2026-06-24T13:29:35Z")

</div>

Good point! But the advantage of `discourse_theme` is the instant way it updates in place so you can quickly checkout changes without having to zip an update and re-upload.

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [June 24, 2026, 2:04pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/19 "2026-06-24T14:04:38Z")

</div>

> [@merefield](#):
>
> It’s like saying you want a car

Sounds more like wanting to _drive_ a car but never visit a gas station. _“I’ll just scoop the gas into the tank using my bare hands”_. 🔥

If you used GitHub to develop the plugins then using it as a source for installation is trivial. Pushing changes to a repo is less effort than transferring updated plugin files manually to a server.

It sounds more like you’re trying to bypass the installation process to deploy plugins on a Hosted Discourse installation.

---

<div class="post-metadata">

### Author: ![Heliosurge](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/heliosurge/32/571810_2.png) [@Heliosurge](https://meta.discourse.org/u/Heliosurge)
#### Post date: [June 25, 2026, 12:16am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/20 "2026-06-25T00:16:12Z")

</div>

> [@Willy](#):
>
> I’m not kidding when I say they’re very small. For example, one of them just adds a button to an external page on the home page, and that’s it.

I am wondering if you mean #Customization > Plugin or #Customization > Theme component ?

For example the custom button on Home screen, could be accomplished with a #Customization > Theme component . A TC can be laid out in a zip file(maybe best route to have full TC structure) or even entered in creating it/inputting code in the Create Theme component using the internal use.

[Next page](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009.md?page=2)
