# Contributing Hi there! We're delighted that you'd like to contribute to this project. It has been generous collaboration from many people all over the world that has made it possible so far, and your help is key to keeping it great. Contributions to this project are [released][contributions-released] to the public under the [project's open source license](LICENSE). This project adheres to the [Contributor Covenant Code of Conduct][covenant]. By participating, you are expected to uphold this code. ## Getting started Before you can start contributing to Beat Link Trigger, you'll need to set up your environment. Fork and clone the repo and install [Clojure][clojure] (for compiling and running the code) and [Leiningen][leiningen] (to manage the project dependencies and builds). Both of these rely on having a working Java runtime; if the mechanism you used to install them did not automatically include one, I recommend installing a current long-term-support version of the [OpenJDK][openjdk] which as of this writing is OpenJDK 21. Most Beat Link Trigger development uses [Amazon Corretto 21][corretto]. > Starting with version 0.5.3, you also need to have > [Antora](https://antora.org) installed because it is used to build > the embedded copy of the User Guide when building and running from > source. It uses `npm` to install and run itself, so you will need to > have a recent `node` version installed, and run `npm install` within > this directory to get that set up. > > If you are impatient to get started without doing that, you can > temporarily comment out the section of `project.clj` that needs it. > Add a semicolon to the `:prep-tasks` line so that it looks like > this: > > ` :prep-tasks [ ; ["shell" "npm" "run" "local-docs"]` > > But keep in mind that if you do this, the built-in user guide will > not work, and you will not be able to create a release-worthy build > until you install Antora and restore the line to its un-commented > state. Once you have those in place, you can run BLT from source by opening a terminal window inside your clone of the project, and typing `lein repl`. You will see a bunch of output as the embedded copy of the User Guide is generated by Antora and the images are copied in, and then Clojure will start, with output similar to this: REPL-y 0.4.3, nREPL 0.6.0 Clojure 1.10.1 OpenJDK 64-Bit Server VM 11.0.5+10-LTS beat-link-trigger loaded. beat-link-trigger.core=> At that point you can type `(start)` to launch the BLT user interface and go online, or, if you want to start out offline because you are working without any Pioneer gear on the network, `(start true)`. In either case, type Return or Enter to complete the command. Once the UI is up, the REPL prompt will return, and you can poke around at viewing and redefining functions and variable bindings. Of course to do any serious work, you will want some sort of editor with embedded REPL support, and ideally structural editing support for Lisp s-expressions. We find [GNU Emacs][emacs] with [CIDER][cider] to be an incredibly productive environment for Clojure work, but some of our colleagues swear by [IntelliJ IDEA][idea] (even the free Community Edition) with [Cursive][cursive], so use whatever IDE or editor works best for you. For testing you are going to want some Pro DJ Link hardware on your network, and a wired network is necessary for realistic performance. If you will be trying to analyze the protocols, you will probably want to invest in an inexpensive managed switch, to let you span (mirror) ports, so you can listen in on the traffic players and mixers send between themselves. The [Netgear GS105Ev2][switch] has worked great for us. > [!IMPORTANT] > Before doing any significant work, we strongly encourage you to discuss your ideas in the [Zulip channel][zulip]. > This will help make sure you’re on the right track, could save you a lot of effort, and ensure alignment with the overall project philosophy and goals. ### Code from AI / LLM Tools If you are planning to contribute code, please refrain from copy and pasting it from “AI” code assistants and large language models. It is fine to use those as an inspiration, or examples of the ways something could be done, but always write your own code from scratch if you are going to submit it to the project. > [!WARNING] > Code from online coding assistants may be plagiarized from other projects with incompatible licenses (and there is no way to know), and may include subtle bugs. > It is not suitable for submission to Deep Symmetry projects. ## Giving back Once you have something working you’d like to share, you can open a [pull request][pulls]. Or if you simply have an idea, or something that you wish worked differently, feel free to discuss it in the [Zulip channel][zulip], and if directed to do so by the community there, open an [issue][issues]. ## Maintainers Beat Link Trigger is primarily maintained by [@brunchboy][brunchboy]. ## License Deep Symmetry Copyright © 2016–2025 [Deep Symmetry, LLC][deep-symmetry] Distributed under the [Eclipse Public License 2.0](https://opensource.org/licenses/EPL-2.0). By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice, or any other, from this software. [brunchboy]: https://github.com/brunchboy [cider]: http://www.cider.mx/en/latest/ [clojure]: https://clojure.org [contributions-released]: https://help.github.com/articles/github-terms-of-service/#6-contributions-under-repository-license [corretto]: https://aws.amazon.com/corretto/ [covenant]: http://contributor-covenant.org/ [cursive]: https://cursive-ide.com [deep-symmetry]: https://deepsymmetry.org [emacs]: https://www.gnu.org/software/emacs/ [idea]: https://www.jetbrains.com/idea/ [issues]: https://github.com/Deep-Symmetry/beat-link-trigger/issues [leiningen]: https://leiningen.org [openjdk]: https://openjdk.java.net [pulls]: https://github.com/Deep-Symmetry/beat-link-trigger/pulls [switch]: https://smile.amazon.com/gp/product/B00HGLVZLY/ [zulip]: https://deep-symmetry.zulipchat.com/#narrow/stream/275322-beat-link-trigger