Architype lets you quickly visualize directed graphs. It is designed for realtime use during system and process design discussions.
Try it live at architype.io
Architype is designed to be used on devices with keyboards (hence the "type") and optionally pointing devices. It can be used completely without the latter.
The screen is divided into two panels:
- The editor, on the left, where you interactively define the components of your graph
- The visualization, on the right, where the results are displayed
- A node is the fundamental unit in Architype, usually representing a server, service, or process step.
- A link connects nodes together. All links in Architype are directional, i.e. they have an arrow at exactly one end.
- A group is a collection of nodes that are shown physically together.
- A tag is a collection of nodes that are shown with a common highlight, e.g. color.
- A label is an optional description of another object, e.g. a link or a group.
Generally lowercase and uppercase versions of a key have related but opposite
functions, for some meaning of "opposite". For example, lowercase n
creates a
new node line below the current line, while uppercase N
(shift
+ n
)
creates a new node line above the current line.
Limited vi key mappings are supported. Key behavior is expected to match user expectation across contexts in the UI.
↓
j
Move down the current list↑
k
Move up the current list→
l
⏎
Enter (edit) the current list or item←
h
␛
Exit the current list or itemctrl
+⏎
Enter (edit) the current node and all references to it
`
(backtick) is mapped to ␛
for convenience on some keyboards, e.g.
iPads. This makes it impossible to use a backtick in a node or label, which is
considered a reasonable tradeoff.
n
Create new node below the current lineshift
+n
Create new node above the current lineg
Create new group below the current lineshift
+g
Create new group above the current linet
Create new tag below the current lineshift
+t
Create new tag above the current linei
Create new link below the current lineshift
+i
Create new link above the current linea
Create new label below the current lineshift
+a
Create new label above the current line
d
Delete the current lineshift
+d
Delete the current line and all lines after it␣
(space
) Toggle highlighting of the current linef
[link only] Flip the direction of the current link
u
browser back
Undo the last actionU
browser forward
Redo the last undone action (if nothing else has been done since then)m
Select the next theme (light/dark)M
Select the previous theme (light/dark)?
Add a help section below the current line+
Toggle fullscreen
Note that it is possible to delete the help section with the normal delete
command d
.
Groups and links can be created for existing nodes by highlighting the nodes
(using ␣
), then creating the group/link normally (g
/i
). When nodes are
highlighted, they are used to automatically populate the new group/link object.
It is not possible to directly edit the position of items in the visualization. This is a deliberate tradeoff for flexibility and speed of graph editing.
The visualization does support limited interaction: clicking/touching nodes highlights the node and its corresponding editor entry.
Editor contents are stored in localStorage. They can be expected to survive browser and system restarts, but are not copied from your machine and are not long-term durable.
The full description of a graph is stored in the URL. To store the graph long-term or to share it with others, copy/paste/record/share the full URL.
All Architype processing is local to the client machine. The is no server, no data is sent, and the page contains no ads or third-party content.
Licensed under the Apache License 2.0.
The code is organized into general categories:
Architype
- Initialization
- Creation of the Editor and Grid
- Launching background Workers
- Serialization/deserialization
- URL handling
- localStorage
- Undo/redo
Editor
- Runs in the UI thread
- Interactive elements for graph description
Grid
- Runs in the UI thread
- Interpreting commands from Layout
- Drawing onto the CSS grid for visualization
Graph
- Runs in background Worker
- Parsing the Editor serialization
- Internal representation of the directed graph
Layout
- Runs in background Worker
- Uses Graph data as input
- Iterative spring model (with complex weighting) for nodes
- Bidirectional weighted breadth-first search for links
- Emit drawing commands for Grid
- Misc
- IdSource
- MinHeap
- StringMap
- utils
Lines and arrows are drawn using sprited SVGs. Line curves are pre-generated in a limited sprite set, and sprites are selected based on transitions between adjacent grid squares.
We test and support:
- Chrome
- Chrome Android (tablet)
- Firefox
- Safari
- Safari iOS (iPad)
Known broken:
- Edge WebKit
Ian Gulliver
architype@flamingcow.io
firestuff.org