The Package Control website
Switch branches/tags
Nothing to show
Clone or download
Permalink
Failed to load latest commit information.
app Improve handling of duplicate HTTP headers in package_control lib Oct 8, 2018
config Move paths Dec 5, 2016
public Add /test_repo and /test_repo.json (API) endpoints to check repo JSON… Jun 5, 2017
readmes/img Added code to locally cache images in readmes so that everything is d… Oct 30, 2014
realtime Fix websocket code to use status 444 instead of 500 for connect failure Feb 3, 2015
setup Add /test_repo and /test_repo.json (API) endpoints to check repo JSON… Jun 5, 2017
source Changed Purging Old Versions into Troubleshooting with Windows help Dec 23, 2014
task_logs Updated tasks to write rotating log files Jun 9, 2015
.gitignore Updated tasks to write rotating log files Jun 9, 2015
.python-version Added .python-version for pyenv Nov 12, 2014
compile.py Changed compile.py and dev.py to be executable Jul 10, 2014
crontab Move paths Dec 5, 2016
dev.py Added code to locally cache images in readmes so that everything is d… Oct 30, 2014
dev.sh Connect to the proper database with dev.sh Oct 30, 2014
development.md Add a task to generate a signature for Package Control.sublime-package Aug 5, 2016
license.md Added readme and other docs Aug 28, 2013
prod.py Added code version tracking to server-side rollbar Jul 14, 2014
prod.sh Move paths Dec 5, 2016
production.md Move paths Dec 5, 2016
readme.md Switch pybars to pybars3 Jun 8, 2015
secrets-example.yml Add a task to generate a signature for Package Control.sublime-package Aug 5, 2016
tasks.md Add task to update package_control lib Feb 27, 2018
tasks.py Ensure tasks aren't more than an hour old Sep 9, 2016
version.yml Updated install hash for 3.1.2 Sep 15, 2015

readme.md

Package Control Website

The Package Control website serves as both the main aggregator of package information for Package Control and as a web interface for users to discover packages.

Overview

The Package Control website runs on an architecture of:

  • Python 3.3
  • PostgreSQL 9.2
  • nginx
  • redis (production only)

The website uses the following server-side libraries:

  • bottle
  • psycopg2
  • pybars3
  • coffeescript
  • SCSS

The client-side libraries are:

  • backbone.js
  • Handlebars
  • D3

The various libraries are woven together to create a site with the following properties:

  • Shared HTML templating on the server and client with pybars and Handlebars
  • Initial page loads deliver fully-rendered HTML. Subsequent requests (for all supported browsers but IE 9) use HTML 5 pushState and pull in JSON that is rendered with Handlebars.
  • URLs without an extension return fully rendered HTML page. URLs ending in .json return raw JSON data. URLs ending in .html return an HTML partial that excludes the header and footer.
  • When HTML 5 pushState is used, the header and footer do not need to be re-rendered. This allows for nice CSS transitions between pages. This also requires a progress bar to communicate the AJAX request state.
  • No raster graphics are used - icons are from Font Awesome, logos are SVG and the install graphics use SVG through D3. This means the site is retina-friendly.

Supported browsers:

  • Firefox, Chrome, Safari, Opera, IE 9+

IE 8 and older are not supported because they do not support SVG, which is used for all of the graphics and charting on the site.

Further Reading