Публікація розширення у Firefox Add-ons (AMO)
Firefox Add-ons (addons.mozilla.org, AMO) — офіційний магазин розширень Mozilla. На відміну від Chrome Web Store, AMO надає детальні інструменти для розробників та підтримує гнучкіші політики.
Створення аккаунту розробника
Реєстрація на addons.mozilla.org/developers через аккаунт Mozilla. Взнос не потрібен — публікація безплатна.
Відмінності Firefox від Chrome
Firefox підтримує обидва манієста — MV2 та MV3, але з особливостями:
{
"manifest_version": 2,
"browser_specific_settings": {
"gecko": {
"id": "[email protected]",
"strict_min_version": "91.0"
}
}
}
Поле browser_specific_settings.gecko.id обов'язкове для Firefox. Без нього розширення не зможе отримувати оновлення коректно. ID у форматі email або GUID: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.
Кросс-браузерна сумісність
Більшість Chrome-розширень працюють у Firefox з мінімальними правками. Головні відмінності:
// Поліфіл для обох браузерів
const browser = typeof globalThis.browser !== 'undefined'
? globalThis.browser
: globalThis.chrome;
// Або використовуйте webextension-polyfill від Mozilla
// npm install webextension-polyfill
import browser from 'webextension-polyfill';
webextension-polyfill загортає Chrome callbacks у проміси та нормалізує відмінності API.
Підготовка пакета
AMO вимагає вихідний код для розширень, які використовують мініфікацію або бандлінг:
# Сборка розширення
npm run build
# ZIP з фінальними файлами
cd dist/
zip -r ../firefox-extension-1.0.0.zip .
# Окремий ZIP з вихідниками (обов'язковий якщо використовуєте bundler)
cd ../
zip -r source-code-1.0.0.zip src/ package.json webpack.config.js \
--exclude "node_modules/*" \
--exclude ".git/*"
Без вихідників ревю може бути відклонено з запитом їх надати.
Завантаження через веб-інтерфейс
У Developer Hub → «Submit a New Add-on»:
- Distribution method: AMO (публічний) або Self-distribution (підписаний XPI без листинга)
- Upload your add-on: завантажте ZIP
- Upload source code: якщо використовуєте bundler
- Describe your add-on: назва, опис, категорія
Self-distribution та підписання
Будь-яке розширення у Firefox має бути підписане Mozilla, навіть якщо ви не плануєте публікувати його у AMO. Для корпоративного або особистого використання:
# Встановлення web-ext
npm install -g web-ext
# Підписання через AMO API (файл отримає підпис Mozilla)
web-ext sign \
--source-dir ./dist \
--artifacts-dir ./signed \
--api-key $AMO_API_KEY \
--api-secret $AMO_API_SECRET
Підписаний .xpi можна встановити через about:addons або розповсюджувати самостійно.
AMO API для автоматизації
# Завантаження нової версії через API
curl -X POST \
"https://addons.mozilla.org/api/v5/addons/addon/{addon-id}/versions/" \
-H "Authorization: JWT $AMO_JWT_TOKEN" \
-F "[email protected]" \
-F "[email protected]"
JWT генерується з API credentials (api_key + api_secret):
import jwt from 'jsonwebtoken';
const token = jwt.sign(
{ iss: API_KEY, jti: Math.random().toString(), iat: Math.floor(Date.now() / 1000), exp: Math.floor(Date.now() / 1000) + 60 },
API_SECRET
);
Повний SDK: web-ext sign робить це автоматично.
Процес ревю на AMO
AMO має два рівні ревю:
Автоматизований (Listed — Recommended не запитується): більшість розширень проходять автоматичну перевірку на шкідливий код та отримують статус «Listed» протягом кількох годин.
Ручне ревю (Recommended badge): команда AMO перевіряє код вручну. Розширення отримує значок «Recommended» — більше довіри користувачів, з'явлення в editorial picks. Ревю займає від кількох днів до кількох тижнів.
Основні причини відмови: віддалено завантажуваний код, прихована функціональність, надлишкові дозволи, відсутність вихідників для обфусцированого коду.
Локалізація листинга
AMO підтримує повну локалізацію через веб-інтерфейс або файли _locales/ в розширенні:
_locales/
en_US/
messages.json
ru/
messages.json
de/
messages.json
// _locales/en_US/messages.json
{
"extensionName": { "message": "Назва розширення" },
"extensionDescription": { "message": "Опис для користувачів" }
}
// manifest.json
{
"name": "__MSG_extensionName__",
"description": "__MSG_extensionDescription__"
}
Локалізовані описи на AMO додаються окремо у Developer Hub — вони не беруться автоматично з _locales.







