Skip to content

Degree Configuration Files

Degree Configuration Files are used to specify information about degrees, such as the default number of years, the default search filters, the valid starting years and semesters, the total unit amounts, and which courses appear in the left sidebar and how they are grouped.

These configuration files are in JSON format.

📚 Overview


Toplevel Configuration

The following fields define a degree's top-level structure and layout. These appear at the root of the degree configuration JSON file.

Required Fields

Field Type Description
name string A human-readable name for the degree. This is usually the same as the long name, except without the '(Honours) part (e.g. "Bachelor of Advanced Computing").
longName string A human-readable, full name of the degree (e.g. "Bachelor of Advanced Computing (Honours)").
degreeCode string The degree's internal code (e.g. "aacom"). This must match other components that refer to degree code (e.g. the XDEGREE prerequisite expression). Case sensitive.
defaultUnitsPerCourse integer The number of units a course is assumed to be worth if not otherwise specified (typically 6).
defaultTermLayout integer The index into termLayouts that represents the default term arrangement (e.g. 0 for the first layout). This should generally always be 0.
termLayouts array of arrays A list of possible term structures. Each sub-array represents one year of study, where each inner array defines term codes in order. Example:[[ "Semester 1", "Semester 2" ]] represents a 2-semester-per-year layout. There should generally only be one sublist in the main list. This structure is more flexible than required, hence why it is a nested list instead of a regular one.
defaultYearsInDegree integer The default number of years the degree spans (e.g. 3, 4, or 5). Min is 1 and max is 10, both inclusive.
maxDegreeUnits integer The maximum number of units allowed in the degree (e.g. 192 for a 4 year degree).
coursesPerTerm integer The typical number of courses per term a student might take. This should be set to one higher than the usual per-term limit to allow for some overloads or flexibility in moving courses. (e.g. at ANU, this is set to 5, as normally the limit is 4 courses. if one wants to overload to the up to 6 courses, users can change this in the settings).
displayYearStart integer Should generally be set to 1. Sets the starting point for "Year 1", "Year 2", etc. in the planner. If this tool is used for, e.g. highschools, could be set to e.g. 11 to make the first logical year be "Year 11" instead of "Year 1"

Optional Fields

Field Type Description
minStartingYear integer The minimum valid year the degree can start in - used to ensure users cannot set the degree rules to be a year where old rules aren't encoded. If not set, 2019 is the earliest year.
validStartSemesters array of strings The semesters in which students are allowed to start the degree. Example: [ "Semester 1", "Semester 2" ] or [ "Semester 1" ] if only semester 1 is supported. If not set, all semesters are supported to start a degree.

This part of the configuration is the most involved and sets which courses appear in the left sidebar, and how they are grouped and labelled. Sections can be given headers, a description, an add-all button, and can changed based on the year (as degree rules can change). Additionally, there are some special descriptions, described in the table.

Fields

Field Type Required/Optional Description
header string Optional If present, sets the header for this section and the below sections.
name string Required The label on the drowndown group. Only in the case that courses is set to the string *RECOMMENDED* may this be omitted.
courses array of strings, or a string Required, unless subst is present. The array of courses to show in this section. Wildcards (e.g. ['COMP1_']) are accepted, though should be used carefully to not have an overwhelming number of entries. This value may be a string literal, instead of an array, only if that string literal is *RECOMMENDED*, which causes the cause list to be generated automatically based on a recommender algorithm.
showAddAll boolean Optional If true, an "Add all" button will appear under the guide string/top of the dropdown, and if clicked, all courses in the group will be added all at once. If not present, it acts like false
guideString string Optional If present, this text will appear at the top of the dropdown. It is recommended to include one. If not present, no guide will be given, unless subst is present.
years array of integers Optional If present, this drowndown will only appear if the current year is in the list of years. Multiple similar dropdowns can be present with different year values to make it appear like the courses are changing based on the year. If not present, this dropdown will always appear.
optional string Optional No effect currently - may have some impact on SELECT statements.
subst string Optional If present, instead of getting the courses from the specified list, the courses present in a given SUBST will be included. If no guide string is given, the prerequisite expression of the SUBST will be used as the guide string.

Recommender

Using the following block, courses from a recommender algorithm can be placed in the sidebar.

{
    "header": "Suggested courses",
    "guideString": null,
    "showAddAll": false,
    "courses": "*RECOMMENDED*"
},

