Traveller Subsector Generator

This page collects the most recent blog posts about the Traveller Subsector Generator.

The Traveller page might have more stuff for you.

2018-10-27 Names in Traveller

I keep wanting to go back and run a Traveller game. But this seems to be my curse: writing software for games I don’t play. Like other people reading rules for games they don’t play, or buying materials they don’t use. Well, in case you want to run a Traveller game, check out this Traveller map generator. Please note that generating the map for a whole sector takes a few moments. Subsectors are much faster.

I just added something new to it: languages. For a long time, the map generator would pick a “language” and generate names that belonged to this “language”. The name generator is also available as a separate tool. I felt that over the centuries, there must be settlements and growth, decay, something like migration. And thus the names should stick around.

Here’s what I’m doing now:

  1. After all the systems on the map are named (using the language of the ancients, I guess), I go through all the systems again.
  2. Every system has a 5% chance of having developed a dynamic culture with it’s own language and names.
  3. For every culture that’s thus generated, I determine whether it has access to Jump-1 or Jump-2 drives (50% each).
  4. And I decide for how many jumps they will spread: one to three jumps.
  5. If they arrive at a system where another culture has already taken root, there’s a 50% chance that they won’t settle and expansion stops.
  6. This expansion also renames the systems using the new “language”.
  7. When I’m done, it’s time to pick colours. Sadly, I know very little about colours and so I just have seven colours prepared and each culture gets one of them. That also means that sometimes regions with the same colour will touch and appear to form a single area. Well, I guess these are multi-lingual empires.
  8. System not touched by these expansions keep their names and the white background.

It looks quite appealing!

Sector Map

There are still unresolved questions, though: is the red area in the lower left really a merger of several larger cultures that all happened to end up red?

Here’s some debugging output. What you see is a line showing where the expansion started, the colour picked, the jump drive quality (1 or 2), and the expansion (1 to 3, going down by one with every step). I filtered the entire output for the area of interest: x coordinates from 01 to 09 and y coordinates from 30 to 49. Every line is prefixed with it’s line number, which should make it easier to spot gaps.

50 matches for "0.[34]. " in buffer: *scratch*
    127:0735 005 1 1
    128: added 0635 1 1
    129: added 0734 1 1
    130: added 0835 1 1
    131: added 0536 1 0
    132: added 0633 1 0
    133: added 0935 1 0
    134: added 0936 1 0
    182:0840 009 2 2
    183: added 0740 2 2
    184: added 0838 2 2
    185: added 0940 2 2
    188: added 0638 2 1
    189: added 0438 2 0
    190: added 0537 2 0
    191: added 0538 2 0
    192: added 0737 2 0
    195: added 0936 2 0
    414:0935 023 2 3
    415: added 0735 2 3
    416: added 0835 2 3
    419: added 0534 2 2
    420: added 0536 2 2
    421: added 0635 2 2
    422: added 0936 2 2
    423: added 0334 2 1
    424: added 0335 2 1
    425: added 0435 2 1
    426: added 0633 2 1
    427: added 0734 2 1
    428: added 0134 2 0
    429: added 0135 2 0
    430: added 0232 2 0
    431: added 0234 2 0
    432: added 0332 2 0
    433: added 0336 2 0
    434: added 0136 2 0
    435: added 0337 2 0
    436: added 0538 2 1
    437: added 0737 2 1
    438: added 0338 2 0
    439: added 0339 2 0
    440: added 0438 2 0
    441: added 0638 2 0
    442: added 0537 2 1
    452: added 0931 2 1
    453: added 0932 2 1
    459: added 0730 2 0
    460: added 0731 2 0
    461: added 0830 2 0

As you can see, there was a culture that started in 0840 and grew into 9 more systems (with some growth outside the bounds that we’re looking at) but the culture which started in 0935 gobbled half of it up. A Jump-2 drive and a drive to expand up to three jumps makes a massive difference. Just to make sure that the remaining lines did not hide anything important, I went back to the file: 63 systems!

