TAHub (TAHub) is a desktop app for Teaching Assistants (TAs) to efficiently manage student-related information, optimized for use via a Command Line Interface (CLI) while still offering the benefits of a Graphical User Interface (GUI). If you can type fast, TAHub can handle your tasks faster than traditional GUI apps.
Designed to streamline the workflow of TAs, TAHub goes beyond basic contact management by including powerful features such as calculating aggregate scores, marking attendance, and tracking grades. These functionalities make it an essential tool for TAs looking to manage student records and assessments effectively. If you're new to CLI-based apps, a comprehensive Quick Start section is available to help you get up to speed quickly and confidently.
delete 3 would remove the third contact shown in that list. The value provided should be a positive integer smaller than 2147483648.TAHub.json file, which contains structured information about contacts, grades, and attendance records.Ensure you have Java 17 or above installed in your Computer.
Download the latest .jar file from here.
Copy the file to the folder you want to use as the home folder for your TAHub.
Open a command terminal, cd into the folder you put the jar file in, and use the java -jar TAHub.jar command to run the application.
A GUI similar to the one below should appear in a few seconds.

Type the command in the command box and press Enter to execute it. e.g. typing help and pressing Enter will open the help window.
Some example commands you can try:
listadd n/John Doe p/98765432 e/johnd@example.com c/CS2103/TJohn Doe to the TAHub.delete 3clearexitRefer to the Features below for details of each command.
Ensure you have Java 17 or above installed in your Computer.
Check if Java is installed:
Windows + R, type cmd, and hit Enter.Command + Space, type Terminal, and hit Enter.Ctrl + Alt + T, or search for "Terminal" in your applications menu.java -version
17 or above, you should see something like:java version "17.0.x" 2024-xx-xx LTS
17, proceed to the next step to install Java.
Install Java 17 if not installed:
java -version command to ensure Java is properly installed.
Download the latest .jar file from here.
.jar file (TAHub.jar) from the latest release..jar file to the folder where you want to store your TAHub project.
Copy the file to the folder you want to use as the home folder for your TAHub.
.jar file in your Downloads folder..jar file, select Copy.Downloads folder.Control + Click) on the .jar file and choose Copy.Downloads directory..jar file, choose Copy.Open a command terminal, cd into the folder where you saved the .jar file, and use the following command to run the application.
.jar file.C:\Users\YourName\Documents\TAHub))Windows + R, type cmd, and press Enter.cd command and paste the copied path to change to the directory where the .jar file is located. Example:cd C:\Users\YourName\Documents\TAHub
java -jar TAHub.jar
Ctrl + Alt + T..jar file is located:
.jar file.Cmd + Option + C (Mac) to copy the path.cd command and paste the copied path to change to the directory where the .jar file is located. Example:cd /Users/YourName/Documents/TAHub
java -jar TAHub.jar
After a few seconds, the GUI similar to the one below should appear:
 Type commands in the command box and press Enter to execute them.
Some example commands you can try:
listadd n/John Doe p/98765432 e/johnd@example.com c/CS2103/TJohn Doe to the TAHub.delete 3clearexitRefer to the Features section below for details of each command.
Below is a summary of the available commands in TAHub, with links to detailed explanations:
Refer to the specific sections for a detailed guide on how to use each command.
Notes about the command format:
Words in UPPER_CASE are the parameters to be supplied by the user.
e.g. in add n/NAME, NAME is a parameter which can be used as add n/John Doe.
Items in square brackets are optional.
e.g n/NAME [t/TAG] can be used as n/John Doe t/friend or as n/John Doe.
Items with … after them can be used multiple times including zero times.
e.g. [t/TAG]… can be used as  (i.e. 0 times), t/friend, t/friend t/family etc.
Parameters can be in any order.
e.g. if the command specifies n/NAME p/PHONE_NUMBER, p/PHONE_NUMBER n/NAME is also acceptable.
Extraneous parameters are not allowed and will cause an error. Even in commands that do not need any parameters
(such as help, list, exit and clear), the program will still notify the user when unrecognized parameters are present.
This is to prevent the user from making mistakes and misinterpreting what a command does.
Dates supplied by the user are assumed to be in Anno Domini or the Common Era. In other words, the user will not be able to enter a date before the year 0001 AD.
If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.
helpShows a message explaining how to access the help page.
Format: help
Expected output:
 addAdds a person to the TAHub.
Format: add n/NAME p/PHONE_NUMBER e/EMAIL c/COURSE [t/TAG]…
NAME, PHONE_NUMBER, and EMAIL should correspond to a valid name, phone number, and email of the person.COURSE refers to the course this person is taking.TAG refers to any additional information about the person and should only contain alphanumeric characters. A person can have any number of tags (including 0).Tip: TAs can use tags to keep small notes about students' progress and performance in class.
Examples:
add n/John Doe p/98765432 e/johnd@example.com c/CS2103/Tadd n/Betsy Crowe t/friend e/betsycrowe@example.com c/CS1231S p/1234567 t/strugglingExpected output for add n/John Doe p/98765432 e/johnd@example.com c/CS2103/T t/excellent:
  listShows a list of all persons in the TAHub.
