Hey, David... care to share how you were trying to use libInline? If there truly is a problem I should fix it. My guess, though, is that maybe you didn't know what to expect when you employed the library. Yes, the inlineroll object is an object, but it's a simple javascript object... nothing different about how you would access it (no get/set, for instance). What the libInline library does is build handles for the important parts of the roll so you don't have to parse it all the time. Here's Oosh's example where he uses the getRollData() function of the libInline library. libInline.getRollData(msg)[0] This is one formation of what the function will accept. The different formations are all detailed more thoroughly in the libInline thread , but basically, the getRollData() function can take an inline roll as a parameter: libInline.getRollData(msg.inlinerolls[0]) ...or an array of such rolls: let myRollArray = [msg.inlinerolls[0], msg.inlinerolls[2], ...msg.inlinerolls.slice(5)]; libInline.getRollData(myRollArray) ...in fact, since the inlinerolls property of the message object is an array of rolls, you can just pass it, to process all of the rolls: libInline.getRollData(msg.inlinerolls) ...or, the last formation of the function is that it can accept an object with an inlinerolls property, like the original message object. This is what Oosh did, above... just passing the msg object and getting the roll data back. So now you've sent your data in, what do you get back? You get back an array of objects with handles that let you manipulate the data. You don't get back just the rolltip. You get that back as one of the accessible properties of the roll. In Oosh's example, he feeds the msg object to the function, which returns an array of parsed roll objects. libInline.getRollData(msg) He then asks for the first roll from that list: libInline.getRollData(msg) [0] He still hasn't assigned it to his variable, though. (Although he could.) Instead, he next asks to get the roll tip from this object, using one of the functions attached to the parsed roll object: libInline.getRollData(msg)[0]. getRollTip() NOW he has the roll tip as a string, which he can send to the chat (or manipulate, etc.) To Your Need You might have a more hands-on need of the library, if you want to take the rolls and reprocess them. For that, you might want to use the getDice() function. You can use it directly from the library by supplying a roll from the message object and a type, or you can use it as a function attached to the particular roll object you're working with. Here is an example using the first method: let dicearray = libInline.getDice(msg.inlinerolls[0],'included'); That gets the included dice (ie, those not dropped). With that array, you can build your own roll tip. Here is a version using the roll object as returned from the getRollData() function: let myRoll = libInline.getRollData(msg.inlinerolls[0]); let dicearray = myRoll.getDice('included'); So you can build your parsed rolls array using the getRollData() function, and then mapping a new roll tip to it, which you would build: let parsedRolls = libInline.getRollData(msg).map(r => { r.customRollTip = r.getDice('included').map(d => { // ...code to process each die in the array, turning it into HTML code... return d; }).join(); return r; }); That would give you an array of parsed rolls with not only the libInline handles, but also your customRollTip property that you could access as necessary. Note that I used the getDice() function, above. Since each of the parsed rolls returned from the getRollData has a getRollTip() function attached to it, too, you could start with the roll-tip that libInline builds, and then perform certain replacement operations on it, if that might be quicker.