# How do you learn to build Discourse plugins?

**URL:** https://meta.discourse.org/t/how-do-you-learn-to-build-discourse-plugins/57946
**Category:** Development
**Created:** [February 24, 2017, 3:37pm UTC](https://meta.discourse.org/t/how-do-you-learn-to-build-discourse-plugins/57946 "2017-02-24T15:37:27Z")
**Posts on this page:** 1
**Showing post:** 7

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [March 6, 2017, 12:47am UTC](https://meta.discourse.org/t/how-do-you-learn-to-build-discourse-plugins/57946/7 "2017-03-06T00:47:46Z")

</div>

For the JavaScript side of things, you want the plugin api

> [@A versioned API for client side plugins](https://meta.discourse.org/t/a-new-versioned-api-for-client-side-plugins/40051):
>
> Later today I am going to be merging our [new post rendering engine](https://meta.discourse.org/t/help-us-test-our-new-post-rendering-engine/39221/101) into master. Swapping out Ember/HTMLBars for a virtual-dom based renderer provides us with a huge performance increase, but it also has the side effect of being incompatible with how plugins were previously made. While doing this work, it occurred to me that we made a fairly big mistake in the past by not providing a mechanism for versioning the public APIs used by client side code. We used to encourage people to just dump in w…

The source code is well documented

[https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/lib/plugin-api.js.es6](https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/lib/plugin-api.js.es6)

It took me a while to find it - maybe a link to the API topic could be added to the JavaScript section of the “Beginners guide to creating discourse plugins” @eviltrout

---

_[View the full topic](https://meta.discourse.org/t/how-do-you-learn-to-build-discourse-plugins/57946)._
