Aplikacje XULRunner, rozszerzenia oraz motywy dzielą wspólna strukturę katalogów, a w niektórych przypadkach ta sama paczka może być używana zarówno w samodzielnej aplikacji XULRunner jak i w rozszerzeniu aplikacji, które można instalować.
Podstawowa struktura paczki
Paczka może zawierać jakikolwiek z poniższych plików:
/install.rdfManifest instalacyjny rozszerzenia/motywu /application.iniManifest inicjalizacji aplikacji /components/*Komponenty oraz pliki XPT (>=1.7) /defaults/preferences/*.jsUstawienia domyślne (>=1.7) /plugins/*Wtyczki NPAPI (>=1.8) /chrome.manifestManifest rejestracji Chrome (>=1.8) /chrome/icons/default/*Ikony okna (>=1.8)
Oczywiście rozszerzenie nie musi (i normalnie nie będzie) zawierać wszystkich powyższych katalogów. Motywy podlegają ograniczeniom ze względów bezpieczeństwa i standardowo zawierają tylko chrome.manifest rejestrujący dany motyw oraz plik JAR.
Podkatalogi zależne od platformy
W niektórych przypadkach rozszerzenia, lub aplikacje będą chciały dołączyć składniki binarne lub wtyczki dla wielu platform, lub tez autorzy motywów będą chcieli załączyć pliki JAR dla wielu platform. W celu rozwiązania pierwszego przypadku rozszerzenie / loader aplikacji zawiera specjalne podkatalogi przeznaczone dla plików zależnych od platformy (rozpoczynając od Toolkitu/Gecko 1.8, Firefox/Thunderbird 1.5). Ciąg określający platformę jest definiowany podczas budowania toolkitu i składa się z unikalnej kombinacji systemu operacyjnego, architektury procesora oraz kompilatora. Format tegoż ciągu wygląda następująco:
{OS_TARGET}_{TARGET_XPCOM_ABI}
Wszystkie pliki ładowane z głównego katalogu rozszerzenia są ładowane z podkatalogu
/platform/{platform string}
Jeśli istnieje. Dla przykładu, jeśli producent wtyczki chce ja udostępnić dla użytkownika systemów: Linux, Macintosh i Windows to powinien dostarczyć poniższe pliki:
/platform/Linux_x86-gcc3/plugins/libMyPlugin.so /platform/WINNT_x86-msvc/plugins/MyPlugin.dll /platform/Darwin_ppc-gcc3/plugins/libMyPlugin.dylib
Ponieważ pliki XPT są niezależne od platformy, to wszystkie pliki z nimi związane powinny być za ogólnym katalogu komponentów:
/components/MyPlugin.xpt
Jeśli rozszerzenie nie posada żadnego kodu binarnego zależnego od platformy (tj. kod skryptu używający rejestrów Windows), to może ono również wykorzystywać identyfikator systemu operacyjnego jako podkatalog platformy:
/platform/WINNT/components/registerDoctype.js
W przypadku użycia plików JAR zależnych od platformy każdy katalog platformy powinien posiadać własny plik chrome.manifest:
chrome.manifest chrome/mytheme-base.jar platform/Darwin/chrome.manifest platform/Darwin/chrome/mytheme-mac.jar platform/WINNT/chrome.manifest platform/WINNT/chrome/mytheme-win.jar
Załadunek rozszerzenia / aplikacji rozpoczyna się od katalogów bazowych, a następnie katalogów platformy aplikacji (wpierw /{OS_TARGET}/, potem /{OS_TARGET}_{TARGET_XPCOM_ABI}/). Jeśli zdefiniowano domyślne własności w poszczególnych katalogach, te ładowane później nadpisują załadowane wcześniej.
Pliki rozszerzeń zależne od aplikacji
Dodatkowo do plików rozszerzeń opisanych powyżej aplikacje mogą poszukiwać dodatkowych plików. Na przykład Firefox 1.5 lub nowszy poszuka wtyczek Sherlock w plikach:
/searchplugins/*.src
Firefox 2 oraz nowsze wersje automatycznie poszukają również Tworzenie wtyczek MozSearch oraz OpenSearch w plikach:
/searchplugins/*.xml
oraz słowniki Myspell w plikach:
/dictionaries/*.{aff|dic}
Oficjalne dokumentacje Toolkit API
- Structure of an Installable Bundle: describes the common structure of installable bundles, including extensions, themes, and XULRunner applications
- Extension Packaging: specific information about how to package extensions
- Theme Packaging: specific information about how to package themes
- Multiple-item Extension Packaging: specific information about multiple-item extension XPIs
- XUL Application Packaging: specific information about how to package XULRunner applications
- Chrome Registration