# Plugins: using and publishing

As of v3, ScandiPWA supports frontend plugins - reusable extensions that once created can be used in any project utilizing ScandiPWA v3. These can be used to modify the functionality of almost any part of ScandiPWA.

## Valid extension definition

1. Is a valid M2 package.
2. All of its M2-related directories must be located in its root, otherwise these contents are not going to be recognized by M2. The `scandipwa` directory, if present, should be nested into an `src` directory in the extension's root.
3. If it contains any frontend functionality - the `src/scandipwa` directory with corresponding contents should be present.
4. If it contains any node dependencies - there must be a `package.json` file with all of the dependencies neighboring the `composer.json`
5. Should follow the guidelines described in [the plugin development guide](https://docs.scandipwa.com/how-to-tutorials-intermediate/scandipwa-plugins)
6. Should have a definitive installation and configuration guide in `README.md` or a reference to one (either within the archive or online).

## Uploading an extension to the marketplace

1. Implement an extension!
2. Create an empty `app` directory and a `code` directory inside of it.
3. Place your extension (M2 module) inside of the `code` directory mentioned above.
4. Archive your extension - call the archive `<vendor>--<name> <version> for ScandiPWA <supported version(s)>`. All the letters in the archive name are going to get converted to the lowercase by the marketplace.
5. See that your extension is installable following the guide beneath.
6. Follow [the guide on the marketplace](https://marketplace.scandipwa.com/create-and-sell.html) to create an account and submit your extension. All the other details regarding this process can be found there.

## Installing an extension

1. Download the desired extension from [the marketplace](https://marketplace.scandipwa.com/)
2. Unzip it, see the `app/code/<vendor>/<extension>` like file structure inside.
3. Merge the `app` folder you unpacked from the extension with the `app` directory of your Magento 2 instance.
4. Run `magento se:up` command so that the module is registered in the Magento. Check whether your module is installed properly with `magento mo:st`
5. Go to the `app/design/frontend/<vendor>/<theme>` - your ScandiPWA installation directory. There, add `"<name>": "app/code/<vendor>/<theme>"` to the `"extensions"` block of the `scandipwa.json` file.
6. Follow any additional instructions provided in the `README.md` file.
7. Recompile the theme, flush caches if necessary.


---

# 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://scandipwa.gitbook.io/docs/how-to-tutorials-intermediate/plugins-using-and-publishing.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.
