Quick summary! See the wiki too - http://docs.moodle.org/en/How_groups_work_in_Moodle http://docs.moodle.org/en/Groups_documentation_for_module_developers To install - run install.php. This create the appropriate database tables and sets some default config for using an IMS Enterprise web service (in particular the default setting is that such a web service is not called). The user interface for managing groups for a course is groupsui/index.php. A grouping is just a set of groups - the idea is that you can have several groupings for a course, and then choose different groupings for different activities. Note that installing this code does not enable you to actually use the groupings with activity modules - this is coming :-) configui - This contains the user interface for changing the IMS Enterprise web service config db - all the functions that access the database, only used internally. There are basically six tables that this code deals with groups_groups, groups_courses_groups,groups_groups_users, groups_groupings groupui - the user interface for managing the groups and groupings of a course. This uses Ajax so most of the code for the user interface is in the javascript files - the PHP files just send back an appropriate XML response to specific POST requests. You'll probably need to know the basics of how Ajax works to understand the Javascript. lib - The main libraries for the user interface and other moodle code to user. -- basicgrouplib.php contains the basic functions for adding users to groups, deleting groups etc. -- groupinglib.php contains the basic function for groupings e.g. creating groupings, adding groups to groupings -- extendedgrouplib.php contains other functions that are useful and use the basic group and grouping functions -- lib.php is just there to let you include all the libraries more easily -- utillib.php contains functions that are handy but don't use any of the group or grouping library function e.g. things like getting the names of users -- configlib.php - Contains wrapper functions for getting and setting config unittests - This directory needs a bit of sorting out, and I've just discovered that I've broken one of the main tests... strings.php - This is stuff that will need to go in the language files - it's here for convenience while I'm doing the development.