Format: list
Expected output:
  editEdits an existing person in the TAHub.
Format: edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [c/COURSE] [t/TAG]…
INDEX. The index refers to the index number shown in the displayed person list. The index must be a positive integer 1, 2, 3, …t/ without specifying any tags after it.Examples:
edit 1 p/91234567 e/johndoe@example.com91234567 and johndoe@example.com respectively.edit 2 n/Betsy Crower t/Betsy Crower and removes all tags associated with the person.Expected output for edit 1 p/99947328 e/bcy@example.com
  findFinds persons whose names contain any of the given keywords.
Format: find KEYWORD [MORE_KEYWORDS]
hans will match HansHans Bo will match Bo HansHan will not match HansOR search). e.g. Hans Bo will return Hans Gruber, Bo YangExamples:
find John returns john and John Doefind Alex David returns Alex Yeoh, David LiExpected output for find Alex David:
  deleteDeletes the specified person from the TAHub.
Format: delete INDEX
INDEX.Examples:
list followed by delete 2find Alex followed by delete 1find command.Expected output for find Alex followed by delete 1:
  addGradeAdds or updates a grade for a person in the TAHub. If a grade with the same test name already exists, it will be overwritten.
Format: addGrade INDEX n/TEST_NAME s/SCORE w/WEIGHTAGE
INDEX. The index refers to the index number shown in the displayed person list. The index must be a positive integer 1, 2, 3, …TEST_NAME refers to the name of the test (e.g. Midterm Exam). The test name will be automatically converted to lowercase.SCORE refers to the score obtained by the person, which must be between 0 and 100 inclusive.WEIGHTAGE refers to the weightage of the test in percentage, which must be between 0 and 100 inclusive. Weightages of 0 are allowed for tests that are formative in nature.TEST_NAME exists, it will be updated with the new SCORE and WEIGHTAGE.Examples:
addGrade 2 n/Midterm s/85 w/30find Alex followed by addGrade 1 n/midterm s/85 w/30find command with a score of 92% for "Final Exam" and 30% weightage.Expected output for addGrade 1 n/midterm s/85 w/30:
  deleteGradeDeletes a grade for a person in the TAHub.
Format: deleteGrade INDEX n/TEST_NAME
TEST_NAME for the person at the specified INDEX.TEST_NAME refers to the name of the test whose grade you want to delete.Examples:
deleteGrade 2 n/Midtermfind Betsy followed by deleteGrade 1 n/Final Examfind command.Expected output for deleteGrade 1 n/midterm:
  aggGradePerforms aggregation operation on the current filtered list of people.
Format: aggGrade OPERATION [n/TEST_NAME]
OPERATION can be:
var: Taking variancestddev: Taking standard deviationmean: Taking meanmax: Taking maximummin: Taking minimummedian: Taking medianWithout the [n/TEST_NAME] parameter, the command performs the selected aggregation OPERATION on the overall grade of the current filtered list.
This includes persons without any grades listed, for which the overall grade is taken as 0.00.
When adding in the [n/TEST_NAME] parameter, the behaviour of the command changes to perform the selected aggregation OPERATION only on
TEST_NAME tests of the current filtered list. This will only include persons who have the specified test recorded in their grade list.
Example:
aggGrade mean
Shows the mean of the overall grade of the current filtered list.
Expected output:
 In this example, aggGrade mean calculates the mean of the overall grades of Alex Yeoh and Bernice Yu, which are 86.40 and 87.00 respectively.
aggGrade min
Shows the minimum of the overall grade of the current filtered list (including persons with no grades).
Expected output:
 In this example, aggGrade min calculates the minimum of the overall grades of Alex Yeoh and Bernice Yu, which are 77.50 and 92.50 respectively.
aggGrade mean n/final
Shows the mean for final tests of the current filtered list.
Expected output:
 In this example, aggGrade mean n/final calculates the mean of the final grades of persons who have their final tests recorded in their grade list.
