KrustyKrab is a lightweight and responsive desktop app for restaurant staff to quickly manage customer information and bookings. It is designed to be simple yet efficient.
At a glance, KrustyKrab allows you to:
KrustyKrab is optimized for use via keyboard commands without compromising aesthetics or user-friendliness. If you type fast, you’ll get your booking tasks done much quicker than with any mouse-based system.
IMPORTANT: From here onwards, customers are referred to as persons in this user guide. This is for standardization purposes, as KrustyKrab allows you to save a person's information without them necessarily having a booking.
Ensure you have Java 17 or above installed on your computer.
Check if Java is already installed in the command terminal by typing: java -version
If the version shown is Java 17 or higher, you're good to go.
If not, download and install java 17 from Oracle.
Mac users: Ensure you have the precise JDK version prescribed here.
Download the latest krustykrab.jar file from here.
Copy the file to the folder you want to use as the home folder for KrustyKrab. (You may use any folder you like, but a blank folder is recommended.)
Open a command terminal and navigate into the folder in which you put the jar file using the cd (change directory) command.
For example, if you put the jar file in C:\Users\JasonLim\KrustyHomeFolder\, type the following command in the terminal and press Enter:
cd C:\Users\JasonLim\KrustyHomeFolder\
Type the following command into the command terminal and press Enter to run the application.
java -jar krustykrab.jar
A GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.

