Grammar Editor

The Grammar Editor is mostly a rich text editor that allows you to write about your language in plain English.

However it also has a “grammar table” feature that allows you to auto-generate grammatical features (affixes and words) that can be used in the translator.

Affix tables

You can insert an affix table into Grammar Editor using the Add Grammar Table button. The settings below inserts code into the Editor that will create a table for past, present and future tense affixes.

Once inserted to the Editor, the code looks like this:

TABLE TYPE = affix
part-of-speech = v
example-word = learn

rows = PaST / PReSent / FUTure

PST ~ learned = Random
PRS ~ learn = Random
FUT ~ will learn = Random

But upon generating the language, the table will come out something like this:

Past Suffix -a
prena /prena/
Present Suffix -e
prene /prene/
Future Suffix -i
preni /preni/
will learn

Here is a brief run down of what some of the boilerplate code means. The affix option

inserts TABLE TYPE = affix to the top of the code block, which means that the table will generate grammatical affixes (for example, in the English word “walked-ed is an affix that indicates past tense). Whereas, TABLE TYPE = words creates full words (which we will cover later in this guide).

The option

inserts part-of-speech = v, which means that the affixes generated in this table only attach to verbs. The example word option

inserts example-word = learn, which pulls the conlang word for “learn” from the dictionary simply to be used as an example in the table (in this language the word for “learn” is pren).

indicates the grammatical values you want this table to generate. In this case, the values are all kinds of tense. These values are placed at beginning of each row (rows =).

You may, of course, select different values. Maybe you want your language to have a past tense and a “remote past” tense for things that happened a long time ago (a feature in Italian). Or perhaps your language has no future tense affix. (Note that English has no future tense affix. It still has a way of expressing things that happen in the future using the word “will”, it just no future tense affix. Whereas other languages, such as Spanish, have an affix for future tense.)

Changing the category shows you different kinds of grammatical concepts that can be expressed via affixes, and shows you a different range of values to select from.

Custom categories

However, Vulgar does not list all possible grammatical values that can be expressed in affixes. Perhaps you want to add a recent past tense. In which case, select the custom category and manually type in values:

Remember to comma separate values!

Inside the code block that has now been entered into the editor, = Random tells the program to generate a random affix for that value. But you can custom define what the affixes are. For example:

TABLE TYPE = affix
part-of-speech = v
example-word = learn

rows = PaST / PReSent / FUTure

PST = -ed
PRS = 
FUT = will-


Past Suffix -ed
prened /prened/
Present No affix
pren /pren/
Future Prefix will-
willpren /willpren/

This example partly mimics English by making the past -ed, present has no affix at all, and will- makes a prefix for the future tense, instead of a suffix. You may custom define all of the affixes, or just some.

There is much much more that can be done with custom affixes, so check out the complete guide here.

You can optionally translate each cell by writing ~ after the affix tag name and before the = sign:

TABLE TYPE = affix
part-of-speech = v
example-word = learn

rows = PaST / PReSent / FUTure

PST ~ learned = -ed
PRS ~ learn = 
FUT ~ will learn = will-


Singular Suffix -ed
prened /prened/
Plural No affix
pren /pren/
Plural Prefix will-
willpren /willpren/
will learn

Fusional vs agglutinative languages

Clicking + fuse with another category adds another grammatical category into the same table (along the columns of the table). This means that each affixes will express two grammatical categories. In this example, each affix expresses both tense (either past, present or future) and person (whether the verb is being done by a 1st, 2nd or 3rd person):

TABLE TYPE = affix
part-of-speech = v
example-word = learn

cols = 1st person / 2nd person / 3rd person
rows = PaST / PReSent / FUTure

1.PST = -a
1.PRS = -b
1.FUT = -c
2.PST = -d
2.PRS = -e
2.FUT = -f
3.PST = -g
3.PRS = -h
3.FUT = -i


1st person 2nd person 3rd person
Past Suffix -a
lena /lena/
Suffix -d
lend /lend/
Suffix -g
leng /leng/
Present Suffix -b
lenb /lenb/
Suffix -e
lene /lene/
Suffix -h
lenh /lenh/
Future Suffix -c
lenc /lenc/
Suffix -f
lenf /lenf/
Suffix -i
leni /leni/

