GNOME Shell Extensions

Introduction

GNOME Shell's UI and extensions are written in GJS, which is JavaScript bindings for the GNOME APIsopen in new window.

JavaScript is a prototype-based language, which means that extensions can modify the UI and behaviour of GNOME Shell while it is running. This is what is known as "monkey-patching".

Development

Getting Started

How to get started creating your first extension

Accessibility

How to ensure your extension is accessible

Preferences

Creating a preferences window

Translations

How add multi-lingual support an extension

Debugging

How to debug an extension

Targeting Older GNOME Versions

Making the extension work on multiple versions of GNOME

Overview

General reference for extension concepts, files and architecture

Anatomy

Detailed explanation of the files and structure of a GNOME Shell Extension

Imports and Modules

How to use imports and modules in GNOME Shell and extensions

Architecture

High-level overview of GNOME Shell as it relates to extensions

Updates and Breakage

GNOME Shell updates and how they affect extensions

Topics

ExtensionUtils

Documentation for built-in extension utilities

PopupMenus

Documentation for popup menus in GNOME Shell

Quick Settings

How to add quick settings to an extension.

Search Provider

How to add a Search Provider to an extension.

Session Modes

How to work with session modes in GNOME Shell

Upgrading

How to upgrade extensions across Shell versions

Review Guidelines

Guidelines for developers who would like their extensions distributed on egoopen in new window

Review Guidelines

GNOME Shell Extensions Review Guidelines

Last Updated: 5/28/2023, 7:19:38 PM
Contributors: Andy Holmes, Andy Holmes, Javad Rahmatzadeh, Evan Welsh, Javad Rahmatzadeh, Just Perfection, Romain