Only Alex Yeoh and Bernice Yu have their final marks recorded, which are 87.00 and 90.00 respectively.
Other persons like Charlotte Oliveiro who currently do not have a grade for 'final' are not included in the calculation.
markMarks the attendance record for the specified date for a person in the TAHub. If the attendance record for that date already exists, it will be overwritten.
Format: mark INDEX d/DATE_TIME m/ATTENDANCE
INDEX. The index refers to the index number shown in the displayed person list. The index must be a positive integer 1, 2, 3, …DATE_TIME refers to the date and time of attendance that you want to add or edit. It must be written in the format dd/MM/yyyy HH:mm.ATTENDANCE refers to the attendance status, which must be either Attended or Absent. They are not case-sensitive.DATE_TIME already exists, it will be updated with the new ATTENDANCE.Examples:
mark 2 d/31/01/2024 10:00 m/Attendedfind Alex followed by mark 1 d/31/01/2024 12:00 m/Absentfind command.Expected output for mark 1 d/31/01/2024 12:00 m/absent:
  unmarkDeletes the attendance record for the specified date for a person in the TAHub. All the remaining attendance records for that person will be retained.
Format: unmark INDEX d/DATE_TIME
INDEX. The index refers to the index number shown in the displayed person list. The index must be a positive integer 1, 2, 3, …DATE_TIME refers to the date and time of attendance that you want to delete. It must be written in the format dd/MM/yyyy HH:mm.Examples:
unmark 2 d/31/01/2024 10:00find Alex followed by unmark 1 d/31/01/2024 12:00find command.Expected output for unmark 1 d/31/01/2024 12:00:
  absenteesFinds all people who were absent on the specified date and time.
Format: absentees d/DATE_TIME
DATE_TIME refers to the date and time for which you want to find people who were absent. It must be written in the format dd/MM/yyyy HH:mm.Examples:
absentees d/31/01/2024 10:00Expected output for absentees d/31/01/2024 10:00:
  clearClears all entries from the TAHub.
Format: clear
Expected output:
 exitExits the program and closes.
Format: exit
TAHub data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
TAHub data are saved automatically as a JSON file [JAR file location]/data/TAHub.json. Advanced users are welcome to update data directly by editing that data file.
Caution:
If your changes to the data file makes its format invalid, TAHub will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it.
Furthermore, certain edits can cause the TAHub to behave in unexpected ways (e.g. if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.
[coming in v2.0]Details coming soon ...
Q: How do I transfer my data to another computer?
 A: To transfer your TAHub data to another computer, follow these steps:
[JAR file location]/data/TAHub.json.data folder within that location.TAHub.json file to a USB drive, cloud storage, or any other method you prefer for transferring files between computers.
.jar file from the TAHub releases page..jar file in a folder on the new computer where you want to use TAHub.
cd into the folder containing the .jar file, and run the command:java -jar TAHub.jar
data folder in the same directory as the .jar file with an empty TAHub.json file.
data folder where the new TAHub.json file was created.TAHub.json file and replace it with the TAHub.json file you copied from the old computer.
.jar file again.By following these steps, you can easily transfer all your TAHub data to a new computer without losing any information.
preferences.json file created by the application before running the application again.help command (or use the Help menu, or the keyboard shortcut F1) again, the original Help Window will remain minimized, and no new Help Window will appear. The remedy is to manually restore the minimized Help Window.add or edit command, if the name, tag, or course has a known prefix (e.g. having c/method e/a as the course name parameter), the application will interpret it as another parameter instead of being one whole parameter. The remedy is to avoid using any known prefixes inside parameters, or separate the letter and slash character with a space if absolutely necessary.| Action | Format, Examples | 
|---|---|
| Add | add n/NAME p/PHONE_NUMBER e/EMAIL c/COURSE [t/TAG]… e.g. add n/James Ho p/22224444 e/jamesho@example.com c/CS2103/T t/friend t/colleague | 
| Clear | clear | 
| Delete | delete INDEXe.g. delete 3 | 
| Edit | edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [c/COURSE] [t/TAG]…e.g. edit 2 n/James Lee e/jameslee@example.com | 
| Find | find KEYWORD [MORE_KEYWORDS]e.g. find James Jake | 
| Action | Format, Examples | 
|---|---|
| Add/Edit Grade | addGrade INDEX n/TEST_NAME s/SCORE w/WEIGHTAGE e.g. addGrade 1 n/Midterm s/85 w/30 | 
| Delete Grade | deleteGrade INDEX n/TEST_NAME e.g. deleteGrade 1 n/Midterm | 
| Grade Aggregation | aggGrade OPERATION [n/TEST_NAME] e.g. aggGrade median n/Midterm | 
| Action | Format, Examples | 
|---|---|
| Mark Attendance | mark INDEX d/DATE_TIME m/ATTENDANCE e.g. mark 1 d/31/01/2024 10:00 m/Attended | 
| Unmark Attendance | unmark INDEX d/DATE_TIME e.g. unmark 1 d/31/01/2024 10:00 | 
| Filter Absentees | absentees d/DATE_TIME e.g. absentees d/31/01/2024 10:00 | 
| Action | Format | 
|---|---|
| List | list | 
| Help | help | 
| Exit | exit |