Type a command in the command box and press Enter to execute it.
Example: Typing help and pressing Enter will open the help window.
Some example commands you can try:
plist : Lists all persons.padd n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01 : Adds a person named John Doe to the person list.badd d/2021-10-01 3:00 PM p/98765432 x/5 : Adds a booking to the person with phone number 98765432.exit : Exits the app.Tips: Refer to the Command Summary for a table containing the full list of commands.
The commands you can use in KrustyKrab are split into 3 different types:
Let's walk you through some basics of the command format.
Each command consists of a command word, and zero or more parameters.
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/nutsAllergy or as n/John Doe.
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 for commands that do not take in parameters (such as help, plist, blist, and exit) will be ignored.
e.g. if the command specifies help 123, it will be interpreted as help.
Caution: 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.
A person has a name, phone number, email, address, membership status and optionally, tags.
Note:
KrustyKrab does not allow more than 1 person to have the same phone number.
paddAdds a person to the persons list.
Format: padd n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [m/IS_MEMBER] [t/TAG]…
Tips:
Examples:
padd n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01 m/truepadd n/Betsy Crowe t/seafoodAllergy e/betsycrowe@example.com a/Cotton Candy Land p/1234567padd n/Alex Yeoh p/87438807 e/alexyeoh@example.com a/Blk 30 Geylang Street 29, #06-40 t/friends 
peditEdits the details of the person identified by the index number in the displayed persons list.
Existing values will be overwritten by the input values.
Format:
pedit INDEX [n/NAME] [e/EMAIL] [a/ADDRESS] [m/IS_MEMBER] [t/TAG]…
Tips:
INDEX refers to the position of the person in the displayed person list (must be a positive integer).
At least one field must be provided.
You cannot edit the phone number of a person.
IS_MEMBER should be true/false, 1/0 or yes/no (Case Insensitive).
Editing tags will replace all existing tags with the new set. To clear all tags, use t/ without any value.
Examples:
pedit 1 e/johndoe@example.compedit 3 a/123 Sunset Way m/true t/friend t/vippedit 2 t/ (clears all tags)pedit 1 a/123 Sunset Way m/True t/vip 
pdeleteDeletes the specified person from persons list.
Format: pdelete INDEX
Tips:
INDEX refers to the index number shown in the displayed persons list.INDEX must be a positive integer 1, 2, 3, …Caution: Deleting a person also deletes their associated bookings!
Examples:
list followed by pdelete 2 deletes the 2nd person in the persons list.find Betsy followed by pdelete 1 deletes the 1st person in the results of the find command.findFinds all persons whose names contain any of the specified full-word keywords (case-insensitive), and displays them as a list with index numbers.
Format:
find KEYWORD [MORE_KEYWORDS]...
Tips:
alex matches "Alex Tan" but not "Alexander").Examples:
find Alice (matches "Alice Tan", but not "Malice")find alex (matches "Alex Tan", not "Alexander")find John returns john and John Doefind alex david returns Alex Yeoh, David LiplistShows a list of all persons in the persons list.
Format: plist
Tip:
A person can have zero, one or more bookings, but each booking must have exactly one associated person, which is referenced via their phone number.
baddAdds a booking to the bookings list.
Format: badd d/DATE_TIME p/PHONE x/PAX [r/REMARK]
Tips:
yyyy-MM-dd h:mm a2025-04-03 2:30 PM).PAX refers to your dining group size, with a maximum of 500.Examples:
badd d/2025-04-03 2:30 PM p/98765432 x/5 r/Birthday Celebrationbadd d/2025-06-10 7:00 PM p/91234567 x/2Caution: It is possible to create a booking with a date that has already passed, but a warning will be generated to notify the user.
badd d/2021-10-31 3:00 PM p/87438807 x/5 r/Birthday Celebration 
beditEdits the details of the booking identified by the booking ID.
Existing values will be overwritten by the input values.
Format:
bedit b/BOOKING_ID [d/DATETIME] [x/PAX] [r/REMARK]
Tips:
BOOKING_ID refers to the ID assigned to the booking (viewable using blist).yyyy-MM-dd h:mm a2025-04-01 9:00 PM).Note: KrustyKrab allows you to edit existing bookings that are not currently being displayed in the bookings list.
For example, if your most recent command was filter p/98765432, you can still edit a booking with BOOKING_ID '2' that
belongs to a different phone number,
even though it is not currently displayed.
Examples:
bedit b/1 d/2025-04-01 9:00 PM x/4 r/Anniversarybedit b/3 r/Changed to private roombedit b/2 d/2025-05-12 12:00 PMbdeleteDeletes the specified booking from the bookings list.
Format: bdelete BOOKING_ID
Tips:
BOOKING_ID refers to the unique booking ID of the booking.BOOKING_ID must be a positive integer e.g. 1, 2, 3, …Note: KrustyKrab allows you to delete bookings that are not currently being displayed in the bookings list.
For example, if my most recent command was filter p/98765432, I can still delete a booking with BOOKING_ID 2 that
belongs to a different phone number,
even though it is not currently displayed.
Examples:
bdelete 2 deletes the booking with ID 2.markMarks a booking with a new status (UPCOMING, COMPLETED, CANCELLED).
Format:
mark b/BOOKING_ID s/STATUS
Tips:
BOOKING_ID is shown when you list bookings.UPCOMING, COMPLETED, CANCELLED.Note: KrustyKrab allows you to mark the status of bookings that are not currently being displayed in the bookings list.
For example, if my most recent command was filter p/98765432, I can still mark the status of a booking with BOOKING_ID 2 that
belongs to a different phone number,
even though it is not currently displayed.
Example:
mark b/2 s/COMPLETED marks the booking with ID 2 as completed.filterFilters and displays bookings based on phone number, date, status, or any combination of those parameters.
Format:
filter [p/PHONE_NUMBER] [d/DATE] [s/STATUS]
Tips:
yyyy-MM-dd (e.g., 2023-12-25).UPCOMING, COMPLETED, or CANCELLED.Examples:
filter p/98765432 - Shows all bookings made by the person with phone number 98765432filter d/2023-12-25 - Shows all bookings on 25 December 2023filter s/COMPLETED - Shows all bookings marked as completedfilter p/98765432 d/2023-12-25 - Shows all bookings made by the person with phone 98765432 on 25 December 2023filter p/98765432 s/UPCOMING - Shows all upcoming bookings for the person with phone 98765432blistShows all bookings in the bookings list.
Format:
blist : Lists only upcoming bookings.blist /all : Lists all bookings (including bookings with status completed/cancelled).todayShows all bookings scheduled for today and the persons who made those bookings.
Format: today
Example:
today → Lists all of today's bookings and persons who made those bookings.clearbookingsClears all bookings marked as Completed or Cancelled.
Format: clearbookings
Warning: All Completed or Cancelled bookings will be cleared. This action is irreversible! Ensure you want to delete these bookings before proceeding.
Listed below are the currently supported general commands.
clearallClears all person entries and booking entries.
Warning: All persons and bookings will be cleared. This action is irreversible!
Format: clearall
helpShows a message explaining how to access the help page.
Format: help
exitExits the program.
Format: exit
KrustyKrab data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
KrustyKrab data are saved automatically as a JSON file [JAR file location]/data/addressbook.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, KrustyKrab 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 KrustyKrab 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: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous KrustyKrab home folder.
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.| Action | Format, Examples |
|---|---|
| Add Person | padd n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [m/IS_MEMBER] [t/TAG]… e.g., padd n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend |
| Edit Person | pedit INDEX [n/NAME] [e/EMAIL] [a/ADDRESS] [m/IS_MEMBER] [t/TAG]… e.g., pedit 3 a/123 Sunset Way m/true t/friend t/vip |
| Delete Person | pdelete INDEX e.g., pdelete 3 |
| Find Person | find KEYWORD [MORE_KEYWORDS] e.g., find James Jake |
| List Person | plist |
| Add Booking | badd d/DATE_TIME p/PHONE x/PAX [r/REMARK] e.g., badd d/2025-04-03 2:30 PM p/98765432 x/5 r/Birthday Celebration |
| Edit Booking | bedit b/BOOKING_ID [d/DATETIME] [x/PAX] [r/REMARK] e.g., bedit b/1 d/2025-04-01 9:00 PM x/4 r/Anniversary |
| Delete Booking | bdelete INDEX e.g., bdelete 2 |
| Mark Booking | mark b/BOOKING_ID s/STATUS e.g., mark b/2 s/COMPLETED |
| Filter Bookings | filter [p/PHONE_NUMBER] [d/DATE] [s/STATUS] e.g., filter p/98765432, filter d/2023-12-25, filter s/COMPLETED |
| List Bookings | blistblist /all |
| Today's Bookings | today |
| Clear Bookings | clearbookings |
| Clear All | clearall |
| Help | help |
| Exit | exit |
cd C:\Users\MyFolder.padd adds a new person.padd n/John Doe, n/John Doe is a parameter that specifies the name..json file and can be edited manually if needed.