0935 023 2 3
 added 0735 2 3
 added 0835 2 3
 added 1034 2 3
 added 1134 2 3
 added 0534 2 2
 added 0536 2 2
 added 0635 2 2
 added 0936 2 2
 added 0334 2 1
 added 0335 2 1
 added 0435 2 1
 added 0633 2 1
 added 0734 2 1
 added 0134 2 0
 added 0135 2 0
 added 0232 2 0
 added 0234 2 0
 added 0332 2 0
 added 0336 2 0
 added 0136 2 0
 added 0337 2 0
 added 0538 2 1
 added 0737 2 1
 added 0338 2 0
 added 0339 2 0
 added 0438 2 0
 added 0638 2 0
 added 0537 2 1
 added 1037 2 1
 added 1038 2 0
 added 1039 2 0
 added 1137 2 0
 added 1237 2 0
 added 1032 2 2
 added 1133 2 2
 added 1234 2 2
 added 1235 2 2
 added 0931 2 1
 added 0932 2 1
 added 1030 2 1
 added 1031 2 1
 added 1131 2 1
 added 1132 2 1
 added 1232 2 1
 added 0730 2 0
 added 0731 2 0
 added 0830 2 0
 added 1229 2 0
 added 1230 2 0
 added 1331 2 0
 added 1332 2 0
 added 1333 2 0
 added 1334 2 0
 added 1432 2 0
 added 1433 2 0
 added 1434 2 1
 added 1435 2 1
 added 1535 2 0
 added 1536 2 0
 added 1634 2 0
 added 1337 2 0
 added 1537 2 0

This culture did not “fuse” with neighbours. They reached from 01 to 16 in width and from 29 to 39 in height all by themselves. But going back to the map, a quick check shows that 1240 is also red and not in the list. How come? It belonged to another large region:

0840 009 2 2
 added 0740 2 2
 added 0838 2 2
 added 0940 2 2
 added 1039 2 2
 added 1040 2 2
 added 0638 2 1
 added 0438 2 0
 added 0537 2 0
 added 0538 2 0
 added 0737 2 0
 added 1037 2 1
 added 1038 2 1
 added 0936 2 0
 added 1137 2 0
 added 1139 2 0
 added 1237 2 0
 added 1140 2 0
 added 1240 2 1
 added 1439 2 0
 added 1440 2 0

And now we come to the colouring. This is culture 009 and 023. The CSS class is computed by taking this number mod 7 + 1, resulting in 3 for both, and the class culture3 uses the background #fff0ff (some sort of plum, I guess).

I’d say the next improvement would be adding some more colours before fiddling with the algorithm too much.

Do you think languages should spread along trade and communication lines? Or should they spread out based on how close systems are? For example: if a civilisation had mastered jump-1 but not jump-2, the language would have spread to neighbouring systems that can be reached with their ships, independently of whether the economics later warrant trade and communications?

Words for certain products like tea in our world have spread far and wide. Thus, is trade the most important aspect? It’s a good point. As a counter point I can only offer that languages often seem to be contiguous areas in the world, both rich and poor, and that the major trading centres of the world don’t all speak the same language (even if the merchant class would speak Roman, or English, or Portuguese). So the names of new products might travel with products, but language itself seems to spread organically, from family to family, as people slowly move from place to place.

I guess it also depends on whether you think that the sophonts present are there due to local evolution or due to settlement from nearby systems. If nearby systems, then the first language group to arrive is simply going to dominate, even if trade later fails, I’d assume? So, I’d argue that easy of travel is irrelevant as long as somebody did the actual travelling. Perhaps isolated worlds should simply get their own languages.

I think I need to avoid diving into this rabbit hole! No overthinking! Just focus on making a nice map that serves to inspire a referee.


Comments on 2018-10-27 Names in Traveller

New features:

  • Named the cultures in the UWP instead of simply numbering them.
  • Added more colours.
  • Colours are used in random order.

Example: subsector 1285109285.

