To create modules you create a directory in the extentions directory and add a module.conf file. The extentions directory can be in Definitions and named modules (the old name) or extentions (the preferred one) or in your DG3Apps directory (custom/installed) named extentions.

The sections

Each module.conf file is divided into the following sections:

documentation string The top of the document enclosed in """. This is what you see in the documentation part in the DG3 section for turning on and off modules.
version string The version number of the library.
dependencies dict The dependent libraries this module needs to have active to work. Dependencies can be of types: python, javascript, css, modules, snippets or actions. Each type holds an array of strings with the name of the dependent library.
libraries dict The library's that this module holds. It can be python, javascript or css. The library format is a key with the type and then a new dict with the library definition.
definitions dict The module definition that tells the generators how to treat it and how to configure it.
defaultsettings dict The default settings used to create new settings for the module.

Definitions

The module definitions can hols the following settings:

'alwaysinclude' bool Tells if the asset should be copied even if not used anywhere in a page. This is useful when this is a library that only are added and used in a template.
'alwaysoverwritepages' bool Used to make the module auto overwrite the pages added to the application. This means that the user might not do any own changes to this page, but needs to use your version, so use only then this is what you want.
'alwaysoverwritetemplates' bool Used to make the module auto overwrite the templates added to the application. This means that the user might not do any own changes to this page, but needs to use your version, so use only then this is what you want.
'settings' dict defines the settings added to django settings module. You can read setting set by the user in UI by settingsdef and add them to the settings module by using the format: 'settings' {'DJANGO_SETTINGS_NAME' : '@settings.fieldname'} where the key is the name used in Django and the parameter is a DG3 var from the settings form.
'settingsdef' string Name of the form used for setup of the module. The settings uses defaultsettings as initial settings and then stores the definition in app.conf file. The form of the string is 'module:NameOfSettingsForm'. The for then has to be defined in the module with ending .form
'urls' OrderedDict Url defintions added to the root urls.py file. You can use a dict or an OrderDict. The later keeps the order of the urls. The first will add them in random order. The url format is the same as used by Django; ex. ('_upload/file' , 'fileupload.ajaxfileupload').

Pages/Forms

All forms defined in the directory forms, are copied into the application when you save the module settings. They are never updated unless you add the 'alwaysoverwritepages' to the definitions. Then the forms are replaced in the start of each rebuild of an application. The forms are by default copied into a folder named the same as the module.

Templates

All templates defined in the directory templates, are copied into the application when you save the module settings. They are never updated unless you add the 'alwaysoverwritetemplates' to the definitions. Then the templates are replaced in each rebuild of an application.

Tables (panned but not implemented)

All tables defined in the directory tables, are created in the applications repository when you save the module settings. They are never updated unless you add the 'alwaysupdatetable' to the definitions. The tables comes in the form of a ftdf file that can be created by save as ftdf in DG3. If there are a corresponding frm file, this will be copied in and an update to the application objects are done. Data can be populated by using a tablename.json file with the DG3 record format.