Note: this information pertains to version 9.3.2 and earlier. For 9.4, see this page.

Custom Words, Affixes and Morphology

Adding new words

Use the Add and remove words field to add a custom word to your language. Use the format new word (in English) : part-of-speech. All words must have a part-of-speech (n = noun, v = verb, etc) to be valid:

  queen : n
  conlang, constructed language : n

To specify what the conlang word will actually be, add = conlang word (in IPA):

  queen : n = kalisi

This assumes kalisi is the pronunciation of the word, not the surface spelling. If the English word is already in the default vocab (which “queen” is), specifying its pronunciation overwrites the randomly generated word; it does not create a second entry for “queen”. If you wish for it to be a second entry, write += instead of =, eg:

  queen : n += kalisi

Similarly, by adding the conlang word “kalisi”, no other conlang word can be randomly generated as “kalisi”. However, adding a plus symbol to the other side of the equals sign means it could be:

  queen : n =+ kalisi

Removing words

Remove default English words with the minus symbol.


It is not necessary to write the part-of-speech to remove the word, unless the word has two parts-of-speech and you only want to remove one.

Derived words

Derived words are words that are built out of other words. For example, “government” is a noun which is built by combining the verb “govern” with the affix “-ment”. Use the Derived words field whenever you need to pull a word from the dictionary and combine it with an affix, or with another word.

Compound words

Use + or & signs to create compound words. Example: Let’s say your word for “war” is kara and your word for “God” is kin, and you want a compound of those words karakin to mean “God of War”. Use the following syntax:

  God of War : n = war+god - to create a single compound word
  God of War : n = war&god - to create a compound word but separated by a space

Adding affixes to words

Add affixes to words to create derived words as new word : part-of-speech = existing word-AFFIX.TAG:

  government : n = govern-ACT.OF

Vulgar has various default affixes already populated in the Add or modify affixes input box. You can create brand new affixes in this box. For instance, Vulgar does not automatically create an affix for the opposite of something, as in English’s “un-” prefix. So you may choose to create this affix in Add or modify affixes:

  OPPOSITE = Random

This affix tag must be in capitals (to distinguish it from a word) and can optionally have numbers or a full stop. = Random means Vulgar will randomly create the affix for you. You can now use -OPPOSITE on words back in the Derived words box:

  unhappy : adj = happy-OPPOSITE
  uncommon : adj = common-OPPOSITE

Be creative with affixes! Maybe your language uses affixes for things instead of full words, like:

  royal palace : n = house-ROYAL
  royal servant: n = servant-ROYAL

Affixes can be stacked on each other:

  unhappiness : n = happy-QUALITY.OF.BEING-OPPOSITE

In this scenario, QUALITY.OF.BEING first changes “happy” to “happiness”, then the OPPOSITE affix is added.

If the root word you’re trying to pull from the dictionary has two possible parts-of-speech (such as “laugh” as a verb and “laugh” as a noun), you can specify the part of speech like this:

  laughing : v = laugh:v-PROGRESSIVE

Defining affixes

Instead of using = Random, you can define what your custom affixes actually are in the following format:


This will change the root word ama to amas

To create a prefix, attach the - symbol to end of the affix:


This would change ama to sama. Even though this is a prefix, the affix tag can be positioned after the word, eg happy-OPPOSITE, although OPPOSITE-happy is also valid.

Multiple processes can by applied by comma separating the commands. The following two step process attaches a prefix and a suffix, to create a circumfix:

  OPPOSITE = s-, -s

This would change ama to samas. Again, the OPPOSITE tag can be positioned before or after the root word, however I suggest putting everything after, for consistency.

Sound changes

Sound changes can be encoded into an affix tag using the > symbol

  OPPOSITE = a > i

In this example, ama would change to ami. The left side of the > symbol is RegEx capable, so any RegEx patterns can be used to create advanced sound changes. If you don’t know what RegEx is, read up on it here. Be aware that unlike the RegEx in the Spelling Rules, these patterns are not “global”, meaning they do not change every match. Instead, > is pre-programmed change the final match in the word, where as < will change the first match in the word. Thus, a > i changes ama to ami, while a < i changes ama to ima.

The sound change step can be combined with affix steps. That is why it’s important to comma separate the steps (and don’t forget a space after the comma!):

  OPPOSITE = a > i, -s

This would change ama to amis.

A choice between random affixes can be created using the bar symbol |. The following rule adds either an -s, -t or -p as the affix:

  OPPOSITE = -s|-t|-p

Similarly, the resulting sound change can be randomised with the | symbol:

  OPPOSITE = a > i|o|e

Conditional IF and ELSE statements

There may be scenarios where you want to create conditional rules. You can do this based on whether a RegEx pattern matches using the following syntax:

  AFFIX.NAME = IF [this regex pattern is in the word] THEN [apply this set of rules] ELSE [apply this set of rules]

For instance, let’s say your prefix is s-, but if the root word already starts in an s you want to the prefix to sa- to avoid a double s. The # symbol represents a word boundary. So we can say:


This changes sama to sesama, while ama changes to sama. Note that IF, THEN and ELSE must be capitalised.

The ELSE condition is optional and can be omitted. Multiple IF statements are permitted:

  OPPOSITE = IF #s THEN sa- IF #z THEN so- ELSE s-

(For the programmers reading this, secondary IF statements are technically ELSE IF statements.)

Shorthand uppercase symbols can be used for classes of phonemes, for instance C to mean “any consonant” and V to mean “any vowel”.


This means IF the root words stars with a consonant, apply sa-, ELSE if it begins with a vowel apply s-.

IF statements can apply affixes that match the vowel harmony of root word. Let’s say you have a vowel harmony system of front vowels (i, e, a) and back vowels (u, o). IF [iea] will simply test for the presence of any of those vowels in the word, from there you can apply an affix that matches the vowel harmony:

  OPPOSITE = IF [iea] THEN -sa ELSE -so

Bound root words

Sometimes you may want to create a root word that doesn’t exist as a stand-alone dictionary entry, but that is only found with affixes attached to it. These are known as bound roots. The example in English would be words like “absence” and “absent”, where it is somewhat unclear which word is derived from which, and may instead be interpreted as a bound root “absen-” attaching to affixes “-ce” and “-t”.

To create a bound root, instead of writing the dictionary word that the affix attaches to, create a new root tag with the ! symbol. Example:

  absence : n = !myBoundRoot-NOUN.AFFIX

  absent : adj = !myBoundRoot-ADJ.AFFIX

This will randomly generate a stem word for the !myBoundRoot tag. Just like creating a unique affix, the root can be named anything, but does not have to be in upper case. If you want to specify what the root word is, you can define it just as if you were adding a custom word:

  !myBoundRoot = aku