<a id="launchpad-manual-for-developers"></a>

# Launchpad manual for developers

The Launchpad manual for developers is the most comprehensive resource for
anyone looking to contribute to [Launchpad](https://launchpad.net/).

We are always working to improve the user experience and other features of
this platform and we rely on contributors like you to make this happen. There
are different ways to contribute to launchpad as a developer including
**proposing new features, triaging and fixing bugs, and testing features.**

This manual shows you how to handle different tasks from downloading the source
code and creating new pages to fixing bugs and contributing changes to
Launchpad.

## In this documentation

### Setup and first steps

Get started with Launchpad core development by downloading the source code,
running Launchpad locally, or even deploying Soyuz on your machine for local
builds.

* **Get started**:
  [Get the Launchpad source code](https://ubuntu.com/docs/launchpad/developer/how-to/get-started/get-source-code/index.html.md#get-the-source-code) •
  [Run Launchpad locally with quick setup](https://ubuntu.com/docs/launchpad/developer/how-to/get-started/running-quickstart/index.html.md#set-up-and-run-launchpad-quickstart) •
  [Run Launchpad locally with advanced setup](https://ubuntu.com/docs/launchpad/developer/how-to/get-started/running/index.html.md#set-up-and-run-launchpad-advanced) •
  [Database setup](https://ubuntu.com/docs/launchpad/developer/how-to/get-started/database-setup/index.html.md#database-setup)
* **Local deployment**:
  [Deploy Soyuz locally](https://ubuntu.com/docs/launchpad/developer/how-to/get-started/use-soyuz-locally/index.html.md#use-soyuz-locally) •
  [Develop with Buildd](https://ubuntu.com/docs/launchpad/developer/how-to/get-started/develop-with-buildd/index.html.md#develop-with-buildd) •
  [Use codehosting locally](https://ubuntu.com/docs/launchpad/developer/how-to/launchpad-development-tips/codehosting-locally/index.html.md#use-codehosting-locally)
* **Dependencies reference**:
  [The Launchpad PPA](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/launchpad-ppa/index.html.md#the-launchpad-ppa)

### Core concepts and architecture

Understand the foundational design, vision, and internal architecture that
power Launchpad. Explore the philosophical goals, values, and essential
components that define the platform and its application flow.

* **Vision & values**:
  [What is Launchpad?](https://ubuntu.com/docs/launchpad/developer/explanation/ideas-behind-launchpad/scope/index.html.md#what-is-launchpad) •
  [Launchpad values](https://ubuntu.com/docs/launchpad/developer/explanation/ideas-behind-launchpad/values/index.html.md#launchpad-values) •
  [Launchpad strategy](https://ubuntu.com/docs/launchpad/developer/explanation/ideas-behind-launchpad/strategy/index.html.md#launchpad-strategy) •
  [About the Launchpad bug tracker](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/parts-of-launchpad/malone/index.html.md#malone)
* **Internal components**:
  [Navigation menus](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/parts-of-launchpad/navigation-menus/index.html.md#navigation-menus) •
  [URL traversal](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/parts-of-launchpad/url-traversal/index.html.md#url-traversal) •
  [Registry](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/parts-of-launchpad/registry/index.html.md#developer-registry) •
  [Engineering overview translations](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/parts-of-launchpad/engineering-overview-translations/index.html.md#engineering-overview-translations)
* **Framework & environment**:
  [Application framework](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/framework/index.html.md#application-framework) •
  [Code concepts](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/concepts/index.html.md#code-concepts) •
  [Navigating the tree](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/navigating/index.html.md#navigating-the-tree) •
  [Launchpad pip integration](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/pip/index.html.md#launchpad-pip-integration) •
  [Launchpad installation details](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/running-details/index.html.md#launchpad-installation-details) •
  [Building live filesystems](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/building-live-filesystems/index.html.md#building-live-filesystems)

### Services and components

Background services and standalone modules that support Launchpad including the
build farm, git/code hosting, mail services, and packaging pipelines.

* **Build & package pipelines**:
  [Build farm](https://ubuntu.com/docs/launchpad/developer/reference/services/build-farm/index.html.md#build-farm-reference) •
  [Signing service](https://ubuntu.com/docs/launchpad/developer/reference/services/signing/index.html.md#signing-service) •
  [Fetch service](https://ubuntu.com/docs/launchpad/developer/reference/services/fetch-service/index.html.md#fetch-service) •
  [Buildbot](https://ubuntu.com/docs/launchpad/developer/reference/services/buildbot/index.html.md#buildbot-reference) •
  [Ubuntu package publishing](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/publisher/ubuntu-package-publishing/index.html.md#ubuntu-package-publishing) •
  [Ubuntu archive publisher](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/publisher/ubuntu-archive-publisher/index.html.md#ubuntu-archive-publisher)
* **Code & git hosting**:
  [Git hosting](https://ubuntu.com/docs/launchpad/developer/reference/services/git-hosting/index.html.md#git-hosting-reference) •
  [Code import](https://ubuntu.com/docs/launchpad/developer/reference/services/code-import/index.html.md#code-import-reference) •
  [Code](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/parts-of-launchpad/code/index.html.md#code-hosting)
* **Infrastructure services**:
  [Automatic translations tarball exports](https://ubuntu.com/docs/launchpad/developer/reference/services/automatic-translations-export/index.html.md#automatic-translations-export) •
  [Mirror prober](https://ubuntu.com/docs/launchpad/developer/reference/services/mirror-prober/index.html.md#mirror-prober-reference) •
  [Ubuntu mirrors index](https://ubuntu.com/docs/launchpad/developer/reference/services/ubuntu-mirrors-index/index.html.md#ubuntu-mirrors-index) •
* **Mail services**:
  [Launchpad public mailing lists archives](https://ubuntu.com/docs/launchpad/developer/reference/services/mailing-lists-archives/index.html.md#mailing-lists-archives) •
  [Launchpad and email](https://ubuntu.com/docs/launchpad/developer/reference/email/index.html.md#email-reference) •
  [Mail](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/parts-of-launchpad/mail/index.html.md#launchpad-mail)

### Database

Explore Launchpad’s relational database layer, its performance optimization
strategies, and schema management practices. Understand workflows for executing
database migrations, renaming tables, and maintaining query efficiency.

* **Relational database fundamentals**:
  [Database overview](https://ubuntu.com/docs/launchpad/developer/explanation/database/index.html.md#database-overview) •
  [PostgreSQL and Launchpad](https://ubuntu.com/docs/launchpad/developer/explanation/database/postgresql/index.html.md#postgresql-and-launchpad) •
  [Storm migration guide](https://ubuntu.com/docs/launchpad/developer/explanation/database/storm-migration-guide/index.html.md#storm-migration-guide) •
  [Working with db-devel](https://ubuntu.com/docs/launchpad/developer/explanation/database/working-with-db-devel/index.html.md#working-with-db-devel)
* **Performance & optimization**:
  [Database performance](https://ubuntu.com/docs/launchpad/developer/explanation/database/database-performance/index.html.md#database-performance) •
  [Database patching](https://ubuntu.com/docs/launchpad/developer/explanation/database/database-patching/index.html.md#database-patching) •
  [Preserve query count](https://ubuntu.com/docs/launchpad/developer/how-to/launchpad-development-tips/preserve-query-count/index.html.md#preserve-query-count)
* **Schema management**:
  [Rename a database table](https://ubuntu.com/docs/launchpad/developer/how-to/launchpad-development-tips/rename-database-table/index.html.md#rename-database-table)

### Day-to-day development

Guidelines and instructions for routine development tasks, from fixing bugs to
submitting database schema changes. Explore common workflows and processes
required to implement and ship changes in Launchpad.

* **Workflows**:
  [Contribute changes](https://ubuntu.com/docs/launchpad/developer/how-to/common-development-tasks/contributing-changes/index.html.md#contributing-changes) •
  [Creating a new page in Launchpad](https://ubuntu.com/docs/launchpad/developer/tutorials/creating-a-page-in-launchpad/index.html.md#tutorial-creating-page-in-launchpad) •
  [About Launchpad branches](https://ubuntu.com/docs/launchpad/developer/explanation/developing-for-launchpad/branches/index.html.md#about-launchpad-branches) •
  [Pre merge reviews](https://ubuntu.com/docs/launchpad/developer/explanation/developing-for-launchpad/pre-merge-reviews/index.html.md#pre-merge-reviews) •
  [Journey of a change to production](https://ubuntu.com/docs/launchpad/developer/explanation/developing-for-launchpad/journey-of-a-change-to-production/index.html.md#journey-change-production)
* **Database changes**:
  [Create a database patch](https://ubuntu.com/docs/launchpad/developer/how-to/common-development-tasks/create-a-db-patch/index.html.md#create-a-db-patch) •
  [Apply database schema changes](https://ubuntu.com/docs/launchpad/developer/how-to/common-development-tasks/apply-schema-changes/index.html.md#apply-database-schema-changes)
* **Common tasks**:
  [Fix bugs](https://ubuntu.com/docs/launchpad/developer/how-to/common-development-tasks/fixing-bugs/index.html.md#fixing-bugs) •
  [Use an updated dependency](https://ubuntu.com/docs/launchpad/developer/how-to/common-development-tasks/use-updated-dependency/index.html.md#use-updated-dependency) •
  [Handle exceptions](https://ubuntu.com/docs/launchpad/developer/how-to/launchpad-development-tips/exceptions/index.html.md#handle-exceptions) •
  [Handle security policies](https://ubuntu.com/docs/launchpad/developer/how-to/launchpad-development-tips/security/index.html.md#handle-security-policies) •
  [Datetime usage guide](https://ubuntu.com/docs/launchpad/developer/explanation/developing-for-launchpad/datetime-usage/index.html.md#datetime-usage-guide) •
  [Error explanations](https://ubuntu.com/docs/launchpad/developer/explanation/developing-for-launchpad/error-explanations/index.html.md#error-explanations) •
  [Feature flags](https://ubuntu.com/docs/launchpad/developer/explanation/developing-for-launchpad/feature-flags/index.html.md#feature-flags)

### Operating Launchpad

Manage, maintain, and monitor Launchpad services and environments in real time,
including operating the build farm, checking frontend availability, user
management, and utilizing diagnostic CLI tools.

* **Build farm & publishing**:
  [Get overview of build farm](https://ubuntu.com/docs/launchpad/developer/how-to/operate-launchpad/getting-overview-of-build-farm/index.html.md#get-overview-of-build-farm) •
  [Create a job to publish an artifact](https://ubuntu.com/docs/launchpad/developer/how-to/operate-launchpad/create-job-publish-artifact/index.html.md#create-job-to-publish-artifacts)
* **Environment administration**:
  [Check availability of frontends](https://ubuntu.com/docs/launchpad/developer/how-to/operate-launchpad/checking-availability-of-launchpad-frontends/index.html.md#check-availability-of-frontends) •
  [Add users and teams in development environments](https://ubuntu.com/docs/launchpad/developer/how-to/operate-launchpad/manage-users/index.html.md#manage-users-and-teams-in-development-environments) •
  [Build and publish Launchpad development LXD images](https://ubuntu.com/docs/launchpad/developer/how-to/operate-launchpad/building-lpdev-images/index.html.md#build-and-publish-launchpad-development-lxd-images)
* **Bugs**:
  [Triage Launchpad project bugs](https://ubuntu.com/docs/launchpad/developer/how-to/operate-launchpad/triage-bugs/index.html.md#triaging-launchpad-project-bugs) •
  [Tagging bugs about Launchpad](https://ubuntu.com/docs/launchpad/developer/reference/bug-tags/index.html.md#tagging-bugs-about-launchpad)
* **Diagnostic tools**:
  [Use lp-shell](https://ubuntu.com/docs/launchpad/developer/how-to/operate-launchpad/use-lp-shell/index.html.md#how-to-use-lp-shell) •
  [Generate Launchpad API docs](https://ubuntu.com/docs/launchpad/developer/how-to/launchpad-development-tips/launchpad-api-docs/index.html.md#launchpad-api-docs-generation)

### Testing, debugging and troubleshooting

Verify the quality of your code and resolve issues effectively using
Launchpad’s testing and debugging suites. Learn how to execute tests,
troubleshoot breakpoints, and integrate debugging tools into VS Code.

* **Debugging**:
  [Debug tests with Visual Studio Code](https://ubuntu.com/docs/launchpad/developer/how-to/debug/debug-with-visual-studio-code/index.html.md#debug-with-visual-studio-code) •
  [Debug stories and pagetests](https://ubuntu.com/docs/launchpad/developer/how-to/debug/debugging/index.html.md#debug-stories-pagetests) •
  [Troubleshoot breakpoint issues when running multiple test layers](https://ubuntu.com/docs/launchpad/developer/how-to/debug/troubleshoot-breakpoint-issues-when-running-tests/index.html.md#troubleshoot-breakpoints-tests)
* **Testing**:
  [Testing Launchpad changes](https://ubuntu.com/docs/launchpad/developer/explanation/core-components-and-set-up/testing/index.html.md#testing-launchpad-changes) •
  [Update the global configuration for tests](https://ubuntu.com/docs/launchpad/developer/how-to/launchpad-development-tips/update-configuration-for-testing/index.html.md#update-global-configuration-for-tests) •
  [Test CLI scripts](https://ubuntu.com/docs/launchpad/developer/how-to/launchpad-development-tips/testing-scripts/index.html.md#test-cli-scripts) •
  [Tests style guide](https://ubuntu.com/docs/launchpad/developer/reference/tests/index.html.md#tests-style-guide)

### Development best practices

Coding style guides, architectural rules, and security policies used to
maintain the quality of the codebase, from use of assertions to preferred
Python conventions.

* **Standards & guidelines**:
  [Architectural guide](https://ubuntu.com/docs/launchpad/developer/explanation/development-best-practices/architecture/index.html.md#architectural-guide) •
  [Python style guide](https://ubuntu.com/docs/launchpad/developer/reference/python/index.html.md#python-style-guide) •
  [XXX policy](https://ubuntu.com/docs/launchpad/developer/explanation/developing-for-launchpad/xxx-policy/index.html.md#xxx-policy) •
  [Assertions in Launchpad](https://ubuntu.com/docs/launchpad/developer/explanation/development-best-practices/assertions-in-launchpad/index.html.md#assertions-in-launchpad) •
  [Launchpad permissions](https://ubuntu.com/docs/launchpad/developer/explanation/development-best-practices/security-policy/index.html.md#launchpad-permissions) •
  [About Launchpad security](https://ubuntu.com/docs/launchpad/developer/explanation/ideas-behind-launchpad/security/index.html.md#about-launchpad-security)
* **Process & infrastructure**:
  [Bug triage process background](https://ubuntu.com/docs/launchpad/developer/explanation/development-best-practices/bug-triage-process-background/index.html.md#bug-triage-process-background) •
  [Charm development](https://ubuntu.com/docs/launchpad/developer/explanation/development-best-practices/charms/index.html.md#charm-development) •
  [Code import in depth](https://ubuntu.com/docs/launchpad/developer/explanation/development-best-practices/codeimport/index.html.md#code-import-in-depth)
* **Testing & UI reuse**:
  [Page tests](https://ubuntu.com/docs/launchpad/developer/explanation/development-best-practices/page-tests/index.html.md#page-tests) •
  [About Launchpad performance](https://ubuntu.com/docs/launchpad/developer/explanation/development-best-practices/performance/index.html.md#about-launchpad-performance) •
  [Template reuse](https://ubuntu.com/docs/launchpad/developer/explanation/development-best-practices/template-reuse/index.html.md#template-reuse)

### Frontend development

Build and test Launchpad’s client-side user interface using standard assets and
frameworks. Understand the JavaScript build system, styling standards, and
testing interfaces.

* **JavaScript & testing**:
  [JavaScript build system](https://ubuntu.com/docs/launchpad/developer/explanation/javascript/javascript-buildsystem/index.html.md#javascript-build-system) •
  [Integration testing in JavaScript](https://ubuntu.com/docs/launchpad/developer/explanation/javascript/javascript-integration-testing/index.html.md#integration-testing-in-javascript) •
  [Developing with YUI Test](https://ubuntu.com/docs/launchpad/developer/explanation/javascript/javascript-unittesting/index.html.md#developing-with-yui-test) •
  [Use MockIo library](https://ubuntu.com/docs/launchpad/developer/how-to/launchpad-development-tips/mockio/index.html.md#mockio-library)
* **Static assets & styling**:
  [Static assets overview](https://ubuntu.com/docs/launchpad/developer/explanation/static-assets/index.html.md#static-assets-overview) •
  [CSS](https://ubuntu.com/docs/launchpad/developer/explanation/static-assets/css/index.html.md#launchpad-css) •
  [CSS sprites](https://ubuntu.com/docs/launchpad/developer/explanation/static-assets/css-sprites/index.html.md#use-css-sprites) •
  [Favicons](https://ubuntu.com/docs/launchpad/developer/explanation/static-assets/favicon/index.html.md#launchpad-favicons) •
  [Images](https://ubuntu.com/docs/launchpad/developer/explanation/static-assets/images/index.html.md#launchpad-images) •
  [CSS style guide](https://ubuntu.com/docs/launchpad/developer/reference/css/index.html.md#css-style-guide)

## How this documentation is organized

This documentation uses the
[Diátaxis documentation structure](https://diataxis.fr/).

- The [Tutorial](https://ubuntu.com/docs/launchpad/developer/tutorials/index.html.md) takes you step-by-step through common
  development tasks in Launchpad.
- [How-to guides](https://ubuntu.com/docs/launchpad/developer/how-to/index.html.md) assume you have basic familiarity with
  Launchpad. They cover setting up a development environment, contributing
  changes, and operating a Launchpad instance.
- [Reference](https://ubuntu.com/docs/launchpad/developer/reference/index.html.md) provides specifications of Launchpad services and coding style guides.
- [Explanation](https://ubuntu.com/docs/launchpad/developer/explanation/index.html.md) includes background on key concepts,
  development best practices, and the deployment process of Launchpad.
