# 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:** 13
**Page:** 2

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [June 25, 2026, 1:04am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/21 "2026-06-25T01:04:19Z")

</div>

(Btw @Heliosurge I think this was brought up earlier):

> [@merefield](#):
>
> > [@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)

> [@awesomerobot](#):
>
> 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.

---

<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 25, 2026, 10:22am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/22 "2026-06-25T10:22:27Z")

</div>

It’s obvious that the topic has now completely veered off course, as always happens in any thread that goes against the grain. I don’t even intend to discuss the issue of using a theme component, but thanks to everyone anyway.

---

<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 25, 2026, 10:24am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/23 "2026-06-25T10:24:29Z")

</div>

How did it veer off track? You asked a question and people expressed their opinions. Looks completely on topic to me?

You have all the info you need now to implement whatever setup you want?

---

<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 25, 2026, 11:09am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/24 "2026-06-25T11:09:10Z")

</div>

> [@merefield](#):
>
> How did it veer off track?

I agree somewhat with OP that the “opinions” started to slide into “ridicule OP for what he wants”.

I don’t think this needs to be debated further. So unless someone has another solution to contribute to this topic, we can end the discussion here imo.

---

<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, 4:16pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/26 "2026-06-25T16:16:07Z")

</div>

I do agree that some of the posts have unneeded aggressiveness.

I only mentioned a TC in regards to your adding a button to the home page. This has already been demonstrated by several components. If it is not a security issue a TC is the way to go.

Though I myself would be interested in what issues you have with Themes & Theme components? Plugins are more for security and things that cannot be accomplished within a TC - like changing how core functions. If your more comfortable we could discuss this in a friendly pm.

Another benefit of the TC is you could edit your code when needed within site web UI.

The problem I see with plugin route is that even official plugins merged in core still use Git to update the plugins & discourse itself.

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [June 25, 2026, 6:13pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/27 "2026-06-25T18:13:22Z")

</div>

> [@Willy](#):
>
> Is there even a way to do that?

You can use the volume support on the app.yml to mount a folder on the host to the plugins folder on the container.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [June 26, 2026, 8:42pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/28 "2026-06-26T20:42:10Z")

</div>

You can use any way you want to copy your source code from wherever you keep it into the discourse/plugins directory. If you don’t like `git clone` you can use `rsync` or `cp -a`. Just copy your plugin to your VM any way you want and insert some command to copy it the way that `git clone` would.

---

<div class="post-metadata">

### Author: ![Ed\_S](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ed_s/32/134015_2.png) [@Ed\_S](https://meta.discourse.org/u/Ed_S)
#### Post date: [June 27, 2026, 11:50am UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/29 "2026-06-27T11:50:00Z")

</div>

> [@pfaffman](#):
>
> You can use any way you want to copy your source code from wherever you keep it into the discourse/plugins directory

This surely is the right answer here. It respects the original parameters of the question. This hasn’t been a great thread from the perspective of showing a positive and supportive community.

---

<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 30, 2026, 5:05pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/30 "2026-06-30T17:05:50Z")

</div>

@Falco @pfaffman Thank you, your answers resolved my doubts.

I’m leaving my `app.yml` configuration here in case it’s useful to anyone trying to load local plugins into Discourse from the host machine.

```yaml
## The Docker container is stateless; all data is stored in /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log
  - volume:
      host: /var/discourse/plugins
      guest: /var/plugins

## Plugins go here
## see https://meta.discourse.org/t/19157 for details
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - cp -a /var/plugins/. $home/plugins/

```

In my setup, I keep all custom plugins in `/var/discourse/plugins` on the host.

The mounted directory becomes available inside the container as `/var/plugins`, and during the `after_code` hook, the command:

```bash
cp -a /var/plugins/. $home/plugins/

```

copies all mounted plugins into Discourse’s native plugins directory (`$home/plugins`, typically `/var/www/discourse/plugins`).

This makes it possible to manage plugins directly from the host without using git-based plugin installation or relying on third-party hosting services.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [June 30, 2026, 7:42pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/31 "2026-06-30T19:42:56Z")

</div>

Great. Glad that worked for you!

You could also symlink to the plugins instead of copy. And if you did, changes to them could be applied (at least in some cases where you don’t need to migrate or compile assets) by restarting the container.

---

<div class="post-metadata">

### Author: ![nicolsdennis](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nicolsdennis/32/545883_2.png) [@nicolsdennis](https://meta.discourse.org/u/nicolsdennis)
#### Post date: [June 30, 2026, 8:50pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/32 "2026-06-30T20:50:22Z")

</div>

Hi, just curious how do you handle migration and db changes?

---

<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 30, 2026, 9:27pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/33 "2026-06-30T21:27:00Z")

</div>

Those are independent of how a plugin is installed. If the plugin is present, migrations will be handled.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [July 10, 2026, 3:31pm UTC](https://meta.discourse.org/t/how-to-install-plugins-without-using-a-third-party-host/406009/34 "2026-07-10T15:31:06Z")

</div>

> [@nicolsdennis](#):
>
> how do you handle migration and db changes?

I rebuild the container except in strange circumstances. But you can run

```
 rake db:migrate

```

And also precompile assets. I don’t recommend it unless you have a specific need and are familiar with rails.

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