See this section for advice on where this should be placed.

Examples

...

{
    "header": "Specialisations",
    "name": "Artificial Intelligence",
    "courses": ["COMP3620", "COMP4620", "COMP4691"],
    "showAddAll": true,
    "optional": "spec",
    "guideString": "Please select all 3 courses, then any 4000-level COMP course.",
    "years": [2020, 2021, 2022, 2023, 2024]
},
{
    "header": "Specialisations",
    "name": "Artificial Intelligence",
    "courses": ["COMP2620", "COMP3620", "COMP4620", "COMP4691"],
    "showAddAll": true,
    "optional": "spec",
    "guideString": "Please select all 4 courses.",
    "years": [2025, 2026]
},
{
    "name": "Machine Learning",
    "courses": ["COMP3670", "COMP4650", "COMP4660", "COMP4670", "COMP4680", "ENGN4528"],
    "showAddAll": false,
    "optional": "spec",
    "guideString": "Please select 4 of the below courses."
},
{
    "name": "Professional Computing",
    "subst": "cs/PCOM-SPEC"
}

...

In 2025, this displays as the following (noting that only one dropdown group can be open at once):

Rendering of the example configuration in the left sidebar.

Ordering Your Dropdowns

The order that the dropdowns and groups are placed is arbitrary, though it is useful to keep them consistent across various degrees, and to ensure the language used in naming them and the headers is somewhat consistent too.

The recommended order and hierarchy of headings and dropdowns is:

  • Core Requirements
    • Introductory course choices (e.g. standard vs. advanced programming/maths intro courses - there may be multiple dropdowns here)
    • Compulsory courses (all required courses - this should have the 'add all' button added.)
    • Other course choices (e.g. any further sets of courses where you get choices - there may be multiple dropdowns here)
    • Research/honours course choices (if there are options, else put in compulsory)
    • Standard university requiremnets (e.g. 'transdisciplinary problem solving' courses)
  • Majors
    • one for each major...
  • *RECOMMENDED*
  • Other Discipline Courses (e.g. "Other COMP Courses") (only if useful for meeting wildcard degree requiremnets)
    • COMP Level 1
    • COMP Level 2
    • COMP Level 3
    • COMP Level 4

An example for an engineering degree (with the recommender taken out): Example Engineering degree left sidebar

An example for a computing degree (with the recommender taken out): Example Computing degree left sidebar


Search Configuration

The search configuration defines togglable filters for course visibility within the degree planner's course search interface.

A number of keys are defined, and a UI label is defined for each. The uni-specific front-end part of the planner is able to take these keys, and show or hide courses based on them. Not all of these keys have to be used by a particular degree, e.g. there may be 20 different toggles/filters set by the university, but a given degree might show only 10 of them, and then only set 4 of them by default.

Generally, most degrees will give the same layout, with the selected filters by default changing based on the degree type (e.g. undergraduate vs postgraduate).

Fields

Field Type Description
layout array of objects A list of groups of toggle filters. Each group is an object where each key is a unique identifier for the toggle (e.g. sem1, postgrad), and each value is the label shown in the UI.
selectedByDefault array of strings A list of toggle identifiers that are selected (enabled) by default. These must correspond to keys found in the layout.

Example

"search": {
  "layout": [
    {
      "undergrad": "Show undergraduate courses?",
      "postgrad": "Show postgraduate courses?",
      "weirdo": "Show 5000, 7000 and 9000 level courses?"
    },
    {
      "sem1": "Show semester 1 courses?",
      "sem2": "Show semester 2 courses?",
      "seasonal": "Show seasonal courses?"
    }
  ],
  "selectedByDefault": [
    "postgrad", "sem1", "sem2"
  ]
}

Example Configuration File 1

