Armoria is a procedural heraldry generator and editor by Azgaar. It's both a serverless GUI tool and server-side API. Almost the same code is also used as a part of the Fantasy Map Generator project.
The GUI version is available on Github Pages. Join our Reddit community and Discord server to share your creations, discuss the tool, suggest ideas and get the most recent updates.
You can support the project on Patreon.
A tutorial is available on Wiki. In case you want to help with translation, join the project on Crowdin.
The tool is almost zero-dependency vanilla JS with just Svelte used for GUI. Svelte is a bit specific framework that compiles components to vanilla JS.
Pull requests are welcomed.
Clone the repository and install the dependencies, then run dev to start Rollup and build in dev mode:
git clone https://github.com/Azgaar/Armoria.git
cd Armoria
npm install
npm run dev
Navigate to localhost:5000. You should see the app running. Edit a component file in src, save it, and reload the page to see your changes.
To create an optimised version run npm run build.
While a coat of arms is edited, the coa URL parameter follows every change, so a reload or a shared address shows it as it is. The address, copied links, COA strings and JSON exports all carry the coat of arms as drawn here: with the shield it uses, and with every tincture recoloured or added in this browser written as its hex colour ({"t1": "#0000ff"}, or vair-#0000ff-or in a pattern), as the API accepts it. Default tinctures keep their names.
Armoria API is available as a separate project, see the documentation. The API allows to GET random or predefined vector and raster heraldic images of a given size.
When Fantasy Map Generator opens an emblem for editing, Armoria receives from=FMG, a session token and returnOrigin. Every edit, undo, redo and tincture recolouring is then sent back to the map once editing pauses for half a second: Armoria posts {type: "armoria:coa", version: 1, session, coa, svg} to its opener at returnOrigin. coa is the edited blazon. A tincture recoloured or added here is sent as its hex colour, as the API accepts it ({"t1": "#228833"}, or vair-#228833-or in a pattern), so the map draws the shades shown in Armoria; default tinctures keep their names. svg is the complete SVG export, which the map uses when it cannot draw the blazon itself. The unchanged original is not sent, nor anything once the map tab is closed. The map accepts messages only from Armoria's origin with the live session token of that emblem. No message is sent when Armoria was opened directly.
While Armoria is focused on coat of arms generation and UI simplicity, there are some alternatives that cover heraldry more precisely.
Heraldry.Digital aims to support most of the heraldry features and create a system able to convert between blazonry and metadata. It allows users to create much more complex coats of arms, while it is not a generator and can be hard to use.
DrawShield is another wonderful project. It allows to render a coat of arms taking the heraldic blazon as input.
The code is distributed under MIT. Feel free to use it for any purpose.
Simple svg shapes and charges are self-made and available under CC0. A lot of the complex charge renders are from WappenWiki and available for non-commercial use only. Check out the license details added to svg files and available on the License screen on UI.
All images are manually optimized by me.

