Setting up a dev environment

Installing the 3rd party dependencies

To develop and customize Converse, you’ll first need to check out Converse’s Git repository:

git clone https://github.com/conversejs/converse.js.git
cd converse.js

We use development tools which depend on Node.js and NPM (the Node package manager).

It’s recommended that you use NVM (the Node version manager) to make sure you have the right version of Node.

Refer to the NVM Github page for instructions on how to install it.

To set up a Converse development environment, you now run the following:

npm install
npm run serve &
npm run watch

Alternatively, if you have GNU Make installed, you can run:

make serve_bg
make watch

Then go to http://localhost:8000/dev.html to load Converse.

Modify dev.html so that converse.initialize() is called with the relevant settings.

Webpack will “watch” the source files and automatically recreate the build if they are modified. So you don’t have to do anything to rebuild whenever you’ve change something in a file but you will have to manually reload the browser tab to see the changes in the browser.

Live reloading

If you want to have live reloading whenever any of the source files change, you can run make devserver (or npm run devserver) which uses webpack-dev-server.

Then go to http://localhost:8080.

Instead of dev.html, webpack.html is now being used as the served HTML file, and you’ll need to modify that file to change the settings passed to converse.initialize.

Troubleshooting

After running make watch, you should now have a new node_modules directory which contains all the external dependencies of Converse.

If this directory does NOT exist, something must have gone wrong.

Double-check the output of make watch to see if there are any errors listed.

For support, you can ask in our chatroom: dicuss@conference.conversejs.org.

If you don’t have an XMPP client installed, follow this link to conversejs.org where you can log in and be taken directly to the chatroom.

libsignal

If you want OMEMO encryption, you need to load libsignal separately in your page.

For example:

<script src="3rdparty/libsignal-protocol-javascript/dist/libsignal-protocol.js"></script>

The reason libsignal needs to be loaded separately is because it’s released under the GPLv3 which requires all other dependent JavaScript code to also be open sourced under the same license. You might not be willing to adhere to those terms, which is why you need to decide for yourself whether you’re going to load libsignal or not.