# Developping with JJazzLab

{% hint style="info" %}
JJazzLab is written in Java. Why ?

This choice reflects the project’s origins (started over 10 years ago, when Java was a common option for cross-platform desktop apps) and the nature of the problem: unlike a low-latency audio DAW, JJazzLab does not require hard real-time deadline management in the music generation engine. As a side note, modern Java is quite different from early versions and can deliver excellent performance.
{% endhint %}

## Updating the application

#### Apache NetBeans Platform

JJazzLab is based on the [Apache Netbeans Platform](https://netbeans.apache.org/tutorial/main/kb/docs/platform/) which provides a reliable and extensible architecture for cross-platform desktop applications.&#x20;

The NetBeans Platform manages the application lifecycle, window system, extension points, options, actions, and more.&#x20;

It uses NetBeans modules (different from java 9 JPMS modules) which group related Java classes into pluggable components, while managing visibility and dependencies between them.

#### Adding new features

Suppose you have a reharmonization algorithm that proposes alternate chord progressions (e.g., replacing `| A7 | Dmaj7 |` with `| Em7 A7 | Dmaj7 |`).

You can easily implement an action that, when user selects chords, suggests these alternatives in the existing chord popup menu.&#x20;

Then your code can be bundled in a module which is deployed like a plugin.&#x20;

#### Develop your own rhythm generation engine without hassle

Out of the box, JJazzLab provides the infrastructure (“plumbing”) that developers would otherwise need to build themselves: data management, user interface, MIDI management, playback control, music-generation control, etc.

In JJazzLab, the rhythm generation engine just receives a context (chords, song structure, tempo, etc.) and returns musical phrases (one per instrument) that form the backing track, ready for playback.&#x20;

The engine doesn’t have to manage real-time deadline: JJazzLab handles scheduling and synchronization.

## JJazzLab Toolkit

The [JJazzLab Toolkit](https://github.com/jjazzboss/JJazzLabToolkit) is a standalone jar file which contains the JJazzLab core features, the JJazzLab plugins and the required dependencies.&#x20;

Use the toolkit to use JJazzLab features independently of the JJazzLab application.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://jjazzlab.gitbook.io/developer-guide/readme.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
