• Logo
    Launchpad Manual
  • launchpad.net
  • Submit a Bug
  • Help
Contents Menu Expand Light mode Dark mode Auto light/dark, in light mode Auto light/dark, in dark mode Skip to content
Launchpad Manual documentation
  • Tutorials
    • Creating a new page in Launchpad
    • Creating a Rock build using APIs
  • How-to Guides
    • Getting started
      • Getting the source code
      • Setting up and running Launchpad (Quickstart)
      • Setting up and running Launchpad (Advanced)
      • Launchpad Database Setup
      • How to develop with Buildd
      • How to use Soyuz locally
    • Common development tasks
      • Fixing Bugs
      • Contributing changes
      • Using an updated dependency
      • Database schema changes process
      • Applying database schema changes
      • Importing an Ubuntu package
    • Launchpad development tips
      • Updating the global configuration for tests
      • Using breakpoints
      • Handling security policies
      • Testing CLI scripts
      • Handling exceptions
      • Preserving query count
      • Running Launchpad with Chameleon Template Engine
      • Debug Tests with Visual Studio Code
      • Debug Build Farm on qastaging
      • Debug Stories/Pagetests
      • Launchpad API Docs generation
      • How To Use Codehosting Locally
      • Renaming a Database Table
    • Operating Launchpad
      • Getting an overview of Launchpad’s build farm
      • Checking availability of Launchpad frontends
      • Manage users and teams in development environments
      • Create job to publish artifact
      • Triaging Launchpad project bugs
      • Deploying configuration changes to production
      • Landing updates for Loggerhead
      • Transferring ownership of a Launchpad project
      • Creating bot account in Launchpad
      • Porting builders to newer Ubuntu versions
      • Applying a cowboy to qastaging
      • Building and publishing Launchpad Development LXD Images
      • How to Use lp-shell
  • Reference
    • Python style guide
    • Tests style guide
    • CSS style guide
    • Build farm
    • Signing service
    • Fetch service
    • Buildbot
    • Automatic translations tarball exports
    • Mirror prober
    • Git hosting
    • Code import
    • Launchpad and email
  • Explanation
    • The ideas behind Launchpad
      • What is Launchpad?
      • Launchpad strategy
      • Launchpad values
      • About Launchpad security
    • Setting up and understanding Launchpad
      • Launchpad installation details
      • Application framework
      • Navigating the tree
      • Launchpad pip integration
      • The Launchpad PPA
      • Testing
      • Code Concepts
    • Best practices for development
      • Architectural guide
      • Charm development
      • Code import in depth
      • About Launchpad performance
      • Template reuse
      • Launchpad permissions
    • Developing the Launchpad project
      • About Launchpad branches
      • Pre merge reviews
      • Error explanations
      • Hacking
      • Feature Flags
      • Datetime Usage Guide
      • XXX policy
    • Parts of Launchpad
      • Navigation menus
      • Launchpad Mail
      • URL Traversal
      • About Malone
      • Launchpad Registry
      • Engineering Overview: Translations
      • Launchpad Code Hosting
    • JavaScript
      • Integration Testing in JavaScript
      • Developing with YUI.Test
      • The Launchpad JavaScript Build System
    • Static Assets
      • CSS
      • Using CSS sprites
      • Images
      • Favicons: Why so many files and what do they do?
    • Database
      • PostgreSQL and Launchpad
      • Working with db-devel
      • Live Database Patching
      • Storm Migration Guide
      • Database performance
  • Getting Help
  • Release Notes
  • Contribute to our docs
Back to top
View this page

Navigating the tree¶

See Setting up and running Launchpad (Advanced) to learn how to get Launchpad’s code and set up a local development environment.

The Launchpad tree is big, messy and changing. Sorry about that. Don’t panic though! Keep a firm grip on grep and pay attention to these important top-level folders:

bin/, utilities/

Where you will find scripts intended for developers and admins. There’s no rhyme or reason to what goes in bin/ and what goes in utilities/, so take a look in both.

configs/

Configuration files for various kinds of Launchpad instances. development and testrunner are of particular interest to developers.

cronscripts/

Scripts that are run on actual production instances of Launchpad as cron jobs.

daemons/

Entry points for various daemons that form part of Launchpad.

database/

Our database schema, our sample data, and other things related to those.

doc/

General system-wide documentation. You can also find documentation on the developer wiki, in docstrings, and in doctests.

lib/

Where the vast majority of the code lives, along with our templates, tests, and the bits of our documentation that are written as doctests. lp is the most interesting package, with canonical containing some things like images and style sheets. To learn more about how the lp package is laid out, take a look at its docstring.

Makefile

The Makefile has all sorts of goodies. If you spend any length of time hacking on Launchpad, you’ll use it often. The most important targets are make clean, make compile, make schema, make run and make run_all.

scripts/

Scripts that are run on actual production instances of Launchpad, generally triggered by some automatic process.

You can spend years hacking on Launchpad full-time and not know what all of the files in the top-level directory are for. However, here’s a guide to some of the ones that come up from time to time.

brzplugins/

Breezy plugins used in running Launchpad.

zcml/

Various configuration files for the Zope services.

Can I look at the code without downloading it all?¶

Yes, you can browse the source code on Launchpad. You can also use git clone https://git.launchpad.net/launchpad to download the code without setting up a development environment.

Copyright © 2023, Canonical Group Ltd
Last updated on May 28, 2025
Show source
Open a GitHub issue for this page
Edit this page on GitHub
Contents
  • Navigating the tree
    • Can I look at the code without downloading it all?