CIG welcomes contributions of modeling codes in geophysics that meet our software best practices. Software best practices aid your project in becoming discoverable and reusable. Best practices help you increase the impact of your work and get appropriate credit. By sharing your software, you make science more reproducible, and contribute to a growing software ecosystem. Additionally, following best practices allows you to direct more effort towards feature rich code while increasing your userbase. CIG provides support and resources for projects that have been accepted into the CIG software community.

The Checklist below, is meant as a guide to prepare your software for CIG review.

Bold: mandatory – following minimum best practices
Plain: optional – following standard or target best practices
 * : CIG support available.


▢  Include a ‘’ file

The file should have the following attributes:

✓  Description.
Explain the research problem the software is designed to address.  Discuss any limitations and vulnerabilities. Include instructions on the best way to install and run the software.

✓ Feedback, support, and help.
Explain how a user should provide feedback, report bugs, and get help. Describe how to create new issues and the project’s timeline for responding to bug reports and enhancement requests. You may choose to include this in the file.

✓ How to Cite.
Summarizes and reinforces the information in CITATION.

✓ How to get more information.
Provide links to a website, manual, contact information, and any other information helpful to the user.

✓ License.
States the license type and links to the full LICENSE file.

▢  Include an easy-to-find documentation directory, preferably named ‘doc/’

Folder containing user documentation. User manual describes the problem the code addresses and its theoretical basis.  Should include a description of the layout of the code, installations instructions, how to get started, workflows, included benchmarks to verify and validate results where appropriate, and user examples (cookbooks). 

▢  Include a ‘LICENSE’ file

Add a plain text copy of your OSI approved software license to your repository. See:

CIG codes are required to use an OSI approved license. We recommend the GPL-2.0, GPL-3.0, or MIT licenses. 

For more information see also licensing.

▢  Include a ‘’ file

Describe how to contribute to code development.  Should include guidelines for coding standards, acceptable contributions, and requirements for additional tests.

▢  Include an ‘INSTALL’ file, or refer to installation instructions in your ‘’

Describes how to build the code including all dependencies in plain text. Codes are required to use a build system like cmake*, or make*

