{
  "analytics": "A small bit of code for handling Google Analytics",
  "channels": "An abstraction over WebSockets and other communication channels (like `postMessage`).",
  "chat": "Handles the chat messages (except actual display, which is in `ui.js`).",
  "console": "An console replacement that collects messages and allows TogetherJS-specific log levels",
  "cursor": "Handles the shared cursors, display and capturing the events.  Also handles clicks and scrolls.  Includes UI.",
  "elementFinder": "Generates something like a CSS selector for an element, and finds said elements based on selectors.  A portable description of an element.",
  "eventMaker": "Creates artificial events, like a fake click event.",
  "forms": "Handles synchronization of forms, including CodeMirror, ACE, CKEditor and tinyMCE Editor support.  Implements a portion of OT.",
  "jqueryPlugins": "Some plugins for jQuery; doesn't export anything, just patches `$`.",
  "linkify": "Detects and adds links to plain text.",
  "ot": "Operational transformation support: what keeps big chunks of text in sync when multiple people are simultaneously editing those fields.",
  "peers": "Handles the objects representing the peers and oneself.",
  "playback": "Handles the magic `/playback` command that plays recordings.",
  "randomutil": "Some functions/methods for random numbers, really just for testing support.",
  "recorder": "Used by `recorder.html`, which is a kind of alternate mini-client used to record sessions when you put `/record` in the chat box.",
  "session": "The most important and most core module in the system.  This sets up the channels, routes messages, tracks peers, and is used for inter-module communication using events.",
  "startup": "Handles the logic of what to display when TogetherJS is first started up (including warning messages, introductory stuff, the share link, confirmation of joining the session).",
  "storage": "An abstraction (over `localStorage`) of per-tab and client storage.",
  "templates": "This is generated from `interface.html` and other sources, including the content as inline strings.",
  "templating": "Handles creating new nodes based on DOM templates.  Does some substitution based on specific class names.",
  "togetherjs": "This is the bootstrap code.  It is included on all pages, defines the `TogetherJS` variable, and handles configuration and initial loading.",
  "ui": "This has most of the UI, meaning everything involving HTML, and reacting to that interface.",
  "util": "Lots of support code in here.  It doesn't depend on other things, and has fairly abstract general-purpose code.  It includes a pattern for creating classes, assertions, events.",
  "videos.js": "Support for the video sync feature",
  "visibilityApi": "Handles cross-browser tab visibility events",
  "walkthrough": "Implements the walkthrough interface (content is in `walkthrough.html`).",
  "webrtc": "Handles live audio chat.",
  "who": "Lets clients peek into rooms and invite people from those rooms without joining the room",
  "windowing": "Handles the creation of different windows, notifications, and modal windows.",
  "youtubeVideos": "Support for the YouTube video sync feature"
}