Here, the suffix -a means the verb is in past tense and being doing by the 1st person. So when applied to the verb for “learn” pren it becomes prena, meaning “I learned”.

Some languages have a tendency be fusional, whereas others have just a single grammatical category per affix. These are known as agglutinative languages. To create agglutinative affixes, you effectively need to create two separate tables, one for tense and another for person.

TABLE TYPE = affix
part-of-speech = v
example-word = learn

rows = PaST / PReSent / FUTure

PST = -a
PRS = -b
FUT = -c
TABLE TYPE = affix
part-of-speech = v
example-word = learn

rows = 1st person / 2nd person / 3rd person

1 = -d
2 = -e
3 = -f

Now the translation for “I learned” would require the past tense suffix -a, then the 1st person -d, producing prenad.

Irregular words

If you want a word to have its own irregular conjugation, you need to create a whole extra table and manually enter the line irregulars = conlang word in IPA. This table would make just the word vulp (“dog”) be pluralized as vulpi:

TABLE TYPE = affix
part-of-speech = n
example-word = dog
irregulars = vulp

rows = SinGular / PLural

SG ~ dog =
PL ~ dogs = -i

A single irregular table can target multiple words by comma separating them, e.g. irregulars = multiple, words, in, ipa

Multiple example words

If your language has noun genders, you can choose to pull example words from the dictionary for each gender:

TABLE TYPE = affix
part-of-speech = n
example-word M = dog
example-word F = cat

cols = Masculine / Feminine
rows = SinGular / PLural

M.SG ~ dog = Random
M.PL ~ dogs = Random
F.SG ~ cat = Random
F.PL ~ cats = Random

This applies the Masculine Singular and Masculine Plural affix to “dog”, and Feminine Singular and Feminine Plural affix to “cat”. Note that need to know the genders of these words beforehand to do this (the program will not automatically make “dog” masculine just because your table says it’s masculine).

Multiple parts of speech

In some languages, affixes pattern the same way for multiple parts of speech. Instead of adding two tables you can comma separate multiple parts of speech. For example this creates the same affixes for nouns and adjectives:

part-of-speech = n, adj

Note that this does not create two tables (nor should it, since the example word would be a noun in this scenario) it just creates the affixes for adjectives in the backend, ready to used in the Translator. But don’t forget that you can always simply write about your language outside of the grammar tables and mention that “affixes for adjectives pattern the same as nouns”.

Plain English explanations for rules

Vulgar sometimes has a difficult time translating complex rules into plain English. If the program is struggling, you can write your own plain English explanation under the rule, starting with a double quote character:

TABLE TYPE = affix
part-of-speech = n
example-word = dog

cols = SinGular / PLural

SG = -s
PL = IF #C & C# THEN -z ELSE -a
"If the word begins and ends in a consonant, add -z to the end.
Otherwise add -a to the end


Singular Suffix -s
vulps /vulps/
Plural If the word begins and ends in a consonant, add -z to the end.
Otherwise add -a to the end
vulpz /vulpz/

Word tables

Words generated in word tables automatically get pushed into the main dictionary.

Same as affix tables, you can specify what the word will be using the equals sign:

part-of-speech = det

cols = Masculine / Feminine
rows = SinGular / PLural

M.SG = el
F.SG = la
M.PL = los
F.PL = las

And you can specify exactly what each word translates to in the dictionary using the ~ sign after the name:

part-of-speech = det

cols = Masculine / Feminine
rows = SinGular / PLural

M.SG ~ the (masculine singular definite article) = el
F.SG ~ the (feminine singular definite article) = la
M.PL ~ the (masculine plural definite article) = los
F.PL ~ the (feminine plural definite article) = las

Pronoun tables

Some confusion can arise with English pronouns, due to the fact that gender is only expressed in some of its pronouns. English’s 3rd person has three genders: “he”, “she” and “it”. However, all other pronouns are gender neutral: “I”, “we”, “you”, and “they”.

Furthermore, English doesn’t have a singular/plural distinction in the 2nd person “you”, whereas 1st person does (“I” vs “we”) as does 3rd person (“he/she/it” vs “they”).

This inconsistency makes it difficult to divide English pronouns neatly into Vulgar’s rows and columns. The simplest thing may be to select the “custom” category and put every pronoun own its own row, like this:

part-of-speech = pron

