Gecko(ゲッコー)は、Netscapeシリーズ 6以降およびMozillaソフトウェアのために開発されたオープンソースのHTMLレンダリングエンジン群の総称である。HTML、CSS、XUL、JavaScriptなどを解釈する。

なお、Geckoは英語でヤモリの意味を持つ。

## 歴史

当初、Mozillaは1998年に公開されたNetscape 5.0へ向けて開発中だったソースコードを元に開発されていたが、軽量化のために当時買収したDigital Style社のエンジンをベースにして新規に書かれた。これがGeckoである。パース部分はW3Cによる勧告に合致することを目標に作成されている。
1.8系列以前ではWeb Standards ProjectがCSS 2.1のテストとして用意したAcid2に合格していなかったが、1.9系列からは合格している。

## Geckoを使用するソフトウェア

### ウェブブラウザ

- Bagel
- Camino - 旧Chimera。Mac OS X専用のGeckoブラウザ。
- Epiphany (GNOME、2.28.0よりWebKitに移行)
- Galeon (GNOME)
- Lunascape (2以降。IEコンポーネント、WebKitの利用も可能)
- Mozilla Firefox およびそのソースコードを使用したブラウザ (Flock, K-Meleon, Pale Moon,Tor Browser, Floorp など)
- Waterfox
- SeaMonkey - Mozilla Application Suite の後継ソフトウェア。
- Sylera
- 風博士
- Sleipnir 2 (プラグインによる拡張。2010年8月現在、当該プラグインは開発停止している)

### その他のソフトウェア

ウェブブラウザ以外でも、HTMLやCSSなどを表示に用いるソフトウェアでGeckoが採用されている。

- Mozilla Thunderbird(メールクライアント、旧Minotaur)
- Correo(メールクライアント)
- Mozilla Sunbird(カレンダー)
- Nvu(Web オーサリングツール)
- KompoZer(Web オーサリングツール)
- Songbird(メディアプレーヤー)
- Wine (オープンソースのWindows API実装、Internet Explorerの実装に利用)

## 技術

### XUL

XULはアプリケーションのGUIをXMLで記述した形式である。イベントハンドラを用いてJavaScriptを呼び出すことで、HTMLとJavaScriptを組み合わせたWebアプリケーションと同じ感覚でネイティブのGUIに近いアプリケーションを製作することができる。XULはアプリケーションとしてローカルから読み出されるほか、Web上のファイルであっても表示できる。(ただしファイルの読み書きなどの特権は利用できない。)

### 構成

HTML・CSSのレンダリングや通信部分、ファイルの読み書きなどのAPIはC++で記述されており、それぞれコンポーネント化されている。これらのAPIは他のC++コードから(必要なものだけを)呼び出せるほか、XULアプリケーションなどからJavaScriptなどスクリプト言語を通じて呼び出すことができる(XPCOM)。FirefoxなどではXULアプリケーションから実際に呼び出しているほか、XPCOM 対応でビルドされた JavaScript シェルから利用することもできる。

### 描画

XUL, CSSでスタイルづけされたHTML, MathML, SVGを表示することができる。
HTMLの描画は(複雑な)ペインターアルゴリズムが採用されている。HTMLがCSSの「ボックス」群に変換しレイアウトを決定すると、描画順序を決めたリストを構成し、リストができると実際に描画される。
描画バックエンドにはcairoが使われている。半透明、曲線描画などにその技術が使われている。

### スクリプトエンジン

スクリプト処理部分はSpiderMonkeyと呼ばれる。ECMAScript 3 に準拠する。Firefoxに組み込まれた状態では、特権管理により、WebページのJavaScriptを実行できるだけでなく、ブラウザ本体や拡張機能をJavaScriptで記述することができる。アプリケーション側からもWebページのJavaScriptオブジェクトに(間接的に)アクセス可能である。2007年ごろからWebアプリケーションの普及によりJavaScriptの性能が話題になり始めたが、Gecko 1.9.1 (2008)以降、JIT方式のJavaScriptコンパイラ/インタプリタが搭載され、性能が向上した(TraceMonkey)。Gecko 2.0 (aka 1.93a) / Firefox 4 (2010) では低速だがコンパイルの早いJITコンパイラ(JägerMonkey)とTraceMonkeyを組み合わせて使う方式になった。Gecko 9 / Firefox 9 (2011) では型推論が導入され、リリース製品に組み込まれた。

### ユーザーエージェント情報

このエンジンを使用したユーザーエージェントの多くはユーザーエージェント名で使用環境などを確認できる。

Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1

この例では、Windowsは対象のプラットフォームがMicrosoft Windowsであること、Uは強いセキュリティレベルであること、Windows NT 5.1は使用しているシステムが Windows NT 5.1であること、jaは利用している言語の設定が日本語であること、rv:1.8.1.1はGeckoのリビジョンが1.8.1.1であること、Gecko/20061204はビルドされた日付が2006年12月4日であること、Firefox/2.0.0.1は以上のようなGeckoを搭載したFirefox 2.0.0.1であることを表している。

### Mozilla ActiveX Control

Microsoft Windows上で動作する プラグイン。Mozilla ActiveX Projectにより開発されている。ActiveX をGeckoのブラウザ上から管理したり、Geckoのレンダリングエンジン部分をコンポーネントとしてWindowsアプリケーションに組み込む目的で開発された。

ActiveXの管理機能は安全性の確認されたインストール済みのActiveXをブラウザから管理するためのもので、ブラウザからActiveXを実行したりインストールしたりするためのものではない。

