Update v0.2.0 -- Completely rewritten recursion engine taking advantage of Promises and lots of error handling. Automated fixing of API sendChat() inline rolls (in most cases). New formatting options. Thanks Scott C. for the ground work on the RollTemplate fix! RecursiveTable provides a way to expand the results of Rollable Tables which have inline rolls within them. Now with options and support for whispering Roll Templates. When using Rolltemplates, your message must have at least one {{ that in not coming from a Rollable Table. When using the PrefaceUniqueSpace option, be sure your {{name=something}} is first. Commands !rt[options] [--help| ... ] Performs all inline rolls, then continues to expand inline rolls (to a default maximum depth of around 10). --help -- Shows the Help screen. ... -- Anything following !rt will be expanded, then sent to to the chat. Options These are inline settings to adjust how the rolls are put together. Options are specified in [ ] right after the !rt : !rt[delimiter:-|maxdepth:20] something Options are separated with the verticle pipe symbol ( | ) and have an optional argument separated by a : . Omitting the argument causes true to be used for switch options, or the default value. All Options are case insenstive. Options are one of 3 types: Number (any integer), Boolean (true values: on , yes , y , true . false values: off , no , n , false ), or text (any value except ] , use \| for | ) MaxDepth -- Specifies the number of recursions to perform. Default: 10 (Number) Delimiter -- A string of text to put between table items. The special value BR will cause html line breaks to be used. Default: , (String) DropEmpty -- Causes empty table items to be dropped before joining with the delimiter. Default: on (Boolean) Sort -- Causes table items to be sorted before being joined by the delimiter. Note that this happens at a single layer of recursion, so if you have table items made of of lists of table items, the sorting will only be at each level. Default: off (Boolean) PrefaceUniqueSpaces -- Causes the final message to have a unique number of spaces inserted after each {{ . This is useful if you're building Roll Templates and might have multiple lines with the same label. Default: off (Boolean) Examples Basic usage, whispering treasure to the gm: !rt /w gm [[1t[treasure-table]]] Whispering a roll template: !rt /w gm &{template:default}{{treasure=[[1t[treasure-table]]]}} Whispering a roll template, with each item on a separate line: !rt[Delimiter:BR] /w gm &{template:default}{{treasure=[[1t[treasure-table]]]}} Whispering a roll template, with each item on a separate line, with empty results replaced by Nothing: !rt[Delimiter:BR|EmptyDefault:Nothing] /w gm &{template:default}{{treasure=[[1t[treasure-table]]]}} Whispering a roll template, with each item on a separate line, with a table that is returning {{label=values}} : !rt[Delimiter:BR|PrefaceUniqueSpace] &{template:default}{{name=Treasure Bundles}}[[5t[treasure-bundle]]] Prior Thread: <a href="https://app.roll20.net/forum/permalink/2845333/" rel="nofollow">https://app.roll20.net/forum/permalink/2845333/</a> Git: <a href="https://github.com/shdwjk/Roll20API/blob/master/Re" rel="nofollow">https://github.com/shdwjk/Roll20API/blob/master/Re</a>... Support my work on If you use my scripts, want to contribute, and have the spare bucks to do so , go right ahead. However, please don't feel like you must contribute just to use them! I'd much rather have happy Roll20 users armed with my scripts than people not using them out of some sense of shame. Use them and be happy, completely guilt-free! Disclaimer: This Patreon campaign is not affiliated with Roll20; as such, contributions are voluntary and Roll20 cannot provide support or refunds for contributions.