Ruquo            0101  C546512-6     SRP   Ag Ga NI
Luphijo          0102  D363437-4       S   Lt NI
Thepru           0104  C3508A9-7     SCG   De Po A            [Kudruje]
Drufidro         0106  D544666-3      SG   Ag Ga Lt NI        [Kudruje]
Ngipe            0109  B34268C-10    SCG   NI Po A            [Kudruje]
Kudro            0110  A697435-8    SRTG   Ga NI              [Kudruje]
Lujedro          0203  C7A0887-10      S   De A               [Kudruje]
Peku             0204  E628969-7       G   Hi In A            [Kudruje]
Drupha           0205  E555367-2       G   Ga Lo Lt           [Kudruje]
Phathe           0206  B768344-6      NC   Ga Lo              [Kudruje]
Drongi           0207  C775000-0    STCG   Ba Ga              [Kudruje]
Zafi             0208  D354333-5       S   Lo Lt              [Kudruje]
Ngipha           0210  A77576B-9      TG   Ag Ga A            [Kudruje]
Zhaghe           0301  A3439EF-8    RTCG   Hi In Po A
Shewhi           0303  D659411-5           Lt NI              [Whih]
Zatheqo          0305  E864233-2       G   Ga Lo Lt           [Kudruje]
Drupe            0307  B76778A-8      NT   Ag Ga Ri A         [Kudruje]
Phaza            0308  C759664-4     SCG   Lt NI              [Kudruje]
Zaspoi           0310  D577100-7      SG   Ga Lo A            [Kudruje]
Shepru           0402  B400368-12     NT   Ht Lo Va           [Whih]
Shidu            0403  C482851-9      SC   Ri                 [Whih]
Kuiku            0406  C537510-6       G   NI A               [Kudruje]
Zazafi           0408  C644652-8      RG   Ag Ga NI           [Kudruje]
Kuiza            0409  C548510-8      TG   Ag Ga NI A         [Kudruje]
Drolu            0410  D676555-3      SG   Ag Ga Lt NI        [Kudruje]
Stili            0501  E020774-10      G   De Na Po A
Sheshe           0503  B524115-11    TCG   Lo                 [Whih]
Drodro           0505  E750788-2       G   De Lt Po           [Kudruje]
Zadrungi         0507  C656000-0       G   Ba Ga              [Kudruje]
Pruku            0510  AAA6ABC-11    RTC   Fl Hi In A         [Kudruje]
Ngicha           0604  E666210-2       G   Ga Lo Lt A         [Kudruje]
Chadru           0607  C558778-7      CG   Ag Ga A            [Kudruje]
Wraghe           0701  X94A414-5       G   Lt NI Wa           [Quughe]
Zaspo            0704  D331355-10     SG   Lo Po              [Kudruje]
Qopha            0705  C436754-11     RG                      [Kudruje]
Kujelu           0706  C100536-9      SG   NI Va              [Kudruje]
Phangi           0708  B9A0220-8      NS   De Lo A            [Kudruje]
Whoghe           0801  C000645-12      G   As Ht Na NI Va     [Quughe]
Quutra           0802  B440544-13   STCG   De Ht NI Po        [Quughe]
Ghetho           0803  D446553-6       G   Ag NI              [Quughe]
Mostughe         0805  E86A355-8       G   Lo Wa
Deprui           0807  D758102-8      SG   Ga Lo A            [Kudruje]
Druza            0809  B242453-13   NSTG   Ht NI Po           [Kudruje]
                       ||||||| |
Ag Agricultural        ||||||| |            In Industrial
As Asteroid            ||||||| +- Tech      Lo Low Population
Ba Barren              ||||||+- Law         Lt Low Technology
De Desert              |||||+- Government   Na Non-Agricultural
Fl Fluid Oceans        ||||+- Population    NI Non-Industrial
Ga Garden              |||+- Hydro          Po Poor
Hi High Population     ||+- Atmosphere      Ri Rich
Ht High Technology     |+- Size             Wa Water World
IC Ice-Capped          +- Starport          Va Vacuum

Bases: Naval – Scout – Research – TAS – Consulate – Pirate – Gas Giant

Subsector 1285109285

– Alex Schroeder 2018-10-28 22:04 UTC

And a Mastodon bot: @traveller!

– Alex Schroeder 2018-10-29 09:15 UTC

The thing I like about this is that it provides a sort of backstory inspiration. “After the fall, the Kudruje resettled most of the subsector. Their superior ships allowed them to spread far and wide. Towards the core, their progress was checked, however. The Whih cluster proved hard to penetrate and the frequent uprisings of the Quughe and their spiritualism have made any attempts at a take-over too costly. Their systems continue to languish in poverty.”

– Alex Schroeder 2018-10-29 15:50 UTC

Hm, need to think about the Trader Format. This doesn’t seem to work.

– Alex Schroeder 2018-10-29 20:22 UTC

Add Comment

2017-06-30 Traveller Subsector Generator

Yesterday I posted some Traveller links. Today I refactored my Traveller Subsector Generator and moved to a new web framework. I also merged my UWP Generator and my SVG Mapper for Traveller into a single web app, the Traveller Subsector Generator. I hope it’s pretty obvious how to use it, but I know that sometimes I get confused myself so here’s what it can do:

You start with an editable example UWP:

  • Generate Map gives you the SVG map
  • Communication and Trade Routes gives you a list (text)
  • Random Map gives you a random SVG map

If you’re looking at an SVG map and you got here via Random Map:

  • UWP in the bottom right gets you the read-only UWP that generated the map
  • if you do that you can click on Generate Map and get the same SVG map
  • this works because the random map has a unique id

If you’re looking at an SVG map and you got here via Generate Map:

  • since you might have edited the UWP, it doesn’t have a unique id
  • and thus you don’t get the UWP link