▢  Optional: Include a folder docker/*

Folder containing instructions to build a docker or similar container. 

▢  Include a ‘VERSION’ file

State the current version number. Version numbers must be unique. We recommend following the semantic versioning scheme:

▢  Include a ‘CHANGES’ file or another form of release notes

Provide a plain text summary of major changes in all existing releases (release notes). Changes should describe new features as well as incompatibilities to previous versions.

▢  If available, use a continuous integration system* and include necessary file

Continuous integration testing is used to automatically build and test code.  Automated tests should be provided to verify software functionality.

▢  Include tests

Provide at least one test, e.g. in a directory ‘tests/’ that ensures the correct execution of the compiled program. Include instructions for how to run and interpret the results in our ‘’ or inside the documentation.

▢  Include citation information at least by providing a ‘CITATION’ file

Explain how you want your work cited in plain text.  This should include a text and bibtex version of any publications and to the software package itself.

We recommend a machine-readable version using one of the following formats:

†      ✓  codemeta.json

†      ✓  citation.cff       

▢  Optional: Include an ‘AUTHORS’ file

List the authors of your code. This may or may not be the same as those listed in the citation and/or the list of project committers.

▢  Optional: Include an ‘ACKNOWLEDGE’ file

Acknowledge funding agencies or other sources of support to credit.

▢  Optional: Include a ‘’ file

All accepted projects  are required to abide by the CIG Code of Conduct

You may add your own code of conduct. If you do, we recommend using the Contributor Covenant CoC as a base file.


Helpful Examples and Links

Useful CIG projects as examples:


Some other useful checklists:

  • CII Best Practices Badge Program, Best Practices Criteria for Free/Libre and Open Source Software (FLOSS)


  • Journal of Open Source Software – Review checklist




Debug Console

Close19 MBRequestSessionTimelineDatabase39Events25
Array( ) Array(

Array( ) Array(

Array( ) Array(

Array( PATH => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin, USER => apache, HOME => /... Array(
PATH => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin,
USER => apache,
HOME => /var/www,
REDIRECT_SCRIPT_URL => /software/software-contribute/software-checklist,
SCRIPT_URL => /software/software-contribute/software-checklist,
HTTPS => on,
HTTP_ACCEPT => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,
DOCUMENT_ROOT => /var/www/geodynamics,
CONTEXT_DOCUMENT_ROOT => /var/www/geodynamics,
SERVER_ADMIN => root@localhost,
SCRIPT_FILENAME => /var/www/geodynamics/index.php,
REMOTE_PORT => 53320,
REDIRECT_URL => /software/software-contribute/software-checklist,
REQUEST_URI => /software/software-contribute/software-checklist,
SCRIPT_NAME => /index.php,
PHP_SELF => /index.php,
REQUEST_TIME_FLOAT => 1623601593.9535,
REQUEST_TIME => 1623601593
separator .
orderBy id
orderDir asc
1 registerIP
2 access
tracker.sid a3e59e2d4fc6a52b8f68dbcea1fe55a8
tracker.ssid a3e59e2d4fc6a52b8f68dbcea1fe55a8
tracker.rsid a3e59e2d4fc6a52b8f68dbcea1fe55a8
  • site 0.054 seconds (+0.054); 12.25 MB (+12.250) - afterInitialise
  • site 0.086 seconds (+0.032); 15.00 MB (+2.750) - afterRoute
  • site 0.117 seconds (+0.031); 18.00 MB (+3.000) - afterDispatch
  • site 0.129 seconds (+0.012); 18.25 MB (+0.250) - beforeRenderModule mod_search (Search)
  • site 0.134 seconds (+0.005); 18.25 MB (0.000) - afterRenderModule mod_search (Search)
  • site 0.134 seconds (+0.000); 18.25 MB (0.000) - beforeRenderModule mod_menu (Main Menu)
  • site 0.185 seconds (+0.051); 19.00 MB (+0.750) - afterRenderModule mod_menu (Main Menu)
  • site 0.188 seconds (+0.003); 19.25 MB (+0.250) - onAfterRender
  • site 0.191 seconds (+0.003); 19.25 MB (0.000) - sessionStore
19 MB

39 Queries Logged: 0.013273954391479 seconds

  1. SELECT data
      FROM `jos_session`
      WHERE `session_id` = '376c4b2baf36d2559a08cb054eb1800b'
      FROM `jos_session`
      WHERE `session_id` = '376c4b2baf36d2559a08cb054eb1800b'
  3. SELECT data
      FROM `jos_session`
      WHERE `session_id` = 'a3e59e2d4fc6a52b8f68dbcea1fe55a8'
  4. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_languages'
  5. SELECT session_id
      FROM `jos_session`
      WHERE `session_id` = 'a3e59e2d4fc6a52b8f68dbcea1fe55a8'
      LIMIT 1
  6. INSERT INTO `jos_session` (`session_id`,`client_id`,`time`,`ip`)
      VALUES ('a3e59e2d4fc6a52b8f68dbcea1fe55a8','0','1623601593','')
  7. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_members'
      FROM `jos_usergroups` AS `a`
      LEFT JOIN jos_usergroups AS b
      ON b.lft <= a.lft
      AND b.rgt >= a.rgt
      WHERE `a`.`id` = '1'
  9. SELECT *
      FROM `jos_viewlevels`
  10. SELECT folder AS type,element AS name,protected,params
      FROM `jos_extensions`
      WHERE `enabled` >= '1'
      AND `type` = 'plugin'
      AND `state` >= '0'
      AND `access` IN ('1','1','4')
      ORDER BY `ordering` ASC
  11. SELECT,m.menutype,m.title,m.alias,m.note,m.path AS route,,m.type,m.level,m.language,m.browserNav,m.access,m.params,m.home,m.img,m.template_style_id,m.component_id,m.parent_id,e.element AS component
      FROM `jos_menu` AS `m`
      LEFT JOIN jos_extensions AS e
      ON e.extension_id = m.component_id
      WHERE `m`.`published` = '1'
      AND `m`.`parent_id` > '0'
      AND `m`.`client_id` = '0'
      ORDER BY `m`.`lft` ASC
  12. SELECT,jos_template_styles.home,jos_template_styles.template,jos_template_styles.params,jos_extensions.protected
      FROM `jos_template_styles`
      INNER JOIN jos_extensions
      ON jos_extensions.element = jos_template_styles.template
      WHERE `jos_template_styles`.`client_id` = '0'
      AND `jos_extensions`.`enabled` = '1'
      AND `jos_extensions`.`type` = 'template'
      AND jos_extensions.`client_id` = `jos_template_styles`.`client_id`
      ORDER BY `home` DESC
  13. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_content'
  14. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_categories'
  15. SELECT a.rules
      FROM `jos_assets` AS `a`
      WHERE `a`.`id` = '1'
      GROUP BY, a.rules, a.lft
  16. SELECT b.rules
      FROM `jos_assets` AS `a`
      LEFT JOIN jos_assets AS b
      ON b.lft <= a.lft
      AND b.rgt >= a.rgt
      WHERE `a`.`name` = 'com_content'
      GROUP BY, b.rules, b.lft
      ORDER BY `b`.`lft` ASC
  17. SELECT a.*,,a.asset_id,a.title,a.alias,a.title_alias,a.introtext,a.fulltext,
      CASE WHEN IS NULL THEN a.state ELSE 0 END AS state,a.mask,a.catid,a.created,a.created_by,a.created_by_alias,
      CASE WHEN a.modified IS NULL THEN a.created ELSE a.modified END AS modified,a.modified_by,a.checked_out,a.checked_out_time,a.publish_up,a.publish_down,a.images,a.urls,a.attribs,a.version,a.parentid,a.ordering,a.metakey,a.metadesc,a.access,a.hits,a.metadata,a.featured,a.language,a.xreference,c.title AS category_title,c.alias AS category_alias,c.access AS category_access, AS author,parent.title AS parent_title, AS parent_id,parent.path AS parent_route,parent.alias AS parent_alias,ROUND(v.rating_sum / v.rating_count, 0) AS rating,v.rating_count AS rating_count
      FROM `jos_content` AS `a`
      LEFT JOIN jos_categories AS c
      ON = a.catid
      LEFT JOIN jos_users AS u
      ON = a.created_by
      LEFT JOIN jos_categories as parent
      ON = c.parent_id
      LEFT JOIN jos_content_rating AS v
      ON = v.content_id
      OUTER JOIN (SELECT as id
      FROM jos_categories AS cat JOIN jos_categories AS parent
      ON cat.lft BETWEEN parent.lft
      AND parent.rgt
      WHERE parent.extension = 'com_content'
      AND parent.published <= 0
      GROUP BY AS badcats
      ON =
      WHERE `a`.`id` = '70'
      AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= '2021-06-13 16:26:34' )
      AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= '2021-06-13 16:26:34' )
      AND `a`.`state` IN ('1','2')
  18. SELECT c.*,
      CASE WHEN CHAR_LENGTH(c.alias) THEN CONCAT_WS(':',, c.alias) ELSE END as slug
      FROM `jos_categories` AS `c`
      LEFT JOIN jos_categories AS s
      ON (s.lft <= c.lft
      AND s.rgt >= c.rgt) OR (s.lft > c.lft
      AND s.rgt < c.rgt)
      LEFT JOIN (SELECT as id
      FROM jos_categories AS cat JOIN jos_categories AS parent
      ON cat.lft BETWEEN parent.lft
      AND parent.rgt
      WHERE parent.extension = 'com_content'
      AND parent.published != 1
      GROUP BY AS badcats
      ON =
      WHERE (`c`.`extension` = 'com_content' OR `c`.`extension` = 'system' )
      AND `c`.`access` IN ('1','1','4')
      AND `c`.`published` = '1'
      AND `s`.`id` = '29'
      AND is null
      GROUP BY,c.asset_id,c.access,c.alias,c.checked_out,c.checked_out_time,c.created_time,c.created_user_id,c.description,c.extension,c.hits,c.language,c.level,c.lft,c.metadata,c.metadesc,c.metakey,c.modified_time,c.note,c.params,c.parent_id,c.path,c.published,c.rgt,c.title,c.modified_user_id
      ORDER BY `c`.`lft` ASC
  19. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_users'
  20. SELECT,m.title,m.module,m.position,m.content,m.showtitle,m.params,mm.menuid,e.protected
      FROM `jos_modules` AS `m`
      LEFT JOIN jos_modules_menu AS mm
      ON mm.moduleid =
      LEFT JOIN jos_extensions AS e
      ON e.element = m.module
      AND e.client_id = m.client_id
      WHERE `m`.`published` = '1'
      AND `e`.`enabled` = '1'
      AND (`m`.`publish_up` IS NULL OR `m`.`publish_up` <= '2021-06-13 16:26:34' )
      AND (`m`.`publish_down` IS NULL OR `m`.`publish_down` >= '2021-06-13 16:26:34' )
      AND `m`.`access` IN ('1','1','4')
      AND `m`.`client_id` = '0'
      AND (`mm`.`menuid` = '188' OR `mm`.`menuid` <= '0' )
      ORDER BY `m`.`position` ASC,`m`.`ordering` ASC
  21. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_search'
  22. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_events'
  23. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_newsletter'
  24. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_groups'
  25. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_projects'
  26. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_resources'
  27. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_courses'
  28. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_forum'
  29. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_collections'
  30. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_blog'
  31. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_tags'
  32. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_wiki'
  33. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_citations'
  34. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_storefront'
  35. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_answers'
  36. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_support'
  37. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_kb'
  38. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_wishlist'
  39. UPDATE `jos_session`
      SET `data` = '__default|a:9:{s:15:\"session.counter\";i:1;s:19:\"session.timer.start\";i:1623601593;s:18:\"session.timer.last\";i:1623601593;s:17:\"\";i:1623601593;s:8:\"registry\";O:23:\"Hubzero\\Config\\Registry\":2:{s:7:\"\0*\0data\";O:8:\"stdClass\":1:{s:1:\"0\";s:7:\"session\";}s:9:\"separator\";s:1:\".\";}s:4:\"user\";C:17:\"Hubzero\\User\\User\":22:{a:1:{s:5:\"guest\";b:1;}}s:11:\"tracker.sid\";s:32:\"a3e59e2d4fc6a52b8f68dbcea1fe55a8\";s:12:\"tracker.ssid\";s:32:\"a3e59e2d4fc6a52b8f68dbcea1fe55a8\";s:12:\"tracker.rsid\";s:32:\"a3e59e2d4fc6a52b8f68dbcea1fe55a8\";}',`time` = '1623601594',`ip` = ''
      WHERE `session_id` = 'a3e59e2d4fc6a52b8f68dbcea1fe55a8'
  • onAfterInitialise Method plgSystemP3p::onAfterInitialise /core/plugins/system/p3p/p3p.php:21
  • onAfterInitialise Method plgSystemRemember::onAfterInitialise /core/plugins/system/remember/remember.php:20
  • onAfterInitialise Method plgSystemHubzero::onAfterInitialise /core/plugins/system/hubzero/hubzero.php:21
  • onAfterInitialise Method plgSystemXFeed::onAfterInitialise /core/plugins/system/xfeed/xfeed.php:21
  • onAfterInitialise Method plgSystemSupergroup::onAfterInitialise /core/plugins/system/supergroup/supergroup.php:113
  • onAfterInitialise Method plgSystemReferrerpolicy::onAfterInitialise /core/plugins/system/referrerpolicy/referrerpolicy.php:21
  • onAfterRoute Method plgSystemJquery::onAfterRoute /core/plugins/system/jquery/jquery.php:21
  • onAfterRoute Method plgSystemSpamjail::onAfterRoute /core/plugins/system/spamjail/spamjail.php:21
  • onAfterRoute Method plgSystemIncomplete::onAfterRoute /core/plugins/system/incomplete/incomplete.php:21
  • onAfterRoute Method plgSystemUnconfirmed::onAfterRoute /core/plugins/system/unconfirmed/unconfirmed.php:21
  • onAfterRoute Method plgSystemUnapproved::onAfterRoute /core/plugins/system/unapproved/unapproved.php:21
  • onAfterRoute Method plgSystemPassword::onAfterRoute /core/plugins/system/password/password.php:21
  • onContentPrepare Method plgContentLoadmodule::onContentPrepare /core/plugins/content/loadmodule/loadmodule.php:35
  • onContentPrepare Method plgContentEmailcloak::onContentPrepare /core/plugins/content/emailcloak/emailcloak.php:25
  • onContentPrepare Method plgContentPagebreak::onContentPrepare /core/plugins/content/pagebreak/pagebreak.php:35
  • onContentPrepare Method plgContentXhubtags::onContentPrepare /core/plugins/content/xhubtags/xhubtags.php:25
  • onContentPrepare Method plgContentFormatwiki::onContentPrepare /core/plugins/content/formatwiki/formatwiki.php:63
  • onContentPrepare Method plgContentFormathtml::onContentPrepare /core/plugins/content/formathtml/formathtml.php:105
  • onContentPrepare Method plgContentExternalhref::onContentPrepare /core/plugins/content/externalhref/externalhref.php:41
  • onContentBeforeDisplay Method plgContentPagenavigation::onContentBeforeDisplay /core/plugins/content/pagenavigation/pagenavigation.php:25
  • onContentBeforeDisplay Method plgContentVote::onContentBeforeDisplay /core/plugins/content/vote/vote.php:32
  • onAfterDispatch Method plgSystemMobile::onAfterDispatch /core/plugins/system/mobile/mobile.php:22
  • onAfterDispatch Method plgSystemDebug::onAfterDispatch /core/plugins/system/debug/debug.php:60
  • onAfterDispatch Method PlgSystemHighlight::onAfterDispatch /core/plugins/system/highlight/highlight.php:25
  • onAfterRender Method plgSystemSef::onAfterRender /core/plugins/system/sef/sef.php:21