{"id":120,"date":"2026-05-14T08:45:00","date_gmt":"2026-05-14T15:45:00","guid":{"rendered":"https:\/\/www.quixoticraindrop.com\/software\/?p=120"},"modified":"2026-05-13T15:01:26","modified_gmt":"2026-05-13T22:01:26","slug":"a-little-v3-0-0-bts","status":"publish","type":"post","link":"https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/","title":{"rendered":"A little v3.0.0 BTS \u2026"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>What Went Into Version 3.0 (Or: Why Sometimes You Have to Tear It Down First)<\/strong><\/h2>\n\n\n\n<p>If you&#8217;ve been using Die Roller for RPGs 2 for a while, here&#8217;s something the app never told you: parts of it were held together by code older than some of the TTRPGs it supports.<\/p>\n\n\n\n<p>I wrote the original Die Roller for RPGs in Objective-C back when iOS 10 was current. I rewrote it in Swift a couple of years later, and updated to more modern conventions, but the core data model never got the overhaul it needed. Every new feature meant working around that foundation rather than building on it cleanly.<\/p>\n\n\n\n<p>By the time I started thinking seriously about iCloud sync (something users had been asking about) it became clear that adding it to the existing architecture would be more like duct-taping a jet engine to a bicycle than building something solid. The right move was to do the rebuild first, and then add sync on top of something that could actually support it.<\/p>\n\n\n\n<p>So that&#8217;s most of what 3.0 is: a foundation. The parts you see\u2014the dice, the sets, the groups\u2014look about the same. Underneath, it&#8217;s a completely different structure.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Why iCloud sync specifically?<\/strong><\/h2>\n\n\n\n<p>The honest answer is that I use this app at the table, and I found myself rebuilding my dice sets every time I switched devices. If the developer is too annoyed to use his own feature, something needs to change! \ud83e\udd23 \u2026 remember Larry Wall&#8217;s old adage about the three virtues of a programmer? Something about hubris and impatience \u2026 and laziness? That was definitely the laziness coming out! \ud83d\ude09 <\/p>\n\n\n\n<p>With 3.0, your library is just there, on every device, without thinking about it. That&#8217;s how a utility like this should work.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What&#8217;s next?<\/strong><\/h2>\n\n\n\n<p>The 3.0 rebuild unlocks things that weren&#8217;t practical before: a proper macOS app, better accessibility support, and eventually some Daggerheart-specific features that go beyond the current Duality Dice button. Version 3.1 is already taking shape.<\/p>\n\n\n\n<p>In the meantime, if you haven&#8217;t tried 3.0 yet \u2014 it&#8217;s free on the App Store through May 18th.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/apps.apple.com\/us\/app\/die-roller-for-rpgs-2\/id6747145419\"><img  title=\"\" loading=\"lazy\" decoding=\"async\" width=\"119\" height=\"40\" src=\"https:\/\/www.quixoticraindrop.com\/software\/wp-content\/uploads\/2025\/06\/black.png\"  alt=\"black A little v3.0.0 BTS \u2026\"  class=\"wp-image-26\"\/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>What Went Into Version 3.0 (Or: Why Sometimes You Have to Tear It Down First) If you&#8217;ve been using Die Roller for RPGs 2 for a while, here&#8217;s something the app never told you: parts of it were held together by code older than some of the TTRPGs it supports. I wrote the original Die [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":27,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,4,7],"tags":[],"class_list":["post-120","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-annc","category-newrel","category-version-bts"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>A little v3.0.0 BTS \u2026 -<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A little v3.0.0 BTS \u2026 -\" \/>\n<meta property=\"og:description\" content=\"What Went Into Version 3.0 (Or: Why Sometimes You Have to Tear It Down First) If you&#8217;ve been using Die Roller for RPGs 2 for a while, here&#8217;s something the app never told you: parts of it were held together by code older than some of the TTRPGs it supports. I wrote the original Die [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-14T15:45:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.quixoticraindrop.com\/software\/wp-content\/uploads\/2025\/06\/IMG_2936@0.5x.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Bacil\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bacil\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/2026\\\/05\\\/14\\\/a-little-v3-0-0-bts\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/2026\\\/05\\\/14\\\/a-little-v3-0-0-bts\\\/\"},\"author\":{\"name\":\"Bacil\",\"@id\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/#\\\/schema\\\/person\\\/8d68f8aefc48c0f7c70a438acb1431b5\"},\"headline\":\"A little v3.0.0 BTS \u2026\",\"datePublished\":\"2026-05-14T15:45:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/2026\\\/05\\\/14\\\/a-little-v3-0-0-bts\\\/\"},\"wordCount\":352,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/2026\\\/05\\\/14\\\/a-little-v3-0-0-bts\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/IMG_2936@0.5x.png\",\"articleSection\":[\"Announcements\",\"New Releases\",\"Version BTS\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/2026\\\/05\\\/14\\\/a-little-v3-0-0-bts\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/2026\\\/05\\\/14\\\/a-little-v3-0-0-bts\\\/\",\"url\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/2026\\\/05\\\/14\\\/a-little-v3-0-0-bts\\\/\",\"name\":\"A little v3.0.0 BTS \u2026 -\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/2026\\\/05\\\/14\\\/a-little-v3-0-0-bts\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/2026\\\/05\\\/14\\\/a-little-v3-0-0-bts\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/IMG_2936@0.5x.png\",\"datePublished\":\"2026-05-14T15:45:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/#\\\/schema\\\/person\\\/8d68f8aefc48c0f7c70a438acb1431b5\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/2026\\\/05\\\/14\\\/a-little-v3-0-0-bts\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/2026\\\/05\\\/14\\\/a-little-v3-0-0-bts\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/2026\\\/05\\\/14\\\/a-little-v3-0-0-bts\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/IMG_2936@0.5x.png\",\"contentUrl\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/IMG_2936@0.5x.png\",\"width\":1024,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/2026\\\/05\\\/14\\\/a-little-v3-0-0-bts\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A little v3.0.0 BTS \u2026\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/#website\",\"url\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/\",\"name\":\"\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/#\\\/schema\\\/person\\\/8d68f8aefc48c0f7c70a438acb1431b5\",\"name\":\"Bacil\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/347b612f38375686ddeba0f1e4d40a998fbb851d38998ad7416c650e0be882e7?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/347b612f38375686ddeba0f1e4d40a998fbb851d38998ad7416c650e0be882e7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/347b612f38375686ddeba0f1e4d40a998fbb851d38998ad7416c650e0be882e7?s=96&d=mm&r=g\",\"caption\":\"Bacil\"},\"sameAs\":[\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\"],\"url\":\"https:\\\/\\\/www.quixoticraindrop.com\\\/software\\\/author\\\/codemonkey\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"A little v3.0.0 BTS \u2026 -","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/","og_locale":"en_US","og_type":"article","og_title":"A little v3.0.0 BTS \u2026 -","og_description":"What Went Into Version 3.0 (Or: Why Sometimes You Have to Tear It Down First) If you&#8217;ve been using Die Roller for RPGs 2 for a while, here&#8217;s something the app never told you: parts of it were held together by code older than some of the TTRPGs it supports. I wrote the original Die [&hellip;]","og_url":"https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/","article_published_time":"2026-05-14T15:45:00+00:00","og_image":[{"width":1024,"height":1024,"url":"https:\/\/www.quixoticraindrop.com\/software\/wp-content\/uploads\/2025\/06\/IMG_2936@0.5x.png","type":"image\/png"}],"author":"Bacil","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Bacil","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/#article","isPartOf":{"@id":"https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/"},"author":{"name":"Bacil","@id":"https:\/\/www.quixoticraindrop.com\/software\/#\/schema\/person\/8d68f8aefc48c0f7c70a438acb1431b5"},"headline":"A little v3.0.0 BTS \u2026","datePublished":"2026-05-14T15:45:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/"},"wordCount":352,"commentCount":0,"image":{"@id":"https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/#primaryimage"},"thumbnailUrl":"https:\/\/www.quixoticraindrop.com\/software\/wp-content\/uploads\/2025\/06\/IMG_2936@0.5x.png","articleSection":["Announcements","New Releases","Version BTS"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/","url":"https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/","name":"A little v3.0.0 BTS \u2026 -","isPartOf":{"@id":"https:\/\/www.quixoticraindrop.com\/software\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/#primaryimage"},"image":{"@id":"https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/#primaryimage"},"thumbnailUrl":"https:\/\/www.quixoticraindrop.com\/software\/wp-content\/uploads\/2025\/06\/IMG_2936@0.5x.png","datePublished":"2026-05-14T15:45:00+00:00","author":{"@id":"https:\/\/www.quixoticraindrop.com\/software\/#\/schema\/person\/8d68f8aefc48c0f7c70a438acb1431b5"},"breadcrumb":{"@id":"https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/#primaryimage","url":"https:\/\/www.quixoticraindrop.com\/software\/wp-content\/uploads\/2025\/06\/IMG_2936@0.5x.png","contentUrl":"https:\/\/www.quixoticraindrop.com\/software\/wp-content\/uploads\/2025\/06\/IMG_2936@0.5x.png","width":1024,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/www.quixoticraindrop.com\/software\/2026\/05\/14\/a-little-v3-0-0-bts\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.quixoticraindrop.com\/software\/"},{"@type":"ListItem","position":2,"name":"A little v3.0.0 BTS \u2026"}]},{"@type":"WebSite","@id":"https:\/\/www.quixoticraindrop.com\/software\/#website","url":"https:\/\/www.quixoticraindrop.com\/software\/","name":"","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.quixoticraindrop.com\/software\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.quixoticraindrop.com\/software\/#\/schema\/person\/8d68f8aefc48c0f7c70a438acb1431b5","name":"Bacil","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/347b612f38375686ddeba0f1e4d40a998fbb851d38998ad7416c650e0be882e7?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/347b612f38375686ddeba0f1e4d40a998fbb851d38998ad7416c650e0be882e7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/347b612f38375686ddeba0f1e4d40a998fbb851d38998ad7416c650e0be882e7?s=96&d=mm&r=g","caption":"Bacil"},"sameAs":["https:\/\/www.quixoticraindrop.com\/software"],"url":"https:\/\/www.quixoticraindrop.com\/software\/author\/codemonkey\/"}]}},"_links":{"self":[{"href":"https:\/\/www.quixoticraindrop.com\/software\/wp-json\/wp\/v2\/posts\/120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.quixoticraindrop.com\/software\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.quixoticraindrop.com\/software\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.quixoticraindrop.com\/software\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.quixoticraindrop.com\/software\/wp-json\/wp\/v2\/comments?post=120"}],"version-history":[{"count":3,"href":"https:\/\/www.quixoticraindrop.com\/software\/wp-json\/wp\/v2\/posts\/120\/revisions"}],"predecessor-version":[{"id":124,"href":"https:\/\/www.quixoticraindrop.com\/software\/wp-json\/wp\/v2\/posts\/120\/revisions\/124"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.quixoticraindrop.com\/software\/wp-json\/wp\/v2\/media\/27"}],"wp:attachment":[{"href":"https:\/\/www.quixoticraindrop.com\/software\/wp-json\/wp\/v2\/media?parent=120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.quixoticraindrop.com\/software\/wp-json\/wp\/v2\/categories?post=120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.quixoticraindrop.com\/software\/wp-json\/wp\/v2\/tags?post=120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}