ブラウザエンジンとしては、XUL上のアプリケーションではなく、Windowsネイティブのアプリケーションとして組み込むことによってより軽量に使用することを可能にした。mozctl.dll をソフトウェアに接続することでコンポーネントとしての Gecko エンジンが利用できる。Webブラウザに使われる場合が多いが、Webページの表示確認など、補助的な機能として用いられた例もある。

Mozilla ActiveX ControlのHTMLレンダリングエンジンとしての機能はXULネイティブなプログラムと同一であり、設定項目なども共通である。ただし、標準ダイアログボックスなどの表示はXULネイティブのものと異なる。

## Geckoを利用するソフトウェア

|  | Firefox | SeaMonkey | Thunderbird | Lunascape | K-Meleon | Pale Moon |
| --- | --- | --- | --- | --- | --- | --- |
| Gecko 2.0 | 4.0 | 2.1 | (3.3a) |  |  | 4.0 |
| Gecko 5.0 | 5.0 | 2.2 | 5.0 |  |  | 5.0 |
| Gecko 6.0 | 6.0 | 2.3 | 6.0 |  |  | 6.0 |
| Gecko 7.0 | 7.0 | 2.4 | 7.0 |  |  | 7.0 |
| Gecko 8.0 | 8.0 | 2.5 | 8.0 |  |  | 8.0 |
| Gecko 9.0 | 9.0 | 2.6 | 9.0 |  |  | 9.0.1 |
| Gecko 10.0 | 10.0, 10.0 ESR | 2.7 | 10.0, 10.0 ESR |  |  | 9.1, 9.2 |
| Gecko 11.0 | 11.0 | 2.8 | 11.0 |  |  | 11.0 |
| Gecko 12.0 | 12.0 | 2.9 | 12.0 |  |  | 12.0 - 12.3 |
| Gecko 13.0 | 13.0 | 2.10 | 13.0 |  |  |  |
| Gecko 14.0 | 14.0 | 2.11 | 14.0 |  |  |  |
| Gecko 15.0 | 15.0 | 2.12 | 15.0 |  |  | 15.0 - 15.4.1 |
| Gecko 16.0 | 16.0 | 2.13 | 16.0 |  |  |  |
| Gecko 17.0 | 17.0, 17.0 ESR | 2.14 | 17.0.x |  |  |  |
| Gecko 18.0 | 18.0 | 2.15 | (18.0b) |  |  |  |
| Gecko 19.0 | 19.0 | 2.16 | (19.0b) |  |  | 19.0 |
| Gecko 20.0 | 20.0 | 2.17 | (20.0b) |  |  | 20.0.1 - 20.3 |
| Gecko 21.0 | 21.0 | (2.18) | (21.0b) |  |  |  |
| Gecko 22.0 | 22.0 | 2.19 | (22.0b) |  |  |  |
| Gecko 23.0 | 23.0 | 2.20 | (23.0b) |  |  |  |
| Gecko 24.0 | 24.0, 24 ESR | 2.21 | 24.x |  | 74 | 24.x - 25.x |
| Gecko 25.0 | 25.0 | 2.22 | (25.0b) |  |  |  |
| Gecko 26.0 | 26.0 | 2.23 | (26.0b) |  |  |  |
| Gecko 27.0 | 27.0 | 2.24 | (27.0b) |  |  |  |
| Gecko 28.0 | 28.0 | 2.25 | (28.0b) |  |  |  |
| Gecko 29.0 | 29.0 | 2.26 | (29.0b) |  |  |  |
| Gecko 30.0 | 30.0 | (2.27) | (30.0b) |  |  |  |
| Gecko 31.0 | 31.0, 31 ESR | (2.28) | 31.x |  | 75.x |  |
| Gecko 32.0 | 32.0 | 2.29 | (32.0b) |  |  |  |
| Gecko 33.0 | 33.0 | 2.30 | (33.0b) |  |  |  |
| Gecko 34.0 | 34.0 | 2.31 | (34.0b) |  |  |  |
| Gecko 35.0 | 35.0 | 2.32 | (35.0b) |  |  |  |
| Gecko 36.0 | 36.0 | 2.33 | (36.0b) |  |  |  |
| Gecko 37.0 | 37.0 | 2.34 | (37.0b) |  |  |  |
| Gecko 38.0 | 38.0, 38 ESR | 2.35 | 38.x |  |  |  |
| Gecko 39.0 | 39.0 | (2.36) | (39.0b) |  |  |  |
| Gecko 40.0 | 40.0 | (2.37) | (40.0b) |  |  |  |
| Gecko 41.0 | 41.0 | 2.38 | (41.0b) |  |  |  |
| Gecko 42.0 | 42.0 | 2.39 | (42.0b) |  |  |  |
| Gecko 43.0 | 43.0 | 2.40 | (43.0b) |  |  |  |
| Gecko 44.0 | 44.0 | (2.41) | (44.0b) |  |  |  |
| Gecko 45.0 | 45.0, 45 ESR | 2.42 | 45.x | 6.15 |  |  |
| Gecko 46.0 | 46.0 | (2.43) | (46.0b) |  |  |  |
| Gecko 47.0 | 47.0 | (2.44) | (47.0b) |  |  |  |
| Gecko 48.0 | 48.0 | (2.45) | (48.0b) |  |  |  |
| Gecko 49.0 | 49.0 | 2.46 | (49.0b) |  |  |  |