{
    "degreeCode": "aacom",
    "name": "Bachelor of Advanced Computing",
    "longName": "Bachelor of Advanced Computing (Honours)",
    "defaultUnitsPerCourse": 6,
    "defaultYearsInDegree": 4,
    "coursesPerTerm": 5,
    "defaultTermLayout": 0,
    "termLayouts": [
        ["Semester 1", "Semester 2"]
    ],
    "maxDegreeUnits": 192,
    "displayYearStart": 1,
    "search": {
        "layout": [
            {
                "undergrad": "Show undergraduate courses?",
                "postgrad": "Show postgraduate courses?",
                "weirdo": "Show 5000, 7000 and 9000 level courses?"
            },
            {
                "sem1": "Show semester 1 courses?",
                "sem2": "Show semester 2 courses?",
                "seasonal": "Show seasonal courses?"
            }
        ],
        "selectedByDefault": [
            "undergrad", "sem1", "sem2"
        ]
    },
    "dropdown": [
        {
            "header": "Core Requirements",
            "name": "Introductory Programming",
            "courses": ["COMP1100", "COMP1130"],
            "showAddAll": false,
            "guideString": "Choose one of the below courses"
        },
        {
            "name": "Structured Programming",
            "courses": ["COMP1110", "COMP1140"],
            "showAddAll": false,
            "guideString": "Choose one of the below courses"
        },
        {
            "name": "Mathematics",
            "courses": ["MATH1005", "MATH2222"],
            "showAddAll": false,
            "guideString": "Choose one of the below courses",
            "years": [2022, 2023, 2024, 2025, 2026]
        },
        {
            "name": "Transdisciplinary Problem Solving",
            "courses": ["TRANSDISCIPLINARY"],
            "showAddAll": false,
            "guideString": "Select two courses not already part of your degree, from the following",
            "years": [2025, 2026]
        },
        {
            "name": "Compulsory courses",
            "courses": ["COMP1600", "COMP2100", "COMP2300", "COMP2310", "COMP2400", "COMP3600", "COMP4450"],
            "showAddAll": true,
            "guideString": "You must take all of these courses",
            "years": [2025, 2026]
        },
        {
            "name": "Compulsory courses",
            "courses": ["COMP1600", "COMP2100", "COMP2120", "COMP2300", "COMP2310", "COMP2420",
                "COMP3600", "COMP4450"],
            "showAddAll": true,
            "guideString": "You must take all of these courses",
            "years": [2022, 2023, 2024]
        },
        {
            "name": "Compulsory courses",
            "courses": ["COMP1600", "COMP2100", "COMP2120", "COMP2300", "COMP2310", "COMP2420", "MATH1005",
                "COMP3600", "COMP4450"],
            "showAddAll": true,
            "guideString": "You must take all of these courses",
            "years": [2019, 2020, 2021]
        },
        {
            "name": "Honours",
            "courses": ["COMP4550", "COMP4500", "COMP4820"],
            "showAddAll": false,
            "guideString": "Choose one of the below courses",
            "years": [2024, 2025, 2026]
        },
        {
            "name": "Honours",
            "courses": ["COMP4550", "COMP4810", "COMP4820"],
            "showAddAll": false,
            "guideString": "Choose one of the below courses",
            "years": [2023]
        },
        {
            "name": "Honours",
            "courses": ["COMP4550", "COMP4560"],
            "showAddAll": false,
            "guideString": "Choose one of the below courses",
            "years": [2019, 2020, 2021, 2022]
        },
        {
            "name": "Elective courses",
            "courses": ["MATH1013", "MATH1014", "MATH1115", "MATH1116", "MATH2301", "ENGN1211", "STAT1003", "STAT1008"],
            "showAddAll": false,
            "guideString": "These courses may count towards your degree in place of a COMP elective.",
            "years": [2025, 2026]
        },
        {
            "name": "Elective courses",
            "courses": ["MATH1013", "MATH1014", "MATH1115", "MATH1116", "MATH2301", "ENGN1211", "STAT1003", "STAT1008", "VCUG3001", "ENGN3230"],
            "showAddAll": false,
            "guideString": "These courses may count towards your degree in place of a COMP elective."
        },
        {
            "header": "Specialisations",
            "name": "Artificial Intelligence",
            "courses": ["COMP2620", "COMP3620", "COMP4620", "COMP4691"],
            "showAddAll": true,
            "optional": "spec",
            "guideString": "Please select all 4 courses.",
            "years": [2018, 2019, 2020, 2021, 2022, 2023, 2024]
        },
        {
            "header": "Specialisations",
            "name": "Artificial Intelligence",
            "courses": ["COMP2620", "COMP3620", "COMP4620", "COMP4691"],
            "showAddAll": true,
            "optional": "spec",
            "guideString": "Please select all 4 courses.",
            "years": [2025, 2026]
        },
        {
            "name": "Machine Learning",
            "courses": ["COMP3670", "COMP4650", "COMP4660", "COMP4670", "COMP4680", "ENGN4528"],
            "showAddAll": false,
            "optional": "spec",
            "guideString": "Please select 4 of the below courses."
        },
        {
            "name": "Human-Centred and Creative Computing",
            "courses": ["COMP3900", "COMP4350", "COMP4528", "COMP4610", "COMP3540", "COMP3670"],
            "showAddAll": false,
            "optional": "spec",
            "guideString": "Please select COMP3900, one of COMP3540 or COMP3670, and 2 others.",
            "years": [2025, 2026]
        },
        {
            "name": "Human-Centred and Creative Computing",
            "courses": ["COMP3900", "COMP3540", "COMP4350", "COMP4610", "COMP4660"],
            "showAddAll": false,
            "optional": "spec",
            "guideString": "Please select COMP3900 and 3 others.",
            "years": [2023, 2024]
        },
        {
            "name": "Systems and Architecture",
            "courses": ["COMP2400", "COMP3300", "COMP3310", "COMP3320", "COMP3610", "COMP4300", "COMP4330", "COMP4340"],
            "showAddAll": false,
            "optional": "spec",
            "guideString": "Please select two 4000 level courses, and 2 others.",
            "years": [2018, 2019, 2020, 2021, 2022, 2023]
        },
        {
            "name": "Systems and Architecture",
            "courses": ["COMP4045", "COMP4300", "COMP4712", "COMP2400", "COMP3300", "COMP3310", "COMP3320","COMP3610"],
            "showAddAll": false,
            "optional": "spec",
            "guideString": "Please elect two of COMP4045, COMP4300 and COMP4712; and then any two more.",
            "years": [2024]
        },
        {
            "name": "Systems and Architecture",
            "courses": ["COMP4045", "COMP4300", "COMP4712", "COMP3300", "COMP3310", "COMP3320","COMP3610"],
            "showAddAll": false,
            "optional": "spec",
            "guideString": "Please elect two of COMP4045, COMP4300 and COMP4712; and then any two more.",
            "years": [2025, 2026]
        },
        {
            "name": "Theoretical Computer Science",
            "courses": ["COMP2610", "COMP2620", "COMP3610", "COMP3630", "MATH3343", "COMP4600", "COMP4630"],
            "showAddAll": false,
            "optional": "spec",
            "guideString": "Please take COMP4600 and COMP4630, and then 2 others.",
            "years": [2018, 2019, 2020, 2021, 2022, 2023]
        },
        {
            "name": "Theoretical Computer Science",
            "courses": ["COMP2620", "COMP3610", "COMP3630", "COMP4712", "COMP4600", "COMP4630", "COMP4011", "MATH4343"],
            "showAddAll": false,
            "optional": "spec",
            "guideString": "Please take two of COMP2620, COMP3610, COMP3630 and COMP4712; and then any two more.",
            "years": [2024]
        },
        {
            "name": "Theoretical Computer Science",
            "courses": ["COMP4011", "COMP4600", "MATH4343", "COMP2620", "COMP3610", "COMP3630", "COMP4712", "COMP4011", "COMP4600", "MATH4343"],
            "showAddAll": false,
            "optional": "spec",
            "guideString": "Please take two of COMP4011, COMP4600 and MATH4343; then any two more.",
            "years": [2025, 2026]
        },
        {
            "header": "Suggested courses",
            "guideString": null,
            "showAddAll": false,
            "courses": "*RECOMMENDED*"
        },
        {
            "header": "Other COMP Courses",
            "name": "COMP Level 1",
            "courses": ["COMP1_"],
            "showAddAll": false,
            "guideString": null
        },
        {
            "name": "COMP Level 2",
            "courses": ["COMP2_"],
            "showAddAll": false,
            "guideString": null
        },
        {
            "name": "COMP Level 3",
            "courses": ["COMP3_"],
            "showAddAll": false,
            "guideString": null
        },
        {
            "name": "COMP Level 4",
            "courses": ["COMP4_"],
            "showAddAll": false,
            "guideString": null
        }
    ]
}

Example Configuration File 2

{
    "degreeCode": "7706xmcomp",
    "name": "Master of Computing",
    "longName": "Master of Computing",
    "defaultUnitsPerCourse": 6,
    "defaultYearsInDegree": 2,
    "coursesPerTerm": 5,
    "defaultTermLayout": 0,
    "termLayouts": [
        ["Semester 1", "Semester 2"]
    ],
    "maxDegreeUnits": 96,
    "displayYearStart": 1,
    "validStartSemesters": [
        "Semester 1"
    ],
    "minStartingYear": 2025,
    "search": {
        "layout": [
            {
                "undergrad": "Show undergraduate courses?",
                "postgrad": "Show postgraduate courses?",
                "weirdo": "Show 5000, 7000 and 9000 level courses?"
            },
            {
                "sem1": "Show semester 1 courses?",
                "sem2": "Show semester 2 courses?",
                "seasonal": "Show seasonal courses?"
            }
        ],
        "selectedByDefault": [
            "postgrad", "sem1", "sem2"
        ]
    },
    "dropdown": [
        {
            "header": "Core Requirements",
            "name": "Compulsory courses",
            "courses": ["COMP6250", "COMP6442", "COMP6710", "COMP8260"],
            "showAddAll": true,
            "guideString": "You must take all of these courses"
        },
        {
            "name": "Foundational courses",
            "courses": ["MATH6005", "COMP6260"],
            "showAddAll": false,
            "guideString": "Please select one of the following"
        },
        {
            "name": "Project courses",
            "courses": ["COMP8715", "COMP8830"],
            "showAddAll": false,
            "guideString": "Please select one of the following"
        },
        {
            "name": "Computing electives",
            "courses": ["COMP6_", "COMP7_", "COMP8_"],
            "showAddAll": false,
            "guideString": "Please select three of the following"
        },
        {
            "header": "Specialisations",
            "name": "Artificial Intelligence",
            "subst": "cs/ARTIF-SPEC",
            "showAddAll": true
        },
        {
            "name": "Computer Systems",
            "subst": "cs/CMSY-SPEC"
        },
        {
            "name": "Computational Foundations",
            "subst": "cs/COMP-SPEC"
        },
        {
            "name": "Data Science",
            "subst": "cs/DTSC-SPEC"
        },
        {
            "name": "Human-Centred and Creative Computing",
            "subst": "cs/HCCM-SPEC"
        },
        {
            "name": "Machine Learning",
            "subst": "cs/MCHL-SPEC"
        },
        {
            "name": "Professional Computing",
            "subst": "cs/PCOM-SPEC"
        }
    ]
}