If you’re looking an a read-only UWP:

  • Random UWP generates a new, random, read-only UWP
  • Generate Map takes you to the SVG map, as I said
  • Edit Map takes you back to the edit screen for this UWP
  • this works because the read-only UWP has a unique id

OK, so the only weird thing is that sometimes there is no UWP link back from the map, right? Well, if you’re looking at and click on Generate Map then you can always use that id in the URL and type into the address bar of your browser. And now the missing UWP link appears!

I don’t even know why I’m posting all this. I makes me realise that the user interface needs more tinkering and I’m tired. If you have an idea for how to make it more obvious, specially if you haven’t used it before and you’re confused, I’d like to hear about it. Perhaps we can improve the web app together.


Comments on 2017-06-30 Traveller Subsector Generator

Made some changes, and added random sector generation (32x40 instead of 8x10).

– Alex 2017-07-05 06:07 UTC

How to get a random UWP from the command line:

perl get /uwp/874568503 2>/dev/null | xmllint --html --xpath '//pre/text()' - | perl -MHTML::Entities -pe 'decode_entities($_);'

– Alex Schroeder 2017-07-05 14:57 UTC

How to generate a SVG file from the command line:

perl get /map/874568503 2>/dev/null > 874568503.svg

– Alex Schroeder 2017-07-05 14:58 UTC

Generating a simple SVG file from a map on the command line (URL-escaped):

perl get --header 'Content-Type:application/x-www-form-urlencoded' --method POST --content "map=Rezufa%200101%20E310000-0%20Ba" /map 2>/dev/null

– Alex Schroeder 2017-07-05 15:09 UTC

Generating an SVG map from UWP in a text file:

perl get --header 'Content-Type:application/x-www-form-urlencoded' --method POST --content map=$(cat 874568503.txt|encodeURIComponent) /map

This assumes you defined the following alias:

alias encodeURIComponent='perl -pe '\''s/([^a-zA-Z0-9_.!~*()'\''\'\'''\''-])/sprintf("%%%02X",ord($1))/ge'\'

– Alex Schroeder 2017-07-05 15:21 UTC

Amazing! I am doing a piece on my podcast discussing Traveller maps and will def be mentioning this. What a gift!

Froth 2019-03-12 16:05 UTC

Hah, cool! Please link instead of this blogpost, though. I don’t think most people would want to know how to generate maps on the commandline using Perl, haha. 🙂

– Alex Schroeder 2019-03-12 16:09 UTC

Add Comment

2015-09-13 Highgate

Brett Simpson used my SVG Mapper for Traveller to generate a little booklet for the subsector he’s been working on.
Highgate by Brett Simpson

Brett says: “There is no need to add a link to a page, as the only pages I have are unrelated to role-playing.”


Comments on 2015-09-13 Highgate

Frorha             0102 B100440-A M Ni Va Ic          804 Re A7 III
Canton             0103 D355868-5 M O:0102            624 Re G1 V M5 V
Lusitania          0104 X885500-9   Ag Ni Ep St      R810 Re G5 V
Oakhurst           0105 C889598-6   Ni Ep             703 Re K8 V M7 V
Thorpe             0109 B434323-A   Lo Ni             901 Re G6 V
Westcott           0201 C130311-A   Lo Ni Po          634 Re G6 V
Osumi              0204 B676359-8   Lo Ni Ep          523 Re K9 V
Afars              0207 D200AE2-C   Na Hi In Va Ic    513 Re G7 V
Belep              0210 C234547-B M Ni                301 Re G6 V
Bayou System       0304 C78189D-6   Ri Co             313 Re M4 V M0 V
Devix              0307 A7A248B-A   Fl Ni             202 Re M5 V
Espana             0308 B300679-7 J Na Ni Va Ic      B702 Re A3 V
Caribbean          0402 B9896Y8-8   Ni Ri Ep          512 Re G6 V M4 V M3 V
Tardino            0403 C4307A8-7   Na Po             801 Re K4 V K3 V
Androxis           0409 A460784-C   Ri Cp             602 Re K9 V
Gwun               0502 B739445-9   Ni                523 Re F5 II
Iorillo            0503 D573556-5   Ni                200 Re F5 V K2 D
Leeman             0505 D99369E-3 M Ni Gl             213 Re M5 V
Osasesh            0705 X211168-9   Lo Ni Ic O:0804  A303 Re F3 D
Quelaa             0804 B665333-B   Lo Ni Ep          802 Re G8 V
Rothe              0805 D100734-4   Na Va Ic          123 Re K4 V
Triperrat          0806 B8A4778-7   Fl               B713 Re K4 III
Abu Musa           0809 C847844-6 M Ep                404 Re G5 V