rows = 1st person SinGular / 2nd person SinGular / 3rd person Masculine SinGular / 3rd person Feminie SinGular / 3rd person Neutral SinGular / 1st person PLural / 2nd person PLural / 3rd person PLural

1.SG ~ I = Random
2.SG ~ you = Random
3.M.SG ~ he = Random
3.F.SG ~ she = Random
3.N.SG ~ it = Random
1.PL ~ we = Random
2.PL ~ you = Random
3.PL ~ they = Random

However this is still not the full picture! English has different set of pronouns for “cases”, which change based on who is doing the verb (I, he, we, etc.) vs who the verb is done-to (me, him, us, etc.). Linguists call these the Nominative and Accusative case, respectively. So you may choose to add an axis for Nominative and Accusative case:

part-of-speech = pron

rows = 1st person SinGular / 2nd person SinGular / 3rd person Masculine SinGular / 3rd person Feminie SinGular / 3rd person Neutral SinGular / 1st person PLural / 2nd person PLural / 3rd person PLural
cols = NOMinative / ACCusative

1.SG.NOM ~ I = Random
1.SG.ACC ~ me = Random
2.SG.NOM ~ you = Random
2.SG.ACC ~ you = Random
3.M.SG.NOM ~ he = Random
3.M.SG.ACC ~ him = Random
3.F.SG.NOM ~ she = Random
3.F.SG.ACC ~  her = Random
3.N.SG.NOM ~ it = Random
3.N.SG.ACC ~ it = Random
1.PL.NOM ~ we = Random
1.PL.ACC ~ us = Random
2.PL.NOM ~ you = Random
2.PL.ACC ~ you = Random
3.PL.NOM ~ they = Random
3.PL.ACC ~ them = Random

If you want to make a different pronoun system to English, you need to decide if want your conlang’s pronouns to fit neatly into the rows and columns of a table, or if there will be some level of irregularity, like the English system. Next, regardless of whether they fit neatly into a table or not, you will need to figure out how each conlang pronoun translates to its English equivalent(s). Here is one possibility using a simple “neat fit” system where every conlang pronoun expresses person (1st, 2nd or 3rd) and gender (masculine or feminine) but not number (singular vs plural):

part-of-speech = pron

cols = Masculine / Feminine
rows = 1st person / 2nd person / 3rd person

M.1 ~ I/we (masculine) = Random
M.2 ~ you (masculine) = Random
M.3 ~ he/they (masculine) = Random
F.1 ~ I/we (feminine) = Random
F.2 ~ you (feminine) = Random
F.3 ~ she/they (feminine) = Random

Other tricks

Getting words from the dictionary

In the body of the grammar editor, you may pull conlang words from the dictionary using double curly brackets around the English word, eg: {{man}} will be replaced with the conlang word for man. This is helpful if you don’t know the word ahead of time. You can also apply affixes to this, eg: {{man-PL:N}} will add the plural form for nouns (assuming your language has this affix).

(Be aware that although the affix abbreviation would have been PL = in the table, its part-of-speech is added to the end so that it becomes -PL:N when it’s attached to the word. This is because there could be a plural affix for a different part-of-speech which differs from the noun affix.)

{{Langname}} can be used to pull the language’s name.

Boxed sections

Create boxed off sections in your grammar by typing three dashes

in the Grammar Editor.

Plain tables

Plain old tables that don’t generate anything can be inserted inside a code-block using Markdown-style formatting:


Gloss translations

Code blocks also allow you to create gloss translations (word-for-word and morpheme-to-morpheme translations):


te wunua molengo-su
CASE house old-1SG.POSS
my old house


The 1st line is the of the code is the conlang translation, the 2nd line is the gloss, and the last line (optional) is the plain English translation. The 1st and 2nd line should have the exact same number of spaces in order for the word-for-word translation. You can optionally put intermediary translations before the last line.

Note: even though this uses affix tags in a similar fashion to other areas in Vulgar, this section does not do the translation for you. Why? Because Vulgar’s affix tag system only partially replicates a proper linguistic gloss. For instance, you can encode an circumfix into a single affix tag. However the glossing convention is to show a morpheme-to-morpheme correlation, which means the circumfix tag should be shown at the beginning at the end of the word:

Manual translations also allow you to mark the morpheme boundaries in the conlang word, and follow other glossing conventions.