CinnamonBun User Guide
CinnamonBun is a desktop app for managing client information, optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI).
- CinnamonBun - As good as it sounds.
- Quick Start
- Graphical User Interface (GUI) Overview
-
Commands
- Command Syntax
- User Guide Syntax
- Fields and Tags
- Command Summary
- Getting Help (
help) - Add Client (
add) - Edit Client (
edit) - Append Remark to Client (
remark) - Append Fields to Client (
append) - Remove Fields from Client (
remove) - Delete Client (
delete) - Delete All Data (
clear) - List All Clients (
list) - Sort Client List (
sort) - Find Client by Keyword (
find) - Clear Filtered Clients (
clearFiltered) - Add Transaction (
addTransaction) - List All Transactions (
listTransaction) - Find Client’s Transaction (
findTransaction) - Delete Transaction (
deleteTransaction) - Pay Transaction (
pay) - Unpay Transaction (
unpay) - Add Membership (
addMembership) - Remove Membership (
removeMembership) - List Members (
listMembers) - Undo Last Modification (
undo) - Exit Program (
exit)
- Special Features
- Save Data
- FAQ
CinnamonBun - As good as it sounds.
Are you a small business owner or freelancer? Want an easy way to store your client’s information, but there’s no free and easy solution available? No worries, CinnamonBun has got you covered! CinnamonBun enables you to keep track of your clients and their transaction records.
As a Command-line Interface (CLI) app, you’ll never have to move your hands away from the keyboard to get all your tasks done. If you can type fast, the CLI will allow you to execute your tasks quickly. While this may be daunting for a new user, it only takes a short time to get accustomed to CinnamonBun.
This guide aims to be the one-stop shop to get you up and running.
Quick Start
-
Ensure you have Java
11or above installed in your Computer. -
Download the latest
CinnamonBun.jarfrom here. -
Copy the file to the folder you want to use as the home folder for CinnamonBun.
-
Double-click the file to start the app. The GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.

-
Alternatively, you can run the application via the terminal using
java -jar ./CinnamonBun.jarfromCinnamonBun.jar’s home folder. -
If are unable to run it due to lack of permissions, run
chmod +x ./CinnamonBunin the terminal fromCinnamonBun.jar’s home folder. - Type the command in the command box and press
Enterto execute it. For example, typinghelpand pressing Enter will open the help window.
Some example commands you can try:-
list: Lists all clients. -
add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01: Adds a client namedJohn Doeto CinnamonBun. -
delete 3: Deletes the 3rd client shown in the current list. -
clear: Deletes all client records. -
undo: Undo the last executed command. -
exit: Exits the app.
-
- Refer to the commands below for details of each command.
Graphical User Interface (GUI) Overview

Commands
Command Syntax
Commands in CinnamonBun can be broken down into several components.
COMMAND_WORD PREAMBLE PREFIX/ARGUMENT...
| Component | Description |
|---|---|
COMMAND_WORD |
Trigger for the command to be executed. |
PREAMBLE |
Text before the first valid parameter prefix in the command. Certain commands may require a preamble. |
PREFIX |
Commands may have one or more arguments. The prefix specifies which arguments to map to the parameters. All prefixes end with a /. |
ARGUMENT |
The argument to pass to the command. |
Attention
- Commands and their arguments are case-sensitive
- Parameters can be in any order.
e.g. if the command specifiesn/NAME p/PHONE_NUMBER,p/PHONE_NUMBER n/NAMEis also acceptable. - If a parameter is expected only once in the command but is specified multiple times, only the last occurrence of the parameter will be taken.
e.g. if you specifyp/12341234 p/56785678, onlyp/56785678will be taken. - Extraneous parameters for commands that do not take in parameters (such as
help,list,exitandclear) will be ignored.
e.g. if the command specifieshelp 123, it will be interpreted ashelp. - Any invalid parameters for commands will be regarded as part of the value of the preceding parameter. For example:
- In
addTransaction 1 a/123 td/2020-11-11 n/this is a note --not paid,--not paidwill be regarded as part of the noten/this is a note --not paidsince--not paidis not a valid attribute. - In
add n/John Doe p/98765432 e/johnd@example.com a/311, Clementi Ave 2, #02-25 t/vendor c/not a prefix t/owesMoney,c/not a prefixwill be regarded as part of the preceding tagt/vendor c/not a prefixsincec/not a prefixis not a valid attribute/prefix.
- In
User Guide Syntax
-
Words in
UPPER_CASEare the arguments to be supplied by the user.
e.g. inadd n/NAME,NAMEis an argument which can be used asadd n/John Doe. -
Items in square brackets are optional.
e.gn/NAME [t/TAG]can be used asn/John Doe t/friendor asn/John Doe. -
Items with
… after them can be used zero or more times.
e.g.[t/TAG]…can be used as(i.e. 0 times),t/friend,t/friend t/family t/colleagueetc.
Fields and Tags
A client can have many fields and tags, including both optional and compulsory ones.
Attention
- Multiple clients can have the same data (e.g. same name, phone number, address, etc.), except emails. Emails must be unique to the client.
| Field | Prefix | Constraints | Compulsory | Example |
|---|---|---|---|---|
| Name | n/ |
Alphanumeric and spaces only. | n/Regina Lee |
|
e/ |
Must be in username@domain.suffix format and unique to each client. Alphanumeric and special characters, +_.- only. |
e/lovelee@mailinator.com |
||
| Phone | p/ |
Minimum 3 numeric characters. | p/81312224 |
|
| Address | a/ |
No constraints. | a/123 Sesame Street |
|
| Birthday | b/ |
Must be in YYYY-MM-DD format and a valid date. | b/2022-03-12 |
|
| Remark | r/ |
No constraints. | r/Foreman of Project Zero Dawn. |
|
| Tags | t/ |
Alphanumeric only. No spaces allowed. Multiple tags are allowed per client. |
t/Frequentclient t/AppointmentOverdue |
A transaction also have compulsory and optional fields.
| Field | Prefix | Constraints | Compulsory | Example |
|---|---|---|---|---|
| Index | NO PREFIX | Must be an Integer greater than 0. | 1 |
|
| Amount | a/ |
Must be a number between 0 and 9999999.99 inclusive. The number will be rounded to 2 decimal places. | a/12.45 |
|
| Transaction Date | td/ |
Must be in YYY-MM-DD format and a valid date. | td/2020-11-11 |
|
| Due Date | dd/ |
Must be in YYY-MM-DD format and a valid date and not before the transaction date. | dd/2020-11-11 |
|
| Note | n/ |
No constraints. | n/2 Box of ice cream |
|
| Status | NO PREFIX | Use --paid flag to set the transaction status to paid. Otherwise, the status is set to unpaid by default. |
--paid |
Command Summary
| Action | Format, Examples |
|---|---|
| Help | help |
| Add |
add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]… e.g., add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague
|
| Edit |
edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [r/remark] [t/TAG]…e.g., edit 2 n/James Lee e/jameslee@example.com
|
| Remark |
remark INDEX r/REMARKe.g., remark 5 r/Needs marble flooring delivered by next Tuesday.
|
| Append | append INDEX r/REMARK b/BIRTHDAY e/wolololol@aoe.net t/senior |
| Remove |
remove [r/] [b/] [t/TAG]…e.g., remove INDEX r/ b/
|
| Delete |
delete INDEXe.g., delete 3
|
| Clear | clear |
| List | list |
| Sort |
sort [n/] [desc] [p/] [desc] [e/] [desc] [a/] [desc] [r/] [desc] [b/] [desc] e.g., sort n/ desc p/, sort b/ a/
|
| Find |
find KEYWORD [MORE_KEYWORDS]e.g., find James Jake
|
| Clear Filtered | clearFiltered |
| Undo | undo |
| Add Transaction | addTransaction INDEX a/AMOUNT td/TRANSACTION_DATE [dd/DUE_DATE] [n/NOTE] [--paid] |
| List Transaction | listTransaction |
| Find Transaction | findTransaction INDEX |
| Delete Transaction | deleteTransaction INDEX_TRANSACTION |
| Pay Transaction | pay INDEX_TRANSACTION |
| Unpay Transaction | unpay INDEX_TRANSACTION |
| Add Membership | addMembership INDEX m/TIER [d/DATE] |
| Remove Membership | removeMembership INDEX |
| List Members | listMembers [TIER] |
| Exit | exit |
Getting Help (help)
Opens a window that includes a link to this user guide.

Format: help
Add Client (add)
Adds a client to CinnamonBun.
Format: add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [r/REMARK] [b/BIRTHDAY] [t/TAG]…
Examples:
add n/Andy Lau p/98765432 e/andy_lau@example.com a/Pasir Ris Grove, Block 73, #02-38, Singapore 518206add n/Betsy Crowe t/friend e/betsycrowe@example.com a/Newgate Prison p/1234567 t/criminal
Edit Client (edit)
Edits an existing client in CinnamonBun.
Format: edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [r/REMARK] [b/BIRTHDAY] [t/TAG]…
Info
- Edits the client at the specified
INDEX. - The index refers to the index number shown in the displayed client list.
- The index must be between 1 and 2147483647 inclusive. e.g. 1, 2, 3, …
- At least one of the optional fields must be provided.
- Existing values will be updated to the input values.
- Note: Editing email value to an existing email in the addressBook is not allowed.
- When editing tags, the existing tags of the client will be removed i.e. adding of tags is not cumulative.
- You can remove all the client’s tags by typing
t/without specifying any other tags. - You can also remove a client’s remarks by typing
r/without anything else.
Examples:
-
edit 1 p/91234567 e/johndoe@example.comEdits the phone number and email address of the 1st client to be91234567andjohndoe@example.comrespectively. -
edit 2 n/Betsy Crower t/Edits the name of the 2nd client to beBetsy Crowerand clears all existing tags.
Append Remark to Client (remark)
Appends a remark to an existing client.
Format: remark INDEX r/REMARK
Info
- Edits the client at the specified
INDEX. - The index refers to the index number shown in the displayed client list.
- The index must be between 1 and 2147483647 inclusive. e.g. 1, 2, 3, …
- You can also remove a client’s remarks by typing
r/without anything else.
Append Fields to Client (append)
Append fields to an existing client.
Format: append INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [r/REMARK] [b/BIRTHDAY] [t/TAG]…
Info
- Edits the client at the specified
INDEX. - The index refers to the index number shown in the displayed client list.
- The index must be between 1 and 2147483647 inclusive. e.g. 1, 2, 3, …
- Fields and tags that did not previously exist in the client will be added. Fields and tags that already existed will be replaced.
- Unlike
edit, typingt/without anything else is invalid.
Remove Fields from Client (remove)
Remove optional fields from an existing client.
Format: remove INDEX [r/] [b/] [t/TAG]…
Info
- Compulsory fields cannot be removed.
- Edits the client at the specified
INDEX. - The index refers to the index number shown in the displayed client list.
- The index must be between 1 and 2147483647 inclusive. e.g. 1, 2, 3, …
- Unlike
edit, typingt/without anything else is invalid.
Delete Client (delete)
Deletes a client in CinnamonBun.
Format: delete INDEX
Info
- Deletes the client at the specified
INDEX. - The index refers to the index number shown in the displayed client list.
- The index must be between 1 and 2147483647 inclusive. e.g. 1, 2, 3, …
- When the client is deleted, all of its transactions are also deleted.
Examples:
-
listfollowed bydelete 2deletes the 2nd client in the client list. -
find Betsyfollowed bydelete 1deletes the 1st client in the results of thefindcommand.
Delete All Data (clear)
Clears all data from CinnamonBun.
Format: clear
List All Clients (list)
Shows a list of all clients in CinnamonBun.
Format: list
Sort Client List (sort)
Sorts the client list based on the order of the fields specified.
Format: sort [n/] [desc] [p/] [desc] [e/] [desc] [a/] [desc] [r/] [desc] [b/] [desc]
Info
- Fields that can be sorted:
- Name
n/ - Phone number
p/ - Email
e/ - Address
a/ - Birthday
b/ - Remark
r/
- Name
- At least one of the above fields must be specified.
- Specifying
descafter a field will sort it in descending order. By default, fields are sorted in ascending order. - The fields are to be specified in their prefix. They can be specified in any order, however, priority will be given based on the order specified.
- Clients with null values in the fields to be sorted will have lesser priority.
- For example
sort n/ b/, ‘Alice’ will be at the top of the list. However, if there are multiple clients with the same name ‘Alice’, the client whose birthday field is empty, will be sorted to the bottom of the other clients named ‘Alice’.
- For example
- After sorting, the application will show the full client list, regardless if it was filtered beforehand or not. This is to prevent confusion where users filter first, then sort and realized some data is ‘missing’ as they had unintentionally filtered it out.
Examples:
-
sort n/ desc p/: Clients will be sorted in descending order of their name. Clients with the same name will be then sorted based on their phone numbers in ascending order. -
sort b/ a/: Clients will be sorted in ascending order of their birthday. Clients with the same birthday will then be sorted based on their addresses in ascending order.
Find Client by Keyword (find)
Finds clients whose attributes contain any of the given keywords.
Format: find KEYWORD [MORE_KEYWORDS]
Info
-
findalways searches all clients and not filtered clients. - The search is case-insensitive.
- The order of the keywords does not matter. e.g.
find Hans Bobwill work the same asfind Bob Hans. - Partial matches are allowed e.g.
find Bobwill match a client namedBobs. - Clients with attributes or tags matching at least one keyword will be returned (i.e.
ORsearch).
Examples:
-
find bobreturns clients with attributes containingbobe.g. clients namedSponge BobandBobs Doe -
find kent ridgereturns clients with attributes containingkentorridge. e.g. A client namedClark Kentand a client who lives at123 Ridgeview Cres.
Clear Filtered Clients (clearFiltered)
Deletes the clients filtered after using the find function.
Format: clearFiltered
Info
-
clearFiltereddeletes all the clients shown in the filtered client list. - Use
findto filter the clients to delete. - Alternatively, use
listMembersto filter clients by membership to delete. - Otherwise, if the client list is not filtered, it acts like
clear. - When the client is deleted, all of its transactions are also deleted.
Examples:
-
find Bobfollowed byclearFiltereddeletes all people named Bob. Alternatively,find Bob | clearFiltereddoes the same thing. -
listMembersfollowed byclearFiltereddeletes all people with a membership. -
listMembers goldfollowed byclearFiltereddeletes all people with a gold membership.
Add Transaction (addTransaction)
Add a transaction associated with a client.
Format: addTransaction INDEX a/AMOUNT td/TRANSACTION_DATE [dd/DUE_DATE] [n/NOTE] [--paid]
Info
- Add a transaction to the client at the specified
INDEX. - The index refers to the index number shown in the displayed client list.
- The index must be between 1 and 2147483647 inclusive. e.g. 1, 2, 3, …
- The
AMOUNTspecified must be between 0 and 9999999.99 inclusive. The number will be rounded to two decimal places. - The
TRANSACTION_DATEandDUE_DATEspecified must be a valid date inYYY-MM-DDformat. - The flag
--paidwill set the transaction status topaid
Examples:
addTransaction 1 a/123.456 td/2020-11-11addTransaction 1 a/123.456 td/2020-11-11 dd/2020-12-11 n/Unpaid order CONTACT ASAP --paid-
find Bob | addTransaction 1 a/123.456 td/2020-11-11will add the transaction to the first client that contains Bob in its’ attributes
List All Transactions (listTransaction)
List all the clients’ Transactions.
Format: listTransaction
Examples:
listTransaction
Find Client’s Transaction (findTransaction)
List all the transactions associated with a client.
Format: findTransaction INDEX
Info
- List all transactions of the client at the specified
INDEX. - The index refers to the index number shown in the displayed client list.
- The index must be between 1 and 2147483647 inclusive. e.g. 1, 2, 3, …
Examples:
-
find Bob | findTransaction 1will list the transactions of the first client that contains Bob in its’ attributes.
Delete Transaction (deleteTransaction)
Delete a transaction.
Format: deleteTransaction INDEX_TRANSACTION
Info
- Delete the transaction at the specified
INDEX_TRANSACTION. - The index refers to the index number shown in the displayed transaction list NOT the client list.
- The index must be between 1 and 2147483647 inclusive. e.g. 1, 2, 3, …
Examples:
deleteTransaction 2-
findTransaction 1 | deleteTransaction 1will delete the first transaction of the first client.
Pay Transaction (pay)
Set the status of a transaction to paid.
Format: pay INDEX_TRANSACTION
Info
- Set the status of the transaction at the specified
INDEX_TRANSACTIONtopaid. - The index refers to the index number shown in the displayed transaction list NOT the client list.
- The index must be a positive integer e.g. 1, 2, 3, …
Examples:
pay 2-
findTransaction 1 | pay 1will set the first transaction of the first client topaid
Unpay Transaction (unpay)
Set the status of a transaction to unpaid.
Format: unpay INDEX_TRANSACTION
Info
- Set the status of the transaction at the specified
INDEX_TRANSACTIONtounpaid. - The index refers to the index number shown in the displayed transaction list NOT the client list.
- The index must be between 1 and 2147483647 inclusive. e.g. 1, 2, 3, …
Examples:
unpay 2-
findTransaction 1 | unpay 1will set the first transaction of the first client tounpaid
Add Membership (addMembership)
Adds a membership to a specified user.
Format: addMembership INDEX m/TIER [d/Date]
Info
- Adds a membership to the specified
INDEX. - If the user already has an existing membership, the membership is overwritten.
- The index refers to the user at the index number displayed.
- The index must be between 1 and 2147483647 inclusive. e.g. 1, 2, 3, …
- The tier can be either Bronze,Silver or Gold. This is not case-sensitive.
- The date has to be in the format ‘YYYY-MM-DD’
Examples:
addMembership 1 m/Gold d/2022-02-02-
find Bob | addMembership 1 m/Silverwill add the silver membership to the first client that has Bob in its’ attributes.
Remove Membership (removeMembership)
Removes a membership from the specified user.
Format: removeMembership INDEX
Info
- Removes a membership from the specified
INDEX. - The index refers to the user at the index number displayed.
- The index must be between 1 and 2147483647 inclusive. e.g. 1, 2, 3, …
- If the user has no membership, it simply does nothing.
Examples:
removeMembership 1-
find Bob | removeMembershipremove the membership from the first client that has Bob in its’ attributes.
List Members (listMembers)
List all members belonging to the specified tier.
Format: listMembers [TIER]
Info
- Lists all members belonging to the specified TIER.
- The tier is optional. If no tier is specified, it simply lists all members.
- The tier can be either Bronze,Silver or Gold. This is not case-sensitive.
Examples:
-
listMembers goldlist all users with gold membership. -
addMembership 2 m/silver | listMemberswill add the silver membership to the second client displayed and then list all existing members.
Undo Last Modification (undo)
Undo last modification made to the clients list.
Format: undo
Info
- Saves your latest 10 modifications to the clients or the clients list.
- If the previous command have multiple modifications through command chains, it is counted as one modification.
- Calling undo will show the entire list, regardless of whether you filtered the list previously. (Filtering through the Find command is not considered a modification)
Types of modification that will be undone:
Exit Program (exit)
Exits the program.
Format: exit
Special Features
Command Chains
Multiple commands can be chained by separating each command with the | character.
Info
- Each command is run sequentially from first to last.
- Take note of indexes. E.g.
delete 7 | delete 8may not work as expected as deleting item 7 will in turn cause item 8 to become item 7 which may result in unintended consequences. Instead, rundelete 7 | delete 7which is what you would do anyway if you wanted to achieve the same effect by running each command individually. This is intended behaviour. - If invalid commands and the special commands
help,exitandundoare found anywhere in the command chain, the whole chain will be invalidated causing none of the commands in the chain - even valid commands - to execute. - Anything bounded by the start of the command, the end of command and the
|separators will be considered a command. E.g.find alex | clearFiltered |will be considered three commands, namely “find alex”, “clearFiltered” and “ “. Since the third command, “ “, is empty and thus invalid, the first two will not execute. - The user will only receive the command feedback of the last command. E.g. Running
delete 2 | add n/John p/81234567 e/john@email.com a/42 Doe Stwill only showAdded John.in the result box.
Examples:
- Valid command chain:
add n/John p/81234567 e/john@email.com a/42 Doe St | edit 5 p/999 | delete 2
- Invalid command chains:
add n/John p/81234567 e/john@email.com a/42 Doe St | invalidCommand | delete 2 (add and delete commands will not execute as an invalid command was found)
add n/John p/81234567 e/john@email.com a/42 Doe St | delete 2 | undo (add and delete commands will not execute as a special command, in this case undo, was found)
add n/John p/81234567 e/john@email.com a/42 Doe St | (add command will not execute as the second command is empty and is thus invalid)
Command History
You can navigate through your command history by using the up and down arrow keys. The command history works similarly to the Linux bash terminal.
Clickable Client Card
You can list all transactions of a client by left-clicking the client’s card.
This is equivalent to typing findTransaction INDEX in the command box. Left-clicking a selected client card will deselect that card and list all transactions. Up to one client card can be selected at anytime.
Themes
You can change between the light or dark theme by click on the menu bar and selecting Theme > Cinnamon or Theme > Caramel.

Command Correction/Completion
Pressing TAB while typing a command will change the last word of the command into the closest command word.
Examples:
-
dele->delete -
sddTranssaction->addTransaction -
delete 7 | ed->delete 7 | edit
Save Data
CinnamonBun’s data is saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
FAQ
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 CinnamonBun home folder.
Q: Why is this named CinnamonBun?
A: Because we like Cinnamon Buns.