An alias has two parts: the name and the definition. The name is what shows up on the button in the list and snapshots windows; it cannot contain any spaces. The definition `defines' what the alias actually does. Before a message is sent, xzewd looks through the destination. It looks especially at any word which has no other context: that is, a word which doesn't follow a `-c', `-i', `-r', or `-s', and is not inside an angle-bracket triple. If an alias has been defined for that word (ie., its name is that word), then that alias's definition is stuck into the destination string, replacing the name. (Click here for more information on angle-bracket triples, words, and other things in the destination.)
For example, say you're sending a message, and the destination is "bob, june, margaret". Furthermore, say you have an alias defined whose name is "margaret" and whose definition is "margareta, margaretw, margaretsmith". Well, alias substitution will cause "margareta," etc. to be substituted for margaret in the destination. You end up sending a message to "bob, june, margareta, margaretw, margaretsmith"! Likewise, if you have an alias named "Help!" whose definition is "-i help", sending a message to "Help!" will actually send to "-i help" because of alias substitution.
Note that alias substitution is only performed once, which means that you can't have nested aliases. If the definition for an alias contains another alias's name, that second name will never be expanded.
Just like usernames, aliases have location menus, user-specifiable comments, and snapshots. (Note that snapshots for aliases must be specified through resources.)