# Plugin development workflow w/ remote dev server

**URL:** https://meta.discourse.org/t/plugin-development-workflow-w-remote-dev-server/80267
**Category:** Development
**Created:** [February 10, 2018, 4:12pm UTC](https://meta.discourse.org/t/plugin-development-workflow-w-remote-dev-server/80267 "2018-02-10T16:12:21Z")
**Posts on this page:** 8
**Page:** 1

<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: [February 10, 2018, 4:12pm UTC](https://meta.discourse.org/t/plugin-development-workflow-w-remote-dev-server/80267/1 "2018-02-10T16:12:21Z")

</div>

Thanks for the guides, I think I have the basics to get me started with Plugin dev.

Wanted to ask about whether its worth having an IDE for plugin development?

Secondly, I’m hosting my dev server on a remote cloud VPS because my laptop is too slow to run a VM locally at reasonable speed, [as suggested](https://meta.discourse.org/t/discourse-dev-server-using-a-rock64/79378/2) by @Hector

In this setup, whats the best workflow?

Can I use some protocol to connect to the remote VPS files directly within an IDE running locally, or should I clone locally, edit, commit, then separately download from source control to server and restart to test?

Apologies for any newbieness!

---

<div class="post-metadata">

### Author: ![notriddle](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/notriddle/32/133055_2.png) [@notriddle](https://meta.discourse.org/u/notriddle)
#### Post date: [February 10, 2018, 6:40pm UTC](https://meta.discourse.org/t/plugin-development-workflow-w-remote-dev-server/80267/2 "2018-02-10T18:40:58Z")

</div>

Sounds like you want [The Janitor](https://janitor.technology).

---

<div class="post-metadata">

### Author: ![Mittineague](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mittineague/32/114259_2.png) [@Mittineague](https://meta.discourse.org/u/Mittineague)
#### Post date: [February 10, 2018, 9:00pm UTC](https://meta.discourse.org/t/plugin-development-workflow-w-remote-dev-server/80267/3 "2018-02-10T21:00:35Z")

</div>

I use both an IDE (IntelliJ IDEA) and a text editor (Notepad++) for working with code. Generally I start with the text editor for simple pre-alpha code and when things get more complex I import the code into an IDE project to make it easier to work with.

I have two localhost installs. One is “production” and the other “development”. I generally start in the development install where I can change folders and files without needing to pull them in from a GitHub repository. Once things get a bit more stable I put the code into a repo and pull the repo into the production install.

---

<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: [February 12, 2018, 8:43am UTC](https://meta.discourse.org/t/plugin-development-workflow-w-remote-dev-server/80267/4 "2018-02-12T08:43:58Z")

</div>

I’ve found this:

> **[rsync](https://rsync.samba.org)**

This could then keep my client files up-to-date with my remote dev server and then I could use an IDE/text editor locally to inspect and edit? Once happy with testing server side, I could commit the files directly?

Confirmed rsync is in default build of both macOS and Ubuntu 16.04 on Scaleway.

There is a tutorial here:

[![](https://global.discourse-cdn.com/meta/original/4X/2/1/1/2112da9b873b2a83d24436b437ce1558f965415f.jpeg "Linux/Mac Terminal Tutorial: How To Use The rsync Command - Sync Files Locally and Remotely") ](https://www.youtube.com/watch?v=qE77MbDnljA)

There’s even [an rsync GUI for MacOS](https://github.com/rsyncOSX/RsyncOSX)

---

<div class="post-metadata">

### Author: ![Hector](https://avatars.discourse-cdn.com/v4/letter/h/43a26b/32.png) [@Hector](https://meta.discourse.org/u/Hector)
#### Post date: [February 21, 2018, 12:56am UTC](https://meta.discourse.org/t/plugin-development-workflow-w-remote-dev-server/80267/5 "2018-02-21T00:56:21Z")

</div>

I use [Unison File Synchronizer](https://www.cis.upenn.edu/~bcpierce/unison/). The main difference with rsync is that it’s bidirectional. This is useful because you can build in the server or in your development machine. It also has a watch mode so that as soon as you save a file in your editor it’s syncrhonized with the server. You should exclude the .git directory from the syncronization. But you can pull from a repository in both machines and it recognizes that the same changes were made in both very fast. It works flawlessly.

---

<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: [February 21, 2018, 4:08pm UTC](https://meta.discourse.org/t/plugin-development-workflow-w-remote-dev-server/80267/6 "2018-02-21T16:08:51Z")

</div>

Update: after a lot of manual package installation of dependencies on the server side to get the appropriate server running, I’ve managed to install [https://nuclide.io](https://nuclide.io) which gives me a nice local graphical file browser for editing remote files within [https://atom.io](https://atom.io) as if they were local … probably overkill … but now i can start navigating and hacking code efficiently on my remote dev server!

PS most of the work to achieve this was on the server side, so suggest you need a persistent dev server which obviously comes with a cost. The upside is you can have many clients which are quick to set up … just install Atom add the Nuclide add-in, [enter your server credentials](https://nuclide.io/docs/quick-start/getting-started/#remote-connection) and you are good to go! Laptop, home workstation … easy!

---

<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: [February 21, 2018, 4:56pm UTC](https://meta.discourse.org/t/plugin-development-workflow-w-remote-dev-server/80267/7 "2018-02-21T16:56:30Z")

</div>

For most stuff, I’m using [atom.io](http://atom.io) with the [Sunsetting Atom - The GitHub Blog](https://atom.io/packages/remote-sync) package together with a DigitalOcean box. Works like a charm and you can have it auto-save everything to remote. You can specify exclude directories so it won’t be spending efforts on your test and vendor directories.

Specifically for Discourse plugin development, I’ve been using [https://janitor.technology/](https://janitor.technology/) since a few weeks.

---

<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: [December 16, 2019, 11:25am UTC](https://meta.discourse.org/t/plugin-development-workflow-w-remote-dev-server/80267/8 "2019-12-16T11:25:49Z")

</div>

UPDATE: nuclide is no longer supported sadly. I use VSCode now which has a native remote editing extension and has now become arguably much more slick than Atom (on which it is shamelessly based! 😉 )
