gecko-dev
Read-only Git mirror of the Mercurial gecko repositories at https://hg.mozilla.org. How to contribute: https://firefox-source-docs.mozilla.org/contributing/contribution_quickref.html
Top Related Projects
The official GitHub mirror of the Chromium source
Home of the WebKit project, the browser engine used by Safari, Mail, App Store and many other applications on macOS, iOS and Linux.
ChakraCore is an open source Javascript engine with a C API.
Node.js JavaScript runtime ✨🐢🚀✨
:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS
Servo, the embeddable, independent, memory-safe, modular, parallel web rendering engine
Quick Overview
The mozilla/gecko-dev repository is the main development repository for the Gecko rendering engine, which is the core component of the Mozilla Firefox web browser. Gecko is an open-source web browser engine that powers various Mozilla products, including Firefox, Thunderbird, and others.
Pros
- Cross-platform Compatibility: Gecko is designed to be cross-platform, supporting Windows, macOS, and Linux, allowing for a wide range of device compatibility.
- Standards Compliance: Gecko aims to provide comprehensive support for the latest web standards, ensuring that web pages and applications render consistently across different browsers.
- Extensibility: The Gecko engine is highly extensible, allowing developers to create add-ons and extensions that enhance the functionality of Mozilla products.
- Active Development: The Gecko-dev repository is actively maintained by a large community of contributors, ensuring ongoing improvements and bug fixes.
Cons
- Complexity: The Gecko engine is a complex and feature-rich system, which can make it challenging for new contributors to understand and contribute to the codebase.
- Performance Concerns: While Gecko has improved over time, there are still some performance concerns, especially when compared to other modern browser engines.
- Limited Mobile Support: Gecko's primary focus has been on desktop browsers, and its mobile support, while improving, is still not as robust as some of its competitors.
- Dependency on Mozilla: As Gecko is tightly integrated with Mozilla's products, its development and roadmap are heavily influenced by the priorities and decisions of the Mozilla organization.
Code Examples
N/A (This is not a code library)
Getting Started
N/A (This is not a code library)
Competitor Comparisons
The official GitHub mirror of the Chromium source
Pros of Chromium
- Larger and more active community, with more frequent updates and contributions
- Better performance and faster rendering on many websites
- More extensive support for web standards and cutting-edge features
Cons of Chromium
- Higher memory usage compared to Gecko-based browsers
- Less focus on privacy features out-of-the-box
- More complex codebase, which can be challenging for new contributors
Code Comparison
Chromium (JavaScript):
function createCallback(prototype, method) {
return function(var_args) {
return prototype[method].apply(this, arguments);
};
}
Gecko (C++):
nsresult
nsDocumentViewer::Init(nsIWidget* aParentWidget,
const nsIntRect& aBounds)
{
return InitInternal(aParentWidget, nullptr, aBounds);
}
Both repositories are large and complex, with different architectural approaches. Chromium uses a multi-process architecture, while Gecko employs a single-process model with out-of-process components. Chromium's codebase is primarily in C++ and JavaScript, whereas Gecko uses C++ extensively with some Rust integration. Chromium's development cycle is faster, with more frequent releases, while Gecko focuses on stability and long-term support. Both projects are open-source and have significant impact on web standards and browser technologies.
Home of the WebKit project, the browser engine used by Safari, Mail, App Store and many other applications on macOS, iOS and Linux.
Pros of WebKit
- Faster rendering performance, especially on Apple devices
- Better support for modern web standards and CSS features
- More frequent updates and releases
Cons of WebKit
- Limited cross-platform support compared to Gecko
- Smaller developer community and ecosystem
- Less customization options for browser vendors
Code Comparison
WebKit (JavaScript engine, JavaScriptCore):
JSValue jsNumber(ExecState* exec, double d)
{
return JSValue(JSValue::EncodeAsDouble, d);
}
Gecko (JavaScript engine, SpiderMonkey):
JS::Value JS::NumberValue(double d)
{
return JS::DoubleValue(d);
}
Both code snippets show how each engine handles creating number values in JavaScript. WebKit's JavaScriptCore uses a more explicit encoding method, while Gecko's SpiderMonkey uses a simpler function call. This reflects differences in internal architecture and optimization strategies between the two engines.
ChakraCore is an open source Javascript engine with a C API.
Pros of ChakraCore
- Lightweight and focused: ChakraCore is a standalone JavaScript engine, making it more modular and easier to integrate into various projects
- Cross-platform support: ChakraCore runs on Windows, Linux, and macOS, offering broader compatibility
- Better performance for specific JavaScript workloads, particularly in Windows environments
Cons of ChakraCore
- Smaller community and ecosystem compared to Gecko-dev
- Less frequent updates and maintenance, as development has slowed down in recent years
- Limited browser integration, primarily used in Microsoft Edge (legacy version)
Code Comparison
ChakraCore (JavaScript engine):
JsValueRef CALLBACK JSHostFunction(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState)
{
// Host function implementation
}
Gecko-dev (Full browser engine):
nsresult
nsDocumentViewer::CreateDeviceContext(nsView* aView)
{
// Device context creation for rendering
}
The code snippets highlight the difference in focus between the two projects. ChakraCore deals with JavaScript execution, while Gecko-dev encompasses broader browser functionality, including rendering and layout.
Node.js JavaScript runtime ✨🐢🚀✨
Pros of Node.js
- Lighter and more focused codebase, specifically for server-side JavaScript
- Faster development cycle and more frequent releases
- Larger ecosystem of packages and modules via npm
Cons of Node.js
- Less comprehensive than Gecko-dev, which covers a full browser engine
- Limited to JavaScript, while Gecko-dev supports multiple languages
- Smaller contributor base compared to the Mozilla project
Code Comparison
Node.js (JavaScript):
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World\n');
});
server.listen(3000);
Gecko-dev (C++):
#include "nsIInputStream.h"
#include "nsIOutputStream.h"
class nsHttpChannel : public nsIHttpChannel
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIHTTPCHANNEL
};
The Node.js example shows a simple HTTP server, highlighting its focus on server-side JavaScript. The Gecko-dev snippet demonstrates a more complex, lower-level approach for handling HTTP channels in a browser engine.
:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS
Pros of Electron
- Easier to develop cross-platform desktop applications using web technologies
- Faster development cycle for desktop apps compared to traditional native development
- Large and active community with extensive documentation and resources
Cons of Electron
- Larger application size due to bundling Chromium and Node.js
- Generally higher memory usage compared to native applications
- Potential security concerns due to the broader attack surface
Code Comparison
Gecko-dev (C++):
nsresult
nsDocShell::CreateAboutBlankContentViewer()
{
// Create an about:blank content viewer
nsCOMPtr<nsIContentViewer> viewer;
nsresult rv = CreateContentViewer("text/html", nullptr, getter_AddRefs(viewer));
if (NS_FAILED(rv)) {
return rv;
}
Electron (JavaScript):
app.on('ready', () => {
const win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('https://github.com')
})
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
The code snippets highlight the different approaches: Gecko-dev uses C++ for low-level browser operations, while Electron leverages JavaScript for creating desktop applications with web technologies.
Servo, the embeddable, independent, memory-safe, modular, parallel web rendering engine
Pros of Servo
- Written in Rust, offering improved memory safety and concurrency
- Designed for parallel processing, potentially faster rendering
- More modular architecture, easier to experiment with new features
Cons of Servo
- Less mature and feature-complete compared to Gecko
- Smaller community and ecosystem
- Limited cross-platform support
Code Comparison
Servo (Rust):
fn layout_block(
layout_context: &mut LayoutContext,
tree_rank: TreeRank,
containing_block: &ContainingBlock,
parent_flow_ref: &FlowRef,
fragment: &mut Fragment,
quirks_mode: QuirksMode,
) -> FlowRef {
// Layout implementation
}
Gecko (C++):
nsresult
nsBlockFrame::Reflow(nsPresContext* aPresContext,
ReflowOutput& aDesiredSize,
const ReflowInput& aReflowInput,
nsReflowStatus& aStatus)
{
// Reflow implementation
}
Both repositories are web browser engines, but Servo is a modern, experimental project focusing on parallelism and safety, while Gecko is a mature, production-ready engine used in Firefox. Servo's use of Rust offers potential performance and security benefits, but it lacks the extensive features and cross-platform support of Gecko. The code comparison shows Servo's more modern syntax and type system, while Gecko's C++ code reflects its longer history and established codebase.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
An explanation of the Firefox Source Code Directory Structure and links to project pages with documentation can be found at:
https://firefox-source-docs.mozilla.org/contributing/directory_structure.html
For information on how to build Firefox from the source code and create the patch see:
https://firefox-source-docs.mozilla.org/contributing/contribution_quickref.html
If you have a question about developing Firefox, and can't find the solution
on https://firefox-source-docs.mozilla.org/, you can try asking your question on Matrix at chat.mozilla.org in Introduction
(https://chat.mozilla.org/#/room/#introduction:mozilla.org) channel.
Nightly development builds can be downloaded from:
https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central/
- or -
https://www.mozilla.org/firefox/channel/desktop/#nightly
Keep in mind that nightly builds, which are used by Firefox developers for testing, may be buggy.
Top Related Projects
The official GitHub mirror of the Chromium source
Home of the WebKit project, the browser engine used by Safari, Mail, App Store and many other applications on macOS, iOS and Linux.
ChakraCore is an open source Javascript engine with a C API.
Node.js JavaScript runtime ✨🐢🚀✨
:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS
Servo, the embeddable, independent, memory-safe, modular, parallel web rendering engine
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot