FireRoad Requirements Editor

The FireRoad Requirements Editor allows you to request modifications to the major and minor requirements used in FireRoad and CourseRoad. You can refer to this page to see how these requirements should be formatted.

Use the navigation menu to choose a requirements list to edit, or create a new requirements list.

Format Specification

Overall, the requirements list format is built on logical statements that define whether or not a user has satisfied given requirements. These are always in the form of a list of courses (or course characteristics) with optional modifications. Follow the below spec to produce accurate and visually comprehensible requirements lists in FireRoad.


Use the '%%' symbol for comments.


The first line of the document is devoted to metadata about the major, minor, or set of course requirements. The metadata should be separated by the special #,# delimiter for easy parsing.

The first line may contain the following items:

  • Department code or short title (e.g. "21M")
  • Medium title (e.g. "Music Minor")
  • Title with no degree (e.g. "Mechanical and Ocean Engineering")
  • Long title (e.g. "Bachelor of Science in Computer Science and Molecular Biology")
  • Threshold for the entire requirements list (e.g. threshold=6 to signify that at least 6 courses must be taken to satisfy the requirements list)

Each item is technically optional, but if an item is included, the preceding components must be indicated by the presence of the #,# delimiter, even if those components are empty. For example:

Incorrect: Medium title#,#Title no degree#,#Long title

Correct: #,#Medium title#,#Title no degree#,#Long title

The second line of the document may contain a description of the course requirements list (paragraph breaks may be specified with "\n\n").

The third line of the document must be empty.

2#,#2 Major#,#Mechanical Engineering#,#Bachelor of Science in Mechanical Engineering
The program in mechanical engineering provides a broad intellectual foundation in the field of mechanical engineering.\n\nThe program develops the relevant engineering fundamentals, includes various experiences in their application, and introduces the important methods and techniques of engineering practice.

(Empty line)

Top-Level Declarations

Subsequent lines should contain the top-level sections of the course requirements list. Each section definition should consist of one line for the statement that corresponds to that requirement (defined later in the document), and one line (possibly empty) for a more verbose description of the section.

The top-level sections should be terminated by an empty line.

These subjects are required for the major.\n\nConsult the department for allowed substitutions.

required_subjects, "Required Subjects" := ...

Variable Declarations

Variables can be assigned using the syntax variable_name := statement or variable_name, "title" := statement, where the statement follows the logical syntax described below. The title of the statement, if provided, should be human-readable and wrapped in quotes. Statements can contain other variables as part of their definitions.

gir_chem := 3.091/5.111/5.112 %% or statement
gir_bio := 7.012/7.013/7.014/7.015/7.016
some_girs, "Example GIRs" := gir_chem, gir_bio %% and statement

Statement Syntax

In general, ","-separated lists are ALL. "/"-separated lists are ANY. All and any statements may be nested, but they must be parenthesized.


5.12,(5.60/20.110) matches the following sets of courses:

  • 5.12 and 5.60
  • 5.12 and 20.110

Nested statements must be parenthesized:

Incorrect: 6.00/6.0001,6.0002

Correct: 6.00/(6.0001, 6.0002)

List Modifications

A list of courses succeeded by {>=x}, where x is an integer, denotes that the given criterion must apply to at least x courses. A similar rule holds true for {>x}, {<=x}, and {<x}.

If the number x is followed by the character u, then the given criterion must apply to that number of units.


The statement

mech_mat, "Mechanics/Materials" := 1.035/1.050/1.060A/1.036/1.101/1.102{>=54u}

will be satisfied when the user has taken a combination of those courses that totals at least 54 units.

Note: List modifications may only be applied to the top level of an expression, not to parenthetical sub-expressions.

In an or statement, you can specify that the satisfying classes must come from a thresholded number of distinct substituents of the statement. To do so, enter a list modification with a vertical bar (|), followed by the distinct threshold.


%% Each subsection is optional (>=0)

area2, "Area II: Humanities and the Arts" := 21G.011/21G.027/21G.030/21G.036/21G.038{>=0}
area3, "Area III: Social Sciences" := 17.407/17.433/17.486/17.53/17.537/21A.140/21A.141{>=0}
area4, "Area IV: Historical Studies" := 21G.043/21G.045/21G.075/21H.151/21H.152{>=0}

%% At least 7 subjects from at least two areas

other_elect := area2/area3/area4 {>=7|>=2}

Special Syntax

Some requirements cannot be simply encoded in the above format (e.g. take 3 subjects in math or economics). In these cases, enclose the text in two sets of quotes: ""text"". After that, use a list modification describing how many courses are required: ""3 math or economics subjects""{>=3}.


For clarification on any of the above rules, please refer to the existing requirements lists, or contact me.