# Guides # This page lists more theoretical in-depth articles about the SDK.

## SDK Infrastructure

#### Module structure of the SDK The SDK, and add-ons built using it, are of composed from reusable JavaScript modules. This explains what these modules are, how to load modules, and how the SDK's module tree is structured. | #### Program ID The Program ID is a unique identifier for your add-on. This guide explains how it's created, what it's used for and how to define your own.
| #### Firefox compatibility Working out which Firefox releases a given SDK release is compatible with, and dealing with compatibility problems.
#### SDK API lifecycle Definition of the lifecycle for the SDK's APIs, including the stability ratings for APIs. |

## SDK Idioms

#### Working With Events Write event-driven code using the the SDK's event emitting framework. | #### Two Types of Scripts This article explains the differences between the APIs available to your main add-on code and those available to content scripts.

## Content Scripts

#### Introducing content scripts An overview of content scripts. | #### Loading content scripts Load content scripts into web pages, specified either as strings or in separate files, and how to control the point at which they are executed.
#### Accessing the DOM Detail about the access content scripts get to the DOM. | #### Communicating with other scripts Detail about how content scripts can communicate with "main.js", with other content scripts, and with scripts loaded by the web page itself.
#### Using "port" Communicating between a content script and the rest of your add-on using the `port` object. | #### Using "postMessage()" Communicating between a content script and the rest of your add-on using the `postMessage()` API, and a comparison between this technique and the `port` object.
#### Reddit example A simple add-on which uses content scripts.

## XUL Migration

#### XUL Migration Guide Techniques to help port a XUL add-on to the SDK. | #### XUL versus the SDK A comparison of the strengths and weaknesses of the SDK, compared to traditional XUL-based add-ons.
#### Porting Example A walkthrough of porting a relatively simple XUL-based add-on to the SDK. |