I've always had trouble with inventing names. They refuse to come, or when they do, they sound funny or cheesy. However, a name will occasionally pop into my head, fully formed and sounding perfect. The only problem is that all of the names I think up sound similar.

For example, I am developing a fantasy world. I have elves, dwarves, and other races of my own creation. I want all the names of one race to be similar to each other (elves are soft, dwarves are guttural, etc.) , but at the same time, they need to be different enough within the same species so that readers won't confuse them.

How can I accomplish this?


For elves, I've found that names ending with 'ir' or 'mir' work well, as well as names ending with 'in'. This is fine as far as it goes. But all I can think of are names that end like that, and some of them are too similar for readers to distinguish at first. How can I keep the names similar, yet different?

EDIT: The answer I found the most helpful, was the answer to the question linked to by James in the comments below.

  • $\begingroup$ You might try a writers' forum or SE. I recall finding an online tool for generating names, and there may exist variations of the tool for ethnicity or made-up themes. $\endgroup$
    – JDługosz
    Commented May 4, 2015 at 5:54
  • $\begingroup$ I had the same problem. I now tend to use this C# Markov name generator $\endgroup$
    – ArtOfCode
    Commented May 4, 2015 at 7:59
  • $\begingroup$ This question seems to me to not be about worldbuilding, and specifically seems to fall squarely into the "General writing or storytelling" off-topic bullet point. It would likely be better asked on a general writing site, and in fact Writing already has my very similar question Coming up with names for species in fiction?. If you feel this really is about worldbuilding, I would encourage you to edit the question to explain why. Editing while the question is on hold will automatically put it in the reopen queue for review. $\endgroup$
    – user
    Commented May 4, 2015 at 8:04
  • $\begingroup$ Answerers, please make sure your answers contain a solution and not just a program recommendation. See this chat message $\endgroup$
    – ArtOfCode
    Commented May 4, 2015 at 8:46
  • 3
    $\begingroup$ @MichaelKjörling This question has been answered in several forms. I would suggest we re-open and then mark it as a duplicate. Here is (in my opinion) the most relevant Q/A to cover this topic. worldbuilding.stackexchange.com/questions/3478/… $\endgroup$
    – James
    Commented May 4, 2015 at 14:20

3 Answers 3


One trick is to not use all the letters. For elves, you might limit vowels to i and e, and consonants to n, r, b, m, l, and other 'soft' sounds, while dwarves could use u and o, and d, k, l, r, t, g, x, etc. There are a lot of letters like n and m that work for about any type of name, and different types are defined by inclusion or exclusion of just a few letters.

Or you can let your computer do the hard work for you. I myself use a Python script to generate pronounceable random words suitable for names:

def word(syl,p1,p2,con,vow):
    for s in range(syl):
        if random.random()<=p1:
        if random.random()<=p2:
    return w

Just type import random first. syl is the number of syllables, p1 and p2 are the probabilities of consonants on each end of the syllable, con and vow are list of consonants and vowels. There's probably a cleaner way to do this, codewise, but it works well. By tweaking the probabilities, I can usually get one in four of these random words to be usable names (YMMV) and many more just require simple tweaks like substituting a letter.

For suffixes, you can put +random.choice([list of suffixes]) after the function. I find this is good for place names with suffixes like 'bury', 'ton', etc. but it could work well for names too.

  • 4
    $\begingroup$ ...Man, I wrote a big,fancy Markov chain program in Ruby, and you can get usable names with that little? I feel stupid. $\endgroup$
    – anon
    Commented May 4, 2015 at 2:59
  • $\begingroup$ Not great ones, but yeah. I can see how Markov chains would be a lot better. $\endgroup$
    – evankh
    Commented May 4, 2015 at 3:02
  • 1
    $\begingroup$ Markov chains produce amazing names 99% of the time, but they take a lot of tuning. I have a separate program that's basically a genetic algorithm to get the best names, and even then it took like a week to get it working. This is probably better just because it needs so much less work to set up $\endgroup$
    – anon
    Commented May 4, 2015 at 3:07
  • $\begingroup$ A free (as in beer) name generator, based on syllable permutation, is EBON. It might be what the author needs. $\endgroup$
    – Mihai
    Commented May 4, 2015 at 7:55

This problem crops up so often that many people have made automated name generators publicly available. There are several workable computer algorithms that give reasonable results, in that names will feel like they have the right category and be pronounceable. Whether or not they suit your purpose is a matter of taste. But there are so many, you can just Google for them, find ones that are close enough and maybe customise the results to suit you. Search for "fantasy random name generator" or similar will get 100s of hits.

Here is one I quite liked on a quick recent search: http://fantasynamegenerators.com/#fantasyNames

Once you have found one you like, I suggest you run it a few times and note down your favourite names into quick pick lists ready to use. You don't need to use them exactly as-is, you can add a human touch by altering the results. Or you could just treat the output as a starting inspiration, to break out of your block on the small set of endings that have worked for you so far.


One laborious way to approach this is to construct your own language for your races. It may be a bit too much for just names but the benefits are that you can create other words as well and by following your rules your names and words are consistent.

You at the very least have to decide how the language sounds and create the lexicon. Further steps would be to create grammar and design an alphabet but they are not necessarily required if you only want to come up with names.

So, essentially you have to define what the language sounds, or to simplify: decide what kind of syllables the language has and only use those to construct your names.

I'd advice you to head to http://www.zompist.com/kit.html for further information and try out the lexicon generator ( http://www.zompist.com/gen.html ) that allows you to create words or the use the more complex Derivizer at ( http://akana.conlang.org/tools/derivizer.html ) to create new derivate names from existing ones.


Not the answer you're looking for? Browse other questions tagged .