# How to contribute

One of the easiest ways to contribute is to participate in discussions on [GitHub issues](https://github.com/smartstore/Smartstore/issues). You can also contribute by submitting pull requests with code changes.

## Watch us

To stay informed about the latest news and receive updates from Smartstore, just click on the **Watch** button at the top of our [GitHub repository page](https://github.com/smartstore/Smartstore).

## Reporting a security issue

Please report any *sensitive*, *critical*, or *urgent* vulnerabilities by using our [contact form](https://smartstore.com/en/contact) saying you need to communicate an important security issue.

After assessing the issue, we will work out how we will handle the matter and let you know how to proceed. If the vulnerability is neither *sensitive*, *critical*, or *urgent*, please just create a [new issue](https://github.com/smartstore/Smartstore/issues/new/choose) as per normal.

## Create an issue

If you stumble across an error, have an improvement suggestion or a feature request, feel free to write an issue to let us know what's on your mind.

### How to write an issue

Before you write an issue, please perform a quick search and have a look if your concern has already been mentioned. If so, you can vote for this issue. Basically, there are two different categories of issues: **bugs** and **feature requests**.

A **bug** should always be reproducible. When reporting it, please list every step you or your customer took leading up to it so that a developer can verify the existence of the problem with just a few clicks. If you've received an error message, you should provide information about that as well, preferably via a screen shoot. Every detail you can provide helps.

A **feature request** should always be born out of a need. To help us understand the request best, you should start by describing this need. Then, you should bring up one (or more) possible solutions (of course only in words, not in code, as we're talking about issues here ;-)). Don't be afraid to add any supporting photos which could help us understand the solution you're describing.

## Participate in discussions

Please keep in mind that issues are only meant to inform us about aspects we need to know. If you have questions or problems and aren't sure where they belong, please start a discussion [in our forum](http://community.smartstore.com/index.php?/forum/85-smartstore-english/) rather than open a new issue. If we consider it to be an issue, we will create an issue or advise you to create one.

## Contribute

If you are a developer who wants to keep up to date with the latest source code, we recommend downloading the current develop branch. Smartstore uses GIT for revision control and source code management. You can work with any GIT client, e.g. *TortoiseGit*, Git for Visual Studio or *SourceTree*. Personally, we've had excellent experience with *SourceTree* while working with open source projects, including, of course, Smartstore.

When working with Smartstore as a developer, you will benefit substantially by forking the software before creating some of the adaptations you need. This way, we can, for instance, pull your fork if there's a problem with a feature you're implementing, allowing us to help you. Also, when you have developed a feature or perhaps improvements that you want to contribute to Smartstore, you can very easily make a pull request so we can evaluate your code and determine whether it is relevant to the Smartstore core.

### Submitting a pull request

If you don't know what a pull request is read this article: <https://help.github.com/articles/using-pull-requests>. Make sure the repository can build and all tests pass. Familiarize yourself with the project workflow and our coding conventions.

Your pull request will now go through extensive checks by the subject matter experts on our team. Update your pull request according to feedback until it is approved by one of the team members. After that, one of our team members may adjust the branch you merge into based on the expected release schedule.

## Branching strategy

The **main** branch contains the latest source code and represents the current state of active development. It does **not** reflect a stable or released version.

Each Smartstore release is maintained in its own version-specific branch, [named after the compatible Smartstore version](#version-number-scheme) (for example, `6.1.0.x`). These branches are created at release time and are used to maintain that release, including bug fixes and urgent patches, while remaining compatible with the corresponding Smartstore version.

New features and changes are developed in dedicated feature branches (for example, `feature/webapi`). Once a feature is complete, it is merged into the appropriate target branch. The `main` branch is used for ongoing development, while a version-specific branch is used for changes intended for an existing release.

Each branch reflects source code compatible with its respective Smartstore version.

### Version number scheme

Smartstore uses the following versioning pattern: `MAJOR.MINOR.PATCH.REVISION`

* **MAJOR**: Indicates major product milestones and may include breaking changes.
* **MINOR**: Introduces new features while remaining backward compatible within the same major version.
* **PATCH**: Contains bug fixes and small improvements.
* **REVISION**: Represents ongoing maintenance updates for a released version branch.

A branch named `6.1.x.x` therefore contains all changes compatible with Smartstore version **6.1**.

## Code of conduct

See [Code of Conduct](https://github.com/smartstore/Smartstore/blob/main/CODE_OF_CONDUCT.md)


---

# 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://dev.smartstore.com/readme/how-to-contribute.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.
