feat: whyrating - initial project from turbostarter boilerplate
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
---
|
||||
title: Checklist
|
||||
description: Let's publish your TurboStarter extension to stores!
|
||||
url: /docs/extension/publishing/checklist
|
||||
---
|
||||
|
||||
# Checklist
|
||||
|
||||
When you're ready to publish your TurboStarter extension to stores, follow this checklist.
|
||||
|
||||
This process may take a few hours and some trial and error, so buckle up - you're almost there!
|
||||
|
||||
<Steps>
|
||||
<Step>
|
||||
## Create database instance
|
||||
|
||||
**Why it's necessary?**
|
||||
|
||||
A production-ready database instance is essential for storing your application's data securely and reliably in the cloud. [PostgreSQL](https://www.postgresql.org/) is the recommended database for TurboStarter due to its robustness, features, and wide support.
|
||||
|
||||
**How to do it?**
|
||||
|
||||
You have several options for hosting your PostgreSQL database:
|
||||
|
||||
* [Supabase](/docs/extension/recipes/supabase) - Provides a fully managed Postgres database with additional features
|
||||
* [Vercel Postgres](https://vercel.com/storage/postgres) - Serverless SQL database optimized for Vercel deployments
|
||||
* [Neon](https://neon.tech/) - Serverless Postgres with automatic scaling
|
||||
* [Turso](https://turso.tech/) - Edge database built on libSQL with global replication
|
||||
* [DigitalOcean](https://www.digitalocean.com/products/managed-databases) - Managed database clusters with automated failover
|
||||
|
||||
Choose a provider based on your needs for:
|
||||
|
||||
* Pricing and budget
|
||||
* Geographic region availability
|
||||
* Scaling requirements
|
||||
* Additional features (backups, monitoring, etc.)
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
## Migrate database
|
||||
|
||||
**Why it's necessary?**
|
||||
|
||||
Pushing database migrations ensures that your database schema in the remote database instance is configured to match TurboStarter's requirements. This step is crucial for the application to function correctly.
|
||||
|
||||
**How to do it?**
|
||||
|
||||
You basically have two possibilities for doing a migration:
|
||||
|
||||
<Tabs items={["Using GitHub Actions (recommended)", "Running locally"]}>
|
||||
<Tab value="Using GitHub Actions (recommended)">
|
||||
TurboStarter comes with a predefined GitHub Action to handle database migrations. You can find its definition in the `.github/workflows/publish-db.yml` file.
|
||||
|
||||
What you need to do is set your `DATABASE_URL` as a [secret for your GitHub repository](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions).
|
||||
|
||||
Then, you can run the workflow which will publish the database schema to your remote database instance.
|
||||
|
||||
[Check how to run GitHub Actions workflow.](https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/manually-running-a-workflow)
|
||||
</Tab>
|
||||
|
||||
<Tab value="Running locally">
|
||||
You can also run your migrations locally, although this is not recommended for production.
|
||||
|
||||
To do so, set the `DATABASE_URL` environment variable to your database URL (that comes from your database provider) in the `.env.local` file and run the following command:
|
||||
|
||||
```bash
|
||||
pnpm with-env pnpm --filter @turbostarter/db db:migrate
|
||||
```
|
||||
|
||||
This command will run the migrations and apply them to your remote database.
|
||||
|
||||
[Learn more about database migrations.](/docs/web/database/migrations)
|
||||
</Tab>
|
||||
</Tabs>
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
## Set up web backend API
|
||||
|
||||
**Why it's necessary?**
|
||||
|
||||
Setting up the backend is necessary to have a place to store your data and to have other features work properly (e.g. authentication, billing or storage).
|
||||
|
||||
**How to do it?**
|
||||
|
||||
Please refer to the [web deployment checklist](/docs/web/deployment/checklist) on how to set up and deploy the web app backend to production.
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
## Environment variables
|
||||
|
||||
**Why it's necessary?**
|
||||
|
||||
Setting the correct environment variables is essential for the extension to function correctly. These variables include API keys, database URLs, and other configuration details required for your extension to connect to various services.
|
||||
|
||||
**How to do it?**
|
||||
|
||||
Use our `.env.example` files to get the correct environment variables for your project. Then add them to your CI/CD provider (e.g. [GitHub Actions](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions)) as a [secret](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions).
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
## Build your app
|
||||
|
||||
**Why it's necessary?**
|
||||
|
||||
Building your extension is necessary to create a standalone extension bundle that can be published to the stores.
|
||||
|
||||
**How to do it?**
|
||||
|
||||
You basically have two possibilities to build a bundle for your extension:
|
||||
|
||||
<Tabs items={["Using GitHub Actions (recommended)", "Running locally"]}>
|
||||
<Tab value="Using GitHub Actions (recommended)">
|
||||
TurboStarter comes with a predefined GitHub Action to handle building your extension for submission. You can find its definition in the `.github/workflows/publish-extension.yml` file.
|
||||
|
||||
[Check how to run GitHub Actions workflow.](https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/manually-running-a-workflow)
|
||||
|
||||
This will also save the `.zip` file as an [artifact](https://docs.github.com/en/actions/guides/storing-workflow-data-as-artifacts) of the workflow run, so you can download it from there and submit your extension to stores (if configured).
|
||||
</Tab>
|
||||
|
||||
<Tab value="Running locally">
|
||||
You can also run your build locally, although this is not recommended for production.
|
||||
|
||||
To do it, run the following command:
|
||||
|
||||
```bash
|
||||
pnpm turbo build --filter=extension
|
||||
```
|
||||
|
||||
This will build the extension and package it into a `.zip` file. You can find the output in the `build` folder.
|
||||
</Tab>
|
||||
</Tabs>
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
## Submit to stores
|
||||
|
||||
**Why it's necessary?**
|
||||
|
||||
Publishing your extension to the stores is required to make it discoverable and accessible to your users. This is the official distribution channel where users can find, install, and trust your extension.
|
||||
|
||||
**How to do it?**
|
||||
|
||||
We've prepared dedicated guides for each store that TurboStarter supports out-of-the-box, please refer to the following pages:
|
||||
|
||||
<Cards>
|
||||
<Card title="Chrome Web Store" href="/docs/extension/publishing/chrome" description="Publish your extension to Google Chrome Web Store." />
|
||||
|
||||
<Card title="Firefox Add-ons" href="/docs/extension/publishing/firefox" description="Publish your extension to Mozilla Firefox Add-ons." />
|
||||
|
||||
<Card title="Edge Add-ons" href="/docs/extension/publishing/edge" description="Publish your extension to Microsoft Edge Add-ons." />
|
||||
</Cards>
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
That's it! Your extension is now live and accessible to your users, good job! 🎉
|
||||
|
||||
<Callout title="Other things to consider">
|
||||
* Optimize your store listing description, keywords, and other relevant information for the stores.
|
||||
* Remove the placeholder content in the extension or replace it with your own.
|
||||
* Update the favicon, scheme, store images, and logo with your own branding.
|
||||
</Callout>
|
||||
@@ -0,0 +1,166 @@
|
||||
---
|
||||
title: Chrome Web Store
|
||||
description: Publish your extension to Google Chrome Web Store.
|
||||
url: /docs/extension/publishing/chrome
|
||||
---
|
||||
|
||||
# Chrome Web Store
|
||||
|
||||
[Chrome Web Store](https://chromewebstore.google.com/) is the most popular store for browser extensions, as it makes them available in any Chromium-based browser, including Google Chrome, Edge, Brave, and many others.
|
||||
|
||||
To submit your extension to Chrome Web Store, you'll need to complete a few steps. Here, we'll go through them.
|
||||
|
||||
<Callout title="Prerequisite" type="warn">
|
||||
Make sure your extension follows the [guidelines](/docs/extension/marketing) and other requirements to increase your chances of getting approved.
|
||||
</Callout>
|
||||
|
||||
## Developer account
|
||||
|
||||
Before you can publish items on the Chrome Web Store, you must register as a CWS developer and pay a one-time registration fee. You must provide a developer email when you create your developer account.
|
||||
|
||||
To register, just access the [developer console](https://chrome.google.com/webstore/devconsole). The first time you do this, the following registration screen will appear. First, agree to the developer agreement and policies, then pay the registration fee.
|
||||
|
||||

|
||||
|
||||
Once you pay the registration fee and agree to the terms, your account will be created, and you'll be able to proceed to fill out additional information about it.
|
||||
|
||||

|
||||
|
||||
There are a few fields that you'll need to fill in:
|
||||
|
||||
* **Publisher name**: Appears under the title of each of your extensions. If you are a verified publisher, you can display an official publisher URL instead.
|
||||
* **Verified email**: Verifying your contact email address is required when you set up a new developer account. It's only displayed under your extensions' contact information. Any notifications will be sent to your Chrome Web Store developer account email.
|
||||
* **Physical address**: Only items that offer functionality to purchase items, additional features, or subscriptions must include a physical address.
|
||||
|
||||
<Card title="Register your developer account" href="https://developer.chrome.com/docs/webstore/register" description="developer.chrome.com" />
|
||||
|
||||
## Submission
|
||||
|
||||
After registering your developer account, setting it up, and preparing your extension, you're ready to publish it to the store.
|
||||
|
||||
You can submit your extension in two ways:
|
||||
|
||||
* **Manually**: By uploading your extension's bundle directly to the store.
|
||||
* **Automatically**: By using GitHub Actions to submit your extension to the stores.
|
||||
|
||||
**The first submission must be done manually, while subsequent updates can be submitted automatically.** We'll go through both approaches.
|
||||
|
||||
### Manual submission
|
||||
|
||||
To manually submit your extension to stores, you will first need to get your extension bundle. If you ran the build step locally, you should already have the `.zip` file in your extension's `build` folder.
|
||||
|
||||
If you used GitHub Actions to build your extension, you can find the results in the workflow run. Download the artifacts and save them on your local machine.
|
||||
|
||||
Then, use the following steps to upload your item:
|
||||
|
||||
1. Go to the [Chrome Web Store Developer Dashboard](https://chrome.google.com/webstore/devconsole/).
|
||||
2. Sign in to your developer account.
|
||||
3. Click on the *Add new item* button.
|
||||
4. Click *Choose file* > *your zip file* > *Upload*. If your item's manifest and other contents are valid, you will see a new item in the dashboard.
|
||||
|
||||

|
||||
|
||||
After you upload the bundle, you'll need to fill in the extension's details, such as the icons, privacy settings, permissions justification, and other information.
|
||||
|
||||
Please refer to the official guides on how to set up your extension's details.
|
||||
|
||||
<Cards>
|
||||
<Card title="Complete your listing information" href="https://developer.chrome.com/docs/webstore/cws-dashboard-listing" description="developer.chrome.com" />
|
||||
|
||||
<Card title="Fill out the privacy fields" description="developer.chrome.com" href="https://developer.chrome.com/docs/webstore/cws-dashboard-privacy" />
|
||||
|
||||
<Card title="Declare payment and set visibility" description="developer.chrome.com" href="https://developer.chrome.com/docs/webstore/cws-dashboard-distribution" />
|
||||
</Cards>
|
||||
|
||||
### Automated submission
|
||||
|
||||
<Callout title="First submission must be done manually" type="warn">
|
||||
The first submission of your extension to Chrome Web Store must be done manually because you need to provide the store's credentials and extension ID to automation, which will be available only after the first bundle upload.
|
||||
</Callout>
|
||||
|
||||
TurboStarter comes with a pre-configured GitHub Actions workflow to submit your extension to web stores automatically. It's located in the `.github/workflows/publish-extension.yml` file.
|
||||
|
||||
What you need to do is fill the environment variables with your store's credentials and extension's details and set them as a [secrets in your Github repository](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions) under correct names:
|
||||
|
||||
```yaml title="publish-extension.yml"
|
||||
env:
|
||||
CHROME_EXTENSION_ID: ${{ secrets.CHROME_EXTENSION_ID }}
|
||||
CHROME_CLIENT_ID: ${{ secrets.CHROME_CLIENT_ID }}
|
||||
CHROME_CLIENT_SECRET: ${{ secrets.CHROME_CLIENT_SECRET }}
|
||||
CHROME_REFRESH_TOKEN: ${{ secrets.CHROME_REFRESH_TOKEN }}
|
||||
```
|
||||
|
||||
Please refer to the [official guide](https://github.com/PlasmoHQ/bms/blob/main/tokens.md#chrome-web-store-api) to learn how to get these credentials correctly.
|
||||
|
||||
That's it! You can [run the workflow](https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/manually-running-a-workflow) and it will submit your extension to the Chrome Web Store 🎉
|
||||
|
||||
<Callout title="Automated submission to review">
|
||||
This workflow will also try to send your extension to review, but it's not guaranteed to happen. You need to have all required information filled in your extension's details page to make it possible.
|
||||
|
||||
Even then, when you introduce some **breaking change** (e.g. add another permission), you'll need to update your extension store metadata and automatic submit won't be possible.
|
||||
|
||||
To opt out of this behavior (and use only automatic uploading to store, but not sending to review) you can set `--chrome-skip-submit-review` flag in the `publish-extension.yml` file for the `wxt submit` command:
|
||||
|
||||
```yaml title="publish-extension.yml"
|
||||
// [!code word:--chrome-skip-submit-review]
|
||||
- name: 💨 Publish!
|
||||
run: |
|
||||
npx wxt submit \
|
||||
--chrome-zip apps/extension/build/*-chrome.zip --chrome-skip-submit-review
|
||||
```
|
||||
|
||||
Then, your extension bundle will be uploaded to the store, but you will need to send it to review manually.
|
||||
|
||||
Check out the [official documentation](https://wxt.dev/api/cli/wxt-submit) for more customization options.
|
||||
</Callout>
|
||||
|
||||
<Cards>
|
||||
<Card title="Use the Chrome Web Store Publish API" href="https://developer.chrome.com/docs/webstore/using-api" description="developer.chrome.com" />
|
||||
|
||||
<Card title="How to generate Google API tokens?" href="https://github.com/PlasmoHQ/chrome-webstore-api/blob/main/token.md" description="github.com" />
|
||||
</Cards>
|
||||
|
||||
## Review
|
||||
|
||||
After filling out the information about your item, you are ready to send it to review. Click on *Submit for review* button and confirm that you want to submit your item in the following dialog:
|
||||
|
||||

|
||||
|
||||
The confirmation dialog shown above also lets you control the timing of your item's publishing. If you uncheck the checkbox, your item will **not** be published immediately after its review is complete. Instead, you'll be able to manually publish it at a time of your choosing once the review is complete.
|
||||
|
||||
After you submit the item for review, it will undergo a review process. The time for this review depends on the nature of your item. See [Understanding the review process](https://developer.chrome.com/docs/webstore/review-process) for more details.
|
||||
|
||||
There are important emails like take down or rejection notifications that are enabled by default. To receive an email notification when your item is published or staged, you can enable notifications on the *Account page*.
|
||||
|
||||

|
||||
|
||||
The review status of your item appears in the [developer dashboard](https://chrome.google.com/webstore/devconsole) next to each item. The status can be one of the following:
|
||||
|
||||
* **Published**: Your item is available to all users.
|
||||
* **Pending**: Your item is under review.
|
||||
* **Rejected**: Your item was rejected by the store.
|
||||
* **Taken Down**: Your item was taken down by the store.
|
||||
|
||||

|
||||
|
||||
You'll receive an email notification when the status of your item changes.
|
||||
|
||||
<Callout title="Your submission might be rejected" type="error">
|
||||
If your extension has been determined to violate one or more terms or policies, you will receive an email notification that contains the violation description and instructions on how to rectify it.
|
||||
|
||||
If you did not receive an email within a week, check the status of your item. If your item has been rejected, you can see the details on the *Status* tab of your item.
|
||||
|
||||

|
||||
|
||||
You'll need to fix the issues and upload a new version of your extension, make sure to follow the [guidelines](/docs/extension/marketing) or check [publishing troubleshooting](/docs/extension/troubleshooting/publishing) for more info.
|
||||
|
||||
If you have been informed about a violation and you do not rectify it, your item will be taken down. See [Violation enforcement](https://developer.chrome.com/docs/webstore/review-process#enforcement) for more details.
|
||||
</Callout>
|
||||
|
||||
You can learn more about the review process in the official guides listed below.
|
||||
|
||||
<Cards>
|
||||
<Card title="Chrome Web Store review process" href="https://developer.chrome.com/docs/webstore/review-process" description="developer.chrome.com" />
|
||||
|
||||
<Card title="Troubleshooting Chrome Web Store violations" href="https://developer.chrome.com/docs/webstore/troubleshooting" description="developer.chrome.com" />
|
||||
</Cards>
|
||||
@@ -0,0 +1,242 @@
|
||||
---
|
||||
title: Edge Add-ons
|
||||
description: Publish your extension to Microsoft Edge Add-ons.
|
||||
url: /docs/extension/publishing/edge
|
||||
---
|
||||
|
||||
# Edge Add-ons
|
||||
|
||||
[Microsoft Edge Add-ons](https://microsoftedge.microsoft.com/addons/) distributes extensions to Microsoft Edge users. If you already have a Chromium-based extension, you can submit it to Edge with minimal changes.
|
||||
|
||||
This guide walks you through manual submission and optional automation, aligned with the official process.
|
||||
|
||||
<Callout title="Prerequisite" type="warn">
|
||||
Make sure your extension follows the general [guidelines](/docs/extension/marketing) and the Edge Add-ons developer policies to increase your chances of approval.
|
||||
</Callout>
|
||||
|
||||
## Developer account
|
||||
|
||||
To enroll in the Microsoft Edge program you need to have a Microsoft account. If you don't have one, you can create one [here](https://account.microsoft.com/account/signup?signin=1\&ru=https://account.microsoft.com/account/login?loginMethod=email).
|
||||
|
||||

|
||||
|
||||
Next, before you can publish your extension to Edge Add-ons, you need to register your developer account in [Partner Center](https://partner.microsoft.com/dashboard/microsoftedge/public/login?ref=dd). Fill out the required fields and submit the form with *Finish* button. Wait for the email that your account has been verified - you're ready to submit your extension!
|
||||
|
||||

|
||||
|
||||
<Card title="Register as a Microsoft Edge extension developer" href="https://learn.microsoft.com/en-us/microsoft-edge/extensions/publish/create-dev-account" description="learn.microsoft.com" />
|
||||
|
||||
## Submission
|
||||
|
||||
After your account is ready and the extension bundle is prepared, you can publish it. There are two paths:
|
||||
|
||||
* **Manually**: Upload your `.zip` package through Partner Center.
|
||||
* **Automatically**: Use CI to upload new versions after the first manual submission.
|
||||
|
||||
**The first submission should be done manually.** Subsequent updates can be automated once you have your extension ID and required credentials.
|
||||
|
||||
### Manual submission
|
||||
|
||||
To manually submit your extension to stores, you will first need to get your extension bundle. If you ran the build step locally, you should already have the .zip file in your extension's build folder.
|
||||
|
||||
If you used GitHub Actions to build your extension, you can find the results in the workflow run. Download the artifacts and save them on your local machine.
|
||||
|
||||
Then, use the following steps to upload your item:
|
||||
|
||||
<Steps>
|
||||
<Step>
|
||||
#### Sign in to your developer account
|
||||
|
||||
Go to the [Partner Center](https://partner.microsoft.com/dashboard/microsoftedge/public/login?ref=dd) and sign in to your developer account.
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
#### Create new extension
|
||||
|
||||
Click the *Create new extension* button to start a new submission.
|
||||
|
||||

|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
#### Upload the extension package
|
||||
|
||||
The *Extension overview* page shows information for a specific extension:
|
||||
|
||||

|
||||
|
||||
To upload your extension package:
|
||||
|
||||
1. Click *Packages* in the left sidebar.
|
||||
2. Drag and drop your `.zip` file or click *Browse your files* to select it.
|
||||
3. Wait for validation to complete. If it fails, fix any issues and re-upload.
|
||||
4. Review the extracted extension details and click *Continue*.
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
#### Set availability
|
||||
|
||||
Choose visibility:
|
||||
|
||||
* `Public`: discoverable in the store and via search.
|
||||
* `Hidden`: not discoverable; accessible via direct listing URL only.
|
||||
|
||||
Select markets where the extension is available. You can later add or remove markets; existing users retain access to installed versions.
|
||||
|
||||

|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
#### Enter properties
|
||||
|
||||
Provide category, privacy policy requirements, privacy policy URL (if applicable), website URL, and support contact.
|
||||
|
||||
These are shown to users on the listing and must meet policy requirements.
|
||||
|
||||

|
||||
|
||||
Follow the [official documentation](https://learn.microsoft.com/en-us/microsoft-edge/extensions/publish/publish-extension#step-4-enter-properties-describing-your-extension) for more details.
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
#### Add store listing details
|
||||
|
||||
Fill in the store listing details for your extension:
|
||||
|
||||
* **Display name**: The name shown in the store (from your manifest file).
|
||||
* **Description**: A detailed description (250-5000 characters) explaining what your extension does and why users should install it.
|
||||
* **Extension Store logo**: A 300x300 pixel logo representing your extension.
|
||||
* **Screenshots**: Up to 10 screenshots (640x480 or 1280x800 pixels) showing your extension's functionality.
|
||||
* **Small/Large promotional tiles**: Optional promotional images for store featuring.
|
||||
* **YouTube video URL**: Optional promotional video.
|
||||
* **Search terms**: Keywords to help users discover your extension (up to 21 words total).
|
||||
|
||||
You must provide the description and logo for each supported language. Other fields are optional but recommended for better discoverability.
|
||||
|
||||

|
||||
|
||||
Follow the [official documentation](https://learn.microsoft.com/en-us/microsoft-edge/extensions/publish/publish-extension#step-5-add-store-listing-details-for-your-extension) for detailed requirements and best practices.
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
#### Submit for review
|
||||
|
||||
Complete the submission by providing testing notes to help certification testers understand your extension.
|
||||
|
||||
Click the *Submit* button to open the submission page:
|
||||
|
||||

|
||||
|
||||
In the **Notes for certification** text box, provide additional information to help testers properly evaluate your extension. Include any relevant details such as:
|
||||
|
||||
* Test account usernames and passwords
|
||||
* Steps to access hidden or locked features
|
||||
* Expected differences based on region or user settings
|
||||
* Information about changes if this is an update
|
||||
* Any other context testers need to understand your submission
|
||||
|
||||
Once you've added your notes, click the *Publish* button to submit your extension for certification.
|
||||
|
||||
Your extension will proceed to the certification step, which can take up to seven business days.
|
||||
|
||||
After passing certification, your extension will be published to [Microsoft Edge Add-ons](https://microsoftedge.microsoft.com/addons/) and the status in Partner Center will change to "In the Store".
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Cards>
|
||||
<Card title="Publish a Microsoft Edge extension" href="https://learn.microsoft.com/en-us/microsoft-edge/extensions/publish/publish-extension" description="learn.microsoft.com" />
|
||||
|
||||
<Card title="Curation and review process for extensions at Microsoft Edge Add-ons" href="https://learn.microsoft.com/en-us/microsoft-edge/extensions/publish/add-ons-curation" description="learn.microsoft.com" />
|
||||
</Cards>
|
||||
|
||||
## Automated submission
|
||||
|
||||
<Callout title="First submission must be done manually" type="warn">
|
||||
The first submission of your extension to Microsoft Edge Add-ons must be done manually because you need to provide the store's credentials and extension ID to automation, which will be available only after the first bundle upload.
|
||||
</Callout>
|
||||
|
||||
TurboStarter comes with a pre-configured GitHub Actions workflow to submit your extension to web stores automatically. It's located in the .github/workflows/publish-extension.yml file.
|
||||
|
||||
What you need to do is fill the environment variables with your store's credentials and extension's details and set them as a [secrets in your Github repository](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions) under correct names:
|
||||
|
||||
```yaml title="publish-extension.yml"
|
||||
env:
|
||||
EDGE_PRODUCT_ID: ${{ secrets.EDGE_PRODUCT_ID }}
|
||||
EDGE_CLIENT_ID: ${{ secrets.EDGE_CLIENT_ID }}
|
||||
EDGE_API_KEY: ${{ secrets.EDGE_API_KEY }}
|
||||
```
|
||||
|
||||
Please refer to the [official guide](https://github.com/PlasmoHQ/bms/blob/main/tokens.md#edge-add-ons-api-v11) to learn how to get these credentials correctly.
|
||||
|
||||
Once configured, you can manually [trigger the workflow](https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/manually-running-a-workflow) to upload the new version to Edge Add-ons 🎉
|
||||
|
||||
<Callout title="Automated submission to review">
|
||||
This workflow will also try to send your extension to review, but it's not guaranteed to happen. You need to have all required information filled in your extension's details page to make it possible.
|
||||
|
||||
Even then, when you introduce some **breaking change** (e.g. add another permission), you'll need to update your extension store metadata and automatic submit won't be possible.
|
||||
|
||||
To opt out of this behavior (and use only automatic uploading to store, but not sending to review) you can set `--edge-skip-submit-review` flag in the `publish-extension.yml` file for the `wxt submit` command:
|
||||
|
||||
```yaml title="publish-extension.yml"
|
||||
// [!code word:--edge-skip-submit-review]
|
||||
- name: 💨 Publish!
|
||||
run: |
|
||||
npx wxt submit \
|
||||
--edge-zip apps/extension/build/*-chrome.zip --edge-skip-submit-review
|
||||
```
|
||||
|
||||
Then, your extension bundle will be uploaded to the store, but you will need to send it to review manually.
|
||||
|
||||
Check out the [official documentation](https://wxt.dev/api/cli/wxt-submit) for more customization options.
|
||||
</Callout>
|
||||
|
||||
<Cards>
|
||||
<Card title="Alternative ways to distribute an extension" href="https://learn.microsoft.com/en-us/microsoft-edge/extensions/developer-guide/alternate-distribution-options" description="learn.microsoft.com" />
|
||||
|
||||
<Card title="REST API for updating an extension" href="https://learn.microsoft.com/en-us/microsoft-edge/extensions/update/api/using-addons-api?tabs=v1-1" description="learn.microsoft.com" />
|
||||
</Cards>
|
||||
|
||||
## Review
|
||||
|
||||
After you submit your extension, it enters Microsoft's certification and publishing pipeline.
|
||||
|
||||
1. Preprocessing
|
||||
* Uploaded packages are queued and scanned. If errors are detected during preprocessing, you'll see a message and must resolve issues before re-uploading.
|
||||
2. Certification
|
||||
* Security tests: packages are checked for viruses and malware.
|
||||
* Content compliance: human review of your listing and content for policy adherence.
|
||||
3. Release and publishing
|
||||
* If you selected publish immediately, publishing begins right away; otherwise schedule/hold options apply.
|
||||
* While publishing, the submission status page shows rollout details. When complete, the status changes from "Publishing" to "In the Store".
|
||||
4. Edge Add-ons curation and ranking
|
||||
* Discovery is influenced by quality, relevancy (name, description, popularity, user experience), and popularity (ratings and averages). Security and policy compliance are verified per the developer policies.
|
||||
|
||||
Microsoft may also perform spot checks after publishing to ensure ongoing compliance.
|
||||
|
||||
The review status of your item appears in the [Partner Center](https://partner.microsoft.com/dashboard/microsoftedge/public/login?ref=dd) under the *Overview* page of your item.
|
||||
|
||||

|
||||
|
||||
You'll receive an email notification when the status of your item changes.
|
||||
|
||||
<Callout title="Your submission might be rejected" type="error">
|
||||
If your extension has been determined to violate one or more terms or policies, you will receive an email notification that contains the violation description and instructions on how to rectify it.
|
||||
|
||||

|
||||
|
||||
You can also check the reason behind the rejection on the *Certification report* page of your item.
|
||||
|
||||

|
||||
|
||||
You'll need to fix the issues and upload a new version of your extension. Make sure to follow the [guidelines](/docs/extension/marketing) or check [publishing troubleshooting](/docs/extension/troubleshooting/publishing) for more info.
|
||||
</Callout>
|
||||
|
||||
You can learn more about the review process in the official guides listed below.
|
||||
|
||||
<Cards>
|
||||
<Card title="Microsoft Edge Add-ons developer policies" href="https://learn.microsoft.com/en-us/legal/microsoft-edge/extensions/developer-policies" description="learn.microsoft.com" />
|
||||
|
||||
<Card title="The app certification process for add-on" href="https://learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/add-on/app-certification-process" description="learn.microsoft.com" />
|
||||
|
||||
<Card title="Curation and review process for extensions at Microsoft Edge Add-ons" href="https://learn.microsoft.com/en-us/microsoft-edge/extensions/publish/add-ons-curation" description="learn.microsoft.com" />
|
||||
</Cards>
|
||||
@@ -0,0 +1,218 @@
|
||||
---
|
||||
title: Firefox Add-ons
|
||||
description: Publish your extension to Mozilla Firefox Add-ons.
|
||||
url: /docs/extension/publishing/firefox
|
||||
---
|
||||
|
||||
# Firefox Add-ons
|
||||
|
||||
Mozilla Firefox doesn't share extensions with [Google Chrome](/docs/extension/publishing/chrome), so you'll need to publish your extension to it separately.
|
||||
|
||||
Here, we'll go through the process of publishing an extension to [Firefox Add-ons](https://addons.mozilla.org/).
|
||||
|
||||
<Callout title="Prerequisite" type="warn">
|
||||
Make sure your extension follows the [guidelines](/docs/extension/marketing) and other requirements to increase your chances of getting approved.
|
||||
</Callout>
|
||||
|
||||
## Developer account
|
||||
|
||||
Before you can publish items on Firefox Add-ons, you must register a developer account. In comparison to the Chrome Web Store, Firefox Add-ons doesn't require a registration fee.
|
||||
|
||||
To register, go to [addons.mozilla.org](https://addons.mozilla.org/) and click on the *Register* button.
|
||||
|
||||

|
||||
|
||||
It's important to set at least a display name on your profile to increase transparency with users, add-on reviewers, and the greater community.
|
||||
|
||||
You can do it in the *Edit My Profile* section:
|
||||
|
||||

|
||||
|
||||
<Card title="Developer accounts" href="https://extensionworkshop.com/documentation/publish/developer-accounts/" description="extensionworkshop.com" />
|
||||
|
||||
## Submission
|
||||
|
||||
After registering your developer account, setting it up, and preparing your extension, you're ready to publish it to the store.
|
||||
|
||||
You can submit your extension in two ways:
|
||||
|
||||
* **Manually**: By uploading your extension's bundle directly to the store.
|
||||
* **Automatically**: By using GitHub Actions to submit your extension to the stores.
|
||||
|
||||
**The first submission must be done manually, while subsequent updates can be submitted automatically.** We'll go through both approaches.
|
||||
|
||||
### Manual submission
|
||||
|
||||
To manually submit your extension to stores, you will first need to get your extension bundle. If you ran the build step locally, you should already have the `.zip` file in your extension's `build` folder.
|
||||
|
||||
If you used GitHub Actions to build your extension, you can find the results in the workflow run. Download the artifacts and save them on your local machine.
|
||||
|
||||
Then, use the following steps to upload your item:
|
||||
|
||||
<Steps>
|
||||
<Step>
|
||||
#### Sign in to your developer account
|
||||
|
||||
Go to the [Add-ons Developer Hub](https://addons.mozilla.org/developers/) and sign in to your developer account.
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
#### Choose distribution method
|
||||
|
||||
You should reach the following page:
|
||||
|
||||

|
||||
|
||||
Here, you have two ways of distributing your extension:
|
||||
|
||||
* **On this site**, if you want your add-on listed on AMO (Add-ons Manager).
|
||||
* **On your own**, if you plan to distribute the add-on yourself and don't want it listed on AMO.
|
||||
|
||||
We recommend going with the first option, as it will allow you to reach more users and get more feedback. If you decide to go with the second option, please refer to the [official documentation](https://extensionworkshop.com/documentation/publish/self-distribution/) for more details.
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
#### Submit your extension
|
||||
|
||||
On the next page, click on *Select file* and choose your extension's `.zip` bundle.
|
||||
|
||||

|
||||
|
||||
Once you upload the bundle, the validator checks the add-on for issues and the page updates:
|
||||
|
||||

|
||||
|
||||
If your add-on passes all the checks, you can proceed to the next step.
|
||||
|
||||
<Callout type="warn">
|
||||
You may receive a message that you only have warnings. It's advisable to address these warnings, particularly those flagged as security or privacy issues, as they may result in your add-on failing review. However, **you can continue with the submission**.
|
||||
</Callout>
|
||||
|
||||
If the validation fails, you'll need to address the issues and upload a new version of your add-on.
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
#### Submit source code (if needed)
|
||||
|
||||
You'll need to indicate whether you need to provide the source code of your extension:
|
||||
|
||||

|
||||
|
||||
If you select *Yes*, a section displays describing what you need to submit. Click *Browse* and locate and upload your source code package. See [Source code submission](https://extensionworkshop.com/documentation/publish/source-code-submission/) for more information.
|
||||
|
||||
<Callout type="warn">
|
||||
You may receive a message that you only have warnings. It's advisable to address these warnings, particularly those flagged as security or privacy issues, as they may result in your add-on failing review. However, **you can continue with the submission**.
|
||||
</Callout>
|
||||
|
||||
If the validation fails, you'll need to address the issues and upload a new version of your add-on.
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
#### Add metadata
|
||||
|
||||
On the next page, you'll need to provide the following additional information about your extension:
|
||||
|
||||

|
||||
|
||||
* **Name**: Your add-on's name.
|
||||
* **Add-on URL**: The URL for your add-on on AMO. A URL is automatically assigned based on your add-on's name. To change this, click Edit. The URL must be unique. You will be warned if another add-on is using your chosen URL, and you must enter a different one.
|
||||
* **Summary**: A useful and descriptive short summary of your add-on.
|
||||
* **Description**: A longer description that provides users with details of the extension's features and functionality.
|
||||
* **This add-on is experimental**: Indicate if your add-on is experimental or otherwise not ready for general use. The add-on will be listed but with reduced visibility. You can remove this flag when your add-on is ready for general use.
|
||||
* **This add-on requires payment, non-free services or software, or additional hardware**: Indicate if your add-on requires users to make an additional purchase for it to work fully.
|
||||
* **Select up to 2 Firefox categories for this add-on**: Select categories that describe your add-on.
|
||||
* **Select up to 2 Firefox for Android categories for this add-on**: Select categories that describe your add-on.
|
||||
* **Support email and Support website**: Provide an email address and website where users can get in touch when they have questions, issues, or compliments.
|
||||
* **License**: Select the appropriate license for your add-on. Click Details to learn more about each license.
|
||||
* **This add-on has a privacy policy**: If any data is being transmitted from the user's device, a privacy policy explaining what is being sent and how it's used is required. Check this box and provide the privacy policy.
|
||||
* **Notes for Reviewers**: Provide information to assist the AMO reviewer, such as login details for a dummy account, source code information, or similar.
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
#### Finalize the process
|
||||
|
||||
Once you're ready, click on the *Submit Version* button.
|
||||
|
||||

|
||||
|
||||
You can still edit your add-on's details from the dedicated page after submission.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Cards>
|
||||
<Card title="Resources for publishers" href="https://extensionworkshop.com/documentation/manage/resources-for-publishers/" description="extensionworkshop.com" />
|
||||
|
||||
<Card title="Source code submission" href="https://extensionworkshop.com/documentation/publish/source-code-submission/" description="extensionworkshop.com" />
|
||||
</Cards>
|
||||
|
||||
### Automated submission
|
||||
|
||||
<Callout title="First submission must be done manually" type="warn">
|
||||
The first submission of your extension to Firefox Add-ons must be done manually because you need to provide the store's credentials and extension ID to automation, which will be available only after the first bundle upload.
|
||||
</Callout>
|
||||
|
||||
TurboStarter comes with a pre-configured GitHub Actions workflow to submit your extension to web stores automatically. It's located in the `.github/workflows/publish-extension.yml` file.
|
||||
|
||||
What you need to do is fill the environment variables with your store's credentials and extension's details and set them as a [secrets in your Github repository](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions) under correct names:
|
||||
|
||||
```yaml title="publish-extension.yml"
|
||||
env:
|
||||
FIREFOX_EXTENSION_ID: ${{ secrets.FIREFOX_EXTENSION_ID }}
|
||||
FIREFOX_JWT_ISSUER: ${{ secrets.FIREFOX_JWT_ISSUER }}
|
||||
FIREFOX_JWT_SECRET: ${{ secrets.FIREFOX_JWT_SECRET }}
|
||||
```
|
||||
|
||||
Please refer to the [official guide](https://github.com/PlasmoHQ/bms/blob/main/tokens.md#firefox-add-ons-api) to learn how to get these credentials correctly.
|
||||
|
||||
That's it! You can [run the workflow](https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/manually-running-a-workflow) and it will submit your extension to the Firefox Add-ons 🎉
|
||||
|
||||
<Callout title="Automated submission to review">
|
||||
This workflow will also try to send your extension to review, but it's not guaranteed to happen. You need to have all required information filled in your extension's details page to make it possible.
|
||||
|
||||
Even then, when you introduce some **breaking change** (e.g., add another permission), you'll need to update your extension store metadata and automatic submission won't be possible.
|
||||
</Callout>
|
||||
|
||||
<Cards>
|
||||
<Card title="A new API for submitting and updating add-ons" href="https://blog.mozilla.org/addons/2022/03/17/new-api-for-submitting-and-updating-add-ons/" description="blog.mozilla.org" />
|
||||
|
||||
<Card title="Mozilla API keys" href="https://addons.mozilla.org/en-US/developers/addon/api/key/" description="addons.mozilla.org" />
|
||||
</Cards>
|
||||
|
||||
## Review
|
||||
|
||||
Once you submit your extension bundle, it's automatically sent to review and will undergo a review process. The time for this review depends on the nature of your item.
|
||||
|
||||
The add-on review process includes the following phases:
|
||||
|
||||
1. **Automatic Review**: Upon upload, the add-on undergoes several automatic validation steps to ensure its general safety.
|
||||
2. **Content Review**: Shortly after submission, a human reviewer inspects the add-on to ensure that the listing adheres to content review guidelines, including metadata such as the add-on name and description.
|
||||
3. **Technical Code Review**: The add-on's source code is examined to ensure compliance with review policies.
|
||||
4. **Basic Functionality Testing**: After the source code is verified as safe, the add-on undergoes basic functionality testing to confirm it operates as described.
|
||||
|
||||
There are important emails like takedown or rejection notifications that are enabled by default. To receive an email notification when your item is published or staged, you can enable notifications in the *Account Settings*.
|
||||
|
||||

|
||||
|
||||
The review status of your item appears in the [developer hub](https://addons.mozilla.org/en-US/firefox/) next to each item.
|
||||
|
||||

|
||||
|
||||
You'll receive an email notification when the status of your item changes.
|
||||
|
||||
<Callout title="Your submission might be rejected" type="error">
|
||||
If your extension has been determined to violate one or more terms or policies, you will receive an email notification that contains the violation description and instructions on how to rectify it.
|
||||
|
||||
You can also check the reason behind the rejection on the *Status* page of your item.
|
||||
|
||||

|
||||
|
||||
You'll need to fix the issues and upload a new version of your extension. Make sure to follow the [guidelines](/docs/extension/marketing) or check [publishing troubleshooting](/docs/extension/troubleshooting/publishing) for more info.
|
||||
</Callout>
|
||||
|
||||
You can learn more about the review process in the official guides listed below.
|
||||
|
||||
<Cards>
|
||||
<Card title="Add-ons/Reviewers/Guide/Reviewing" href="https://wiki.mozilla.org/Add-ons/Reviewers/Guide/Reviewing" description="wiki.mozilla.org" />
|
||||
|
||||
<Card title="Add-ons/Reviewers/Content Review Guidelines" href="https://wiki.mozilla.org/Add-ons/Reviewers/Content_Review_Guidelines" description="wiki.mozilla.org" />
|
||||
</Cards>
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
title: Updates
|
||||
description: Learn how to update your published extension.
|
||||
url: /docs/extension/publishing/updates
|
||||
---
|
||||
|
||||
# Updates
|
||||
|
||||
After publishing your extension to the stores, you can release updates to deliver new features and bug fixes to your users.
|
||||
|
||||
TurboStarter provides a ready-to-use process for updating your extensions. Let's quickly review how it works.
|
||||
|
||||
## Uploading a new version
|
||||
|
||||
The recommended way to update your extension is to submit a new version to the stores. This method is the most reliable, although it may take some time for the new version to be approved and become available to users.
|
||||
|
||||
To submit a new version, simply update the version number in your `package.json` file:
|
||||
|
||||
```json title="package.json"
|
||||
{
|
||||
...
|
||||
"version": "1.0.0", // [!code --]
|
||||
"version": "1.0.1", // [!code ++]
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Next, follow the exact same steps as [when you initially published your extension](/docs/extension/publishing/checklist). When submitting your extension for review, be sure to provide release notes describing the new version.
|
||||
Reference in New Issue
Block a user