Full Format Specification

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "DegreeJSONEncoding",
  "type": "object",
  "required": [
    "name",
    "longName",
    "degreeCode",
    "defaultUnitsPerCourse",
    "defaultTermLayout",
    "termLayouts",
    "defaultYearsInDegree",
    "coursesPerTerm",
    "maxDegreeUnits",
    "displayYearStart"
  ],
  "properties": {
    "name": { "type": "string" },
    "longName": { "type": "string" },
    "degreeCode": { "type": "string" },
    "defaultUnitsPerCourse": { "type": "integer" },
    "defaultTermLayout": { "type": "integer" },
    "termLayouts": {
      "type": "array",
      "items": {
        "type": "array",
        "items": { "type": "string" }
      }
    },
    "defaultYearsInDegree": { "type": "integer" },
    "coursesPerTerm": { "type": "integer" },
    "maxDegreeUnits": { "type": "integer" },
    "displayYearStart": { "type": "integer" },
    "minStartingYear": { "type": "integer" },
    "validStartSemesters": {
      "type": "array",
      "items": { "type": "string" }
    },
    "search": {
      "type": "object",
      "required": ["layout", "selectedByDefault"],
      "properties": {
        "layout": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": { "type": "string" }
          }
        },
        "selectedByDefault": {
          "type": "array",
          "items": { "type": "string" }
        }
      },
      "additionalProperties": false
    },
    "dropdown": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "header": { "type": "string" },
          "name": { "type": "string" },
          "courses": {
            "oneOf": [
              { "type": "string" },
              {
                "type": "array",
                "items": { "type": "string" }
              }
            ]
          },
          "showAddAll": { "type": "boolean" },
          "guideString": { "type": ["string", "null"] },
          "years": {
            "type": "array",
            "items": { "type": "integer" }
          },
          "optional": { "type": "string" },
          "subst": { "type": "string" }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}