Skip to content

GNOME Shell Extensions


GNOME Shell and extensions are written in GJS, which is JavaScript bindings for GNOME Platform APIs. For an overview of how extensions fit into GNOME Shell and the platform, see the Architecture page.

For a general programming tasks with GJS, there are guides for topics like Asynchronous Programming and Working with Files, as well as gentle introductions to core concepts like GObject.

Getting Help

There are several ways for you to get help with your extension.

There are also tutorial videos by extension developer and reviewer JustPerfection.


Getting Started

How to get started creating your first extension


How to ensure your extension is accessible


Creating a preferences window


How add multi-lingual support an extension


How to debug an extension

Targeting Older GNOME Versions

Making the extension work on multiple versions of GNOME

TypeScript and LSP

Creating a TypeScript project to have auto-complete support in your editor.


General reference for extension concepts, files and architecture


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


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

Updates and Breakage

GNOME Shell updates and how they affect extensions



Documentation for built-in extension utilities


Documentation for dialogs in GNOME Shell


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

St Widgets

Using St widgets in an extension


Porting Guides

How to upgrade extensions across Shell versions

Legacy Documentation

Archived documentation and examples

Review Guidelines

Guidelines for developers who would like their extensions distributed on ego

Review Guidelines

GNOME Shell Extensions Review Guidelines

MIT Licensed | GJS, A GNOME Project