Dankstory

Character relationship maps

Character relationship map maker

Who loves, hates, serves and teaches whom in your story, on one map you can edit on a phone. Free, no sign-up, saved in this browser.

Put your cast on a map, or look around a finished one first.

Legend

    Each kind of relationship gets its own colour and line pattern, listed here as soon as the map uses it.

    The whole map and its legend, scaled to fit one page. In the print window set scale to 100 % and turn off headers and footers for a clean sheet.

    Start from a family tree

    Everyone you tick becomes a character: name, title as role, house as group in its house colour, and portrait. Each parent becomes a family line to their child, each couple a partner line. Characters already on the map by the same name are not added twice.

    A .dankstory-tree.json file saved by any of the family tree pages. It is read in this browser, never uploaded.

    Your map and its pictures are kept in this browser only, separately from your family trees, and saved on every change. Clearing site data deletes them; use Save file to keep a copy or move it to another device. Safari, and most browsers on an iPhone or iPad, may delete what a site keeps after seven days of use without a visit to the site, so save a file or back up everything.

    How it works

    Add character puts someone on the map; tap them to give a name, a short role line (“exiled heir”) and a group, such as a house, a faction or a ship's crew. Everyone in one group gets the same colour of ring, and a picture from your device can fill the circle.

    Link two turns on Link mode: tap one character, then another, and a line joins them. Its sheet opens so you can pick the type, write a label of your own (“secretly loves”, “owes money to”) and say whether it goes one way, with an arrow from the first character to the second, or both ways. Without Link mode, a tap on a character or a line opens it to edit, and a drag moves it. Drag the empty paper to pan, pinch or use + and − to zoom, and Fit to see everyone.

    Layout has three automatic arrangements, and adding or deleting someone re-arranges the map in the one you chose. Circle puts everyone on one evenly spaced ring, each group side by side. By group gives each group its own cluster (up to six people on a small ring, more on rings round one in the middle), with the people who have no group as one more cluster, and sets the clusters round the map in the order that keeps lines between groups shortest: for up to eight groups every order is tried. Two groups with lines between them sit closer than two without, and inside a cluster whoever is linked to another group takes the place facing it. Web lets the lines do the work: every character pushes the others away, every line pulls its two ends together, so a tight circle of friends ends up together and a loner drifts to the edge. Web is worked out from a fixed seed taken from your cast and lines, never at random, so the same map always comes out the same way, on any device. In all three no two characters are put closer than 160 units, a little under three circles' widths. Once you drag someone, everyone stays where they are put (and is saved that way) until you pick a layout again. Two lines between the same pair bend apart so both stay readable.

    Focus. Tap and hold a character, or open them and tap Focus on this character, and everyone not joined to them fades back, with every line that is not theirs. Under the map their relationships are listed in plain words, such as “Isra Fenwick — rival of Dace Morrow (both want the chair)” or “Isra Fenwick — mentored by Master Corwin Pell (teaches) from Year 305 until Year 311”, and with the year slider on a year, only the ones true that year. Tap the empty paper or Clear focus to see everyone again. Filter by tapping a kind in the legend under the map: its lines are hidden (and left out of exports) until you tap it again; the list under Focus follows what is shown.

    From a family tree (under the map, or on an empty map) brings the people of a tree you made on the family tree pages onto the map: one saved in this browser, or a .dankstory-tree.json file. You tick who comes; a tree of 40 or fewer starts with everyone ticked, and a bigger one with the 40 who have the most family links (parents, children and partners), so the map does not open as a crowd of distant cousins. Each person keeps their name, their title as the role line, their house as the group in the house's colour, and their portrait. Each parent gets a family line to their child labelled birth, adopted or fostered, and each couple one two-way partner line labelled married, partners or separated. Into a map that already has characters it adds: someone already on the map by exactly the same name is not added again (the page lists who), and a line that is already there is not drawn twice, so bringing the same tree in twice changes nothing. The fantasy family example, for one, brings 13 characters in 3 houses with 15 family lines and 4 partner lines. Then add the rivalries and secrets a tree has no place for. A person's born and died come along as the character's years when they are plain years.

    Years. A relationship can have a From year and an Ends in year, each with an optional chapter, and a character a birth and death year. As soon as any year is set, a slider appears under the map with a stop for every year the map names. At a stop the year is written large and only the relationships true that year are drawn; a line with no years is true all story long, so it is always there. The end year is the first year a relationship is over, so friends until Year 312 and enemies from Year 312 are two lines of which exactly one shows in any year. Characters fade after the year they die (and before the year they are born) and their role line says so. The arrow keys step the slider once it has focus; on a phone, the ‹ and › buttons do. All years draws every line, each dated one labelled with its years (“304–311”, “from 311 ch. 14”). Export and print draw the year on screen and print it in the top right corner.

    Worked example. Example loads the invented Saltmarch Lamps: 10 characters in 3 groups (House Ashgrove, the Lantern Guild and the Tidewater Crew) with 16 relationships using all 9 types, 8 of them dated between Year 296 and Year 311. Lady Merewen Ashgrove's pact of the lamps with the guildmaster Master Corwin Pell runs from 304 to 311; in Year 311, chapter 14, he breaks it and the two become enemies, so at the stop for 310 the slider shows them as allies and at 311 as enemies, never both. Old Hesketh, her steward, dies in 309: from 310 his circle fades and his line as her steward has ended. Across the slider the map grows from 10 lines in Year 296 to 14 in 309, then drops to 12 by 311. Tobin's line to the apprentice Isra Fenwick is one-way and starts in 309: he secretly loves her, and the map does not say she knows.

    The nine kinds of line

    Every kind has its own colour and its own pattern, so a map printed in black and white, or read by someone who does not see red and green apart, still tells them apart; each line also carries its label, or its kind's name when it has none.

      Your file

      Save file downloads the map as name.dankstory-relmap.json: every character, picture, position and relationship, in a plain JSON file (format dankstory-relmap, version 1, with years only on the lines and characters that have them) you can keep, back up or open on another device with Open file. A file that is damaged, is another kind of file (a timeline; a family tree goes through From a family tree), or was saved by a newer version of this page is refused with a message, and the map on screen stays as it was. A map saved before years existed opens exactly as it was, with every line drawn; a copy of this page from before years existed opens a dated file but ignores, and on saving drops, its years. A damaged tree file is refused the same way.

      Share a read-only link: Share packs the whole map, without its pictures, into a link that ends in #share= followed by the map itself, compressed. Whoever opens it sees every character where you put them, in the layout you saved, read-only: dragging moves the view, not the characters. They can tap a character or a line to read it, focus on someone, step through the years, export or print it, or keep their own copy with Save a copy to my maps, which never replaces a map they already have. Browsers never send the part of an address after the # to a server, so the map is not uploaded to dankstory.com when you make the link or when anyone opens it. A damaged, cut-short or newer link is refused with one sentence and changes nothing kept in the browser.

      Export makes a PNG at twice the size, an SVG with the fonts inside it, or a one-page print you can save as a PDF, on light paper or dark, with the legend of the kinds and groups the map uses underneath. No watermark, no account.

      What it cannot do yet

      • The layouts do not count crossings: By group shortens the lines between groups and Web pulls linked characters together, but neither promises the fewest crossed lines, and on a big, busy cast a Web still leaves some lines to untangle by dragging. A long name can still run into a neighbour's name.
      • A family tree comes in once, as it is then: later changes to the tree do not reach the map, and bringing the tree in again adds only the people and lines that are new, never updating a character already on the map. A GEDCOM file has to be opened on the family tree maker and saved as a tree file first, and only parent and partner links come in: grandparents, cousins and in-laws are not drawn as lines of their own.
      • Years are whole numbers on one count (Year 300, Year −40), not dates: the slider steps a year at a time, and a chapter number is only shown in the line's label, so two changes inside one year show together. A line to someone who has died stays on the map until you give it an end year.
      • From a family tree, born and died come in only when the text is a plain year (312 or Year 312); “c. 312”, “312 AC” or a full date are left for you to type.
      • Share links: a link never carries pictures, so a shared map draws initials in their place (send the saved file to share pictures). Anyone who has the link can open and read the whole map, roles and labels too unless you tick Leave out roles and the lines’ labels: it is not secret, so pass it on as you would the file. A link is a copy of the map as it was when you made it, and later changes need a new link. Above 2,000 characters some chat apps, forums and forms cut a link short and it no longer opens; the example cast (10 characters, 16 relationships) makes about 1,200 characters, or about 850 without roles and labels, and the panel warns you when a bigger map passes 2,000 and offers the file instead. A copy saved from a link is listed under Your maps, and only clearing this site’s data removes it.
      • One map per browser, besides the copies saved from links: a new map or the example replaces the one on screen (one Undo brings it back), so save a file of each map you want to keep. Up to 300 characters and 2,000 relationships; past about 40 characters a phone screen gets crowded.
      • Names over 28 letters and roles over 34 are shortened on the map and in exports (the full text stays in the file), and a label over 30 letters is cut on its line. Every character is drawn as a round portrait or initials: there are no other shapes, no notes and no free text boxes on the map.
      • This browser keeps about 5 MB for the whole site, shared with your family trees, timelines and calendars. A picture takes about 20 to 40 KB, so a cast of 100 with pictures needs 2 to 4 MB of it; when it is full the page says so and new changes are kept only in a saved file.
      • Printing is the browser's: the map is scaled to fit one A4 or Letter page, so on a big cast the names can print small. Firefox and Safari print previews have not been tested.

      Made with AI tools.