– Damon 2016-09-29

Add Comment

2013-06-27 Text Mapper for Traveller

A few years ago I was working on Traveller Subsector Mapper. As I was thinking about the new Text Mapper, I wondered how feasible it would be to generate a Traveller subsector using Text Mapper. I know, it’s a stupid waste of time because I already have the Traveller Subsector Mapper. But I couldn’t resist the lure of showing off how flexible Text Mapper could be. And it works!

Subsector created using Traveller Subsector Mapper:

Subsector created using Text Mapper:

In order to reproduce it, use the following input:


The example file traveller-example.txt uses the library traveller.txt defining everything it requires.


Comments on 2013-06-27 Text Mapper for Traveller

Nice curved routes! I like it.

BeRKA 2013-06-27 21:38 UTC

Looks gorgeous, actually.

noisms 2013-06-27 21:49 UTC


AlexSchroeder 2013-06-28 07:18 UTC

I like the new version better (-:

– Harald Wagener 2013-07-01 12:08 UTC

I love your random generators (the idea behind TextMapper is fantastic), but as I know next to nothing about programming, I can’t do one thing I’d like: change your Traveller map to generate a larger subsector. The reason is I’d like to use it with your “wilderness” generator. Let me explain. The “travel” and “communication” routes on your Traveller generator could be used to trace important locales in a point-crawl node-crawl path-crawl. Expanding those to cover a larger map (let’s say 30x40 hexes) would be a great way to indicate the point of interests in a given region. I hope it’s not too confusing to understand what I’m trying to say.

Marcelo Paschoalin 2015-10-09 14:46 UTC

Yeah, the problem is that the UWP Generator doesn’t produce the output format necessary for Text Mapper. You need to create the Text Mapper input manually. The easiest solution would be to just print out multiple subsectors and connect them manually. For my own Fantasy mapping needs, I often find that placing roads and rivers between settlements is a manual process (example, data with trails and streams at the end).

– AlexSchroeder 2015-10-09 15:09 UTC

Add Comment

2009-09-11 Traveller Map Based on UWP

There is an amazing Traveller Map API available out there. Specifically, there’s a service that will produce a PDF based on your UWP list. But you know how it is. I bet half the Traveller referees are trying to code up subsector generators and mappers. Me too!

Here’s my SVG Mapper for Traveller. It comes with example data so you can figure out what format it expects by looking at it. Just click the Submit button! Remember, you need a browser that knows how to deal with SVG files – Firefox will do.

Source code is available. I got to reuse some of my abandoned Old School Hex Mapper. And figuring out the trigonometry stuff is fun. :)


Comments on 2009-09-11 Traveller Map Based on UWP

Very nice! :-)

It looks very nice, and has a simple interface. This is a very good tool to quickly make a subsector.

You are very generous to release this with the GNU General Public License. This means that I might use it together with my random subsectror generator (that is also written in perl).

I have been thinking of doing my own mapper, (other than the ascii one I have made). My plan was to use GD or ImageMagick.

BeRKA 2009-09-11 05:51 UTC

Heh. I come from a FreeSoftware background. Sharing’s the ethical thing to do. ;)

Is your random subsector generator based on the Mongoose rules, or are they the same as for previous editions? I noticed that the generator I had used for my subsector produced strange trade codes and had to write a Perl script to fix them.

Also, Mongoose Traveller doesn’t say how UWP codes for the various based look like. They just provide Scout and Navy as examples. Do you know of a site that defines it?

AlexSchroeder 2009-09-11 07:21 UTC

My generator is based on previous editions? You can select to use book-3 or book-6 rules, that are slightly different when calculating hydrographics. My trade codes are from book-7.

Base codes can differ depending on the version you use. One common version is found on traveller map.

For Naval and Scout base “2” is also commonly used instead of “A”.

BeRKA 2009-09-11 08:25 UTC

Oh wow. Thanks for the link. This was new to me: “special codes deal with the presence of more than one type of base within the same system in order to maintain a single base code letter per system.”

I think I’m going to focus on the rules I have or I’ll go mad. :)

AlexSchroeder 2009-09-11 08:36 UTC


greywulf 2009-09-11 09:35 UTC

Add Comment


Please make sure you contribute only your own work, or work licensed under the GNU Free Documentation License. Note: in order to facilitate peer review and fight vandalism, we will store your IP number for a number of days. See Privacy Policy for more information. See Info for text formatting rules. You can edit the comment page if you need to fix typos. You can subscribe to new comments by email without leaving a comment.

To save this page you must answer this question:

Please say HELLO.