{"componentChunkName":"component---src-templates-blog-post-tsx","path":"/manage-technical-debt/","result":{"data":{"allContentfulCategory":{"edges":[{"node":{"contentful_id":"2gOurgpDj1BasZvVToN13z","slug":"tiny-sparks","title":"The Tiny Way"}},{"node":{"contentful_id":"2a3w396SgR2Fl1ep4eYu0w","slug":"product-management","title":"Product-Led Growth"}},{"node":{"contentful_id":"T7VZcLaLRpt6XlNLJPLmL","slug":"wysiwyg-world","title":"World of WYSIWYG"}},{"node":{"contentful_id":"6HNYGjOUjHzUS2gXBnMVXn","slug":"design-and-ux","title":"Content Marketing & Design"}},{"node":{"contentful_id":"6XFMYLCe4AEYIDazkjGFvb","slug":"engineering","title":"Developer Insights"}},{"node":{"contentful_id":"24ufWIsR0ImSvxvvIrutB5","slug":"open-source","title":"Open Source"}},{"node":{"contentful_id":"2fLgNI8yOMeZHNl1nSQ11","slug":"how-tos-and-tutorials","title":"How-to Use TinyMCE"}}]},"contentfulBlogPost":{"title":"Managing technical debt is difficult in rich text editors","lastUpdated":"November 29th, 2022","publishDate":"2022-11-29T00:00+01:00","category":{"slug":"engineering","title":"Developer Insights","blog_post":[{"title":"Comparing Customization: TinyMCE vs. Froala","slug":"tinymce-vs-froala-customization","featured":true,"lastUpdated":"Mar 24th, 2026","description":{"description":"<p>How TinyMCE and Froala compare on plugin depth, API extensibility, and collaboration features? Developer guide to customization ceilings and trade-offs.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"How TinyMCE and Froala compare on plugin depth, API extensibility, and collaboration features? Developer guide to customization ceilings and trade-offs."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Comparing Customization TinyMCE vs Froala","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABelBMVEUKE1QACE8ABk4ABE4ABU4AB08JElMLE1QEDVEACFEABVMABlIAB1AEDlEJE1QAA04AAEwAAEoAAEkAAE0AB04AClIADFUbJlwQHVkAD1UABE8AAEsAO2IAU3MBTnMBS3QCSnYDRncAIVoABk8AAFNCRmm5ucCPkJwAAFUIE1QEDVAAOmEAWHgAWXwAWYAATnoBVIUAMWY7P2WpqbJ/gI8CEFQAQ2cAYX8AYIMAWYIAV4UAVIcAWJAATYoAGF4AAEcAAFAABVQACFcAE1cABFAAAEhBR2dga4FYZHxsdIlnboVNWHdGUXNcY4BSVXFZWnMgJFgAEFYUI10EF1kAAFR3eImPj5wKGVcAAFJLS2mKiZeXl6KYl6KNjJl9fYx7e4t/f46Tk6BERmkAMmAJSGoQH1yjo6zDw8kdJlsAAEQAAFEOKl0PMWAHFFcADFYcJVsrMV8ACFQIElQBC1EAAE4AAU4ABlABClIDC1MAClEABFMADlMHEVMLFFTxKlLmAAAAo0lEQVQI123IOw4BUQBG4f/M3DvCeI3QaES0ConotGIZ1mAB9mBHaBU2QASJSrwSoXBjFEM0vurkIKEvAKc4MCncS/KdJGMApxwUAElwVBmAg5PJkjhRT6K4dETVpDeeq+ThEt2uaUOYzCYAu9pWcZ0ef5T6n7iHAOcSXPzMPpy1V49p8Jy0rLV5a+3KDGARdtSKNc8C4+G60ZVG9scre76v4A1DxyZkUHvegwAAAABJRU5ErkJggg==","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/hSfpSImgxOsHs4iIKlvbB/6919ae5955c4e2db9092985361be7d4a/-TinyMCE--Blog_Header-_Comparing_Customization__TinyMCE_vs_Froala.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/hSfpSImgxOsHs4iIKlvbB/6919ae5955c4e2db9092985361be7d4a/-TinyMCE--Blog_Header-_Comparing_Customization__TinyMCE_vs_Froala.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/hSfpSImgxOsHs4iIKlvbB/6919ae5955c4e2db9092985361be7d4a/-TinyMCE--Blog_Header-_Comparing_Customization__TinyMCE_vs_Froala.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/hSfpSImgxOsHs4iIKlvbB/6919ae5955c4e2db9092985361be7d4a/-TinyMCE--Blog_Header-_Comparing_Customization__TinyMCE_vs_Froala.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/hSfpSImgxOsHs4iIKlvbB/6919ae5955c4e2db9092985361be7d4a/-TinyMCE--Blog_Header-_Comparing_Customization__TinyMCE_vs_Froala.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/hSfpSImgxOsHs4iIKlvbB/6919ae5955c4e2db9092985361be7d4a/-TinyMCE--Blog_Header-_Comparing_Customization__TinyMCE_vs_Froala.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/hSfpSImgxOsHs4iIKlvbB/6919ae5955c4e2db9092985361be7d4a/-TinyMCE--Blog_Header-_Comparing_Customization__TinyMCE_vs_Froala.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/hSfpSImgxOsHs4iIKlvbB/6919ae5955c4e2db9092985361be7d4a/-TinyMCE--Blog_Header-_Comparing_Customization__TinyMCE_vs_Froala.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/hSfpSImgxOsHs4iIKlvbB/6919ae5955c4e2db9092985361be7d4a/-TinyMCE--Blog_Header-_Comparing_Customization__TinyMCE_vs_Froala.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/hSfpSImgxOsHs4iIKlvbB/6919ae5955c4e2db9092985361be7d4a/-TinyMCE--Blog_Header-_Comparing_Customization__TinyMCE_vs_Froala.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/hSfpSImgxOsHs4iIKlvbB/6919ae5955c4e2db9092985361be7d4a/-TinyMCE--Blog_Header-_Comparing_Customization__TinyMCE_vs_Froala.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/hSfpSImgxOsHs4iIKlvbB/6919ae5955c4e2db9092985361be7d4a/-TinyMCE--Blog_Header-_Comparing_Customization__TinyMCE_vs_Froala.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/hSfpSImgxOsHs4iIKlvbB/6919ae5955c4e2db9092985361be7d4a/-TinyMCE--Blog_Header-_Comparing_Customization__TinyMCE_vs_Froala.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/hSfpSImgxOsHs4iIKlvbB/6919ae5955c4e2db9092985361be7d4a/-TinyMCE--Blog_Header-_Comparing_Customization__TinyMCE_vs_Froala.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Coco Poley","slug":"coco-poley"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"TinyMCE vs Froala Customization: Plugins, APIs & Collaboration | TinyMCE"},"metaDescription":{"metaDescription":"How TinyMCE and Froala compare on plugin depth, API extensibility, and collaboration features? Developer guide to customization ceilings and trade-offs."}},{"title":"How to Discern Level of Effort to Integrate Collaboration in a Rich Text Editor","slug":"rich-text-editor-integration-level-of-effort-collaboration","featured":true,"lastUpdated":"Feb 2nd, 2026","description":{"description":"<p>Learn how to estimate the level of effort required to integrate a rich text editor with collaboration features like comments, mentions, and version history.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Learn how to estimate the level of effort required to integrate a rich text editor with collaboration features like comments, mentions, and version history."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"How to Discern Level of Effort to Integrate a Rich Text Editor","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABvFBMVEUJE1QABk8AB08ACE8ABU4ABE4IElMIEVMACFAAAE4AAU4AA04ABVAABlIABFMACVIAB1EAAFIADVMAAEwCCE8AAE0ACU8ADlQfJVowNWEAF1kAElk7P2Y2O2QAClUAAE8AAEhfXnaNi5mBfo50d4kNZn8AYXsAX3oAVXIAW3YAYn0AMWF6eYqmpq8ZK2EhMmW4uL6lpa8AAFUAAFAAAEkePmM9a4I3boUyY3wAV3QAWXUAYHoAXXgAXXkAG1lOT21vcIMBHl0IIl+AgZFvcIQAPWMAWnYAXnoAWXYAU3EVW3ZLb4U4YHkARGcAElYAAFkAAFoAGF4AF10AElclRWcxaYEna4MraYEiY3wtaoJEZ353dYdfXHQAAEtrbIGPkJ0aKV8AG116e4xoan8ABFUAAVAAAEZnZ3ySkZ56eImGhJOEgpGTkp9xcYQAAEoAAFGYmaTLy881P2kSKWKenqiMjJoAAlAEC08fIVQMD1AWGFIXGVIaHFMeIFQVGVIABE8AC1QcJls0OWQAEFgAFVopMF8tM2AADlUAAk8HEVMABU8AB1AABFIAB1IACFIAB1MDDlMKE1QABk4JElO5P9nKAAAAjUlEQVQIHQXBMUrCUQAH4N/3fCAEWmAH8BAdIRwEr+Dk5OJmBEE0BAktTp5DEJy8kTrpEvx5fZ+EJJLWeppE9En4S9IHcTdyfyi6ktyGAMYAAKjPAK0ArueaJ2gFoMvjxfgFwGEGqBNwnLKfA6dXowVgtwRQ15+DJMnt6/3H9wddXcvWKtm8kdZLi/yWfxvuH2LfYxclAAAAAElFTkSuQmCC","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/4a6Y89AUrMs3F9FBApjSa2/a999da5fe3da0f46fb01e6d7ea3b7426/Collaboration_Series_-5__How_to_Determine_Level_of_Effort_to_Integrate_a_Rich_Text_Editor_blog.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/4a6Y89AUrMs3F9FBApjSa2/a999da5fe3da0f46fb01e6d7ea3b7426/Collaboration_Series_-5__How_to_Determine_Level_of_Effort_to_Integrate_a_Rich_Text_Editor_blog.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4a6Y89AUrMs3F9FBApjSa2/a999da5fe3da0f46fb01e6d7ea3b7426/Collaboration_Series_-5__How_to_Determine_Level_of_Effort_to_Integrate_a_Rich_Text_Editor_blog.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4a6Y89AUrMs3F9FBApjSa2/a999da5fe3da0f46fb01e6d7ea3b7426/Collaboration_Series_-5__How_to_Determine_Level_of_Effort_to_Integrate_a_Rich_Text_Editor_blog.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4a6Y89AUrMs3F9FBApjSa2/a999da5fe3da0f46fb01e6d7ea3b7426/Collaboration_Series_-5__How_to_Determine_Level_of_Effort_to_Integrate_a_Rich_Text_Editor_blog.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4a6Y89AUrMs3F9FBApjSa2/a999da5fe3da0f46fb01e6d7ea3b7426/Collaboration_Series_-5__How_to_Determine_Level_of_Effort_to_Integrate_a_Rich_Text_Editor_blog.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4a6Y89AUrMs3F9FBApjSa2/a999da5fe3da0f46fb01e6d7ea3b7426/Collaboration_Series_-5__How_to_Determine_Level_of_Effort_to_Integrate_a_Rich_Text_Editor_blog.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/4a6Y89AUrMs3F9FBApjSa2/a999da5fe3da0f46fb01e6d7ea3b7426/Collaboration_Series_-5__How_to_Determine_Level_of_Effort_to_Integrate_a_Rich_Text_Editor_blog.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/4a6Y89AUrMs3F9FBApjSa2/a999da5fe3da0f46fb01e6d7ea3b7426/Collaboration_Series_-5__How_to_Determine_Level_of_Effort_to_Integrate_a_Rich_Text_Editor_blog.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4a6Y89AUrMs3F9FBApjSa2/a999da5fe3da0f46fb01e6d7ea3b7426/Collaboration_Series_-5__How_to_Determine_Level_of_Effort_to_Integrate_a_Rich_Text_Editor_blog.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4a6Y89AUrMs3F9FBApjSa2/a999da5fe3da0f46fb01e6d7ea3b7426/Collaboration_Series_-5__How_to_Determine_Level_of_Effort_to_Integrate_a_Rich_Text_Editor_blog.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4a6Y89AUrMs3F9FBApjSa2/a999da5fe3da0f46fb01e6d7ea3b7426/Collaboration_Series_-5__How_to_Determine_Level_of_Effort_to_Integrate_a_Rich_Text_Editor_blog.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4a6Y89AUrMs3F9FBApjSa2/a999da5fe3da0f46fb01e6d7ea3b7426/Collaboration_Series_-5__How_to_Determine_Level_of_Effort_to_Integrate_a_Rich_Text_Editor_blog.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4a6Y89AUrMs3F9FBApjSa2/a999da5fe3da0f46fb01e6d7ea3b7426/Collaboration_Series_-5__How_to_Determine_Level_of_Effort_to_Integrate_a_Rich_Text_Editor_blog.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Coco Poley","slug":"coco-poley"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"How to Determine Level of Effort to Integrate Collaboration in a Rich Text Editor | TinyMCE"},"metaDescription":{"metaDescription":"Learn how to estimate the level of effort required to integrate a rich text editor with collaboration features like comments, mentions, and version history."}},{"title":"What to Expect During a Free Trial with TinyMCE","slug":"tinymce-14-day-free-trial-guide","featured":true,"lastUpdated":"Feb 3rd, 2026","description":{"description":"<p>Learn what the TinyMCE 14-day free trial really offers: full premium features, framework integrations, support access, and what happens after day 15.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Learn what the TinyMCE 14-day free trial really offers: full premium features, framework integrations, support access, and what happens after day 15."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"What to Expect During a Free Trial with TinyMCE","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABiVBMVEUIElMKE1QACE8AB08JE1QHEVMCC1EABE4ABU4ABk8CCU8CC08GD1IIEVMAAE0AAEoAAEYAAEcAAEgAAEwABU8AB1EAB1MAClQEElUFDlEKElIAAElJS2l1dYdhYnlbXHVdXnZjZXtdX3deYHg8QGMABE8ACFIAAEsAAlUAAE4HEVIAAEVYWXOIiZeFhZR0dYd4eYqGg4+Li5iEg5BZVWwKAEsABVIAAFFfX3a8vMLAwMZ5eooAAFMEFFYABk4AAERiY3mKipiGhpWMjZp3dIR9QjqEPy9wNjmJT0GFTkYQE1W1tbzc3eDFxcu7u8EAAFUAEVdOT2yHiJZ7e4yEhZR9fo+GhJKOiJRua38hA0svF04AE1gAAFakpa7Kys/k5Oelpa4AD1ZISWhkZHpXWHJ1doh5eotydIdaXHUAAU8CE1UABFY1OGCGh5dwcoYEEVIAA1UAC1IAAk4IEVIAD1UAElsAAFwAD1kADVMAB04CDFEAA04HD1EFEFMADFMAClMACFEJElMLFFSBEinTAAAAmUlEQVQI12NkYGRkQAaMDIx/GFmhgoy//4NINkYgYOEEkWBRxneMQiAO4wsWXkYYeKXM+FaEEYhfMGozYgIWESTOJ34wtZ3loiNCEGzkHVUGZmGdw9qcILDZmAMMpDmZGPlAsv+kn/5PnlAIcgcjY1c587+CQ79/F2gc+nuUwYmFFQjaxLez1DD+ZmBoB7u/3foUg5k1Q+Z/AEz1I+llH/E0AAAAAElFTkSuQmCC","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/3o9qGwM2PgitaqxcfCBROx/6ef77a45182243650ea85c81549e41b6/What_to_Expect_During_a_Free_Trial_with_TinyMCE__1_.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/3o9qGwM2PgitaqxcfCBROx/6ef77a45182243650ea85c81549e41b6/What_to_Expect_During_a_Free_Trial_with_TinyMCE__1_.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/3o9qGwM2PgitaqxcfCBROx/6ef77a45182243650ea85c81549e41b6/What_to_Expect_During_a_Free_Trial_with_TinyMCE__1_.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/3o9qGwM2PgitaqxcfCBROx/6ef77a45182243650ea85c81549e41b6/What_to_Expect_During_a_Free_Trial_with_TinyMCE__1_.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/3o9qGwM2PgitaqxcfCBROx/6ef77a45182243650ea85c81549e41b6/What_to_Expect_During_a_Free_Trial_with_TinyMCE__1_.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/3o9qGwM2PgitaqxcfCBROx/6ef77a45182243650ea85c81549e41b6/What_to_Expect_During_a_Free_Trial_with_TinyMCE__1_.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/3o9qGwM2PgitaqxcfCBROx/6ef77a45182243650ea85c81549e41b6/What_to_Expect_During_a_Free_Trial_with_TinyMCE__1_.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/3o9qGwM2PgitaqxcfCBROx/6ef77a45182243650ea85c81549e41b6/What_to_Expect_During_a_Free_Trial_with_TinyMCE__1_.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/3o9qGwM2PgitaqxcfCBROx/6ef77a45182243650ea85c81549e41b6/What_to_Expect_During_a_Free_Trial_with_TinyMCE__1_.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/3o9qGwM2PgitaqxcfCBROx/6ef77a45182243650ea85c81549e41b6/What_to_Expect_During_a_Free_Trial_with_TinyMCE__1_.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/3o9qGwM2PgitaqxcfCBROx/6ef77a45182243650ea85c81549e41b6/What_to_Expect_During_a_Free_Trial_with_TinyMCE__1_.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/3o9qGwM2PgitaqxcfCBROx/6ef77a45182243650ea85c81549e41b6/What_to_Expect_During_a_Free_Trial_with_TinyMCE__1_.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/3o9qGwM2PgitaqxcfCBROx/6ef77a45182243650ea85c81549e41b6/What_to_Expect_During_a_Free_Trial_with_TinyMCE__1_.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/3o9qGwM2PgitaqxcfCBROx/6ef77a45182243650ea85c81549e41b6/What_to_Expect_During_a_Free_Trial_with_TinyMCE__1_.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Coco Poley","slug":"coco-poley"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"What to Expect From the TinyMCE 14-Day Free Trial | TinyMCE"},"metaDescription":{"metaDescription":"Learn what the TinyMCE 14-day free trial really offers: full premium features, framework integrations, support access, and what happens after day 15."}},{"title":"Why collaborative rich text editing is essential for modern products","slug":"collaborative-text-editing","featured":false,"lastUpdated":"Mar 11th, 2021","description":{"description":"<p>Looking for a text editor for your product? Find out why real-time, collaborative rich text editing is an essential feature for modern apps.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Looking for a text editor for your product? Find out why real-time, collaborative rich text editing is an essential feature for modern apps."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Stylized graphic showing three people reaching into the center, pointing and holding colored shapes.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAMAAADTRh9nAAAC01BMVEX+9ej88+f68ub58eX48eX68uX88+X38Of89Ob68+b99ej/+Ov78+fd1sz27uHz7ePy7OLz7eLv6uDy7eS+zfa7zPb48+j79Of79Ob89Ofu59y/urjIwr/17uL+9ukhU5Lc2tn/9+f78+T78+Xn5erm393p4+Ho5+z2w8D4j5Htwcjv7ev/+Oe7trQAAFcAAE2xrq7/9eVVk/LOtNPTx+Ouxfmgu/mOs/2Xq+XkuGr70nf749P2X2/3GUfhU46hqezT2/Lb2+V9oegmWp9hUGnsl4hxb9G+VaGfkeR+rv+kvfjE0/rn4uT80Xj73ab66uH3d4H2CkT2Z3K1teZyqf99q/+Jsf9QbaYAElBsIlprTr++nsXy5uT28Oj99OT///////7//ff++e3/6ef9x8r73dPw7ODm5eq0x/h9qfxBWIsADE0VJl1kQr66rtD/+eb/9+TW2u2ivPft7/f//fj59fDH0ezc5ff//vXw7+7t6un17uH78+L17uerrL9SWHrIYkS4SqLdt8f58+jN1fFxpf9nof/g4ezz7N3U2OpNl/zEz/H78uSeuO91pvuswvfH0e/Z3eyeu/p2oPHjqqGFlfCes/STtfxcnf/l5Ov58eLi4eiBq/t3p/3g4e3/9eTZ2+qhu/V7qfxgn/9dnv9XnP9Vnf/O1fBTnf9Sm/+Hr/3T2PD78uHi4uiHr/7f4O3s6On88+Ty7efj4+zO1fG1x/awxPfy7eiAq/3CzvP+9eT89OTw7OeWtvldmPXX2+//9uT58eatwvf99OX+9OT78uXw6+j78+b89efE1PgkeNBQb6fp5+jp5+pkoP+2xvL69ej45NrWibqKVZc6hdTZ4/X/+ufN1vJfnv3f4Or68eX68+f4paT6P1TjW4bThrX3wb783tKqvvZgof/n5uv58ub69Oj51872S2H3QVr5SFr6Pk/4MU34UF7VbqmDnfXm5ux5YcFCAAAAlUlEQVQY02NkYGQEIkYwyfCTgYOR4T8TIy/jF15GCPjMB2UwyoOI+0qMyIBFGESKMKIKovGRBNeGoIrm4lSJTXBeMqogkzAQnAXil0KMgs0CEMC4g/EfM0zFdS3niLRZ6Y6Mx756HwSLLIllZDT/zwACjMqP/p6DG9a6/CpIkOURw02t6zBBBgZNsOC/R4yPGBGCYAAAAH4gxKo/a2YAAAAASUVORK5CYII=","aspectRatio":1.3333333333333333,"src":"//images.ctfassets.net/s600jj41gsex/1qCGDGSz0tHzTKqXh309Q2/b69ee36e76042abcffbc721fe32096ef/Collaborative_Editing_.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/1qCGDGSz0tHzTKqXh309Q2/b69ee36e76042abcffbc721fe32096ef/Collaborative_Editing_.png?w=185&h=139&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1qCGDGSz0tHzTKqXh309Q2/b69ee36e76042abcffbc721fe32096ef/Collaborative_Editing_.png?w=370&h=278&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1qCGDGSz0tHzTKqXh309Q2/b69ee36e76042abcffbc721fe32096ef/Collaborative_Editing_.png?w=739&h=554&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1qCGDGSz0tHzTKqXh309Q2/b69ee36e76042abcffbc721fe32096ef/Collaborative_Editing_.png?w=800&h=600&q=50&fit=scale 800w","srcWebp":"//images.ctfassets.net/s600jj41gsex/1qCGDGSz0tHzTKqXh309Q2/b69ee36e76042abcffbc721fe32096ef/Collaborative_Editing_.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/1qCGDGSz0tHzTKqXh309Q2/b69ee36e76042abcffbc721fe32096ef/Collaborative_Editing_.png?w=185&h=139&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1qCGDGSz0tHzTKqXh309Q2/b69ee36e76042abcffbc721fe32096ef/Collaborative_Editing_.png?w=370&h=278&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1qCGDGSz0tHzTKqXh309Q2/b69ee36e76042abcffbc721fe32096ef/Collaborative_Editing_.png?w=739&h=554&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1qCGDGSz0tHzTKqXh309Q2/b69ee36e76042abcffbc721fe32096ef/Collaborative_Editing_.png?w=800&h=600&q=50&fm=webp&fit=scale 800w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Elise Bentley","slug":"elise-bentley"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Why modern products need collaborative text editing"},"metaDescription":{"metaDescription":"Looking for a text editor for your product? Find out why real-time, collaborative rich text editing is an essential feature for modern apps."}},{"title":"5 tools for checking mobile accessibility","slug":"5-tools-for-checking-mobile-accessibility","featured":false,"lastUpdated":"Apr 26th, 2020","description":{"description":"<p>Here are five things you can get started with right away when it comes to testing for mobile accessibility.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Here are five things you can get started with right away when it comes to testing for mobile accessibility."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Mobile device displaying color filters options","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAACh0lEQVQYGQXBvW5cVRSG4fdbe58ziUzGseRqhKBwKIiEQgIFBUIRBdTcBNwKFEgUSDRUXIEbJCpSuDCVFVCUgIAwDvIP2CM7/mHmnL33WjyPNrdPgFWjBZFTmCnAQwgAgAAjbpjXFqMH0BudkSkxOg1534WZQ11e5mHsPAAgwAkzqzfWCqagU3QBjTwMtACDLJz0y6N7j745vVrtL64AJMTWxtrtm/38w8/K3Yddi04gCLKXECgiotacuic/jTs//BPMJtx58AB4srt3/BcV9PDdje7eajXFgAAyBQCw1lrUtyfdG598/Gaehsf6+nop5bWtu8NqWU7/PdqYHpQTlmv0CQCyKgDgEs23Nqfv3/mon7xydHw8nU4vLy9ns1kt5fD5n2nt1jwouesCtRZgVKhQRYXKwcnLo8ODxWKxu7u7v7+/t7d3dnZ2cnr6/bdfP16cdGZNVnMuqRuLMk0AAOAyZCaZcs4ppZyzJJP625t5GMpYrUS0GPqcvWUqACCJBh7NvTWXFBGS3L15E8IMKQbqzaQxQinTBACCDpufD/y43a29fnh0vFqtzs/PF4tFq3V5/Peq7wn5y6owC0fKNIVok6Rs2aNan3OSWUppZ2en7/uLi4t37t//9POvti1+DsKVli4CwsLVJl0K9YO725nZ88d//Pbr0/l8DtRa+677/dnT77784tnVZY9w4QpXuLLLhFLxFtYGf7Xx1gfvDX5rPt+/vr4GAB/HFy+OFGSgKVwCwFKYYT6qFUVYmEmklGazWUpJkqSUMyABwg23cAu3bKEBU5dB0cmz1f9Gmxjg7hEhCQAEAtzCJQByHaVwkGXlZdjSAw9vQM65lAIAAEQgQoQFAfwPIZd49pDeApIAAAAASUVORK5CYII=","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/6K40X0CdENUmHHcC5aaYDH/a8de64c661956b2b78c03bcb82444a9c/Image_default_5tools-MobileAccessibility.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6K40X0CdENUmHHcC5aaYDH/a8de64c661956b2b78c03bcb82444a9c/Image_default_5tools-MobileAccessibility.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6K40X0CdENUmHHcC5aaYDH/a8de64c661956b2b78c03bcb82444a9c/Image_default_5tools-MobileAccessibility.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6K40X0CdENUmHHcC5aaYDH/a8de64c661956b2b78c03bcb82444a9c/Image_default_5tools-MobileAccessibility.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6K40X0CdENUmHHcC5aaYDH/a8de64c661956b2b78c03bcb82444a9c/Image_default_5tools-MobileAccessibility.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6K40X0CdENUmHHcC5aaYDH/a8de64c661956b2b78c03bcb82444a9c/Image_default_5tools-MobileAccessibility.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6K40X0CdENUmHHcC5aaYDH/a8de64c661956b2b78c03bcb82444a9c/Image_default_5tools-MobileAccessibility.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6K40X0CdENUmHHcC5aaYDH/a8de64c661956b2b78c03bcb82444a9c/Image_default_5tools-MobileAccessibility.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6K40X0CdENUmHHcC5aaYDH/a8de64c661956b2b78c03bcb82444a9c/Image_default_5tools-MobileAccessibility.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6K40X0CdENUmHHcC5aaYDH/a8de64c661956b2b78c03bcb82444a9c/Image_default_5tools-MobileAccessibility.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Matthew Thackwell","slug":"matthew-thackwell"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":null},{"title":"Functional debt vs Technical debt: What’s the difference in a rich text editor?","slug":"technical-vs-functional-debt","featured":false,"lastUpdated":"May 16th, 2023","description":{"description":"<p>What is functional debt compared to technical debt? Read on to find out how knowing the difference influences your technical debts.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"What is functional debt compared to technical debt? Read on to find out how knowing the difference influences your technical debts."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"the symbols that represent debt and it's affects, including time and money loss.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.780758556891767,"src":"//images.ctfassets.net/s600jj41gsex/7p6SJvrwphZ1vTDomoRs5J/bc466e697ac16d79060b6c1b31f178e0/Tech_Debt_-7__1_.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/7p6SJvrwphZ1vTDomoRs5J/bc466e697ac16d79060b6c1b31f178e0/Tech_Debt_-7__1_.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/7p6SJvrwphZ1vTDomoRs5J/bc466e697ac16d79060b6c1b31f178e0/Tech_Debt_-7__1_.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/7p6SJvrwphZ1vTDomoRs5J/bc466e697ac16d79060b6c1b31f178e0/Tech_Debt_-7__1_.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/7p6SJvrwphZ1vTDomoRs5J/bc466e697ac16d79060b6c1b31f178e0/Tech_Debt_-7__1_.png?w=1109&h=623&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/7p6SJvrwphZ1vTDomoRs5J/bc466e697ac16d79060b6c1b31f178e0/Tech_Debt_-7__1_.png?w=1478&h=830&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/7p6SJvrwphZ1vTDomoRs5J/bc466e697ac16d79060b6c1b31f178e0/Tech_Debt_-7__1_.png?w=1925&h=1081&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/7p6SJvrwphZ1vTDomoRs5J/bc466e697ac16d79060b6c1b31f178e0/Tech_Debt_-7__1_.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/7p6SJvrwphZ1vTDomoRs5J/bc466e697ac16d79060b6c1b31f178e0/Tech_Debt_-7__1_.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/7p6SJvrwphZ1vTDomoRs5J/bc466e697ac16d79060b6c1b31f178e0/Tech_Debt_-7__1_.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/7p6SJvrwphZ1vTDomoRs5J/bc466e697ac16d79060b6c1b31f178e0/Tech_Debt_-7__1_.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/7p6SJvrwphZ1vTDomoRs5J/bc466e697ac16d79060b6c1b31f178e0/Tech_Debt_-7__1_.png?w=1109&h=623&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/7p6SJvrwphZ1vTDomoRs5J/bc466e697ac16d79060b6c1b31f178e0/Tech_Debt_-7__1_.png?w=1478&h=830&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/7p6SJvrwphZ1vTDomoRs5J/bc466e697ac16d79060b6c1b31f178e0/Tech_Debt_-7__1_.png?w=1925&h=1081&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Millie Macdonald","slug":"millie-macdonald"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Functional vs Technical Debt: Cost, Causes, Examples | TinyMCE"},"metaDescription":{"metaDescription":"We focus on what is functional debt compared to technical debt in software development. One example is the rich text editor, and the key differences in handling and prioritising those are discussed.\n"}},{"title":"CSS preprocessors and frameworks: streamlining your CSS development","slug":"css-development","featured":false,"lastUpdated":"Aug 23rd, 2023","description":{"description":"<p>How do you approach CSS development? Find out ways to streamline your projects, including vanilla CSS, preprocessors such as LESS, SASS and SCSS, as well as Bulma and Bootstrap, plus utility-first frameworks like Tailwind CSS.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"How do you approach CSS development? Find out ways to streamline your projects, including vanilla CSS, preprocessors such as LESS, SASS and SCSS, as well as Bulma and Bootstrap, plus utility-first frameworks like Tailwind CSS."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"CSS, the initialism, appearing in a box, surrounded by colour, showing the design power of CSS","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAAulBMVEVo8eVo8eVo8uVn8uVl8uVo8uZn8uZl8uZi8+Zk8uZ/8eZp8uaA8eZr8uZs8uds8uZm8uZ669+h3dqI6dyw8Ohy6dp76N6x8Ol97eVm6uFt8eFu8eVj7+F16dyg2NGg5Nes8Ol53s584NSs8emP6uGEz9+V2c+F7tRl8udl8eW37ufG6uSA7OKv8eqJ6NGK39Ow7+l87+OB2+J04+Bm7+Fn8eaS8eea8ehn8eVm8+Vm8+Zj8uVi8uVm8uVrdVXpAAAAAXRSTlP+GuMHfQAAAF5JREFUCB2NwTEOggAQAMHd87Aw8hVi6f8bGxN6HwKFyAEVJFo4o3wLfkg2ioXCp4Bk1bhB0WGCBPLibgQSmK/u2leRrFoPAIU43ezzfa5OnzWBAnHXRzBXQQEGf1oA0sUURFtZ2vMAAAAASUVORK5CYII=","aspectRatio":1.780758556891767,"src":"//images.ctfassets.net/s600jj41gsex/1lrHp6Ww3gXvSDua3WTjDE/c68cbcea100165fd35106a8d881c21ce/CSS_preprocessors_and_frameworks__streamlining_your_CSS_development.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/1lrHp6Ww3gXvSDua3WTjDE/c68cbcea100165fd35106a8d881c21ce/CSS_preprocessors_and_frameworks__streamlining_your_CSS_development.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1lrHp6Ww3gXvSDua3WTjDE/c68cbcea100165fd35106a8d881c21ce/CSS_preprocessors_and_frameworks__streamlining_your_CSS_development.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1lrHp6Ww3gXvSDua3WTjDE/c68cbcea100165fd35106a8d881c21ce/CSS_preprocessors_and_frameworks__streamlining_your_CSS_development.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1lrHp6Ww3gXvSDua3WTjDE/c68cbcea100165fd35106a8d881c21ce/CSS_preprocessors_and_frameworks__streamlining_your_CSS_development.png?w=1109&h=623&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/1lrHp6Ww3gXvSDua3WTjDE/c68cbcea100165fd35106a8d881c21ce/CSS_preprocessors_and_frameworks__streamlining_your_CSS_development.png?w=1478&h=830&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/1lrHp6Ww3gXvSDua3WTjDE/c68cbcea100165fd35106a8d881c21ce/CSS_preprocessors_and_frameworks__streamlining_your_CSS_development.png?w=1925&h=1081&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/1lrHp6Ww3gXvSDua3WTjDE/c68cbcea100165fd35106a8d881c21ce/CSS_preprocessors_and_frameworks__streamlining_your_CSS_development.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/1lrHp6Ww3gXvSDua3WTjDE/c68cbcea100165fd35106a8d881c21ce/CSS_preprocessors_and_frameworks__streamlining_your_CSS_development.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1lrHp6Ww3gXvSDua3WTjDE/c68cbcea100165fd35106a8d881c21ce/CSS_preprocessors_and_frameworks__streamlining_your_CSS_development.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1lrHp6Ww3gXvSDua3WTjDE/c68cbcea100165fd35106a8d881c21ce/CSS_preprocessors_and_frameworks__streamlining_your_CSS_development.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1lrHp6Ww3gXvSDua3WTjDE/c68cbcea100165fd35106a8d881c21ce/CSS_preprocessors_and_frameworks__streamlining_your_CSS_development.png?w=1109&h=623&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/1lrHp6Ww3gXvSDua3WTjDE/c68cbcea100165fd35106a8d881c21ce/CSS_preprocessors_and_frameworks__streamlining_your_CSS_development.png?w=1478&h=830&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/1lrHp6Ww3gXvSDua3WTjDE/c68cbcea100165fd35106a8d881c21ce/CSS_preprocessors_and_frameworks__streamlining_your_CSS_development.png?w=1925&h=1081&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Marty Friedel","slug":"marty-friedel"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"CSS preprocessors and frameworks explained | TinyMCE"},"metaDescription":{"metaDescription":"Dive into CSS development optimization with our guide. Learn about vanilla CSS, preprocessors like LESS, SASS, SCSS, and frameworks like Bulma, Bootstrap, and Tailwind."}},{"title":"Developer insights collection: resources, trends, and news","slug":"developers-insights-collection","featured":false,"lastUpdated":"Dec 8th, 2021","description":{"description":"<p>Tiny values developers knowledge, and we're sharing more developer insights in this collection.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Tiny values developers knowledge, and we're sharing more developer insights in this collection."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"developer resources and useful information on software and web development insights, trends, news and hacks represented by prompts on devices.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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F3CculE8AAAC4lBMVEUZJFkYJFkhLWgjMGwjL2seKmMXI1cfK2QgLWccJ14YJFgbK2MbK2QjM3AlNXMkNHIgMGsaKmIhMWwiMm4kNHMeLmggNnIfNnIgNnMmO3snPH0jOXgfNXEkOXknPH4lOnohN3UjQYEoRIYqRIgpRIgnQ4QnQ4UpRIcoQ4YlQoMnTo8nTpAmT5ArT5MsT5MpT5ImUJEqWI8tPn8tPH8pRYcoT5ErW54rXJ4tXpwxUJgyUJkzUJkzT5kwUpksX5UuQX4vPX0tTosyUZkzT5gxUJcrWZwtZKYtZqc0a6U9TJ49TZ48Tp47Up88TZ47Tp4vYJYnXYsmXIsxXJI9T549TJ06TZsuYKMtZacvaq0uba40bag8S500YqEtbaI8T547TZ4zYZcsSoInWIkwY5U0YKA5Vp4vZqgvbK4xcbMwdLQ1cKs2XaAndKM5Vp8zYpctOXktNXgwXpEwaKE1X586TZwwbK4xc7UyeLoye7s1c608Spw8TJ44V58yZaE7UJ87TJ00ZZ0tXpEtXZEybJ07UJ09S506Tpwyc7Qyers0gMA0gsI2dK88RJk8R5s8RZs9RJs8SJs6R5o+U6M+VKM6aKU8S5w8Rps9Rpo6S5o0ebo2h8c2icgwf7MrX5YtYJgvbJ8wb6EuYZosYpksYJY5TZs7U6E7VaE2ZqAuWZMuapwuY5kuXpk0gcA4j804j843kc02ks02kMw3rdc3tNo2k842jME8TJ08Sp48S548TZ02bq42t9o2p9Q2j8s4kM04kM45l9Q5ldM6sN06tt85lNM6l9U4kMg6ZKc7aak7bqo7YaY4d7c6u+I6rNs7n9o7ndo7tOE7vuQ7p9w7qN07r986pNk6uuE6vOE6ntg7ndg7v+U7seA9qOE9p+E9quE9reI9rOI8x+o9vOc8zew9ueY9ruM8xeo9t+U9puA+sOc+r+c+tOg+tuk9z+8+uuo+suc/s+k/suk/seg9zfA/uOo/sujwUHQ/AAAAtklEQVQYGQXBwU0CURgGwG/e/kAMCsty8Ugx1mBPFmVBxETFEA667HNGojd6Y86qz1m72SbQG3NWfV67pbaBBGK5Z916bZOgt3kllnvWUg96IwH+ejYt9Qj0PgAx/tQIuBcQpprwOfF1gPOz71GNXLLnIzucd/bUnvGEOsE0gTdgGby/AC51APAK0OoILAMAxzomAQDXntolAQCtp3ZJICA8XeOcJEnAPYbfpDZJkoRlsPSaN8k/5R0yHQvzkmsAAAA4dEVYdGljYzpjb3B5cmlnaHQAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55+Vd5NwAAACF0RVh0aWNjOmRlc2NyaXB0aW9uAHNSR0IgSUVDNjE5NjYtMi4xV63aRwAAACZ0RVh0aWNjOm1hbnVmYWN0dXJlcgBJRUMgaHR0cDovL3d3dy5pZWMuY2gcfwBMAAAAN3RFWHRpY2M6bW9kZWwASUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCRFNIqQAAAABJRU5ErkJggg==","aspectRatio":1.0979142526071843,"src":"//images.ctfassets.net/s600jj41gsex/2T30PcQr5caJ36AncUnwHu/e3e45e1719bfb883bc0538de9057b833/Image_DeveloperInsights_Design_1.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/2T30PcQr5caJ36AncUnwHu/e3e45e1719bfb883bc0538de9057b833/Image_DeveloperInsights_Design_1.png?w=185&h=169&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2T30PcQr5caJ36AncUnwHu/e3e45e1719bfb883bc0538de9057b833/Image_DeveloperInsights_Design_1.png?w=370&h=337&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2T30PcQr5caJ36AncUnwHu/e3e45e1719bfb883bc0538de9057b833/Image_DeveloperInsights_Design_1.png?w=739&h=673&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2T30PcQr5caJ36AncUnwHu/e3e45e1719bfb883bc0538de9057b833/Image_DeveloperInsights_Design_1.png?w=1109&h=1010&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2T30PcQr5caJ36AncUnwHu/e3e45e1719bfb883bc0538de9057b833/Image_DeveloperInsights_Design_1.png?w=1478&h=1346&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2T30PcQr5caJ36AncUnwHu/e3e45e1719bfb883bc0538de9057b833/Image_DeveloperInsights_Design_1.png?w=1895&h=1726&q=50&fit=scale 1895w","srcWebp":"//images.ctfassets.net/s600jj41gsex/2T30PcQr5caJ36AncUnwHu/e3e45e1719bfb883bc0538de9057b833/Image_DeveloperInsights_Design_1.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/2T30PcQr5caJ36AncUnwHu/e3e45e1719bfb883bc0538de9057b833/Image_DeveloperInsights_Design_1.png?w=185&h=169&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2T30PcQr5caJ36AncUnwHu/e3e45e1719bfb883bc0538de9057b833/Image_DeveloperInsights_Design_1.png?w=370&h=337&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2T30PcQr5caJ36AncUnwHu/e3e45e1719bfb883bc0538de9057b833/Image_DeveloperInsights_Design_1.png?w=739&h=673&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2T30PcQr5caJ36AncUnwHu/e3e45e1719bfb883bc0538de9057b833/Image_DeveloperInsights_Design_1.png?w=1109&h=1010&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2T30PcQr5caJ36AncUnwHu/e3e45e1719bfb883bc0538de9057b833/Image_DeveloperInsights_Design_1.png?w=1478&h=1346&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2T30PcQr5caJ36AncUnwHu/e3e45e1719bfb883bc0538de9057b833/Image_DeveloperInsights_Design_1.png?w=1895&h=1726&q=50&fm=webp&fit=scale 1895w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Developers resources collection: insights, trends and news | TinyMCE"},"metaDescription":{"metaDescription":"Constantly updated overview of developer resources to keep an eye for the most useful information on software and web development insights, trends, news and hacks."}},{"title":"Real-time collaboration is the new responsive design","slug":"real-time-collaboration-essential","featured":false,"lastUpdated":"Feb 3rd, 2021","description":{"description":"<p>Real-time collaboration is the new responsive design. We share why it&rsquo;s becoming essential for tools and what developers can expect.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Real-time collaboration is the new responsive design. We share why it’s becoming essential for tools and what developers can expect."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Different colored text boxes","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAMAAAAhxq8pAAACmlBMVEUIG0wJHEwJHU0LHk4KHEwIG0sLHU0KG0wIGksIGUsLHE0OIVAMHk0LHUwIG0oJG0sMF00GAEcEAEUGAEYIEUgIGUoJHEoNIE4LHkwMH00MHkwIGkkIEUcMKEwXT1wXTVwXTVsXTlwXUF0NK00HD0cLHEsKHEoIG0kLHUoJGkgEAEEhcm88zKw7y6s5yqk6yqo8zawkenQEAEAJGUcLHEkKHEgJG0cJG0gJG0YKG0cMHEkKGkcFAEAcYWQ2tJs3uZ4zsZg0sZk0spk1tJoeaWkEAD8IGEUIGUUIGkYJGkQJGUQIE0MAADsYYWMvn4wCAD0CADoHAD4HAD8IBEEJFEMKGUQLG0UIGUQIGUMJGkULHEgKGkMJGUIIGUIFFkIAAEEhS1gdI1YbIlEyQG8zQnEyQW8yQm8yQ3AzRXIpOWMGF0AJGkMLHUgMG0YKGkQGFz8AET0AAzoACEKYoLZcYXsaLV8cLFc0RnQ2SHc2SHYtPWgGFj0KGkILHEcLG0MHFz8ACjkAADYAADAAADOGjqJQVmsAACEAADQAE0APH0UTIUcUIkcVI0gPHkMIFz0KGUEIFzwCEzkAACmSmq+7xdy2wNe1v9a3wdmvuc87QlgEFDkGFTkHFTkIFzoJFzsJGDwJGDsIFzkBEjcAACOiq8DO2fLJ1O3I0+zJ1e7CzORFS18AAC4HFjgJFzkKGDwJFzoIFjcEEzUAAC0wN01ESl1AR1pARllCSVw/RlkADzMADjMIFTYJFjYJFzgKGT0KGDoIFTQIFDMDEjMAADIAACAAACUADC8HEzMIFTMJFjUKGTwLGj8IFDAIEy8KGkEGEzEFES8FEi8HFTQIEzAIFTIKGDkIEi0IEy4LGT4MG0MJFjcIEiwJFjQIFDFKPH1hAAAAp0lEQVQYGQXBsVITYQCAwW+P3wGZxNzFxoaCN/AJpODNtaWhoaZyhkIG0oiBybmrqio6VdWZ4WMEp7OjqtZzG4EUb+vlW5/HBmCdMP+etY750Bcg2GEd8wIAeGkaSwEAM2MfuP8OgLEHbmGtCcYCAII/Yw+Ep2+CZSxA2OOwbTqNHbBO4HW7w5jx60f9vEGbgjuP1xTPX/9VXXjyAN77e7g6VvXp/fw/Qcck1qEbbkYAAAAASUVORK5CYII=","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/4tEPRk1cyAfxNcKMYmaH7Z/40fb3d40c19ab4298810104f9d97f041/BlogImage_Jan2021_default_RTC-new-responsive-design.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/4tEPRk1cyAfxNcKMYmaH7Z/40fb3d40c19ab4298810104f9d97f041/BlogImage_Jan2021_default_RTC-new-responsive-design.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4tEPRk1cyAfxNcKMYmaH7Z/40fb3d40c19ab4298810104f9d97f041/BlogImage_Jan2021_default_RTC-new-responsive-design.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4tEPRk1cyAfxNcKMYmaH7Z/40fb3d40c19ab4298810104f9d97f041/BlogImage_Jan2021_default_RTC-new-responsive-design.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4tEPRk1cyAfxNcKMYmaH7Z/40fb3d40c19ab4298810104f9d97f041/BlogImage_Jan2021_default_RTC-new-responsive-design.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/4tEPRk1cyAfxNcKMYmaH7Z/40fb3d40c19ab4298810104f9d97f041/BlogImage_Jan2021_default_RTC-new-responsive-design.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/4tEPRk1cyAfxNcKMYmaH7Z/40fb3d40c19ab4298810104f9d97f041/BlogImage_Jan2021_default_RTC-new-responsive-design.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4tEPRk1cyAfxNcKMYmaH7Z/40fb3d40c19ab4298810104f9d97f041/BlogImage_Jan2021_default_RTC-new-responsive-design.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4tEPRk1cyAfxNcKMYmaH7Z/40fb3d40c19ab4298810104f9d97f041/BlogImage_Jan2021_default_RTC-new-responsive-design.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4tEPRk1cyAfxNcKMYmaH7Z/40fb3d40c19ab4298810104f9d97f041/BlogImage_Jan2021_default_RTC-new-responsive-design.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ben Wilkinson","slug":"ben-wilkinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Real-time collaboration is no longer optional"},"metaDescription":{"metaDescription":"Real-time collaboration is the new responsive design. We share why it’s becoming essential for tools and what developers can expect."}},{"title":"To OT or CRDT, that is the question","slug":"real-time-collaboration-ot-vs-crdt","featured":true,"lastUpdated":"Jan 13th, 2020","description":{"description":"<p>If you&rsquo;re playing around in the real-time collaboration space, you&rsquo;re likely to come across these terms: operational transformation (OT) and conflict-free replicated data type (CRDT). But what do they really mean? And which one should you use?</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"If you’re playing around in the real-time collaboration space, you’re likely to come across these terms: operational transformation (OT) and conflict-free replicated data type (CRDT). But what do they really mean? And which one should you use?"}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Abstract illustration of text editor, containing text 'Hello World', and two cursors present.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAACkUlEQVQYGXXBS2ucZRQH8P85z3medy6ZS6ZJpmK1puJtpYJLXYjuBBeCIH4OwYVfws/hQtxIV668gEVBKyhk2o0RG9OZ6WTmncm8z+UcEysoSn8/2vtsqkCdKKmZ4VEc0HaIhqhgQkcQHESTlZTHYesqMjMYYIb/YcIFNUDIiq2btnmRzTldcZvHDzM7h3Zwh2MQ4dGIqKzPjz+/v2z6UiJyTPVMIQyOtDrFvxAuGf5GAIgQm1InCiSVJ2tVv94V6YbNsqQEGIhxwRk8IxsKQIRAcAQiUHKuJBpBrr7M8mDRdG7I2YOeWELHt9ziNG2iPPk0V514b6KrGAJZcAABIEKhZJYhOpnk40k6vFKitoftx64XsA36G+kPyGWPxbUbwr0wPcJqAWYQARklI0W49PwH8Wi9zvudA2YTO5trclXfvFuW1QYgabH45LEq2xC3HoClrNuooSs6PEiA74ZqZ7u8fTK7n11Locn7JiYvTuFCqKJUyZYL6F5p7RR1XIBCLrzxIZ/XBa3NZDnQW53R2c4T0ZfjcucnfPu9fvVDtT9rPxPqT74YvjnONz8dvv6Uqd+eJq36gkKmsMIlV4Zm8O6rZqb1uDrclfcHVtQ0u16n+ugt2e1hvcJqrn/Y/sFprKcMJRRiwAs1Xx+l30/qL2/Feye6qo2L5s36ux/zdAbSPJ93337JOHBuRq/tjV5cihUigECFqlQ9d/LxbWsMsiAw7c51Ecm4/uYud72Zwmz4XiXXx3mnZ8++IAwm47I+V98tr7zDDGbCQ2YgUkVRwC7ACfnpevvb4s4vyfpXhQ0ljGw95xiZCQTDP1RhBsIlAnSL2c8g6qK7SwrJmYzb6F9zDBAuGR5SQzH8Bxn+YjD7E5xUbHGOVy0aAAAAAElFTkSuQmCC","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/lq18Ma2NAAtWvmZbaj7E4/a6e3872f74d3d43613b0e2355af79b0a/Image_default_rtc.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/lq18Ma2NAAtWvmZbaj7E4/a6e3872f74d3d43613b0e2355af79b0a/Image_default_rtc.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/lq18Ma2NAAtWvmZbaj7E4/a6e3872f74d3d43613b0e2355af79b0a/Image_default_rtc.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/lq18Ma2NAAtWvmZbaj7E4/a6e3872f74d3d43613b0e2355af79b0a/Image_default_rtc.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/lq18Ma2NAAtWvmZbaj7E4/a6e3872f74d3d43613b0e2355af79b0a/Image_default_rtc.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/lq18Ma2NAAtWvmZbaj7E4/a6e3872f74d3d43613b0e2355af79b0a/Image_default_rtc.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/lq18Ma2NAAtWvmZbaj7E4/a6e3872f74d3d43613b0e2355af79b0a/Image_default_rtc.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/lq18Ma2NAAtWvmZbaj7E4/a6e3872f74d3d43613b0e2355af79b0a/Image_default_rtc.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/lq18Ma2NAAtWvmZbaj7E4/a6e3872f74d3d43613b0e2355af79b0a/Image_default_rtc.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/lq18Ma2NAAtWvmZbaj7E4/a6e3872f74d3d43613b0e2355af79b0a/Image_default_rtc.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Andrew Herron","slug":"andrew-herron"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Building real-time collaboration applications: OT vs CRDT"},"metaDescription":{"metaDescription":"What do OT (Operational Transformation) and CRDT (Conflict-free Replicated Data Type) really mean? And which one should you use in your real-time collaboration solution?"}},{"title":"Adaptability is key to your success as a software developer","slug":"software-developer-qualities-adaptability","featured":false,"lastUpdated":"Jun 7th, 2020","description":{"description":"<p>One of the most important software developer qualities is adaptability. Find out why it&rsquo;s so critical and how developers can be more adaptable.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"One of the most important software developer qualities is adaptability. Find out why it’s so critical and how developers can be more adaptable."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"A group of eight young adults crowd around a laptop.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAADnElEQVQYGRXBzW/bVAAAcD/72bHTfDZx0rVNQpt2XZp1tNWkoq1sB6i2ISakTRoHpImPC3dOHLjAiT8ATYIDgssQCAmEepiGQNBSRtu1S9s0zaZ8N0mbNLFjO3b8nu2H9vuB3P4ew/KQZQFDa5p21mrF4wmK2MjQbQsTChDHsV/ClmU1KsVMJrN4ebFaPVEUnQYA0DQANDAHutqotH//cdDXZLm7n93KHu5gjBxCKED1VFnr93xY46sHFkasW4BDPA0ADQANAI0s2yVw6bm07dgII8rRDV22sEUIkTtnhcKRpvYQ53JFxVK16FAAshDSDEMzL+UbzQe//ZyyFCpTu31tWe7KDmEJRRHHNrKbXu+wixfK3dZgbLJULq4k5+YvzdMQsggjRVNjfo/oDXzVY3r1gtslzM1fFwNhQ++fnTQspEunJ3JPwYAb8oVk1QiNjE6nZiFk4e72bm13/ebdd1/1+J9ZpbcXUqIYwRhrledc9zhfPt7f2fYL0Kg200tXbItSDEs3VOJYtI0GoFWIU6qJUIIy7vcPfNGEBehBXw1zTGcAHx0ppwZ9a/l19GK3dSY3291EbIJgtVTehw707NelwnbmvRu8zkVqG9lzd1iPJOX//gUp2DOVunY98OWnP13wgcrO3neHiDJb95YXuotLhy86oFGuff/1gz/W/kyvfMgSJ8p1gVf0MuRg9eGxpMy/85E/FB0obQiwm1jRkbFKubL+78ZB9XhhdgZaUtetNblw4pzoNZqVpdRUsVgcGH0L474rDBjI2Pbk+Kiitl2C8MrM+amR8Vgwcvfj+8bRJnPz/c9i4UAwGEhPxoMsEwUS45jDYZFieCKdtov5enaT8NyTtV//+W9z/uKlIazosqIR+lkuD755XJtyGwko1TZWy43m5VCTslXsnZJP6lg6JrQHjV596gQluT2dvBAf4pNjI4pi7/VsydAgj/u9zFqm+IiFHoxsxMeVTr3jCCYY9fgDQ+HY8Gu332B5DjK4086tPhSFN93D8TilJ+KTzBeffFBR0FaueXHxaldHE+MhmLziX1xxjaeednBGtgV/aHp6RgyFa08ek/qOXMo5gijGJl0eH0xGIO8+H/a4esVDxLkF3zCl1JTIDMNyycQEWyqUM9tA64luVq1kWYYVcAttfatGPxf8Iui3ypoNDVV9vv4XFRydDWA980MXh22jQzsmZZu2KZtqnhPGoDBCLGKZuoORGXvLSN34H6+NBEr56QH6AAAAAElFTkSuQmCC","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/2qCuzkMe5Mw3yXvl43jV5Y/ad7f614887d682612681731aba2adeca/Image_default_Adaptability.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/2qCuzkMe5Mw3yXvl43jV5Y/ad7f614887d682612681731aba2adeca/Image_default_Adaptability.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2qCuzkMe5Mw3yXvl43jV5Y/ad7f614887d682612681731aba2adeca/Image_default_Adaptability.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2qCuzkMe5Mw3yXvl43jV5Y/ad7f614887d682612681731aba2adeca/Image_default_Adaptability.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2qCuzkMe5Mw3yXvl43jV5Y/ad7f614887d682612681731aba2adeca/Image_default_Adaptability.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/2qCuzkMe5Mw3yXvl43jV5Y/ad7f614887d682612681731aba2adeca/Image_default_Adaptability.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/2qCuzkMe5Mw3yXvl43jV5Y/ad7f614887d682612681731aba2adeca/Image_default_Adaptability.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2qCuzkMe5Mw3yXvl43jV5Y/ad7f614887d682612681731aba2adeca/Image_default_Adaptability.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2qCuzkMe5Mw3yXvl43jV5Y/ad7f614887d682612681731aba2adeca/Image_default_Adaptability.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2qCuzkMe5Mw3yXvl43jV5Y/ad7f614887d682612681731aba2adeca/Image_default_Adaptability.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ben Long","slug":"ben-long"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Adaptability is key to your success as a software developer"},"metaDescription":{"metaDescription":"One of the most important software developer qualities is adaptability. Find out why it’s so critical and how developers can be more adaptable."}},{"title":"A Tiny road to Reason","slug":"tinymce-reasonml","featured":false,"lastUpdated":"Sep 21st, 2020","description":{"description":"<p>We are incorporating ReasonML in TinyMCE to take advantage of its guaranteed type safety, superb type inference, more advanced type system features, and the ability to compile to extremely fast native binaries.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"We are incorporating ReasonML in TinyMCE to take advantage of its guaranteed type safety, superb type inference, more advanced type system features, and the ability to compile to extremely fast native binaries."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Time-lapse photo of highway road at dusk, a stream of white light on the left and red on the right.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAADTUlEQVQYGQ3BW08cZRgA4Pc7zOzMnmcXdlksCLSgMYYeYmtDpKaxtTXGaNL2Rm8kxit/gBdeNsZf4YV3XmmMxhMJaQSE1kMTE2nTKKUIrKW7LOzO7M7M973vq88j3OsLwlqBKNFKQkASjEwEjMAsiQUTEwsmZgZmBlAACEwgdKlcYWsctApRo2VEQSjRSkJFBEQIjMSGGZksMTIJZgHAAHq+OpRLY2NSY41FlCbVNlVoJaIlSohS5hTgCETCnAKkzJYYgZlBz/s+AvbTQTcOm1GUGNM3adZxHK2tMYJIELlSFawpOP9zWQgAMEIaIXSys9kJe724b5kbWislQhShicMYGYAIs0oCSR/AGpKEWS/jKQXAynH19sMHE8Xyi5XqkJfxpZAMUorQmFYcd61NEfeTgRGAABpE2fM87WjX1Y6bSCWgOgJIl+u1C1MTRa19pUbzRRCi4vkoFQIUgZlwaXd3uj5y+qljh8Y+isJsJiNAiGpj3BB14wRqQX24kq2WHi7dgajzdnC8MXPirhlcC/LTvvvJxsZ4qTQTBIbp0417z1eqBdfVvptxrXFcTjuR0b6qDEPU8V66WH3j9aDR+GDQ23hwf2FpXQ81lttP7L274BWA1D+7e0Cs00EfAASi7g9s2Ptb0Ts3P37z1Vfyufzt5eXTEFfKhR/r3upedLI2hmNn04OtuLubJAaYVC6TY4uqkFWNWm1ubuG99+fmzpcKha9Xby/+vPJWoVBM6Hy1vm8Of9rbhuIEHrakCR0ps1pqUcw5teEBw9SpM1euXq0G5TgM/zrsfvn94mNINqNkNow8AzcnZ/MGPt9fLx61tRFKSimEyj3zbD+xs5euvHz5ElgMDw7K5dKtO7//8sOi4ztP1xvzrXbTCO7HF/JVRlyLIw9RMzAIFYxPXbx+44VTJ4/anebW9sSxRrPT+/arb/SjraCQwZHRM48Pp9lZaXXKvf7ZYKio5VIc+cwKSb324UczoyOtf/c3/9w4PjmW8XOr678O1pa5H4Gr7HBtLLHP7fSCTvpF78mJIzNdGx73M/f7vVRLOVMptVvt726tTI4Maa332+2d9TVvEAmD2B8MDlq/ZVW72QkQznXFZ92m/8feuXzl3bGJDPF/0UvmX79MqwsAAAAASUVORK5CYII=","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/769iuq6HFbLRFFch3CrhSy/d7cf38e382559adbf73aa7ef4e09d26e/Image_default_Road-to-reason.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/769iuq6HFbLRFFch3CrhSy/d7cf38e382559adbf73aa7ef4e09d26e/Image_default_Road-to-reason.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/769iuq6HFbLRFFch3CrhSy/d7cf38e382559adbf73aa7ef4e09d26e/Image_default_Road-to-reason.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/769iuq6HFbLRFFch3CrhSy/d7cf38e382559adbf73aa7ef4e09d26e/Image_default_Road-to-reason.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/769iuq6HFbLRFFch3CrhSy/d7cf38e382559adbf73aa7ef4e09d26e/Image_default_Road-to-reason.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/769iuq6HFbLRFFch3CrhSy/d7cf38e382559adbf73aa7ef4e09d26e/Image_default_Road-to-reason.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/769iuq6HFbLRFFch3CrhSy/d7cf38e382559adbf73aa7ef4e09d26e/Image_default_Road-to-reason.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/769iuq6HFbLRFFch3CrhSy/d7cf38e382559adbf73aa7ef4e09d26e/Image_default_Road-to-reason.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/769iuq6HFbLRFFch3CrhSy/d7cf38e382559adbf73aa7ef4e09d26e/Image_default_Road-to-reason.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/769iuq6HFbLRFFch3CrhSy/d7cf38e382559adbf73aa7ef4e09d26e/Image_default_Road-to-reason.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Andrew Herron","slug":"andrew-herron"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"TinyMCE’s Road to ReasonML"},"metaDescription":{"metaDescription":"We are incorporating ReasonML in TinyMCE to take advantage of its guaranteed type safety, superb type inference, more advanced type system features, and the ability to compile to extremely fast native binaries."}},{"title":"Agile, waterfall, or hybrid: what’s right for your development team?","slug":"waterfall-vs-agile-development-team","featured":false,"lastUpdated":"May 7th, 2020","description":{"description":"<p>Agile is almost synonymous with software development, but that doesn&rsquo;t mean your dev team should automatically adopt it. We talk about alternative approaches and what to expect when you transition to agile.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Agile is almost synonymous with software development, but that doesn’t mean your dev team should automatically adopt it. We talk about alternative approaches and what to expect when you transition to agile."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Pineapple painted pale orange and green sits on a blue background.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAACV0lEQVQYGQXBPW5dVRSG4fdbe59zg23lRibYCcigUICQEgRNhERJxRCQaBAFs6DJOBAUDIARMABSUiBEZBHsACH+ybVv7s/Ze63F84hHv1EKRRTDhAHCBCL01a3p+4Udpj93SAjHE3falm2vmDBhhgkTBqkvdttn+9eX0/jwzvbevzs/ndXniEgQARKCahUTBkUYGEhIl1k+nZ++rZPLcvhi9+jb/24jsARhiUMpkAZCQiAhYUJaO0MPK9o//2VYLaAgwwwJExIIYZAIAAAAkp657lhbzIa249fvFgeBEEhIIJCRSQQReBIQEHwyrA/GxVAySn3L/rqviRQBAREkpAhVInABCBIMkpfNoliayjC6xn8mEUEkkfQgAg86xpS0oDk96EFPWn539dqz6SDqzrLxq997vBlpgSc96UkLutNbpTmZZGJgYNDz0cPd2x99eLY9uujctfmXMf143ClBD3rgTnd6VHqHAolBgUyq7r8zXs1m5cYtTx+2q/cON/zhZOJBOO64417JwA1L5KRIfVByr12fL3HvU2+rtk06JB6Ek0EEEURUJDLogKEAu2p58Opv37v7p++s1u16mpaT0xwc74TjQQZkRZBJJp5kYP3ZVpuNv++nK7/ze46TbLFas1hSwQQCkKjFIAEAA0uUn9/so2/65tXR5vjNfnG29ienS9pEBoBBLYyV2VCRyESJksGY6esH2wdvLPt6Oa3b7OLpyfH+z09fZ76HACgFE2ZAxYREKVRRjPHGNyd7L+Lmx/OXtl09Ph9+WM85HNhsCMdgGDEjIeJ/+jhprlqRihwAAAAASUVORK5CYII=","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/4tDsBx08Z8InkWXqt5XOuk/2cf53cd6878ad6e5acb2d4dc828ae63a/Image_default_AgileWaterfallHybrid.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/4tDsBx08Z8InkWXqt5XOuk/2cf53cd6878ad6e5acb2d4dc828ae63a/Image_default_AgileWaterfallHybrid.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4tDsBx08Z8InkWXqt5XOuk/2cf53cd6878ad6e5acb2d4dc828ae63a/Image_default_AgileWaterfallHybrid.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4tDsBx08Z8InkWXqt5XOuk/2cf53cd6878ad6e5acb2d4dc828ae63a/Image_default_AgileWaterfallHybrid.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4tDsBx08Z8InkWXqt5XOuk/2cf53cd6878ad6e5acb2d4dc828ae63a/Image_default_AgileWaterfallHybrid.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/4tDsBx08Z8InkWXqt5XOuk/2cf53cd6878ad6e5acb2d4dc828ae63a/Image_default_AgileWaterfallHybrid.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/4tDsBx08Z8InkWXqt5XOuk/2cf53cd6878ad6e5acb2d4dc828ae63a/Image_default_AgileWaterfallHybrid.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4tDsBx08Z8InkWXqt5XOuk/2cf53cd6878ad6e5acb2d4dc828ae63a/Image_default_AgileWaterfallHybrid.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4tDsBx08Z8InkWXqt5XOuk/2cf53cd6878ad6e5acb2d4dc828ae63a/Image_default_AgileWaterfallHybrid.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4tDsBx08Z8InkWXqt5XOuk/2cf53cd6878ad6e5acb2d4dc828ae63a/Image_default_AgileWaterfallHybrid.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Dallas Clark","slug":"dallas-clark"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Should every software development team adopt agile?"},"metaDescription":{"metaDescription":"Agile is almost synonymous with software development, but that doesn’t mean your dev team should automatically adopt it. We talk about alternative approaches and what to expect when you transition to agile."}},{"title":"Comparing Implementing Collaboration: TinyMCE & CKEditor","slug":"tinymce-vs-ckeditor-collaboration-implementation","featured":false,"lastUpdated":"Nov 25th, 2025","description":{"description":"<p>Compare collaboration features in TinyMCE and CKEditor, including comments, revision history, and real-time editing. Implementation effort included.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Compare collaboration features in TinyMCE and CKEditor, including comments, revision history, and real-time editing. Implementation effort included."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Comparing Implementation in CKEditor and TinyMCE","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABuVBMVEUJElMKE1QAB08ABU4ABE4AA00AB04JElQJE1QEDVEAAE0AAU4ABk4ABU8AAk4CDFAEDlEGD1EIEVIIElMAAE4EGV0rMWkkKmUuM2ksMWkpL2gwNWoxNmsyN2suNGoYHlsAAEgEDFAAA04AAFKFhpaFiJo0Qnk9RHtBSH0/R3xMVIRGTX5CSXpBSHo2PW4pL18dJFkAAU0ACFAACFWHiZhRYJNlb6Fca6Vdb6Ribp5qdaSltdumtt2ktNqltNujstl/i68AAEkADFIAAFAUJGRVYJNga6JdbaBcc5xfbZteZ5l2gq1rdqBkbphkcZlgbpZdaI9GT3cFDlEjKWNUXo9eaZ9eaZ1gaZdfaZdZY5RPXJEvOXUbJGYgInFFHJgWGWYAAE8DC1AFDlAIEVEfJmM9SJNET5lCTZhDTphCTZk0Q4RVQ248Om0oNW8sMnVMVnspPF8ADFMACE8IEFEAAEoKGGRebM58h+B1gt54hN5xft8vRJ6FSz5gP1gNJmMcJ2APIVsACVIJElIMFFIACE4EE14IFmAAEV8CEl8EFWEAE1k0LlYgIVYLFFQCC1ACC08AB00AAEQAAEWAlhNmAAAAmElEQVQIHVXBPQ7BAACG4e9tG23aJtrJIJKG2QFMNrvFOUicwGxwBOEUNqvdZpBgkhgspWjrN5I+DwIh9Eau3BQJDvcSiXORG3vcbITAMILY40V8HSt7jIgPiZ9DzXIDOJf5E+EKP21RtBB+Z2m0KZhbcdCdhRRk+L2QgnHysOyIbZ2fUWOdme7VOnk0mQwkdlPFm7Sv6vAJVJckrHdnKzQAAAAASUVORK5CYII=","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/3W3sUzUnjIF1kp32gUGVQI/a2f3012e87e992acbedeab4852416eb9/Comparing_Implementation_in_CKEditor_and_TinyMCE.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/3W3sUzUnjIF1kp32gUGVQI/a2f3012e87e992acbedeab4852416eb9/Comparing_Implementation_in_CKEditor_and_TinyMCE.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/3W3sUzUnjIF1kp32gUGVQI/a2f3012e87e992acbedeab4852416eb9/Comparing_Implementation_in_CKEditor_and_TinyMCE.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/3W3sUzUnjIF1kp32gUGVQI/a2f3012e87e992acbedeab4852416eb9/Comparing_Implementation_in_CKEditor_and_TinyMCE.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/3W3sUzUnjIF1kp32gUGVQI/a2f3012e87e992acbedeab4852416eb9/Comparing_Implementation_in_CKEditor_and_TinyMCE.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/3W3sUzUnjIF1kp32gUGVQI/a2f3012e87e992acbedeab4852416eb9/Comparing_Implementation_in_CKEditor_and_TinyMCE.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/3W3sUzUnjIF1kp32gUGVQI/a2f3012e87e992acbedeab4852416eb9/Comparing_Implementation_in_CKEditor_and_TinyMCE.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/3W3sUzUnjIF1kp32gUGVQI/a2f3012e87e992acbedeab4852416eb9/Comparing_Implementation_in_CKEditor_and_TinyMCE.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/3W3sUzUnjIF1kp32gUGVQI/a2f3012e87e992acbedeab4852416eb9/Comparing_Implementation_in_CKEditor_and_TinyMCE.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/3W3sUzUnjIF1kp32gUGVQI/a2f3012e87e992acbedeab4852416eb9/Comparing_Implementation_in_CKEditor_and_TinyMCE.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/3W3sUzUnjIF1kp32gUGVQI/a2f3012e87e992acbedeab4852416eb9/Comparing_Implementation_in_CKEditor_and_TinyMCE.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/3W3sUzUnjIF1kp32gUGVQI/a2f3012e87e992acbedeab4852416eb9/Comparing_Implementation_in_CKEditor_and_TinyMCE.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/3W3sUzUnjIF1kp32gUGVQI/a2f3012e87e992acbedeab4852416eb9/Comparing_Implementation_in_CKEditor_and_TinyMCE.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/3W3sUzUnjIF1kp32gUGVQI/a2f3012e87e992acbedeab4852416eb9/Comparing_Implementation_in_CKEditor_and_TinyMCE.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Coco Poley","slug":"coco-poley"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"TinyMCE vs CKEditor: Collaboration Implementation Comparison"},"metaDescription":{"metaDescription":"Compare collaboration features in TinyMCE and CKEditor, including comments, revision history, and real-time editing. Implementation effort included."}},{"title":"Comparing Implementing Collaboration: TinyMCE & Froala","slug":"comparing-implementing-collaboration-tinymce-and-froala","featured":true,"lastUpdated":"Nov 6th, 2025","description":{"description":"<p>Compare how much effort it takes to implement collaboration tools - comments, mentions, version history, and more - in TinyMCE vs Froala.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Compare how much effort it takes to implement collaboration tools - comments, mentions, version history, and more - in TinyMCE vs Froala."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Comparing Implementation in Froala and TinyMCE","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAALABQDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAgMHCP/EACgQAAIBAwMCBQUAAAAAAAAAAAECAwQFEQASIQZRBwgUFTETFlJhgf/EABoBAQABBQAAAAAAAAAAAAAAAAMCAAEEBQf/xAAhEQABBAEFAAMAAAAAAAAAAAABAAIDESESMUFxgRORsf/aAAwDAQACEQMRAD8AxB4O+G9p6/qKn3W4xxsF3CIbt6YI5OCODnH811WaZ7H6GtNVvx14tVTQzVebqvrKoF38vdhgoK9LdKJ6xIGeMtLsG74XlnA+dTh+eY23joInOaMFQXrWSilv0kdss32/BTokElH601Y+qoxI4kP5Nk4HAzxrJYySK2Su1HoD8SamOyAkeqnoZmamnkpmwATC5QkduNRAB3R2gHV97S319u91q2obgI1qoHmZlmCNuQNns3OrmKMuDyMi69TjYpSoqwxYUcr2/Z1XKA5X/9k=","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/1m3Oz5274jXLX3XftB6Xu5/d8fe08bb03076779f11400d30413d0c7/_TinyMCE__Blog_Header__Comparing_Implementation_in_Froala_and_TinyMCE.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/1m3Oz5274jXLX3XftB6Xu5/d8fe08bb03076779f11400d30413d0c7/_TinyMCE__Blog_Header__Comparing_Implementation_in_Froala_and_TinyMCE.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1m3Oz5274jXLX3XftB6Xu5/d8fe08bb03076779f11400d30413d0c7/_TinyMCE__Blog_Header__Comparing_Implementation_in_Froala_and_TinyMCE.jpg?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1m3Oz5274jXLX3XftB6Xu5/d8fe08bb03076779f11400d30413d0c7/_TinyMCE__Blog_Header__Comparing_Implementation_in_Froala_and_TinyMCE.jpg?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1m3Oz5274jXLX3XftB6Xu5/d8fe08bb03076779f11400d30413d0c7/_TinyMCE__Blog_Header__Comparing_Implementation_in_Froala_and_TinyMCE.jpg?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/1m3Oz5274jXLX3XftB6Xu5/d8fe08bb03076779f11400d30413d0c7/_TinyMCE__Blog_Header__Comparing_Implementation_in_Froala_and_TinyMCE.jpg?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/1m3Oz5274jXLX3XftB6Xu5/d8fe08bb03076779f11400d30413d0c7/_TinyMCE__Blog_Header__Comparing_Implementation_in_Froala_and_TinyMCE.jpg?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/1m3Oz5274jXLX3XftB6Xu5/d8fe08bb03076779f11400d30413d0c7/_TinyMCE__Blog_Header__Comparing_Implementation_in_Froala_and_TinyMCE.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/1m3Oz5274jXLX3XftB6Xu5/d8fe08bb03076779f11400d30413d0c7/_TinyMCE__Blog_Header__Comparing_Implementation_in_Froala_and_TinyMCE.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1m3Oz5274jXLX3XftB6Xu5/d8fe08bb03076779f11400d30413d0c7/_TinyMCE__Blog_Header__Comparing_Implementation_in_Froala_and_TinyMCE.jpg?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1m3Oz5274jXLX3XftB6Xu5/d8fe08bb03076779f11400d30413d0c7/_TinyMCE__Blog_Header__Comparing_Implementation_in_Froala_and_TinyMCE.jpg?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1m3Oz5274jXLX3XftB6Xu5/d8fe08bb03076779f11400d30413d0c7/_TinyMCE__Blog_Header__Comparing_Implementation_in_Froala_and_TinyMCE.jpg?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/1m3Oz5274jXLX3XftB6Xu5/d8fe08bb03076779f11400d30413d0c7/_TinyMCE__Blog_Header__Comparing_Implementation_in_Froala_and_TinyMCE.jpg?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/1m3Oz5274jXLX3XftB6Xu5/d8fe08bb03076779f11400d30413d0c7/_TinyMCE__Blog_Header__Comparing_Implementation_in_Froala_and_TinyMCE.jpg?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Coco Poley","slug":"coco-poley"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Comparing Implementing Collaboration: TinyMCE & Froala | TinyMCE"},"metaDescription":{"metaDescription":"Compare how much effort it takes to implement collaboration tools - comments, mentions, version history, and more - in TinyMCE vs Froala."}},{"title":"Comparing Implementing Collaboration Features: TinyMCE and Tiptap","slug":"collaboration-features-implementation-tinymce-and-tiptap-compared","featured":true,"lastUpdated":"Oct 14th, 2025","description":{"description":"<p>Compare the level of effort to integrate collaboration into Tiptap and TinyMCE, and how much coding and configuration is necessary.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Compare the level of effort to integrate collaboration into Tiptap and TinyMCE, and how much coding and configuration is necessary."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Comparing Implementing Collaboration TinyMCE and Tiptap","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABrVBMVEUJElMIElMACE8AB08ABk8GEVMHEVMABE4AB04KE1QEDVEAB08ACE8ACFAADFMADFQAClEACVEAClQAEFUEElUABU8AAU8AAE8AAFAACFQ7L1dKMlYAE1YABlEAFFZTOVQ8K1cACVMsH05CLEw+KU1AK0w9KU1BK0xGLkxCK0xFLUxJMEwkH1RGL1ZYM1UAG1wAC1cAHV1pPlNMLldYNkqKVkOQWkKGVEONV0KHVEODVEN7T0R8T0WCVEVdPEwACFYAGVwvNWFJS2ssNGEAGl0AEVYAAE1SLlCDRk2EP0V9Qk2ESE50PEwdF1IAAE4AAEsAAVEADFhSVHCOjptNT24ADlgABk8AAEhWWXOSlKGWmaWjpa+YmqaLjZuDhJOamqaZmqWEhZQADFIAElcAHl0bJltER2kXJV0WI10OGVcACFEAAEwTGVJCRWZVV3FHSWhERmdBQ2UzNl1TVG9PUG0AD1NvREtUM1MAHFxnQlBUNFYAA04AAEkAAEoAFFRvO05WLVMAElUABlAAE1U5J1cuIlgACVIABU4AD1IAEVQAE1QADFEAClIAD1QGElQtkPicAAAACXRSTlP+/v7+/v7+/v4itX5mAAAAfUlEQVQI12NkYGRkgAEg6z8jCHDCBBkZQNw/rECChQeukhEOWJi4GdHBfRYGIQzBWyz6cDbDfyYwfcKTMZwRE7CIwBWCiJP/LRkZZzBWn+bUBTrnki7DZbhJzGceR7OxTeZlkZuiIsfGxtZ2yomVlRHJR0zMDH/+M7D9YwAATocVpRCoAqQAAAAASUVORK5CYII=","aspectRatio":1.780758556891767,"src":"//images.ctfassets.net/s600jj41gsex/7BBFYSN5SWgsjNdMkF00H9/af69b9548a29e6acbd9fff4d3124cf8c/Comparing_Implementing_Collaboration__TinyMCE_and_Tiptap.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/7BBFYSN5SWgsjNdMkF00H9/af69b9548a29e6acbd9fff4d3124cf8c/Comparing_Implementing_Collaboration__TinyMCE_and_Tiptap.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/7BBFYSN5SWgsjNdMkF00H9/af69b9548a29e6acbd9fff4d3124cf8c/Comparing_Implementing_Collaboration__TinyMCE_and_Tiptap.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/7BBFYSN5SWgsjNdMkF00H9/af69b9548a29e6acbd9fff4d3124cf8c/Comparing_Implementing_Collaboration__TinyMCE_and_Tiptap.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/7BBFYSN5SWgsjNdMkF00H9/af69b9548a29e6acbd9fff4d3124cf8c/Comparing_Implementing_Collaboration__TinyMCE_and_Tiptap.png?w=1109&h=623&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/7BBFYSN5SWgsjNdMkF00H9/af69b9548a29e6acbd9fff4d3124cf8c/Comparing_Implementing_Collaboration__TinyMCE_and_Tiptap.png?w=1478&h=830&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/7BBFYSN5SWgsjNdMkF00H9/af69b9548a29e6acbd9fff4d3124cf8c/Comparing_Implementing_Collaboration__TinyMCE_and_Tiptap.png?w=1925&h=1081&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/7BBFYSN5SWgsjNdMkF00H9/af69b9548a29e6acbd9fff4d3124cf8c/Comparing_Implementing_Collaboration__TinyMCE_and_Tiptap.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/7BBFYSN5SWgsjNdMkF00H9/af69b9548a29e6acbd9fff4d3124cf8c/Comparing_Implementing_Collaboration__TinyMCE_and_Tiptap.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/7BBFYSN5SWgsjNdMkF00H9/af69b9548a29e6acbd9fff4d3124cf8c/Comparing_Implementing_Collaboration__TinyMCE_and_Tiptap.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/7BBFYSN5SWgsjNdMkF00H9/af69b9548a29e6acbd9fff4d3124cf8c/Comparing_Implementing_Collaboration__TinyMCE_and_Tiptap.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/7BBFYSN5SWgsjNdMkF00H9/af69b9548a29e6acbd9fff4d3124cf8c/Comparing_Implementing_Collaboration__TinyMCE_and_Tiptap.png?w=1109&h=623&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/7BBFYSN5SWgsjNdMkF00H9/af69b9548a29e6acbd9fff4d3124cf8c/Comparing_Implementing_Collaboration__TinyMCE_and_Tiptap.png?w=1478&h=830&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/7BBFYSN5SWgsjNdMkF00H9/af69b9548a29e6acbd9fff4d3124cf8c/Comparing_Implementing_Collaboration__TinyMCE_and_Tiptap.png?w=1925&h=1081&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Coco Poley","slug":"coco-poley"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Collaboration Features’s Implementation: TinyMCE and Tiptap Compared | TinyMCE"},"metaDescription":{"metaDescription":"Compare the level of effort to integrate collaboration into Tiptap and TinyMCE, and how much coding and configuration is necessary."}},{"title":"Why TinyMCE Is the Right Rich Text Editor for CMS Projects","slug":"why-tinymce-is-the-right-rich-text-editor-for-cms-projects","featured":true,"lastUpdated":"Oct 2nd, 2025","description":{"description":"<p>Find out why TinyMCE is the perfect rich text editor for CMSs, from collaboration features to content conversion to media optimization and more.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Find out why TinyMCE is the perfect rich text editor for CMSs, from collaboration features to content conversion to media optimization and more."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Why TinyMCE is the right solution for a CMS","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABxVBMVEUKE1QACE8ACFAACFEOFVIIFlQTHFggHlgAElUJE1QDDVEABk8AB08AClAIFlUVG1YHFlYOGVYBD1MAElZAKlZoPU0UHFcABE8AAE8AAk8AAU8AAU4AAk4AClImHlVZMk0eIVoWJFwCGlgEHVoiJ1wwKFcKHFg2Jk1bPEo/JkxAIE1SJ003FU5UHlBaH1FUHVAABlAAElQeGlYEG1oIHFhNJ0w4IE4AG1kNF1QAAE5kREWkbDWbWjh6PEGSQEKgP0qpOlGjNVKTLlAAAEkHFlUAFVcHG1hSL0tAKE0AGVgDD1IPF1MAAEhSVHB3eImGg5BvboKHiJaDfo16eYqFhZSIh5Z5eosmK1kIElMdGlQRH1kIGlcXIVoRGFQAAEZaW3R1dohvcYR7fY2XmaRnan9TVnFcX3ZcXnZXWXMTHFQyIVJrP0sADlQBEVQQGVUBCVBWV3F6eotra4B6e4yKi5hOT2wAAEQAAEcAEFMaIVcnIVMmIVc8JlQSG1UKE1IAAE0AAEsABE4AFVNdL05ZK04AB1A7JVNhOk8IElQCDFEAA04HF1RJL05FLE4GE1ILFlMCDlEFD1ILFFQHFFIAD1MHE1IABU9as10IAAAAkklEQVQI12NkYGBkgAJGxv9MQAIIOIH4K1iMhxEOxBkhipABCyM/Ixq4aMBoieB944apFEYIigDxeyFGxuUsQihaz5oACQ5GHxUo/9D9BAijmYHFmPEMg/ZzpZ0enoyM/5gZGY8cYGBg4uS0u7B0H+PlBk4gqOXgcP024T9LxaQqhq8MDQzcHIxPZDk5Gr8AfQgAtA4dxOtwuy8AAAAASUVORK5CYII=","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/1TAGispnUU2xwtPVjoopsx/927256ed2a0f6bbfa52ea341e2faacfa/-TinyMCE--Blog-_-_-Why_TinyMCE_is_the_right_solution_for_a_CMS-.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/1TAGispnUU2xwtPVjoopsx/927256ed2a0f6bbfa52ea341e2faacfa/-TinyMCE--Blog-_-_-Why_TinyMCE_is_the_right_solution_for_a_CMS-.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1TAGispnUU2xwtPVjoopsx/927256ed2a0f6bbfa52ea341e2faacfa/-TinyMCE--Blog-_-_-Why_TinyMCE_is_the_right_solution_for_a_CMS-.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1TAGispnUU2xwtPVjoopsx/927256ed2a0f6bbfa52ea341e2faacfa/-TinyMCE--Blog-_-_-Why_TinyMCE_is_the_right_solution_for_a_CMS-.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1TAGispnUU2xwtPVjoopsx/927256ed2a0f6bbfa52ea341e2faacfa/-TinyMCE--Blog-_-_-Why_TinyMCE_is_the_right_solution_for_a_CMS-.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/1TAGispnUU2xwtPVjoopsx/927256ed2a0f6bbfa52ea341e2faacfa/-TinyMCE--Blog-_-_-Why_TinyMCE_is_the_right_solution_for_a_CMS-.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/1TAGispnUU2xwtPVjoopsx/927256ed2a0f6bbfa52ea341e2faacfa/-TinyMCE--Blog-_-_-Why_TinyMCE_is_the_right_solution_for_a_CMS-.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/1TAGispnUU2xwtPVjoopsx/927256ed2a0f6bbfa52ea341e2faacfa/-TinyMCE--Blog-_-_-Why_TinyMCE_is_the_right_solution_for_a_CMS-.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/1TAGispnUU2xwtPVjoopsx/927256ed2a0f6bbfa52ea341e2faacfa/-TinyMCE--Blog-_-_-Why_TinyMCE_is_the_right_solution_for_a_CMS-.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1TAGispnUU2xwtPVjoopsx/927256ed2a0f6bbfa52ea341e2faacfa/-TinyMCE--Blog-_-_-Why_TinyMCE_is_the_right_solution_for_a_CMS-.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1TAGispnUU2xwtPVjoopsx/927256ed2a0f6bbfa52ea341e2faacfa/-TinyMCE--Blog-_-_-Why_TinyMCE_is_the_right_solution_for_a_CMS-.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1TAGispnUU2xwtPVjoopsx/927256ed2a0f6bbfa52ea341e2faacfa/-TinyMCE--Blog-_-_-Why_TinyMCE_is_the_right_solution_for_a_CMS-.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/1TAGispnUU2xwtPVjoopsx/927256ed2a0f6bbfa52ea341e2faacfa/-TinyMCE--Blog-_-_-Why_TinyMCE_is_the_right_solution_for_a_CMS-.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/1TAGispnUU2xwtPVjoopsx/927256ed2a0f6bbfa52ea341e2faacfa/-TinyMCE--Blog-_-_-Why_TinyMCE_is_the_right_solution_for_a_CMS-.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Coco Poley","slug":"coco-poley"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Why TinyMCE Is the Right Rich Text Editor for CMS Projects | TinyMCE"},"metaDescription":{"metaDescription":"Find out why TinyMCE is the perfect rich text editor for CMSs, from collaboration features to content conversion to media optimization and more."}},{"title":"Full Page HTML Returns: Complete HTML Document Editing in TinyMCE 8.1","slug":"full-page-html-returns-tinymce-8-1","featured":true,"lastUpdated":"Sep 30th, 2025","description":{"description":"<p>TinyMCE 8.1 brings back Full Page HTML&mdash;secure, modern, and built for complete HTML document editing for emails, reports, and CMS templates.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"TinyMCE 8.1 brings back Full Page HTML—secure, modern, and built for complete HTML document editing for emails, reports, and CMS templates."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"A screen shows an abstract of an editor that includes HTML markup, including the ability to edit both the head elements and the body element in a single screen.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABoVBMVEUJElMKE1QACE8AB04ABU4ABE4ABk4JE1QEDlEAB08AAk4AAU4ABE8ZI14tM2kkKmUtMmgrMWgqL2gzOGw1Om0yOGsgJl8AA04ABk8OE1I6IVE8LV85Qnk4QHg+RXs+RXpDSn47QnE4P2U2PmUoL1cHD00ACFAfHlZZNE1QNltVYJJkb55rdqVsd6Zsd6dkb6BKU4A9SXRBTXs4RG4RGVAACFEBClAMF1UAEFIhK2VYYpRocqFteKdoc6NibZ5KUn0tNlYsNFIME0wCClIBCVACClAMFFMjKmVdZ5hwe6pyfqxzfq1zfqxxfKlueaZMVH4sN2AuOFwpMEwKEksBCVEBCk8ME1IhKGNGToNQWYtPWIpPWIlPWIxNWJxNWJ1ATI4uO24xOl4rM04IEEoAB1ABCU8LE1IUG1kaIF4WHF0WHFwVGlgXJXlgcNpzgeRte98uPogtNEkjKkEHD0kABlAFD1EMFFIIEVEGD1AEDlAEDFAEDE8DCk0AClIXJHIcKHUcKG8cIksRFDQOEzcFDUoLFFQAAkoAAEIAAD4AAEEAAEozpH9vAAAAfElEQVQIHQXBsU3DUABAwXeOwaKJvQgTsBALpCMNiHUYgZKOXVCojCCfOxGVqjH9NoaFv67TqG7yM8btGKalA4jgsje3AkYTuNS8HAGuB7B95u4efB+D4H1u9fHACsBbc5t9AwA1t2kDAKUTAOB17POynavyAs+PX52f/gGRyR5Wla7YcwAAAABJRU5ErkJggg==","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/4ymgkoblToFt0GvJ32Hwku/3a21f8f4ebc8a5ae86a2e82b7e59fa52/New_Full_Page_release.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/4ymgkoblToFt0GvJ32Hwku/3a21f8f4ebc8a5ae86a2e82b7e59fa52/New_Full_Page_release.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4ymgkoblToFt0GvJ32Hwku/3a21f8f4ebc8a5ae86a2e82b7e59fa52/New_Full_Page_release.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4ymgkoblToFt0GvJ32Hwku/3a21f8f4ebc8a5ae86a2e82b7e59fa52/New_Full_Page_release.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4ymgkoblToFt0GvJ32Hwku/3a21f8f4ebc8a5ae86a2e82b7e59fa52/New_Full_Page_release.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4ymgkoblToFt0GvJ32Hwku/3a21f8f4ebc8a5ae86a2e82b7e59fa52/New_Full_Page_release.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4ymgkoblToFt0GvJ32Hwku/3a21f8f4ebc8a5ae86a2e82b7e59fa52/New_Full_Page_release.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/4ymgkoblToFt0GvJ32Hwku/3a21f8f4ebc8a5ae86a2e82b7e59fa52/New_Full_Page_release.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/4ymgkoblToFt0GvJ32Hwku/3a21f8f4ebc8a5ae86a2e82b7e59fa52/New_Full_Page_release.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4ymgkoblToFt0GvJ32Hwku/3a21f8f4ebc8a5ae86a2e82b7e59fa52/New_Full_Page_release.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4ymgkoblToFt0GvJ32Hwku/3a21f8f4ebc8a5ae86a2e82b7e59fa52/New_Full_Page_release.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4ymgkoblToFt0GvJ32Hwku/3a21f8f4ebc8a5ae86a2e82b7e59fa52/New_Full_Page_release.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4ymgkoblToFt0GvJ32Hwku/3a21f8f4ebc8a5ae86a2e82b7e59fa52/New_Full_Page_release.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4ymgkoblToFt0GvJ32Hwku/3a21f8f4ebc8a5ae86a2e82b7e59fa52/New_Full_Page_release.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Coco Poley","slug":"coco-poley"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Full Page HTML Returns in TinyMCE 8.1 | TinyMCE"},"metaDescription":{"metaDescription":"TinyMCE 8.1 brings back Full Page HTML—secure, modern, and built for complete HTML document editing for emails, reports, and CMS templates."}},{"title":"Simplifying User Identity Management Across TinyMCE with User Lookup API","slug":"user-identity-management-with-user-lookup-api","featured":false,"lastUpdated":"Aug 20th, 2025","description":{"description":"<p><span style=\"font-size: 11pt; font-family: Arial, sans-serif; white-space-collapse: preserve;\">Discover how the TinyMCE User Lookup API unifies user identity management across Comments, Revision History, and Suggested Edits.</span></p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"span","properties":{"style":"font-size: 11pt; font-family: Arial, sans-serif; white-space-collapse: preserve;"},"children":[{"type":"text","value":"Discover how the TinyMCE User Lookup API unifies user identity management across Comments, Revision History, and Suggested Edits."}]}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Simplifying User Identity Management Across TinyMCE with User Lookup API","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABnlBMVEUJElMKE1QACE8ABk4ABU4ABE4ACU8AB08GEVMHEVMJE1QEDlEAB04ABk8AA04HD1EEDVAEDlABEFIAGFcAEVQEEVMABE0eJF4tM2kkKmYrMWksMWkqMGgzOWw1O242PG4eJl4aGVVdN1U6K1cAA1ABCU8KElIIEFElK2U8Q3k7Qnk+Rns+RXs/RntBSHw8QnYyN2kvNGcbIlgZFEprQElAL1YAA1EJE1MAC1IkLGZcZphteahteKdmcaFYYpRHUIo4R6ZGVK5AT6o1RqYSLH0ADk8DDVEJG1koIFkoM2pcaJlueahsd6ZibJ1IUpBZa9Nufd1hcNVXaNMeMpIAAEYABU0ADFESI11wO0tIO2JXZ5hsd6VncqFmcKBha5xWX5NXYI+Yps2LmL8aImAAAE0AA00ABk0MGVc1KVcwOGpMXJVQXJVTYJlUYZtSX5hFT4c2PXU4P3VeaJJWYIsdI18AAEsACE4AB1AABlESHlwxPHMwO3M0P3c5RHw1QHcoMWoZIF4YH14KEloPFlsSGVgAAk0AAEkAAEgAAU0LFFQSppsqAAAAhklEQVQIHQXBsU0DMQAF0P98diROLhzooWQQFmEUoMsi9GzARugogtCFmPeEEElynamB1aXth/k7k5X9AEq73GEWcF2gtnuAANDrI0gAfFqewDaPtgGoGfD9gFvAe60fzzgCsI1zTQYAeC17rPy8icyvkeXvpew35ziV0mttrdWl915KOfkHr1UfAAWQlAgAAAAASUVORK5CYII=","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/6JIHk6uxQAQymmfo9HEK5P/dfc3abab083915ae004a729c16c9132b/Simplifying_User_Identity_Management_Across_TinyMCE_with_User_Lookup_API.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6JIHk6uxQAQymmfo9HEK5P/dfc3abab083915ae004a729c16c9132b/Simplifying_User_Identity_Management_Across_TinyMCE_with_User_Lookup_API.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6JIHk6uxQAQymmfo9HEK5P/dfc3abab083915ae004a729c16c9132b/Simplifying_User_Identity_Management_Across_TinyMCE_with_User_Lookup_API.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6JIHk6uxQAQymmfo9HEK5P/dfc3abab083915ae004a729c16c9132b/Simplifying_User_Identity_Management_Across_TinyMCE_with_User_Lookup_API.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6JIHk6uxQAQymmfo9HEK5P/dfc3abab083915ae004a729c16c9132b/Simplifying_User_Identity_Management_Across_TinyMCE_with_User_Lookup_API.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6JIHk6uxQAQymmfo9HEK5P/dfc3abab083915ae004a729c16c9132b/Simplifying_User_Identity_Management_Across_TinyMCE_with_User_Lookup_API.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6JIHk6uxQAQymmfo9HEK5P/dfc3abab083915ae004a729c16c9132b/Simplifying_User_Identity_Management_Across_TinyMCE_with_User_Lookup_API.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6JIHk6uxQAQymmfo9HEK5P/dfc3abab083915ae004a729c16c9132b/Simplifying_User_Identity_Management_Across_TinyMCE_with_User_Lookup_API.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6JIHk6uxQAQymmfo9HEK5P/dfc3abab083915ae004a729c16c9132b/Simplifying_User_Identity_Management_Across_TinyMCE_with_User_Lookup_API.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6JIHk6uxQAQymmfo9HEK5P/dfc3abab083915ae004a729c16c9132b/Simplifying_User_Identity_Management_Across_TinyMCE_with_User_Lookup_API.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6JIHk6uxQAQymmfo9HEK5P/dfc3abab083915ae004a729c16c9132b/Simplifying_User_Identity_Management_Across_TinyMCE_with_User_Lookup_API.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6JIHk6uxQAQymmfo9HEK5P/dfc3abab083915ae004a729c16c9132b/Simplifying_User_Identity_Management_Across_TinyMCE_with_User_Lookup_API.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6JIHk6uxQAQymmfo9HEK5P/dfc3abab083915ae004a729c16c9132b/Simplifying_User_Identity_Management_Across_TinyMCE_with_User_Lookup_API.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6JIHk6uxQAQymmfo9HEK5P/dfc3abab083915ae004a729c16c9132b/Simplifying_User_Identity_Management_Across_TinyMCE_with_User_Lookup_API.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Benjamin Chau","slug":"benjamin-chau"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Simplifying User Identity Management Across TinyMCE with User Lookup API | TinyMCE"},"metaDescription":{"metaDescription":"Discover how the TinyMCE User Lookup API unifies user identity management across Comments, Revision History, and Suggested Edits."}},{"title":"Improving the Developer Experience with TinyMCE Developer Center","slug":"improving-developer-experience-with-tinymce-developer-center","featured":true,"lastUpdated":"Aug 13th, 2025","description":{"description":"<p>Explore how TinyMCE is leveling up its developer experience in 2025 with the launch of the new Developer Center, tailored for real-world use cases.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Explore how TinyMCE is leveling up its developer experience in 2025 with the launch of the new Developer Center, tailored for real-world use cases."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"TinyMCE Developer Center","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABiVBMVEUKE1QAB08ACE8ABE4ABU4ABk4JE1QJElMCDVEABU8ABk8ABFEAAFIAA1EABE8AAE0AAU4DDFEJElQAAk8AAE8AA08ACFMrMmBDR2owNmIAD1UxNF8zNmAhJlgZE02DWUGGVEKNTUWdTUiYP1BjIlAAAE4AAFRhZHyenqhvcIUAAFZ6e42jpLA1OGAACk9nUVp5TEmDS0t7QlJ2MFBPI1MAEFYnLl55eos1OWIAEVg2OWBcXnYACFEAAEozNl6cnqmWmqaYnKieoq2iprCXmqU5PGAAAEwACVIAF1kAHF4AF1oAFFgAE1kAB1gCFFYABVAAAEscIFR1dohub4J0dYdwcoRYWnM6PWEeH1dUM1YlJ10AHV9gYnqAgZEqMF8nKViHiJaVlaGXmKORkp4rLVkAAEgnJFhlQVAtMmMAKWZ/gJGmpq8+QmcAAFEAAEkAAEcAAEYAAk4DFFUAHlwAIF8AHV4pMWE7P2cOGlcABlACDFEACU8ACFAAC1IADFIABlMEDVELFFQAB07MiIrRAAAAlklEQVQIHWXBMQ7BUADH4f/v9bVEmmoiYpYuEmdwBpPdBRzAWLvVJQw2i3PYRNKEwYg0Bonn5dXm+5BAgTMScgZsYpDQC6mNJ7wsRh61UhrP2iYdgvyW03g4+84J7oMuDQcT/uxtj8a2uEwJdh+rjKC4khHMN/Y4HEFdjU8o5cdWs01fOh/QEnBmvWhFUolnAlZxFNlSX1WpHy8jzz5nAAAAAElFTkSuQmCC","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/4J9rhe3agXZVgj760rgCiZ/42dcc015dbe61b22457e163f392689ad/TinyMCE_Developer__Center.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/4J9rhe3agXZVgj760rgCiZ/42dcc015dbe61b22457e163f392689ad/TinyMCE_Developer__Center.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4J9rhe3agXZVgj760rgCiZ/42dcc015dbe61b22457e163f392689ad/TinyMCE_Developer__Center.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4J9rhe3agXZVgj760rgCiZ/42dcc015dbe61b22457e163f392689ad/TinyMCE_Developer__Center.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4J9rhe3agXZVgj760rgCiZ/42dcc015dbe61b22457e163f392689ad/TinyMCE_Developer__Center.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4J9rhe3agXZVgj760rgCiZ/42dcc015dbe61b22457e163f392689ad/TinyMCE_Developer__Center.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4J9rhe3agXZVgj760rgCiZ/42dcc015dbe61b22457e163f392689ad/TinyMCE_Developer__Center.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/4J9rhe3agXZVgj760rgCiZ/42dcc015dbe61b22457e163f392689ad/TinyMCE_Developer__Center.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/4J9rhe3agXZVgj760rgCiZ/42dcc015dbe61b22457e163f392689ad/TinyMCE_Developer__Center.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4J9rhe3agXZVgj760rgCiZ/42dcc015dbe61b22457e163f392689ad/TinyMCE_Developer__Center.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4J9rhe3agXZVgj760rgCiZ/42dcc015dbe61b22457e163f392689ad/TinyMCE_Developer__Center.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4J9rhe3agXZVgj760rgCiZ/42dcc015dbe61b22457e163f392689ad/TinyMCE_Developer__Center.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4J9rhe3agXZVgj760rgCiZ/42dcc015dbe61b22457e163f392689ad/TinyMCE_Developer__Center.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4J9rhe3agXZVgj760rgCiZ/42dcc015dbe61b22457e163f392689ad/TinyMCE_Developer__Center.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Frédéric Harper","slug":"frederic-harper"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Improving the Developer Experience with TinyMCE Developer Center | TinyMCE"},"metaDescription":{"metaDescription":"Explore how TinyMCE is leveling up its developer experience in 2025 with the launch of the new Developer Center, tailored for real-world use cases."}},{"title":"Tell Us What You Think: The 2025 TinyMCE Developer Survey Is Now Open","slug":"tell-us-what-you-think-the-2025-tinymce-developer-survey-is-now-open","featured":true,"lastUpdated":"Jul 23rd, 2025","description":{"description":"<p>The 2025 TinyMCE Developer Survey is open! Share how you build with rich text editors and help shape the future of editing experiences.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The 2025 TinyMCE Developer Survey is open! Share how you build with rich text editors and help shape the future of editing experiences."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"2025 Rich Text Editors Developer Survey now open until August 5th, 2025","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABjFBMVEUJElMIElMKE1QAAE4AB08AAEoAAEgAAEwAB04AAEkAAEsLFFQJE1QKE1QACE8AB08ABk4ABU4IElQCDFEABE4ABk8DDFANFFIME1IMFFIOFlQAAEsAAEcAAEwHD1ELFlUBElUCElUED1IGDlEPF1NCRWZyc4ZwcoU0OV8AA08ABE8AC1ALE1MPHFkEH10AHGAAHl8BGVkADFIOFVNcWHCPi5eIh5RMR2URC04VDk8aEU8ZEE4GEFEEFFQAHl4xKlRnSUpaOU0CIV4AFFcOFlNjK0KNPjGJOzOSRTeTSDx9QEaNTEiKS0mST0hIKVAAD1UAIWJTOlKMU0WCQ0oSJmAAGFpVVG+IhZN9eoqIg5GNh5RUUmwfAUsfEU4zGk4ZFFEAElQAH14eH1djM1BCIVIDIl4FGFgRF1Q8P2NmaH1cXnZrboJnan84PGEBD1IHEVIAEVUAH10AI2IAIV8RIVwLFFQIEFEAAEYIEVIIEFIGElQFFFYHFFUPF1QDDFEEDFALElIID1EGD1IMFFSOpqeZAAAADXRSTlP+/v7+/v7+/v7+/v7+JG0F5gAAAI9JREFUCB1dwU0OwVAYhtH3ufn0NkWaNrEUS7AKQ1uwDyxAjMwlNmABprZBwqB/iYvSpHEOGqMOSIKrESEqtTwg4czFiNAEST6m5cwlgCZIdGSkwCOlR0YG5PTczFzGn/xk5HwcRprxI6uOaL6nuCs5T3nbSO65KMttWdYh+MsuGphp6W1Y1Ppa+WYtBVG8AOOaIQiqqypMAAAAAElFTkSuQmCC","aspectRatio":1.7833333333333334,"src":"//images.ctfassets.net/s600jj41gsex/5qdYVJWkent9FOyuyplJgg/20d4adcbbb491871ef5405de711f9484/_BLOG_HEADER__Survey_Launch_Blog_Post_-_Tiny.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/5qdYVJWkent9FOyuyplJgg/20d4adcbbb491871ef5405de711f9484/_BLOG_HEADER__Survey_Launch_Blog_Post_-_Tiny.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5qdYVJWkent9FOyuyplJgg/20d4adcbbb491871ef5405de711f9484/_BLOG_HEADER__Survey_Launch_Blog_Post_-_Tiny.png?w=370&h=207&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5qdYVJWkent9FOyuyplJgg/20d4adcbbb491871ef5405de711f9484/_BLOG_HEADER__Survey_Launch_Blog_Post_-_Tiny.png?w=739&h=414&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5qdYVJWkent9FOyuyplJgg/20d4adcbbb491871ef5405de711f9484/_BLOG_HEADER__Survey_Launch_Blog_Post_-_Tiny.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/5qdYVJWkent9FOyuyplJgg/20d4adcbbb491871ef5405de711f9484/_BLOG_HEADER__Survey_Launch_Blog_Post_-_Tiny.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/5qdYVJWkent9FOyuyplJgg/20d4adcbbb491871ef5405de711f9484/_BLOG_HEADER__Survey_Launch_Blog_Post_-_Tiny.png?w=1926&h=1080&q=50&fit=scale 1926w","srcWebp":"//images.ctfassets.net/s600jj41gsex/5qdYVJWkent9FOyuyplJgg/20d4adcbbb491871ef5405de711f9484/_BLOG_HEADER__Survey_Launch_Blog_Post_-_Tiny.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/5qdYVJWkent9FOyuyplJgg/20d4adcbbb491871ef5405de711f9484/_BLOG_HEADER__Survey_Launch_Blog_Post_-_Tiny.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5qdYVJWkent9FOyuyplJgg/20d4adcbbb491871ef5405de711f9484/_BLOG_HEADER__Survey_Launch_Blog_Post_-_Tiny.png?w=370&h=207&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5qdYVJWkent9FOyuyplJgg/20d4adcbbb491871ef5405de711f9484/_BLOG_HEADER__Survey_Launch_Blog_Post_-_Tiny.png?w=739&h=414&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5qdYVJWkent9FOyuyplJgg/20d4adcbbb491871ef5405de711f9484/_BLOG_HEADER__Survey_Launch_Blog_Post_-_Tiny.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/5qdYVJWkent9FOyuyplJgg/20d4adcbbb491871ef5405de711f9484/_BLOG_HEADER__Survey_Launch_Blog_Post_-_Tiny.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/5qdYVJWkent9FOyuyplJgg/20d4adcbbb491871ef5405de711f9484/_BLOG_HEADER__Survey_Launch_Blog_Post_-_Tiny.png?w=1926&h=1080&q=50&fm=webp&fit=scale 1926w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Coco Poley","slug":"coco-poley"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"2025 TinyMCE Developer Survey - Share Your Feedback Today | TinyMCE"},"metaDescription":{"metaDescription":"The 2025 TinyMCE Developer Survey is open! Share how you build with rich text editors and help shape the future of editing experiences."}},{"title":"Text editor developers 2023: Survey says RTEs are core component of everything","slug":"text-editor-developers","featured":false,"lastUpdated":"Oct 3rd, 2023","description":{"description":"<p>Insights about developers who work with rich text editors: their experience, preferred programming languages and comparison to the previous year</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Insights about developers who work with rich text editors: their experience, preferred programming languages and comparison to the previous year"}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Survey results represented by charts and percentages with several media images involved.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABDlBMVEV28dt28tt18ttz8tt08tty8ttw8ttx8ttz8txy8tyN5+B379xt89pu8tpv8tt18tx08duT8N6f7t6X8eB+7dKD6tKp3t6d596X6uCa6uGW6d+F69tu89uJ7dR+79hz8dvA8ebY7OfJ8eh+6NGh49Po4+Ty6fL36Pr56f316fnM09+H4tet48+M7dR18duB6N6yruOv4dD59/f8+fnr8fnM1tve4+ncwvLdwu6Xz+Fw89py89t86t7Nwbbe3rLq8vL7+/vV2eXPt43Hwbu/y+WQ1N1249t08tpz89x28deI79qJ49ak49eh2c+Wz7uj182d4NNt79Z18dp08txv8dpt8dpu8ttv891x89x28tzui5r6AAAAdklEQVQIHVXBOxLBABRA0XuTjBRINpAtWIBeawFWqVFr9dS0ZtLRKIw8iU/COfIiBD3p2GoICDqSpH7dHqP8GpAlhb2pygUySv/UBunsVB2rfDCtQUjm/jgfggRiN+ltx/sAAYvFZmlrfW8YqGVrpdKSD4Hg7Ql/oBwNQMUUyQAAAABJRU5ErkJggg==","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/7Gxv5uyBVNHWaO4HvR4Gj/f0671b79dd25b449a71931c094fee426/text-editor-developers-in-2023_-77-say-a-rich-text-editor-is-critical-to-their-app-2023091920381562.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/7Gxv5uyBVNHWaO4HvR4Gj/f0671b79dd25b449a71931c094fee426/text-editor-developers-in-2023_-77-say-a-rich-text-editor-is-critical-to-their-app-2023091920381562.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/7Gxv5uyBVNHWaO4HvR4Gj/f0671b79dd25b449a71931c094fee426/text-editor-developers-in-2023_-77-say-a-rich-text-editor-is-critical-to-their-app-2023091920381562.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/7Gxv5uyBVNHWaO4HvR4Gj/f0671b79dd25b449a71931c094fee426/text-editor-developers-in-2023_-77-say-a-rich-text-editor-is-critical-to-their-app-2023091920381562.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/7Gxv5uyBVNHWaO4HvR4Gj/f0671b79dd25b449a71931c094fee426/text-editor-developers-in-2023_-77-say-a-rich-text-editor-is-critical-to-their-app-2023091920381562.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/7Gxv5uyBVNHWaO4HvR4Gj/f0671b79dd25b449a71931c094fee426/text-editor-developers-in-2023_-77-say-a-rich-text-editor-is-critical-to-their-app-2023091920381562.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/7Gxv5uyBVNHWaO4HvR4Gj/f0671b79dd25b449a71931c094fee426/text-editor-developers-in-2023_-77-say-a-rich-text-editor-is-critical-to-their-app-2023091920381562.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/7Gxv5uyBVNHWaO4HvR4Gj/f0671b79dd25b449a71931c094fee426/text-editor-developers-in-2023_-77-say-a-rich-text-editor-is-critical-to-their-app-2023091920381562.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/7Gxv5uyBVNHWaO4HvR4Gj/f0671b79dd25b449a71931c094fee426/text-editor-developers-in-2023_-77-say-a-rich-text-editor-is-critical-to-their-app-2023091920381562.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/7Gxv5uyBVNHWaO4HvR4Gj/f0671b79dd25b449a71931c094fee426/text-editor-developers-in-2023_-77-say-a-rich-text-editor-is-critical-to-their-app-2023091920381562.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/7Gxv5uyBVNHWaO4HvR4Gj/f0671b79dd25b449a71931c094fee426/text-editor-developers-in-2023_-77-say-a-rich-text-editor-is-critical-to-their-app-2023091920381562.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/7Gxv5uyBVNHWaO4HvR4Gj/f0671b79dd25b449a71931c094fee426/text-editor-developers-in-2023_-77-say-a-rich-text-editor-is-critical-to-their-app-2023091920381562.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/7Gxv5uyBVNHWaO4HvR4Gj/f0671b79dd25b449a71931c094fee426/text-editor-developers-in-2023_-77-say-a-rich-text-editor-is-critical-to-their-app-2023091920381562.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/7Gxv5uyBVNHWaO4HvR4Gj/f0671b79dd25b449a71931c094fee426/text-editor-developers-in-2023_-77-say-a-rich-text-editor-is-critical-to-their-app-2023091920381562.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Di Mace","slug":"di-mace"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Text editor developers in 2023 | TinyMCE"},"metaDescription":{"metaDescription":"The freshest insights about developers who work with rich text editors: their experience, preferred programming languages as well noticeable changes in comparison to previous year."}},{"title":"Looking for a rich text editor? Start with our Rich Text Editor 2023 Survey","slug":"rte-motivation-expectations","featured":false,"lastUpdated":"Nov 8th, 2023","description":{"description":"<p>Discover glimpses of the future through the rich text editor survey results, with trends showing more on&nbsp; users migrating, new technologies being employed, and more on AI</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Discover glimpses of the future through the rich text editor survey results, with trends showing more on  users migrating, new technologies being employed, and more on AI"}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"charts and documents under investigation representing the survey results analysis","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABBVBMVEXw3j3w3j3w3j3w3jzx3jzx3zzx3j3w3jvx3jLx3i/w3jbu3T3v3j7x3zvx3jHw4G3x4F/i2m7O1mna2V/y3jXt2zLw3znx3zbx3jbw3jnw3A/v6LT7+O7l5sTF1IrQ1Xfv3Ufby2/tzivq3k7o3Vrx3TTf2lKz3cHr9/z5+P3p7d/X13vn2GHNp7HswHTm7dDg4qfx3iPx3jvy3jHN0nO32bHr7M/29vj39vPs3GTs2S/txHTx1XD08+jq46Dx3iLp2EbOw2Pr2zfw3S3v4pHx683p2mHt2i/s2y7s3EXv4ozw30zu3EDt20Hx3zfw3jPw3SDv3j/x3znu3D7w3i3x3jnx3z0vNOPWAAAAAnRSTlP9/o2EjdMAAAB2SURBVAgdXcHLDYJAFIbR77/eMREfOxuwBHrBbo0VkNgH7NywwLlORiPEc4T4Fy5RSAIxU0kCkqqJyEBIAmv0M2bCKc5aMGYk+euitUc4oJNWnuDA7qhFP4DBPB2q2/7eNP0QgMy2KSVvu9avyTdmpoIPBV/xBtTiGuFFO362AAAAAElFTkSuQmCC","aspectRatio":1.7816836262719704,"src":"//images.ctfassets.net/s600jj41gsex/35JZiiZ73QCRDt3soUGowG/e2085e9c0acb478d16752f45569deca0/img-looking-for-a-rich-text-editor_-see-the-future-in-2023-rich-text-editor-developer-survey-report-2023110621420531.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/35JZiiZ73QCRDt3soUGowG/e2085e9c0acb478d16752f45569deca0/img-looking-for-a-rich-text-editor_-see-the-future-in-2023-rich-text-editor-developer-survey-report-2023110621420531.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/35JZiiZ73QCRDt3soUGowG/e2085e9c0acb478d16752f45569deca0/img-looking-for-a-rich-text-editor_-see-the-future-in-2023-rich-text-editor-developer-survey-report-2023110621420531.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/35JZiiZ73QCRDt3soUGowG/e2085e9c0acb478d16752f45569deca0/img-looking-for-a-rich-text-editor_-see-the-future-in-2023-rich-text-editor-developer-survey-report-2023110621420531.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/35JZiiZ73QCRDt3soUGowG/e2085e9c0acb478d16752f45569deca0/img-looking-for-a-rich-text-editor_-see-the-future-in-2023-rich-text-editor-developer-survey-report-2023110621420531.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/35JZiiZ73QCRDt3soUGowG/e2085e9c0acb478d16752f45569deca0/img-looking-for-a-rich-text-editor_-see-the-future-in-2023-rich-text-editor-developer-survey-report-2023110621420531.png?w=1478&h=830&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/35JZiiZ73QCRDt3soUGowG/e2085e9c0acb478d16752f45569deca0/img-looking-for-a-rich-text-editor_-see-the-future-in-2023-rich-text-editor-developer-survey-report-2023110621420531.png?w=1926&h=1081&q=50&fit=scale 1926w","srcWebp":"//images.ctfassets.net/s600jj41gsex/35JZiiZ73QCRDt3soUGowG/e2085e9c0acb478d16752f45569deca0/img-looking-for-a-rich-text-editor_-see-the-future-in-2023-rich-text-editor-developer-survey-report-2023110621420531.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/35JZiiZ73QCRDt3soUGowG/e2085e9c0acb478d16752f45569deca0/img-looking-for-a-rich-text-editor_-see-the-future-in-2023-rich-text-editor-developer-survey-report-2023110621420531.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/35JZiiZ73QCRDt3soUGowG/e2085e9c0acb478d16752f45569deca0/img-looking-for-a-rich-text-editor_-see-the-future-in-2023-rich-text-editor-developer-survey-report-2023110621420531.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/35JZiiZ73QCRDt3soUGowG/e2085e9c0acb478d16752f45569deca0/img-looking-for-a-rich-text-editor_-see-the-future-in-2023-rich-text-editor-developer-survey-report-2023110621420531.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/35JZiiZ73QCRDt3soUGowG/e2085e9c0acb478d16752f45569deca0/img-looking-for-a-rich-text-editor_-see-the-future-in-2023-rich-text-editor-developer-survey-report-2023110621420531.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/35JZiiZ73QCRDt3soUGowG/e2085e9c0acb478d16752f45569deca0/img-looking-for-a-rich-text-editor_-see-the-future-in-2023-rich-text-editor-developer-survey-report-2023110621420531.png?w=1478&h=830&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/35JZiiZ73QCRDt3soUGowG/e2085e9c0acb478d16752f45569deca0/img-looking-for-a-rich-text-editor_-see-the-future-in-2023-rich-text-editor-developer-survey-report-2023110621420531.png?w=1926&h=1081&q=50&fm=webp&fit=scale 1926w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Di Mace","slug":"di-mace"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Motivation behind choosing rich text editors | TinyMCE"},"metaDescription":{"metaDescription":"We cover main motivations and expectations that lay behind the choice of building a rich text editor or using a third-party tool."}},{"title":"Working with rich text editors in 2023: Industry overview and challenges","slug":"rich-text-editors-industry-and-challenges","featured":false,"lastUpdated":"Nov 1st, 2023","description":{"description":"<p>Insights from developers who work with rich text editors on the industry, editing experiences, main challenges and the most important features.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Insights from developers who work with rich text editors on the industry, editing experiences, main challenges and the most important features."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"The words industry overview and challenges with different charts and icons around it, including a happy face and pen","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAA6lBMVEWYovyYovyYov2YovyYov2Xov2Xof2VoP6Xof6an/2XoP2XoP6WoP2YofyXofzIwtrHwtmWov2WpPjJqtadreGRpPmmrOWgpu+Zov2Zo/2Zovvdz8LXzcuVo/ydrO7M5+Dl7szY7NbP6+Ld69Wjr/WapP2fpfmMs+5ou+eno9rx8Ozw8PDw7+/9/Pn///+7u/adn/mao/2Vpvybo/jkoe388/b5+vf7+vj///7U1fWRsfiSrfuZof2Zof6pmtzW1dva2+La2uLU1uLX2eymrvl2vPeFuPmRnfeMl/CMlvGLlvCRm/aVofuYov4vTVW2AAAAA3RSTlP9/v6XUDd1AAAAdklEQVQIHQXBK05DYRhAwTn9r+FRWYEAxUIIjhWjwXQB3UITErCkdXzMZAEA+KsFaGBgwy5jV9W1Qa1u6ndfVfWNDfe1r6rOjz9DLdtTVVV1GmpxeKjqelt1ZGPy9Vx1V3Vp1BrptdLHy+dlqAW84R2YBAID5h84yxxJ2KGlpQAAAABJRU5ErkJggg==","aspectRatio":1.7816836262719704,"src":"//images.ctfassets.net/s600jj41gsex/6buweme8KyJwSadjqtaPCP/238e17f126a484d76a1287802f71f9f0/img-working-with-rich-text-editors-in-2023_-industry-overview-and-challenges-2023101718551676.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6buweme8KyJwSadjqtaPCP/238e17f126a484d76a1287802f71f9f0/img-working-with-rich-text-editors-in-2023_-industry-overview-and-challenges-2023101718551676.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6buweme8KyJwSadjqtaPCP/238e17f126a484d76a1287802f71f9f0/img-working-with-rich-text-editors-in-2023_-industry-overview-and-challenges-2023101718551676.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6buweme8KyJwSadjqtaPCP/238e17f126a484d76a1287802f71f9f0/img-working-with-rich-text-editors-in-2023_-industry-overview-and-challenges-2023101718551676.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6buweme8KyJwSadjqtaPCP/238e17f126a484d76a1287802f71f9f0/img-working-with-rich-text-editors-in-2023_-industry-overview-and-challenges-2023101718551676.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6buweme8KyJwSadjqtaPCP/238e17f126a484d76a1287802f71f9f0/img-working-with-rich-text-editors-in-2023_-industry-overview-and-challenges-2023101718551676.png?w=1478&h=830&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6buweme8KyJwSadjqtaPCP/238e17f126a484d76a1287802f71f9f0/img-working-with-rich-text-editors-in-2023_-industry-overview-and-challenges-2023101718551676.png?w=1926&h=1081&q=50&fit=scale 1926w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6buweme8KyJwSadjqtaPCP/238e17f126a484d76a1287802f71f9f0/img-working-with-rich-text-editors-in-2023_-industry-overview-and-challenges-2023101718551676.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6buweme8KyJwSadjqtaPCP/238e17f126a484d76a1287802f71f9f0/img-working-with-rich-text-editors-in-2023_-industry-overview-and-challenges-2023101718551676.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6buweme8KyJwSadjqtaPCP/238e17f126a484d76a1287802f71f9f0/img-working-with-rich-text-editors-in-2023_-industry-overview-and-challenges-2023101718551676.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6buweme8KyJwSadjqtaPCP/238e17f126a484d76a1287802f71f9f0/img-working-with-rich-text-editors-in-2023_-industry-overview-and-challenges-2023101718551676.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6buweme8KyJwSadjqtaPCP/238e17f126a484d76a1287802f71f9f0/img-working-with-rich-text-editors-in-2023_-industry-overview-and-challenges-2023101718551676.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6buweme8KyJwSadjqtaPCP/238e17f126a484d76a1287802f71f9f0/img-working-with-rich-text-editors-in-2023_-industry-overview-and-challenges-2023101718551676.png?w=1478&h=830&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6buweme8KyJwSadjqtaPCP/238e17f126a484d76a1287802f71f9f0/img-working-with-rich-text-editors-in-2023_-industry-overview-and-challenges-2023101718551676.png?w=1926&h=1081&q=50&fm=webp&fit=scale 1926w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Di Mace","slug":"di-mace"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Working with rich text editors: industry overview and challenges |TinyMCE"},"metaDescription":{"metaDescription":"Insights from developers who work with rich text editors on the industry, editing experiences, main challenges and the most important features."}},{"title":"Rich Text Editors 2023 Developer Survey: Highlights and trends towards AI","slug":"text-editors-highlights-and-trends","featured":false,"lastUpdated":"Sep 13th, 2023","description":{"description":"<p>Find out rich text editing insights and trends gathered from our annual survey, which investigates the varied aspects and facets of rich text editing</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Find out rich text editing insights and trends gathered from our annual survey, which investigates the varied aspects and facets of rich text editing"}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"AI, represented by a robot, reaches out for survey results and data","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAA8FBMVEXssf/ssf/tsf/ssf/tsf/tsP/usP/psf7lsvvlsfvmsvzsr//ssf7rsfnrr/bS2Ou/8N+/7t+87tzD5t7mtvrsrv/usP7tsv/ssvrtsvvft/rbtdb25+v9//34+Pj4/Pn49/P27fnS2uvTserts//ku/bRwebhqe7as+zt4fP3+/f5+Pj0+Pfz+Pf29/jP6efEtufvr//o0PHQ0L/jr/Ltr//z4fr6+fry+PXj6ePY5dna7O214t6+zO3stv3uvO3ts/7tt//qvfq+zNrfvOnowMfi18XVzcfVvvPssP/psf3ur/7srvXrr/vur//ssv/Y1uLrAAAAA3RSTlP9/v6XUDd1AAAAfUlEQVQIHV3BMQrCQBRF0ftmPoRIpjJrsHENrsFNW2hto+5hRFBBAs43McSA5wgxEjhfrshAIOGOA8UYyEOQPKgDB0WgftWaXPFitOQm6edWwNp0J2m2PoLRS5o9AAOWjbTbaHQAYlNVXT4/F6eVBetdwLXdM8kMnCIF/r0/TFMiIUjnCd8AAAAASUVORK5CYII=","aspectRatio":1.7816836262719704,"src":"//images.ctfassets.net/s600jj41gsex/2ln1R1Coal342UkFeYUhw5/07e5096214ee68f276234174ea39a5cb/img-rich-text-editors-2023-developer-survey_-highlights-and-trends-towards-ai-2023090719485963.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/2ln1R1Coal342UkFeYUhw5/07e5096214ee68f276234174ea39a5cb/img-rich-text-editors-2023-developer-survey_-highlights-and-trends-towards-ai-2023090719485963.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2ln1R1Coal342UkFeYUhw5/07e5096214ee68f276234174ea39a5cb/img-rich-text-editors-2023-developer-survey_-highlights-and-trends-towards-ai-2023090719485963.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2ln1R1Coal342UkFeYUhw5/07e5096214ee68f276234174ea39a5cb/img-rich-text-editors-2023-developer-survey_-highlights-and-trends-towards-ai-2023090719485963.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2ln1R1Coal342UkFeYUhw5/07e5096214ee68f276234174ea39a5cb/img-rich-text-editors-2023-developer-survey_-highlights-and-trends-towards-ai-2023090719485963.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2ln1R1Coal342UkFeYUhw5/07e5096214ee68f276234174ea39a5cb/img-rich-text-editors-2023-developer-survey_-highlights-and-trends-towards-ai-2023090719485963.png?w=1478&h=830&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2ln1R1Coal342UkFeYUhw5/07e5096214ee68f276234174ea39a5cb/img-rich-text-editors-2023-developer-survey_-highlights-and-trends-towards-ai-2023090719485963.png?w=1926&h=1081&q=50&fit=scale 1926w","srcWebp":"//images.ctfassets.net/s600jj41gsex/2ln1R1Coal342UkFeYUhw5/07e5096214ee68f276234174ea39a5cb/img-rich-text-editors-2023-developer-survey_-highlights-and-trends-towards-ai-2023090719485963.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/2ln1R1Coal342UkFeYUhw5/07e5096214ee68f276234174ea39a5cb/img-rich-text-editors-2023-developer-survey_-highlights-and-trends-towards-ai-2023090719485963.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2ln1R1Coal342UkFeYUhw5/07e5096214ee68f276234174ea39a5cb/img-rich-text-editors-2023-developer-survey_-highlights-and-trends-towards-ai-2023090719485963.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2ln1R1Coal342UkFeYUhw5/07e5096214ee68f276234174ea39a5cb/img-rich-text-editors-2023-developer-survey_-highlights-and-trends-towards-ai-2023090719485963.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2ln1R1Coal342UkFeYUhw5/07e5096214ee68f276234174ea39a5cb/img-rich-text-editors-2023-developer-survey_-highlights-and-trends-towards-ai-2023090719485963.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2ln1R1Coal342UkFeYUhw5/07e5096214ee68f276234174ea39a5cb/img-rich-text-editors-2023-developer-survey_-highlights-and-trends-towards-ai-2023090719485963.png?w=1478&h=830&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2ln1R1Coal342UkFeYUhw5/07e5096214ee68f276234174ea39a5cb/img-rich-text-editors-2023-developer-survey_-highlights-and-trends-towards-ai-2023090719485963.png?w=1926&h=1081&q=50&fm=webp&fit=scale 1926w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Di Mace","slug":"di-mace"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Rich Text Editors 2023 Developer Survey: Highlights and trends | TinyMCE"},"metaDescription":{"metaDescription":"The freshest insights on rich text editing trends and highlights on what has changed in comparison to previous year survey results."}},{"title":"Technical debt and types: The benefits of TypeScript vs JavaScript","slug":"benefits-of-typescript","featured":true,"lastUpdated":"Jul 26th, 2023","description":{"description":"<p>Heavy technical debt burdens can sink a project. But selecting the right language can help keep debt down. Find out what the results are after weighing up JavaScript vs Typescript, based on TinyMCE's development history</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Heavy technical debt burdens can sink a project. But selecting the right language can help keep debt down. Find out what the results are after weighing up JavaScript vs Typescript, based on TinyMCE's development history"}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"The rich text editor represented as a document symbol with TypeScript and JavaScript logos above it","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAA4VBMVEX+ov/+ov/+of/+ov/+ov//ov//o//+of//of/0nv2ikfzHk/v/n/7+o/z8p/H9of7/oP/1qvrlqu79oP7ql/ugoP3Gofn8nPz4usP12nz6p/D5of3xp/fnsPH/n//6rvX2rfTyufnzu/r4ut/20cj6rPbzsPj5wfr7wvv6svr+oP/9tP758/T18Or69vn59vny9vnt9fj36fr2vvbs1Ozr1uvtu+7+n//8tf358vb48vT4+Pj4+fj6+/v6/fv38/j3rPj6mfv8nf39n/7+pf/+uP/+t///uf//uv/+s///nv8Vl2KaAAAABHRSTlP9/v78RvGEPgAAAGtJREFUCB0FwbttAlEUQME5+64jixSJBojovwKX4MwSEikhKZ/1TANhB+g5CATYtYE2LNYiBqymquqBIeu7qqoeaLQ+p6qq6s9rcDxUVVVh4FBVVf1gcD9H1e26v0VfWMcL/N7f4JVA7ADbP7fqExxdbHuwAAAAAElFTkSuQmCC","aspectRatio":1.7816836262719704,"src":"//images.ctfassets.net/s600jj41gsex/2xiNigXJElGz4ouNTELxiO/d4d4fe5378e2be8bc1921dad842d168a/Technical_debt_and_types__The_benefits_of_TypeScript_vs_JavaScript.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/2xiNigXJElGz4ouNTELxiO/d4d4fe5378e2be8bc1921dad842d168a/Technical_debt_and_types__The_benefits_of_TypeScript_vs_JavaScript.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2xiNigXJElGz4ouNTELxiO/d4d4fe5378e2be8bc1921dad842d168a/Technical_debt_and_types__The_benefits_of_TypeScript_vs_JavaScript.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2xiNigXJElGz4ouNTELxiO/d4d4fe5378e2be8bc1921dad842d168a/Technical_debt_and_types__The_benefits_of_TypeScript_vs_JavaScript.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2xiNigXJElGz4ouNTELxiO/d4d4fe5378e2be8bc1921dad842d168a/Technical_debt_and_types__The_benefits_of_TypeScript_vs_JavaScript.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2xiNigXJElGz4ouNTELxiO/d4d4fe5378e2be8bc1921dad842d168a/Technical_debt_and_types__The_benefits_of_TypeScript_vs_JavaScript.png?w=1478&h=830&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2xiNigXJElGz4ouNTELxiO/d4d4fe5378e2be8bc1921dad842d168a/Technical_debt_and_types__The_benefits_of_TypeScript_vs_JavaScript.png?w=1926&h=1081&q=50&fit=scale 1926w","srcWebp":"//images.ctfassets.net/s600jj41gsex/2xiNigXJElGz4ouNTELxiO/d4d4fe5378e2be8bc1921dad842d168a/Technical_debt_and_types__The_benefits_of_TypeScript_vs_JavaScript.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/2xiNigXJElGz4ouNTELxiO/d4d4fe5378e2be8bc1921dad842d168a/Technical_debt_and_types__The_benefits_of_TypeScript_vs_JavaScript.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2xiNigXJElGz4ouNTELxiO/d4d4fe5378e2be8bc1921dad842d168a/Technical_debt_and_types__The_benefits_of_TypeScript_vs_JavaScript.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2xiNigXJElGz4ouNTELxiO/d4d4fe5378e2be8bc1921dad842d168a/Technical_debt_and_types__The_benefits_of_TypeScript_vs_JavaScript.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2xiNigXJElGz4ouNTELxiO/d4d4fe5378e2be8bc1921dad842d168a/Technical_debt_and_types__The_benefits_of_TypeScript_vs_JavaScript.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2xiNigXJElGz4ouNTELxiO/d4d4fe5378e2be8bc1921dad842d168a/Technical_debt_and_types__The_benefits_of_TypeScript_vs_JavaScript.png?w=1478&h=830&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2xiNigXJElGz4ouNTELxiO/d4d4fe5378e2be8bc1921dad842d168a/Technical_debt_and_types__The_benefits_of_TypeScript_vs_JavaScript.png?w=1926&h=1081&q=50&fm=webp&fit=scale 1926w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Millie Macdonald","slug":"millie-macdonald"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Benefits of TypeScript over JavaScript: tech debt and types | TinyMCE"},"metaDescription":{"metaDescription":"Giving a preference to TypeScript vs JavaScript can have long term benefits in terms of dealing with technical debt."}},{"title":"What does it mean to be SOC2 compliant for SaaS?","slug":"soc2-compliance-meaning","featured":false,"lastUpdated":"May 18th, 2023","description":{"description":"<p>Is your data security practice working to protect your customers? Read on to find out how SOC2 compliance contributes to your data security.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Is your data security practice working to protect your customers? Read on to find out how SOC2 compliance contributes to your data security."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"The text \"Compliance\" written alongside a representation of SaaS in a cloud symbol","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAA0lBMVEX7dYP8dYP8dIP8dIL7dYP8dYL9dX/+dHz7dIL7coD7bHz7anv7b37sc5/hgbbvcpj6dIL5cYD5dIH5pqz6zM/5k5z6bXz6c4H+dXzDcM2Vk/zPacH/dXv2dYjqfZf60NP+8/P/+fn75OX5for6cYDnbaDNY7vrcpr0onb4f3/5d4f2wcfwxtHww870xs/6go77dIP+dn/7fH7zsXj1jYP4dIP2aXnzaHnzZ3nwcHjsf3r7c4Lyd4TudYHzb334coD4cYDueX3mh3z6c4L5c4H9dIO0QdYAAAAAAXRSTlP+GuMHfQAAAG1JREFUCB2NwbsNwkAQQMH3dAsOOBIaoABSOqBxp4ROqAKHCAn5tPwsRwTM8Iuy0EzeotBCMzN8mSZaIQA7vW/8GoGgxU7dOhsBg7bau7jVoRBA1svBWT0DBjRwffSjTwoBFFo+Oq8DnpICyp+eWREcKyS9ydsAAAAASUVORK5CYII=","aspectRatio":1.780758556891767,"src":"//images.ctfassets.net/s600jj41gsex/2QUVwzLBzYHfvlnfmr6lXW/492ae4fd65ffe6661c9c33abe80e8941/What_does_it_mean_to_be_SOC2_compliant_for_SaaS___1_.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/2QUVwzLBzYHfvlnfmr6lXW/492ae4fd65ffe6661c9c33abe80e8941/What_does_it_mean_to_be_SOC2_compliant_for_SaaS___1_.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2QUVwzLBzYHfvlnfmr6lXW/492ae4fd65ffe6661c9c33abe80e8941/What_does_it_mean_to_be_SOC2_compliant_for_SaaS___1_.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2QUVwzLBzYHfvlnfmr6lXW/492ae4fd65ffe6661c9c33abe80e8941/What_does_it_mean_to_be_SOC2_compliant_for_SaaS___1_.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2QUVwzLBzYHfvlnfmr6lXW/492ae4fd65ffe6661c9c33abe80e8941/What_does_it_mean_to_be_SOC2_compliant_for_SaaS___1_.png?w=1109&h=623&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2QUVwzLBzYHfvlnfmr6lXW/492ae4fd65ffe6661c9c33abe80e8941/What_does_it_mean_to_be_SOC2_compliant_for_SaaS___1_.png?w=1478&h=830&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2QUVwzLBzYHfvlnfmr6lXW/492ae4fd65ffe6661c9c33abe80e8941/What_does_it_mean_to_be_SOC2_compliant_for_SaaS___1_.png?w=1925&h=1081&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/2QUVwzLBzYHfvlnfmr6lXW/492ae4fd65ffe6661c9c33abe80e8941/What_does_it_mean_to_be_SOC2_compliant_for_SaaS___1_.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/2QUVwzLBzYHfvlnfmr6lXW/492ae4fd65ffe6661c9c33abe80e8941/What_does_it_mean_to_be_SOC2_compliant_for_SaaS___1_.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2QUVwzLBzYHfvlnfmr6lXW/492ae4fd65ffe6661c9c33abe80e8941/What_does_it_mean_to_be_SOC2_compliant_for_SaaS___1_.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2QUVwzLBzYHfvlnfmr6lXW/492ae4fd65ffe6661c9c33abe80e8941/What_does_it_mean_to_be_SOC2_compliant_for_SaaS___1_.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2QUVwzLBzYHfvlnfmr6lXW/492ae4fd65ffe6661c9c33abe80e8941/What_does_it_mean_to_be_SOC2_compliant_for_SaaS___1_.png?w=1109&h=623&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2QUVwzLBzYHfvlnfmr6lXW/492ae4fd65ffe6661c9c33abe80e8941/What_does_it_mean_to_be_SOC2_compliant_for_SaaS___1_.png?w=1478&h=830&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2QUVwzLBzYHfvlnfmr6lXW/492ae4fd65ffe6661c9c33abe80e8941/What_does_it_mean_to_be_SOC2_compliant_for_SaaS___1_.png?w=1925&h=1081&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"John Rau","slug":"john-rau"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"What does it mean to be SOC2 compliant for SaaS? | TinyMCE"},"metaDescription":{"metaDescription":"SOC 2 compliance means that your company has been audited by an independent third party to ensure that your data security practices meet industry standards."}},{"title":"Dangerous examples of technical debt in rich text editors","slug":"technical-debt-examples","featured":false,"lastUpdated":"Dec 19th, 2022","description":{"description":"<p>Read the story of our team's technical debt experience: handling cases of technical debt accrual in rich text editors, and how we approach the issue</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Read the story of our team's technical debt experience: handling cases of technical debt accrual in rich text editors, and how we approach the issue"}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"An exclamation mark as a warning, representing the dangers of technical debt","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABjFBMVEUiNHUiM3UiNHYiNHcjNHcjNXggMG0gMW4fMG4eL24bLW0bLm4gMW8hMXAhMnAdLWQdLWUZKmUAHmEAAl0ABF4AHGEZK2YdLWceLmceLmgbKl4bKl0bKl8YKF4AGFopNGO4usK8vcU0PWgAFVoZKWAcK2EcLGIZJ1cZJ1gZKFgZJ1kNIVYAAEWipK7d3uHa296rrLUAAEcMIVgZKFsbKVwbKV0YJVIXJVIYJVMVJFMAAEo+RGPt7e7W19rQ0NTx8vNMUWwAAEwVJFUXI04XI08XJE8RIE4AADusrbT////r6+zn6Om2t70AAEARIVEYJlMYJlQZJlQVIUoWIksQH0sAADqmp677+/vs7O37+/yvsLYAAD8XJFAXJFEYJFEVIEcVIUgVIUkTH0kAEEQAFUZXW21hZHRhZHVZXG8NHUsAEEcTIU0UH0YUIEgRHkcAFEUAAD4AADwAAD0AFUcSH0sWIUwXIk0UHkQUH0UUH0cSHkcPHEcOG0cOHEgPHUgTH0oVIUsWIUsWIkwXIk7kJeYXAAAAc0lEQVQIHQXBMU5CQQBAwTefjYmB9WslhZ3cgPsfgd4LUBhLrVlnZLVVVcraylOV4HEoizWeUwWgahyt2gCUGjMBQGnsFAD30pixNvA48PZOY0/B/QM/l1hjRrDD61c0Zr+rF/B95tptGcdOf52CT+g6+wf33xSQSPhocgAAAABJRU5ErkJggg==","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/1z2X2gKj3AqHd0KdZtgxkN/e6c9c76f477affea75b1817a73f02f00/tech-debt-4-2022121313085824.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/1z2X2gKj3AqHd0KdZtgxkN/e6c9c76f477affea75b1817a73f02f00/tech-debt-4-2022121313085824.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1z2X2gKj3AqHd0KdZtgxkN/e6c9c76f477affea75b1817a73f02f00/tech-debt-4-2022121313085824.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1z2X2gKj3AqHd0KdZtgxkN/e6c9c76f477affea75b1817a73f02f00/tech-debt-4-2022121313085824.png?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1z2X2gKj3AqHd0KdZtgxkN/e6c9c76f477affea75b1817a73f02f00/tech-debt-4-2022121313085824.png?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/1z2X2gKj3AqHd0KdZtgxkN/e6c9c76f477affea75b1817a73f02f00/tech-debt-4-2022121313085824.png?w=1478&h=832&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/1z2X2gKj3AqHd0KdZtgxkN/e6c9c76f477affea75b1817a73f02f00/tech-debt-4-2022121313085824.png?w=1528&h=860&q=50&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/1z2X2gKj3AqHd0KdZtgxkN/e6c9c76f477affea75b1817a73f02f00/tech-debt-4-2022121313085824.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/1z2X2gKj3AqHd0KdZtgxkN/e6c9c76f477affea75b1817a73f02f00/tech-debt-4-2022121313085824.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1z2X2gKj3AqHd0KdZtgxkN/e6c9c76f477affea75b1817a73f02f00/tech-debt-4-2022121313085824.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1z2X2gKj3AqHd0KdZtgxkN/e6c9c76f477affea75b1817a73f02f00/tech-debt-4-2022121313085824.png?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1z2X2gKj3AqHd0KdZtgxkN/e6c9c76f477affea75b1817a73f02f00/tech-debt-4-2022121313085824.png?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/1z2X2gKj3AqHd0KdZtgxkN/e6c9c76f477affea75b1817a73f02f00/tech-debt-4-2022121313085824.png?w=1478&h=832&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/1z2X2gKj3AqHd0KdZtgxkN/e6c9c76f477affea75b1817a73f02f00/tech-debt-4-2022121313085824.png?w=1528&h=860&q=50&fm=webp&fit=scale 1528w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Millie Macdonald","slug":"millie-macdonald"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Dangerous examples of technical debt in rich text editors | TinyMCE"},"metaDescription":{"metaDescription":"In this post we talk about the examples of technical debt that our team has the most expertise in: cases of technical debt accrual in rich text editors and share how we approach these issues"}},{"title":"Managing technical debt is difficult in rich text editors","slug":"manage-technical-debt","featured":false,"lastUpdated":"Nov 29th, 2022","description":{"description":"<p>We&rsquo;ve collected the aspects that can make or break your strategy of tech debt management - read on to find how.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"We’ve collected the aspects that can make or break your strategy of tech debt management - read on to find how."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Pie chart depicted in contrasting colours","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAA/FBMVEUjNHciNHchM3YfMnQdMXIXLGweMXIiM3YlM3UxN304OH5NUaJES5kkL3AeMHImNHc2Pow0RJ05P5FkduFrh/9aacwqNXcfMXMiM3UvPIkwRJ8rQ58wPY9fdN9oiv9pif9TYsAeLWwrP5MpQJooP5goOIlcc91oif9nif9jfe8sOHwgMXMhM3UmNnpCU6pDVq9CVK1CUqhfeOZniP9lgvgzQIkfMHIhMnUoN3pgeupnh/9nhv9mh/9hfe8pOH0dLW1JX71oiP9MY8IjM3VOZ8lkhPxlhf1Qac4kNXggMXIeLm80R5ZEXLdEXLg1SZgfL3AgMHIbK2oXJmMbKmnWBGX7AAAAg0lEQVQIHQXBMUoDUQBAwXnZ1Z9kQbG0VPAiXjrXsBEPYCOIkEIJC8Y4E1CVfi8XCBhV1bpCYGyrqo4rZnBXVdUnBGN9rKrqFTM8VVUq2MCyLMf9frv73u1+YAMvY2zHxclVXzDB33JzO32c7u/m67czAuO5qjqsMIHz+8OYp+lyWME/4pwdJJVHZF8AAAAASUVORK5CYII=","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=1478&h=832&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=1528&h=860&q=50&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=1478&h=832&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=1528&h=860&q=50&fm=webp&fit=scale 1528w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Millie Macdonald","slug":"millie-macdonald"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"How to manage technical debt in rich text editors | TinyMCE"},"metaDescription":{"metaDescription":"Dealing with the technical debt of rich text editors isn’t easy. We’ve collected the aspects that can make or break your strategy of tech debt management."}},{"title":"What makes a secure text editor?","slug":"secure-text-editor","featured":false,"lastUpdated":"Mar 23rd, 2023","description":{"description":"<p>When selecting a secure text editor one of the most significant considerations is security, which is why it's worth reading on to find out what makes a text editor secure.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"When selecting a secure text editor one of the most significant considerations is security, which is why it's worth reading on to find out what makes a text editor secure."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Security icons together on a blue background","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAB6VBMVEWUq/+VrP+Xrf+Xrf6Yrf6Wrf+Trf+Srf+Urf+fsvyfsvufsfqbrvyWrP6Yrf6Xrf+Vrf+erfayrtq1rtSoremWrf+Yrf/s6+/q6+/4+PrO1fSSqf2UrP+dq/LDrbKzrNKtrNzArbmxrNSTq//s0qzr39D///3Z3vaQp/2XrP6XrPvPtKfkunHkumvduo/duo7fuYPmumDeuYWpq9+Xrf7u6eD28+7V2vWMpf2RqP6Tqf6VrP+Yq/nnvGv6xgj4xSr1wznwwUz4xSX4xS35xACyqcqOqf+Sqf+yv/azwPi0wPiktPfAyPXQ1vbAyvGXq/vlvHT4xSz3xCzLs7Gnq+PvwFT3xDj2wyGwqM22xfvL1fWRp/uTqv+Xq/7k7O/f+Nji7uidsP6Wq/zlvHXWt5ywrNX0wj72xDv2wiWtpMjX4PXr8uiRpfOYrv+Zrf3X3+7f7eTk5/Sar/73xTHhun7Hsa72wzX2xDqtpcnZ3/X18eqSp/SZrv+dr/ybqvKcrvqWrP/mvGr6xQD4xA/4xAv3wwv4xA35xQr4wwCxqMytvv3AyviWq/uZrv6MoO6RpvaTqPiSp/e3rszCsLu/rbu/rrvArru+rLqbp+yTrP+WqvqTp/aZr/+Xrv+Srv+OrP+NrP+PrP+Vrv8Nj/DEAAAACXRSTlP+/v7+/v7+/v4itX5mAAAAjklEQVQIHQXBsU0CYQAG0O8dfyIUeBzQUSAJC1g6gFNQWNpZUTADYYIrncaEGUiwoCQabQghwHsSSJJrB+cqiR5IAjg/nFIe4T/RB/x1T+bgYAJgNy+N3wENAEbKyBi+XgBgIYB9PQSU5vMN7FxmsJ9R6tTtO46vwDNs/KRdAXGrsNYuP5Lp9xMkuVW2uQMC6xyLou1c8wAAAABJRU5ErkJggg==","aspectRatio":1.7775489186405766,"src":"//images.ctfassets.net/s600jj41gsex/6qrNMdgVG6Fe5606ZKnppo/78ad6f291c2a2dc7cdb02b40530add78/what-makes-a-secure-text-editor_-2023031610315788.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6qrNMdgVG6Fe5606ZKnppo/78ad6f291c2a2dc7cdb02b40530add78/what-makes-a-secure-text-editor_-2023031610315788.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6qrNMdgVG6Fe5606ZKnppo/78ad6f291c2a2dc7cdb02b40530add78/what-makes-a-secure-text-editor_-2023031610315788.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6qrNMdgVG6Fe5606ZKnppo/78ad6f291c2a2dc7cdb02b40530add78/what-makes-a-secure-text-editor_-2023031610315788.png?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6qrNMdgVG6Fe5606ZKnppo/78ad6f291c2a2dc7cdb02b40530add78/what-makes-a-secure-text-editor_-2023031610315788.png?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6qrNMdgVG6Fe5606ZKnppo/78ad6f291c2a2dc7cdb02b40530add78/what-makes-a-secure-text-editor_-2023031610315788.png?w=1478&h=831&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6qrNMdgVG6Fe5606ZKnppo/78ad6f291c2a2dc7cdb02b40530add78/what-makes-a-secure-text-editor_-2023031610315788.png?w=1726&h=971&q=50&fit=scale 1726w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6qrNMdgVG6Fe5606ZKnppo/78ad6f291c2a2dc7cdb02b40530add78/what-makes-a-secure-text-editor_-2023031610315788.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6qrNMdgVG6Fe5606ZKnppo/78ad6f291c2a2dc7cdb02b40530add78/what-makes-a-secure-text-editor_-2023031610315788.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6qrNMdgVG6Fe5606ZKnppo/78ad6f291c2a2dc7cdb02b40530add78/what-makes-a-secure-text-editor_-2023031610315788.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6qrNMdgVG6Fe5606ZKnppo/78ad6f291c2a2dc7cdb02b40530add78/what-makes-a-secure-text-editor_-2023031610315788.png?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6qrNMdgVG6Fe5606ZKnppo/78ad6f291c2a2dc7cdb02b40530add78/what-makes-a-secure-text-editor_-2023031610315788.png?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6qrNMdgVG6Fe5606ZKnppo/78ad6f291c2a2dc7cdb02b40530add78/what-makes-a-secure-text-editor_-2023031610315788.png?w=1478&h=831&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6qrNMdgVG6Fe5606ZKnppo/78ad6f291c2a2dc7cdb02b40530add78/what-makes-a-secure-text-editor_-2023031610315788.png?w=1726&h=971&q=50&fm=webp&fit=scale 1726w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Elise Bentley","slug":"elise-bentley"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"What makes a secure text editor? | TinyMCE"},"metaDescription":{"metaDescription":"Discover the key considerations and features you should look for in a secure text editor. Learn why TinyMCE is a reliable and secure option for your text editing needs."}},{"title":"How to track and prioritize technical debt","slug":"technical-debt-tracking","featured":false,"lastUpdated":"Feb 21st, 2023","description":{"description":"<p>The worst technical debt is unidentified technical debt &ndash; find out how to identify, track and prioritize technical debt.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The worst technical debt is unidentified technical debt – find out how to identify, track and prioritize technical debt."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Overlapping rings representing the converging concerns and focus needed for tech debt management","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/6hQk4SjPBGK9MIa1F3TTju/d4ccfd4c1f4fe8cbfb2dd3d8c4fe0c97/track-and-prioritize-2023020212375488.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6hQk4SjPBGK9MIa1F3TTju/d4ccfd4c1f4fe8cbfb2dd3d8c4fe0c97/track-and-prioritize-2023020212375488.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6hQk4SjPBGK9MIa1F3TTju/d4ccfd4c1f4fe8cbfb2dd3d8c4fe0c97/track-and-prioritize-2023020212375488.jpg?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6hQk4SjPBGK9MIa1F3TTju/d4ccfd4c1f4fe8cbfb2dd3d8c4fe0c97/track-and-prioritize-2023020212375488.jpg?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6hQk4SjPBGK9MIa1F3TTju/d4ccfd4c1f4fe8cbfb2dd3d8c4fe0c97/track-and-prioritize-2023020212375488.jpg?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6hQk4SjPBGK9MIa1F3TTju/d4ccfd4c1f4fe8cbfb2dd3d8c4fe0c97/track-and-prioritize-2023020212375488.jpg?w=1478&h=832&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6hQk4SjPBGK9MIa1F3TTju/d4ccfd4c1f4fe8cbfb2dd3d8c4fe0c97/track-and-prioritize-2023020212375488.jpg?w=1528&h=860&q=50&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6hQk4SjPBGK9MIa1F3TTju/d4ccfd4c1f4fe8cbfb2dd3d8c4fe0c97/track-and-prioritize-2023020212375488.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6hQk4SjPBGK9MIa1F3TTju/d4ccfd4c1f4fe8cbfb2dd3d8c4fe0c97/track-and-prioritize-2023020212375488.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6hQk4SjPBGK9MIa1F3TTju/d4ccfd4c1f4fe8cbfb2dd3d8c4fe0c97/track-and-prioritize-2023020212375488.jpg?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6hQk4SjPBGK9MIa1F3TTju/d4ccfd4c1f4fe8cbfb2dd3d8c4fe0c97/track-and-prioritize-2023020212375488.jpg?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6hQk4SjPBGK9MIa1F3TTju/d4ccfd4c1f4fe8cbfb2dd3d8c4fe0c97/track-and-prioritize-2023020212375488.jpg?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6hQk4SjPBGK9MIa1F3TTju/d4ccfd4c1f4fe8cbfb2dd3d8c4fe0c97/track-and-prioritize-2023020212375488.jpg?w=1478&h=832&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6hQk4SjPBGK9MIa1F3TTju/d4ccfd4c1f4fe8cbfb2dd3d8c4fe0c97/track-and-prioritize-2023020212375488.jpg?w=1528&h=860&q=50&fm=webp&fit=scale 1528w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Millie Macdonald","slug":"millie-macdonald"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Technical debt tracking and prioritization | TinyMCE"},"metaDescription":{"metaDescription":"The worst technical debt is unidentified technical debt. In this article, we discuss how to identify, track and prioritize technical debt."}},{"title":"Are developer velocity and technical debt impacted by a rich text editor?","slug":"developer-velocity-and-technical-debt","featured":false,"lastUpdated":"Jan 17th, 2023","description":{"description":"<p>Find out how developer velocity is impacted by a technical debt following our rich text editor stories, and what can you do to improve it.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Find out how developer velocity is impacted by a technical debt following our rich text editor stories, and what can you do to improve it."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Time represented in a clock currently set at 3 O' Clock. ","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAArlBMVEUQGDcPFzYQGDYPFzUPFjMPFTMOEzAWIEYXIUkOEzEQFzYPFTQQGDgmQXoxSY8uRIYnQnwRGjsODi0bQW0hRnkhTX4TJkghRHYdRHIPCCwZV38TMlQRXngPc4oSSmcZWIEPCy0PBi0SUW4RYHsPJDsPMkcRX3kSVXIPBCwQEzQQGzgOZ3sMdoYMdYUOaX0QHzsQEjQQETMQCzAPNEkPNUoQDDEQEDMQFzcQFTUQDzOJjvqOAAAAXklEQVQIHQXBsRHCMAAAMb1jSM6LUKVm/x1oWITjaIIEQA2ACWjk6gI2oDnGNl1AYFVVv+sDE9irqi+YwF5VxxdM4KiqgAkcVRUQsB5VvT5gAOf7vt221wkAeK61AP7SdgzQy6dxTAAAAABJRU5ErkJggg==","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/pSCoh3sRCzJCGPQ1rLfTi/9d0994f65e8d7732aafecf44302421cc/developer-velocity-2022122007162835.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/pSCoh3sRCzJCGPQ1rLfTi/9d0994f65e8d7732aafecf44302421cc/developer-velocity-2022122007162835.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/pSCoh3sRCzJCGPQ1rLfTi/9d0994f65e8d7732aafecf44302421cc/developer-velocity-2022122007162835.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/pSCoh3sRCzJCGPQ1rLfTi/9d0994f65e8d7732aafecf44302421cc/developer-velocity-2022122007162835.png?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/pSCoh3sRCzJCGPQ1rLfTi/9d0994f65e8d7732aafecf44302421cc/developer-velocity-2022122007162835.png?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/pSCoh3sRCzJCGPQ1rLfTi/9d0994f65e8d7732aafecf44302421cc/developer-velocity-2022122007162835.png?w=1478&h=832&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/pSCoh3sRCzJCGPQ1rLfTi/9d0994f65e8d7732aafecf44302421cc/developer-velocity-2022122007162835.png?w=1528&h=860&q=50&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/pSCoh3sRCzJCGPQ1rLfTi/9d0994f65e8d7732aafecf44302421cc/developer-velocity-2022122007162835.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/pSCoh3sRCzJCGPQ1rLfTi/9d0994f65e8d7732aafecf44302421cc/developer-velocity-2022122007162835.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/pSCoh3sRCzJCGPQ1rLfTi/9d0994f65e8d7732aafecf44302421cc/developer-velocity-2022122007162835.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/pSCoh3sRCzJCGPQ1rLfTi/9d0994f65e8d7732aafecf44302421cc/developer-velocity-2022122007162835.png?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/pSCoh3sRCzJCGPQ1rLfTi/9d0994f65e8d7732aafecf44302421cc/developer-velocity-2022122007162835.png?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/pSCoh3sRCzJCGPQ1rLfTi/9d0994f65e8d7732aafecf44302421cc/developer-velocity-2022122007162835.png?w=1478&h=832&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/pSCoh3sRCzJCGPQ1rLfTi/9d0994f65e8d7732aafecf44302421cc/developer-velocity-2022122007162835.png?w=1528&h=860&q=50&fm=webp&fit=scale 1528w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Di Mace","slug":"di-mace"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Developer velocity and technical debt: rich text editor impact | TinyMCE"},"metaDescription":{"metaDescription":"We’ll explore how developer velocity is impacted by a technical debt on the example of rich text editor, as well as what can you do to improve it."}},{"title":"Is your code half-life shorter than your engineering career?","slug":"rte-code-half-life","featured":false,"lastUpdated":"Nov 8th, 2022","description":{"description":"<p>Find out more about Code half-life - a metric that provides interesting perspective on developer&rsquo;s work efficiency and product longevity</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Find out more about Code half-life - a metric that provides interesting perspective on developer’s work efficiency and product longevity"}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"A graph represented as a line on grid background","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/6cg9iKrkdj6a8hWynmgnZg/56f3a41a4879ef769b82c0bada47ac57/tech-debt-2-2022110213124606-2.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6cg9iKrkdj6a8hWynmgnZg/56f3a41a4879ef769b82c0bada47ac57/tech-debt-2-2022110213124606-2.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6cg9iKrkdj6a8hWynmgnZg/56f3a41a4879ef769b82c0bada47ac57/tech-debt-2-2022110213124606-2.jpg?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6cg9iKrkdj6a8hWynmgnZg/56f3a41a4879ef769b82c0bada47ac57/tech-debt-2-2022110213124606-2.jpg?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6cg9iKrkdj6a8hWynmgnZg/56f3a41a4879ef769b82c0bada47ac57/tech-debt-2-2022110213124606-2.jpg?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6cg9iKrkdj6a8hWynmgnZg/56f3a41a4879ef769b82c0bada47ac57/tech-debt-2-2022110213124606-2.jpg?w=1478&h=832&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6cg9iKrkdj6a8hWynmgnZg/56f3a41a4879ef769b82c0bada47ac57/tech-debt-2-2022110213124606-2.jpg?w=1528&h=860&q=50&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6cg9iKrkdj6a8hWynmgnZg/56f3a41a4879ef769b82c0bada47ac57/tech-debt-2-2022110213124606-2.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6cg9iKrkdj6a8hWynmgnZg/56f3a41a4879ef769b82c0bada47ac57/tech-debt-2-2022110213124606-2.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6cg9iKrkdj6a8hWynmgnZg/56f3a41a4879ef769b82c0bada47ac57/tech-debt-2-2022110213124606-2.jpg?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6cg9iKrkdj6a8hWynmgnZg/56f3a41a4879ef769b82c0bada47ac57/tech-debt-2-2022110213124606-2.jpg?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6cg9iKrkdj6a8hWynmgnZg/56f3a41a4879ef769b82c0bada47ac57/tech-debt-2-2022110213124606-2.jpg?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6cg9iKrkdj6a8hWynmgnZg/56f3a41a4879ef769b82c0bada47ac57/tech-debt-2-2022110213124606-2.jpg?w=1478&h=832&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6cg9iKrkdj6a8hWynmgnZg/56f3a41a4879ef769b82c0bada47ac57/tech-debt-2-2022110213124606-2.jpg?w=1528&h=860&q=50&fm=webp&fit=scale 1528w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Di Mace","slug":"di-mace"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Half-life of the rich text editor code | TinyMCE"},"metaDescription":{"metaDescription":" Code half-life metric provides interesting perspective on developer’s work efficiency and product longevity as its contributes to the technical debt your app is accumulating"}},{"title":"Reduce technical debt with the right rich text editor","slug":"reduce-technical-debt","featured":false,"lastUpdated":"Oct 25th, 2022","description":{"description":"<p>The choice of your software components can either increase or reduce technical debt acquisition.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The choice of your software components can either increase or reduce technical debt acquisition."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"a graph showing a drop in costs associated with technical debt","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/2xMpI8uNuoFJAcwMcL4KEC/c2a0da85780e387924db38955a0492bf/img-tech-debt-1-2022092912314335.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/2xMpI8uNuoFJAcwMcL4KEC/c2a0da85780e387924db38955a0492bf/img-tech-debt-1-2022092912314335.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2xMpI8uNuoFJAcwMcL4KEC/c2a0da85780e387924db38955a0492bf/img-tech-debt-1-2022092912314335.jpg?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2xMpI8uNuoFJAcwMcL4KEC/c2a0da85780e387924db38955a0492bf/img-tech-debt-1-2022092912314335.jpg?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2xMpI8uNuoFJAcwMcL4KEC/c2a0da85780e387924db38955a0492bf/img-tech-debt-1-2022092912314335.jpg?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2xMpI8uNuoFJAcwMcL4KEC/c2a0da85780e387924db38955a0492bf/img-tech-debt-1-2022092912314335.jpg?w=1478&h=832&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2xMpI8uNuoFJAcwMcL4KEC/c2a0da85780e387924db38955a0492bf/img-tech-debt-1-2022092912314335.jpg?w=1528&h=860&q=50&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/2xMpI8uNuoFJAcwMcL4KEC/c2a0da85780e387924db38955a0492bf/img-tech-debt-1-2022092912314335.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/2xMpI8uNuoFJAcwMcL4KEC/c2a0da85780e387924db38955a0492bf/img-tech-debt-1-2022092912314335.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2xMpI8uNuoFJAcwMcL4KEC/c2a0da85780e387924db38955a0492bf/img-tech-debt-1-2022092912314335.jpg?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2xMpI8uNuoFJAcwMcL4KEC/c2a0da85780e387924db38955a0492bf/img-tech-debt-1-2022092912314335.jpg?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2xMpI8uNuoFJAcwMcL4KEC/c2a0da85780e387924db38955a0492bf/img-tech-debt-1-2022092912314335.jpg?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2xMpI8uNuoFJAcwMcL4KEC/c2a0da85780e387924db38955a0492bf/img-tech-debt-1-2022092912314335.jpg?w=1478&h=832&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2xMpI8uNuoFJAcwMcL4KEC/c2a0da85780e387924db38955a0492bf/img-tech-debt-1-2022092912314335.jpg?w=1528&h=860&q=50&fm=webp&fit=scale 1528w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Di Mace","slug":"di-mace"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"How to reduce technical debt with the right rich text editor | TinyMCE"},"metaDescription":{"metaDescription":"The choice of your software components can either increase or reduce technical debt acquisition. Learn how your decision about RTE components can affect your tech debt."}},{"title":"Rich Text Editor developers in 2021: survey says full-stack all the way","slug":"rich-text-editor-developers-in-2021-survey-says-full-stack-all-the-way","featured":false,"lastUpdated":"Nov 2nd, 2021","description":{"description":"<p>Usually considered a&nbsp;front-end UI&nbsp;component and/or API, it&nbsp;appears that rich text editors (RTEs) aren&rsquo;t the shy retiring components we&nbsp;all thought. They&rsquo;re primarily being used by&nbsp;full-stack developers, for more complex major projects.</p>\n<p>&nbsp;</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Usually considered a front-end UI component and/or API, it appears that rich text editors (RTEs) aren’t the shy retiring components we all thought. They’re primarily being used by full-stack developers, for more complex major projects."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":" "}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Post 1 in our series exploring the results of the 2021 rich text editor survey.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAMAAADOQy/fAAAA/FBMVEUXI08VIk8mJU8tJ04tJk4uJ04kJU8SIk8WI08XJFIWJFItKFEuKVMrKFMqKFMyKVI/KlEnJVIVJFIZJlUYJlUXJlUtKlYnLFobKFgZKFgXKFgiKVg3KlIuKFMaKFoZKFoYKFouLVwmMGQcLWMcLGIaLGMkLWI2LFYtKlUcK2AbK2AaKl8vMGUnNHEfMm8eMm8nMm83MF4uLFkaK2EeLmccLWcyNG4sOX8mOH4lOH8tOH44NGguL10cLmgeLmghMnEgMnEfMXAtNXI/Pno8O3U7OnQ5N2YwM2QfMnEjNnojNXohNXosOHczOG0xN20yN20yN24sN3YiNnsjNnsxE16+AAAARUlEQVQI11WNMQ4AIAgDRVmU0f9/U92wKInCUnppgRKGMHqFFjxXhy536c+coKLCEmEJ0OsyHYabMmI9acZRAG7fW4OW3FSZDqx45LiCAAAAAElFTkSuQmCC","aspectRatio":2.4767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/68vHF42PTMjZuY8LEa2Sf6/0fee9ed609ad60c413910c96ef23ca00/Image_Developer_Survey_post_1.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/68vHF42PTMjZuY8LEa2Sf6/0fee9ed609ad60c413910c96ef23ca00/Image_Developer_Survey_post_1.png?w=185&h=75&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/68vHF42PTMjZuY8LEa2Sf6/0fee9ed609ad60c413910c96ef23ca00/Image_Developer_Survey_post_1.png?w=370&h=149&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/68vHF42PTMjZuY8LEa2Sf6/0fee9ed609ad60c413910c96ef23ca00/Image_Developer_Survey_post_1.png?w=739&h=298&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/68vHF42PTMjZuY8LEa2Sf6/0fee9ed609ad60c413910c96ef23ca00/Image_Developer_Survey_post_1.png?w=1109&h=448&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/68vHF42PTMjZuY8LEa2Sf6/0fee9ed609ad60c413910c96ef23ca00/Image_Developer_Survey_post_1.png?w=1478&h=597&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/68vHF42PTMjZuY8LEa2Sf6/0fee9ed609ad60c413910c96ef23ca00/Image_Developer_Survey_post_1.png?w=2130&h=860&q=50&fit=scale 2130w","srcWebp":"//images.ctfassets.net/s600jj41gsex/68vHF42PTMjZuY8LEa2Sf6/0fee9ed609ad60c413910c96ef23ca00/Image_Developer_Survey_post_1.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/68vHF42PTMjZuY8LEa2Sf6/0fee9ed609ad60c413910c96ef23ca00/Image_Developer_Survey_post_1.png?w=185&h=75&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/68vHF42PTMjZuY8LEa2Sf6/0fee9ed609ad60c413910c96ef23ca00/Image_Developer_Survey_post_1.png?w=370&h=149&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/68vHF42PTMjZuY8LEa2Sf6/0fee9ed609ad60c413910c96ef23ca00/Image_Developer_Survey_post_1.png?w=739&h=298&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/68vHF42PTMjZuY8LEa2Sf6/0fee9ed609ad60c413910c96ef23ca00/Image_Developer_Survey_post_1.png?w=1109&h=448&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/68vHF42PTMjZuY8LEa2Sf6/0fee9ed609ad60c413910c96ef23ca00/Image_Developer_Survey_post_1.png?w=1478&h=597&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/68vHF42PTMjZuY8LEa2Sf6/0fee9ed609ad60c413910c96ef23ca00/Image_Developer_Survey_post_1.png?w=2130&h=860&q=50&fm=webp&fit=scale 2130w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Di Mace","slug":"di-mace"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Tech stack used with rich text editors in 2021 | TinyMCE"},"metaDescription":{"metaDescription":"Key findings from developers using rich text editors on programming language and front end frameworks – can you guess what’s used the most often?"}},{"title":"State of Rich Text Editor 2021 Survey uncovers hidden hero of content creation","slug":"state-of-rich-text-editor-2021-survey-results","featured":false,"lastUpdated":"Oct 26th, 2021","description":{"description":"<p>Rich text editors are the silent heroes of the content revolution. The State of Rich Text&nbsp;<br />Editor 2021 Survey encouraged industry-wide feedback from the developer community and product managers. 500 people share their stories, and &nbsp;you can read the full report now, as well as analysis of the results to stay up-to-date with trends in rich text editing.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Rich text editors are the silent heroes of the content revolution. The State of Rich Text "},{"type":"element","tagName":"br","properties":{},"children":[]},{"type":"text","value":"Editor 2021 Survey encouraged industry-wide feedback from the developer community and product managers. 500 people share their stories, and  you can read the full report now, as well as analysis of the results to stay up-to-date with trends in rich text editing."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"You can read our analysis, and download the results, of the rich text editor survey 2021.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAMAAADOQy/fAAABpFBMVEUAGT4BGD0DFjoFFjkHFjgFEzUHEzQPGTYOFzQIES8MEy8MEi0AACQ3OENYWV8hITADAh8UECQZEyUWDiIHHkIIHEADHD0IIj8KIj4JIDsLHTkQHzgSHjcRGjMYHjUbHjQDAydjY2iPjpE9OUMXBiEcEiUWESMBGT8CGD0EKkUIMUkONEoTNkoRKD8XLEEcLUEaJTogJTkjJDcpJDYgGS4oIjIcDCUmFigrFycUDiEXDyMAGD4EJEEEHT0GGzoIGzkIGDYLGDUNGDQOFzIQFzARFS4SFCwTEioTDycYEScbEiYoFicWECIZEiUEI0EGI0AIJUALIz4MIDsPIDkTIDgVHzYYGzIbGzAgGy8jGi0lGSsmFSYIHkIFGz4GJkEJJ0EMJj8PJD0SIzsUIjkXITcaIDYdHzQgHjIjHTAmHC4pGywcEycnFicYEiQDGkADGT0GJUEJJkEMJT4OJD0RIjsUITkZHzUeHDEiHDAlGy4nGiwcEyYWDyIFHz4HHzwIHToLHDkNHDcPGzUTGTIUGDAXFy4ZFywbFisdFSkYESYXESMcFifuwZ1MAAAAUUlEQVQI12NkYMQCRDCF3rIIY1HHInLMGkOUhYFBCMo8aQEiPwjcu8UYw/hRAE3hMhYhxvtKYOZ7wQeKIPojQyYzyxoDOXYQWGUlwQECD9U4AE41EFF1T0aYAAAAAElFTkSuQmCC","aspectRatio":2.4767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/j1o8o0rad7oiiBKWiLbHj/5b0ae7aacc305c42cd86cb21accb3bc4/dev-page-summary-2.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/j1o8o0rad7oiiBKWiLbHj/5b0ae7aacc305c42cd86cb21accb3bc4/dev-page-summary-2.png?w=185&h=75&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/j1o8o0rad7oiiBKWiLbHj/5b0ae7aacc305c42cd86cb21accb3bc4/dev-page-summary-2.png?w=370&h=149&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/j1o8o0rad7oiiBKWiLbHj/5b0ae7aacc305c42cd86cb21accb3bc4/dev-page-summary-2.png?w=739&h=298&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/j1o8o0rad7oiiBKWiLbHj/5b0ae7aacc305c42cd86cb21accb3bc4/dev-page-summary-2.png?w=1109&h=448&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/j1o8o0rad7oiiBKWiLbHj/5b0ae7aacc305c42cd86cb21accb3bc4/dev-page-summary-2.png?w=1478&h=597&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/j1o8o0rad7oiiBKWiLbHj/5b0ae7aacc305c42cd86cb21accb3bc4/dev-page-summary-2.png?w=2130&h=860&q=50&fit=scale 2130w","srcWebp":"//images.ctfassets.net/s600jj41gsex/j1o8o0rad7oiiBKWiLbHj/5b0ae7aacc305c42cd86cb21accb3bc4/dev-page-summary-2.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/j1o8o0rad7oiiBKWiLbHj/5b0ae7aacc305c42cd86cb21accb3bc4/dev-page-summary-2.png?w=185&h=75&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/j1o8o0rad7oiiBKWiLbHj/5b0ae7aacc305c42cd86cb21accb3bc4/dev-page-summary-2.png?w=370&h=149&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/j1o8o0rad7oiiBKWiLbHj/5b0ae7aacc305c42cd86cb21accb3bc4/dev-page-summary-2.png?w=739&h=298&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/j1o8o0rad7oiiBKWiLbHj/5b0ae7aacc305c42cd86cb21accb3bc4/dev-page-summary-2.png?w=1109&h=448&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/j1o8o0rad7oiiBKWiLbHj/5b0ae7aacc305c42cd86cb21accb3bc4/dev-page-summary-2.png?w=1478&h=597&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/j1o8o0rad7oiiBKWiLbHj/5b0ae7aacc305c42cd86cb21accb3bc4/dev-page-summary-2.png?w=2130&h=860&q=50&fm=webp&fit=scale 2130w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Di Mace","slug":"di-mace"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":{"metaDescription":"\n"}},{"title":"TinyMCE’s Highlights from AITX Meetup 2025 & What’s Next","slug":"aitx-meetup-2025","featured":true,"lastUpdated":"Apr 15th, 2025","description":{"description":"<p>TinyMCE joined the AITX 2025 Meetup to connect with devs and founders innovating with AI and web tech. See the event highlights and upcoming meetups.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"TinyMCE joined the AITX 2025 Meetup to connect with devs and founders innovating with AI and web tech. See the event highlights and upcoming meetups."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"TinyMCE at AITX Austin Meetup","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAALABQDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABAMJ/8QAIhAAAgICAQMFAAAAAAAAAAAAAQIDIQAREgQFIhMUMTKx/8QAGAEAAwEBAAAAAAAAAAAAAAAAAAECAwT/xAAeEQACAQMFAAAAAAAAAAAAAAAAARECITEDEiJBgf/aAAwDAQACEQMRAD8A01l7x1EfdvbRRRzxrRRQBIa3RLAV850rSbp3twvSZGSPOerhfksMBjPOB0BflWvIHQ1dXvYvMsdgRWT10Vw6yAj7KKP7l02VwqhvjgesrcReRCCScnnrleOEEh5BxbQoZohH/9k=","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/1KrBiRKOUdS4x4urYerK7M/135dc1bda04bf83a8984ec5c210cb72a/AITX_Autin_Meetup_Post_Event_Blog_updated.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/1KrBiRKOUdS4x4urYerK7M/135dc1bda04bf83a8984ec5c210cb72a/AITX_Autin_Meetup_Post_Event_Blog_updated.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1KrBiRKOUdS4x4urYerK7M/135dc1bda04bf83a8984ec5c210cb72a/AITX_Autin_Meetup_Post_Event_Blog_updated.jpg?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1KrBiRKOUdS4x4urYerK7M/135dc1bda04bf83a8984ec5c210cb72a/AITX_Autin_Meetup_Post_Event_Blog_updated.jpg?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1KrBiRKOUdS4x4urYerK7M/135dc1bda04bf83a8984ec5c210cb72a/AITX_Autin_Meetup_Post_Event_Blog_updated.jpg?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/1KrBiRKOUdS4x4urYerK7M/135dc1bda04bf83a8984ec5c210cb72a/AITX_Autin_Meetup_Post_Event_Blog_updated.jpg?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/1KrBiRKOUdS4x4urYerK7M/135dc1bda04bf83a8984ec5c210cb72a/AITX_Autin_Meetup_Post_Event_Blog_updated.jpg?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/1KrBiRKOUdS4x4urYerK7M/135dc1bda04bf83a8984ec5c210cb72a/AITX_Autin_Meetup_Post_Event_Blog_updated.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/1KrBiRKOUdS4x4urYerK7M/135dc1bda04bf83a8984ec5c210cb72a/AITX_Autin_Meetup_Post_Event_Blog_updated.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1KrBiRKOUdS4x4urYerK7M/135dc1bda04bf83a8984ec5c210cb72a/AITX_Autin_Meetup_Post_Event_Blog_updated.jpg?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1KrBiRKOUdS4x4urYerK7M/135dc1bda04bf83a8984ec5c210cb72a/AITX_Autin_Meetup_Post_Event_Blog_updated.jpg?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1KrBiRKOUdS4x4urYerK7M/135dc1bda04bf83a8984ec5c210cb72a/AITX_Autin_Meetup_Post_Event_Blog_updated.jpg?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/1KrBiRKOUdS4x4urYerK7M/135dc1bda04bf83a8984ec5c210cb72a/AITX_Autin_Meetup_Post_Event_Blog_updated.jpg?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/1KrBiRKOUdS4x4urYerK7M/135dc1bda04bf83a8984ec5c210cb72a/AITX_Autin_Meetup_Post_Event_Blog_updated.jpg?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Mrina Sugosh","slug":"mrina-sugosh"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"TinyMCE at AITX 2025: Event Highlights & What’s Next | TinyMCE"},"metaDescription":{"metaDescription":"TinyMCE joined the AITX 2025 Meetup to connect with devs and founders innovating with AI and web tech. See the event highlights and upcoming meetups."}},{"title":"Key Takeaways from Umbraco Spark 2025","slug":"key-takeaways-from-umbraco-spark-2025","featured":true,"lastUpdated":"Apr 4th, 2025","description":{"description":"<p>Explore top takeaways from Umbraco Spark 2025, from caching and observability to TinyMCE innovations for Umbraco 14+. Plus, don&rsquo;t miss our May webinar!</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Explore top takeaways from Umbraco Spark 2025, from caching and observability to TinyMCE innovations for Umbraco 14+. Plus, don’t miss our May webinar!"}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Umbraco Spark Event Recap 2025 by TinyMCE","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAA9lBMVEX5+/77/P/8/f/7/f/////+/v/+///8/v/6+/3V1ujw8ff9/v/9///09PTd3d7p6erg4eHe39/j4+Pi4uLh4eHy8vL19vqnqdLh4u/8/f77+/3d2OXi3un6+vrs7Ozx8fHu7vLp6u3q6+7s7O7o6Ov39/j7/P7x8fj4+fz6/P74+Pykj7qzpMX9/f/u7uzv7+/f4PnV1vnU1vnZ2/rZ2vr09f78/P7u7fPw7/X4+f7p6frv7/vs7fzr7Pzk5fr29v7v8/fg7ffT1fjZ2/nh4vrc3vnd3/n39/7T2umtyun3+P7w8v/9/f75+v33+f3g4//6+/79/v7VBOzPAAAAi0lEQVQIHU3BMQrCQBRF0XczY9Lp2EZ3YCF2rsAV27gAwV4QQRBJl8qAhSBmvjFOwHMQaICpYwZOAzCZpNYVpgSXOR/V8aOcpBnTq/EKJE2gNz15KfBjobFKS47ymvMl9tmz5HGvamdeuYNXAbLrjLDichNFqyTbwHlSso3+jZK4y6XFYY0h0B+kaB/JvSfHwtHiJwAAAABJRU5ErkJggg==","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/6zPeaYFT8YEprNdFrf6XvA/8d06d556c7c2e1bee8546f39001d62e1/-BLOG_HEADER-_-BLOG-_Umbraco_Spark_Event_Recap_2025.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6zPeaYFT8YEprNdFrf6XvA/8d06d556c7c2e1bee8546f39001d62e1/-BLOG_HEADER-_-BLOG-_Umbraco_Spark_Event_Recap_2025.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6zPeaYFT8YEprNdFrf6XvA/8d06d556c7c2e1bee8546f39001d62e1/-BLOG_HEADER-_-BLOG-_Umbraco_Spark_Event_Recap_2025.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6zPeaYFT8YEprNdFrf6XvA/8d06d556c7c2e1bee8546f39001d62e1/-BLOG_HEADER-_-BLOG-_Umbraco_Spark_Event_Recap_2025.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6zPeaYFT8YEprNdFrf6XvA/8d06d556c7c2e1bee8546f39001d62e1/-BLOG_HEADER-_-BLOG-_Umbraco_Spark_Event_Recap_2025.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6zPeaYFT8YEprNdFrf6XvA/8d06d556c7c2e1bee8546f39001d62e1/-BLOG_HEADER-_-BLOG-_Umbraco_Spark_Event_Recap_2025.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6zPeaYFT8YEprNdFrf6XvA/8d06d556c7c2e1bee8546f39001d62e1/-BLOG_HEADER-_-BLOG-_Umbraco_Spark_Event_Recap_2025.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6zPeaYFT8YEprNdFrf6XvA/8d06d556c7c2e1bee8546f39001d62e1/-BLOG_HEADER-_-BLOG-_Umbraco_Spark_Event_Recap_2025.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6zPeaYFT8YEprNdFrf6XvA/8d06d556c7c2e1bee8546f39001d62e1/-BLOG_HEADER-_-BLOG-_Umbraco_Spark_Event_Recap_2025.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6zPeaYFT8YEprNdFrf6XvA/8d06d556c7c2e1bee8546f39001d62e1/-BLOG_HEADER-_-BLOG-_Umbraco_Spark_Event_Recap_2025.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6zPeaYFT8YEprNdFrf6XvA/8d06d556c7c2e1bee8546f39001d62e1/-BLOG_HEADER-_-BLOG-_Umbraco_Spark_Event_Recap_2025.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6zPeaYFT8YEprNdFrf6XvA/8d06d556c7c2e1bee8546f39001d62e1/-BLOG_HEADER-_-BLOG-_Umbraco_Spark_Event_Recap_2025.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6zPeaYFT8YEprNdFrf6XvA/8d06d556c7c2e1bee8546f39001d62e1/-BLOG_HEADER-_-BLOG-_Umbraco_Spark_Event_Recap_2025.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6zPeaYFT8YEprNdFrf6XvA/8d06d556c7c2e1bee8546f39001d62e1/-BLOG_HEADER-_-BLOG-_Umbraco_Spark_Event_Recap_2025.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Mrina Sugosh","slug":"mrina-sugosh"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Key Takeaways from Umbraco Spark 2025 | TinyMCE"},"metaDescription":{"metaDescription":"Explore top takeaways from Umbraco Spark 2025, from caching and observability to TinyMCE innovations for Umbraco 14+. Plus, don’t miss our May webinar!"}},{"title":"Learn with TinyMCE at MLH Global Hack Week AI/ML: Workshop Replays","slug":"learn-with-tinymce-mlh-global-hack-week-ai-workshop-replays","featured":true,"lastUpdated":"Mar 13th, 2025","description":{"description":"<p>Missed the MLH Global Hack Week AI/ML? Watch TinyMCE's workshop replays to learn how to enhance your AI/ML projects with a powerful rich text editor!</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Missed the MLH Global Hack Week AI/ML? Watch TinyMCE's workshop replays to learn how to enhance your AI/ML projects with a powerful rich text editor!"}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Global Hack Week AI/ML 2025 Event Recap","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABy1BMVEUXIlAWIVAVIVAUIE8SH08QHk4XIVAVIE8TIE8SIVANIU8UIVAMG00DFUwGGU0OHE4bJFAPHU4UIU8MG04ABkkLHE4hIE83IVATH08AFkwbI083OlkAFEtFSmiSlKcgKVMVHk4pI04IGU00OVuCg5AqM1oiJlQ4HVEHF00BFUwNHE4AAEGgnqjs5OyMjZsAHFlNUnASIVMRHVAjIE4BGE8vNlx3eYonM1wAKFaFipbFzM0+QWACFkwVIU8MHE4AAECjoarx6e6Oj51OUm5nan5eYnhVVG5yb4BucYRlaHpjZXNrboFWWnNzdoetsrczOFoGGE0AFEweKFM+TGcIJFSHipyforSoq7ykpraUlqmlqLenqruVmKqmqbmFiJ0AEFoAAEkMGE0FOlsAKFRpbYd7f5eFiaCBhJtjaIR9gZeHiqF8gJiEiJ9TWXsGJGUOGEw0MUwTIFAvL04AAEqEg5HMxso2PV8AAEUAF00AFk8AD08ADU4QDk8AAEObnKbKys1qbH0AAEYWIU8AAEh0dIO3srg2PFwUKFIYJFIbJlQfJFO5ur/p6emAgo8AAEQQHk8AFUwADEpITGYpMFYPHk4LG00AAEIAC0oRHk9V9pmoAAAAjklEQVQI12NkYGRkBOJ//1h/szECEeO3/0AuEycjGPz8Lgii/jG//M/CLMqIBhheMmoxYgIWEUyxTYwsvmhCe/68ZGQU90RXOYGF4YcgmlgTKxPrNwEQWMrfycfH95gXCBh+Mf36Vc8zgZPrTxVL5c8qQ/a9bOuAjmdgYGPsnXbrL+svBjbziDdAV2f+BwDB5ifRbwSk8wAAAABJRU5ErkJggg==","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/6BGJYvIEUBleufd0Yjt8DN/f4d2b5d3587292001459561171be5f28/-TinyMCE--Blog-_Global_Hack_Week_Event_Recap.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6BGJYvIEUBleufd0Yjt8DN/f4d2b5d3587292001459561171be5f28/-TinyMCE--Blog-_Global_Hack_Week_Event_Recap.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6BGJYvIEUBleufd0Yjt8DN/f4d2b5d3587292001459561171be5f28/-TinyMCE--Blog-_Global_Hack_Week_Event_Recap.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6BGJYvIEUBleufd0Yjt8DN/f4d2b5d3587292001459561171be5f28/-TinyMCE--Blog-_Global_Hack_Week_Event_Recap.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6BGJYvIEUBleufd0Yjt8DN/f4d2b5d3587292001459561171be5f28/-TinyMCE--Blog-_Global_Hack_Week_Event_Recap.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6BGJYvIEUBleufd0Yjt8DN/f4d2b5d3587292001459561171be5f28/-TinyMCE--Blog-_Global_Hack_Week_Event_Recap.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6BGJYvIEUBleufd0Yjt8DN/f4d2b5d3587292001459561171be5f28/-TinyMCE--Blog-_Global_Hack_Week_Event_Recap.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6BGJYvIEUBleufd0Yjt8DN/f4d2b5d3587292001459561171be5f28/-TinyMCE--Blog-_Global_Hack_Week_Event_Recap.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6BGJYvIEUBleufd0Yjt8DN/f4d2b5d3587292001459561171be5f28/-TinyMCE--Blog-_Global_Hack_Week_Event_Recap.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6BGJYvIEUBleufd0Yjt8DN/f4d2b5d3587292001459561171be5f28/-TinyMCE--Blog-_Global_Hack_Week_Event_Recap.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6BGJYvIEUBleufd0Yjt8DN/f4d2b5d3587292001459561171be5f28/-TinyMCE--Blog-_Global_Hack_Week_Event_Recap.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6BGJYvIEUBleufd0Yjt8DN/f4d2b5d3587292001459561171be5f28/-TinyMCE--Blog-_Global_Hack_Week_Event_Recap.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6BGJYvIEUBleufd0Yjt8DN/f4d2b5d3587292001459561171be5f28/-TinyMCE--Blog-_Global_Hack_Week_Event_Recap.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6BGJYvIEUBleufd0Yjt8DN/f4d2b5d3587292001459561171be5f28/-TinyMCE--Blog-_Global_Hack_Week_Event_Recap.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Coco Poley","slug":"coco-poley"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Learn with TinyMCE at MLH Global Hack Week AI/ML: Workshop Replays | TinyMCE"},"metaDescription":{"metaDescription":"Missed the MLH Global Hack Week AI/ML? Watch TinyMCE's workshop replays to learn how to enhance your AI/ML projects with a powerful rich text editor!"}},{"title":"Join TinyMCE at MLH Global Hack Week AI/ML to Build an Email Editor with AI","slug":"join-tinymce-at-mlh-ai-ml-hackweek-build-with-ai","featured":true,"lastUpdated":"Feb 5th, 2025","description":{"description":"<p>TinyMCE welcomes developers to join us for an Angular session and a Laravel session, each on creating an email editor with a different AI IDE.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"TinyMCE welcomes developers to join us for an Angular session and a Laravel session, each on creating an email editor with a different AI IDE."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Build an Email Editor with AI at MLH Global Hack Week AI/ML","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAACglBMVEUAAC4vM0olKUUXHj8wM0sIFD4WGEAeI0geJUwVHk4fJlQaJF0lLmcEGmkAFW0AGnAAGW0AGGcBF2EAADWJipGGh46LjJNQUmRqYm93doR4eotsb4VwcoVucZV6fqM+R48AGIoAII4AIIwAH4UAHHsAGnEAADAdGToSCzQTEjYABjkAADgAADwAAEcAAFYADmUAF3YAH4cIJ5YAJ6MAKKgAJaAAJ54AJ50AIY8AHoEAAjUAXHQATHYAPX1DS2tYWmpfYXRfYnpaXoAxOn0AGogAK5wANa0AN7IAJIFEPlIqLU8ALYgALp0AI40AADMxYXY2YIImS39ZXnZlZnVvcIJ1d41kaY1LVZEANZgAQasATrwAOJhBNkTJk2eSZkAAHVcAPJkALJIAADRubXZ7eoFvbndxcn1jZXZydIVtcIprcJR3gKonUaQAVbIAYr4AO49uVF7pq3+zfVsQHUoPRZwANY89QFNCRFY6PVM4O1Q5PVk/Q2NGTHMcNXgTQYwATp8AXK4AZrkAT6RSRGDUnXendVQVIDcUS5YANIUAAjZRVGJfYm5dX21JSl9NT2VUV29fY34mOXIANH8AQ5AATJwAUKUATqUgN3BnTEhHOT8AMmUAPoQAKXIABDYfAEERADgBETgAJ0IfI0crMVQAC08AGl4AKGwAL3gAMoAAMYUZO4tfa51fbJZlcpZSYY0AJmoAGVwADDdZDlZMBEY7M0E3XF9oaHNyc4EoLlMAEE8AGVgBG10AG2EAE2I+RHNlaIdiZoRlaYNjZn4hKlcACEgADTcEDDYACTcAAzsHEkAABD8ADEQBEEcBEEkAD0oACkoAAEkAAEUAAEAAAD0AAD4ABz2CXsb7AAAAKklEQVQI12NkYEQFYL4wI7owIyOLMCMmYBGhTPCNBhZBa4otSmGYi+olAElSA9+Ik1oPAAAAAElFTkSuQmCC","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/1jcdt2u9lnJtYrOlL1Khxy/57b88c2c3e5320dea6b0d28838d009ce/_BLOG_HEADER__Review_MLH_Pre-event_Blog_v1.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/1jcdt2u9lnJtYrOlL1Khxy/57b88c2c3e5320dea6b0d28838d009ce/_BLOG_HEADER__Review_MLH_Pre-event_Blog_v1.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1jcdt2u9lnJtYrOlL1Khxy/57b88c2c3e5320dea6b0d28838d009ce/_BLOG_HEADER__Review_MLH_Pre-event_Blog_v1.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1jcdt2u9lnJtYrOlL1Khxy/57b88c2c3e5320dea6b0d28838d009ce/_BLOG_HEADER__Review_MLH_Pre-event_Blog_v1.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1jcdt2u9lnJtYrOlL1Khxy/57b88c2c3e5320dea6b0d28838d009ce/_BLOG_HEADER__Review_MLH_Pre-event_Blog_v1.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/1jcdt2u9lnJtYrOlL1Khxy/57b88c2c3e5320dea6b0d28838d009ce/_BLOG_HEADER__Review_MLH_Pre-event_Blog_v1.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/1jcdt2u9lnJtYrOlL1Khxy/57b88c2c3e5320dea6b0d28838d009ce/_BLOG_HEADER__Review_MLH_Pre-event_Blog_v1.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/1jcdt2u9lnJtYrOlL1Khxy/57b88c2c3e5320dea6b0d28838d009ce/_BLOG_HEADER__Review_MLH_Pre-event_Blog_v1.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/1jcdt2u9lnJtYrOlL1Khxy/57b88c2c3e5320dea6b0d28838d009ce/_BLOG_HEADER__Review_MLH_Pre-event_Blog_v1.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1jcdt2u9lnJtYrOlL1Khxy/57b88c2c3e5320dea6b0d28838d009ce/_BLOG_HEADER__Review_MLH_Pre-event_Blog_v1.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1jcdt2u9lnJtYrOlL1Khxy/57b88c2c3e5320dea6b0d28838d009ce/_BLOG_HEADER__Review_MLH_Pre-event_Blog_v1.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1jcdt2u9lnJtYrOlL1Khxy/57b88c2c3e5320dea6b0d28838d009ce/_BLOG_HEADER__Review_MLH_Pre-event_Blog_v1.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/1jcdt2u9lnJtYrOlL1Khxy/57b88c2c3e5320dea6b0d28838d009ce/_BLOG_HEADER__Review_MLH_Pre-event_Blog_v1.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/1jcdt2u9lnJtYrOlL1Khxy/57b88c2c3e5320dea6b0d28838d009ce/_BLOG_HEADER__Review_MLH_Pre-event_Blog_v1.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Coco Poley","slug":"coco-poley"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Join TinyMCE at MLH Global Hack Week AI/ML to Build with AI | TinyMCE"},"metaDescription":{"metaDescription":"TinyMCE welcomes developers to join us for an Angular session and a Laravel session, each on creating an email editor with a different AI IDE."}},{"title":"Meet the Top Experts at Frontend Nation 2024 with TinyMCE","slug":"tinymce-frontend-nation-expert-interviews","featured":true,"lastUpdated":"Nov 7th, 2024","description":{"description":"<p>Explore key takeaways from TinyMCE&rsquo;s interviews with tech experts at Frontend Nation.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Explore key takeaways from TinyMCE’s interviews with tech experts at Frontend Nation."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"An image of Mrina Sugosh and a speech bubble that says Key Insights from Industry Experts","artistName":"TinyMCE","image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABXFBMVEX669X769X77NX669b56tb56dX56tX66tT769T77Nb77db469f26tj16tn06Nn16Nr059r06+H17OH27OD37eD67tz75M354sv87df67tn27dn17dn27Nj57Nb07Nnw69vt6t7r6uDy3NLy29Dw6eLv7/Hq6+3p6+zt7/H58uncyb2TfYakk5Pm4NHt8uHr7+Dw7tz37Nfp7uDk7ePg7Obf7Ofk493o3tbs5t/x7Ofx6+Xz7eXz7eb16dt7b4modFxdKTOmqKrp9OXp8OHe8Ofa7+rZ7uva7enf7Obn6uHu5tzu4NDx4s316Nf259X46NOLeoe2fVxiKhmxrafx8uDy7tv67Nba8erZ8Orc7+jg7ebn7OHu6tzz6Nby487159H46dX97dfm1cGznYy4qJbx5dD57tng8Obj7+Po7eHt7N7y7Nv569b97tj+79j87tft7t7w7dv37Nj47NZL2XX0AAAAeUlEQVQIHWXBIQ7CQBRAwfeWTYokBAcn4RQIkuomHIDDVKGQJASB4izoanxT89mKmnZGQIQgmCgQjEQIigyxEiyGyqAPzGntQt67lHfO/chb575Hayf3xtGnM28s3qc2kR4X9NaLV1/nodUgUgX0BB7q7kkRFCmC4g+eBh8ACCRV4AAAAABJRU5ErkJggg==","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/24VeBYN2sU2qt3AyyJ3B4z/aa66e0398cd42bbd2991fe243de8cc2c/Frontend_Nation_Post_Event_Blog_-_Interviews__1_.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/24VeBYN2sU2qt3AyyJ3B4z/aa66e0398cd42bbd2991fe243de8cc2c/Frontend_Nation_Post_Event_Blog_-_Interviews__1_.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/24VeBYN2sU2qt3AyyJ3B4z/aa66e0398cd42bbd2991fe243de8cc2c/Frontend_Nation_Post_Event_Blog_-_Interviews__1_.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/24VeBYN2sU2qt3AyyJ3B4z/aa66e0398cd42bbd2991fe243de8cc2c/Frontend_Nation_Post_Event_Blog_-_Interviews__1_.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/24VeBYN2sU2qt3AyyJ3B4z/aa66e0398cd42bbd2991fe243de8cc2c/Frontend_Nation_Post_Event_Blog_-_Interviews__1_.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/24VeBYN2sU2qt3AyyJ3B4z/aa66e0398cd42bbd2991fe243de8cc2c/Frontend_Nation_Post_Event_Blog_-_Interviews__1_.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/24VeBYN2sU2qt3AyyJ3B4z/aa66e0398cd42bbd2991fe243de8cc2c/Frontend_Nation_Post_Event_Blog_-_Interviews__1_.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/24VeBYN2sU2qt3AyyJ3B4z/aa66e0398cd42bbd2991fe243de8cc2c/Frontend_Nation_Post_Event_Blog_-_Interviews__1_.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/24VeBYN2sU2qt3AyyJ3B4z/aa66e0398cd42bbd2991fe243de8cc2c/Frontend_Nation_Post_Event_Blog_-_Interviews__1_.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/24VeBYN2sU2qt3AyyJ3B4z/aa66e0398cd42bbd2991fe243de8cc2c/Frontend_Nation_Post_Event_Blog_-_Interviews__1_.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/24VeBYN2sU2qt3AyyJ3B4z/aa66e0398cd42bbd2991fe243de8cc2c/Frontend_Nation_Post_Event_Blog_-_Interviews__1_.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/24VeBYN2sU2qt3AyyJ3B4z/aa66e0398cd42bbd2991fe243de8cc2c/Frontend_Nation_Post_Event_Blog_-_Interviews__1_.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/24VeBYN2sU2qt3AyyJ3B4z/aa66e0398cd42bbd2991fe243de8cc2c/Frontend_Nation_Post_Event_Blog_-_Interviews__1_.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/24VeBYN2sU2qt3AyyJ3B4z/aa66e0398cd42bbd2991fe243de8cc2c/Frontend_Nation_Post_Event_Blog_-_Interviews__1_.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Mrina Sugosh","slug":"mrina-sugosh"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Frontend Nation 2024: Key Insights from Industry Experts | TinyMCE"},"metaDescription":{"metaDescription":"Explore key takeaways from TinyMCE’s interviews with tech experts at Frontend Nation."}},{"title":"TinyMCE Sponsors and Presents at Frontend Nation Online Event","slug":"tinymce-at-frontend-nation-online-event","featured":false,"lastUpdated":"Jun 3rd, 2024","description":{"description":"<p>TinyMCE will be attending Frontend Nation, a virtual event that brings together front-end developers, designers, and tech enthusiasts worldwide. As Diamond sponsors, Tiny is excited to present talks and workshops to help attendees understand the power a rich text editor can bring to their applications, and how to do it.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"TinyMCE will be attending Frontend Nation, a virtual event that brings together front-end developers, designers, and tech enthusiasts worldwide. As Diamond sponsors, Tiny is excited to present talks and workshops to help attendees understand the power a rich text editor can bring to their applications, and how to do it."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Blog banner promoting TinyMCE at the Frontend Nation event June 4th - 7th 2024 ","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAALABQDAREAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAwYEBwj/xAAmEAABBAEDBAEFAAAAAAAAAAABAgMEBREAEjEGBxMhgRUiMkFh/8QAGAEAAwEBAAAAAAAAAAAAAAAAAwQFBgL/xAAoEQABAwMCBAcBAAAAAAAAAAABAgMEABEhMVESIkFhBRMVMnGBscH/2gAMAwEAAhEDEQA/AMZ9DK6flNVNTN7Xwb6eyFeax+pSkPSTuKsqaQpKT6ITjP6z/NaySl5pC3Q5wgb4A++lKxwHlhtIz2pgrqSrg0NzeMdp4VvWx5aGnHJ0x0IjFW5QSMLUogpxx6+3Up2PMdlNAS/L5TygcQVpk6afNPBpCGFuBsmx7D+n8qtrWrNnZyZcevjVLDy9yIMMK8TKcYCU7iSeMknkk8ca0qIriUgKNzvvUMugkmnmmUqFYsOx1Fl0K9LQcEfOrkiKzJZU08m6T0ocR9xiQhbZsamsX9iirsIaZbiYst1Cn2QcIWRkAkcegSPnRR4fFDja+DKQQNcVz6hKUy7dfuIvp1xtjG1ATGax+A0+EJ2pG5r/2Q==","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/3PAUJnDIil2svWxT6bOGLw/3e7b89a0917699adbc8c76d03c8998bb/Final_TinyMCE_Sponsors_and_Presents_at_Frontend_Nation_Online_Event1.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/3PAUJnDIil2svWxT6bOGLw/3e7b89a0917699adbc8c76d03c8998bb/Final_TinyMCE_Sponsors_and_Presents_at_Frontend_Nation_Online_Event1.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/3PAUJnDIil2svWxT6bOGLw/3e7b89a0917699adbc8c76d03c8998bb/Final_TinyMCE_Sponsors_and_Presents_at_Frontend_Nation_Online_Event1.jpg?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/3PAUJnDIil2svWxT6bOGLw/3e7b89a0917699adbc8c76d03c8998bb/Final_TinyMCE_Sponsors_and_Presents_at_Frontend_Nation_Online_Event1.jpg?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/3PAUJnDIil2svWxT6bOGLw/3e7b89a0917699adbc8c76d03c8998bb/Final_TinyMCE_Sponsors_and_Presents_at_Frontend_Nation_Online_Event1.jpg?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/3PAUJnDIil2svWxT6bOGLw/3e7b89a0917699adbc8c76d03c8998bb/Final_TinyMCE_Sponsors_and_Presents_at_Frontend_Nation_Online_Event1.jpg?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/3PAUJnDIil2svWxT6bOGLw/3e7b89a0917699adbc8c76d03c8998bb/Final_TinyMCE_Sponsors_and_Presents_at_Frontend_Nation_Online_Event1.jpg?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/3PAUJnDIil2svWxT6bOGLw/3e7b89a0917699adbc8c76d03c8998bb/Final_TinyMCE_Sponsors_and_Presents_at_Frontend_Nation_Online_Event1.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/3PAUJnDIil2svWxT6bOGLw/3e7b89a0917699adbc8c76d03c8998bb/Final_TinyMCE_Sponsors_and_Presents_at_Frontend_Nation_Online_Event1.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/3PAUJnDIil2svWxT6bOGLw/3e7b89a0917699adbc8c76d03c8998bb/Final_TinyMCE_Sponsors_and_Presents_at_Frontend_Nation_Online_Event1.jpg?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/3PAUJnDIil2svWxT6bOGLw/3e7b89a0917699adbc8c76d03c8998bb/Final_TinyMCE_Sponsors_and_Presents_at_Frontend_Nation_Online_Event1.jpg?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/3PAUJnDIil2svWxT6bOGLw/3e7b89a0917699adbc8c76d03c8998bb/Final_TinyMCE_Sponsors_and_Presents_at_Frontend_Nation_Online_Event1.jpg?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/3PAUJnDIil2svWxT6bOGLw/3e7b89a0917699adbc8c76d03c8998bb/Final_TinyMCE_Sponsors_and_Presents_at_Frontend_Nation_Online_Event1.jpg?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/3PAUJnDIil2svWxT6bOGLw/3e7b89a0917699adbc8c76d03c8998bb/Final_TinyMCE_Sponsors_and_Presents_at_Frontend_Nation_Online_Event1.jpg?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Team Tiny","slug":"team-tiny"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":null},{"title":"5 steps to build and improve your QA process","slug":"5-steps-to-build-and-improve-your-qa-process","featured":false,"lastUpdated":"Sep 17th, 2024","description":{"description":"<p>Discover the essential steps to build and improve your QA process. Learn best practices and tools to ensure software quality.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Discover the essential steps to build and improve your QA process. Learn best practices and tools to ensure software quality."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Shapes representing the vital steps in a QA process","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAAz1BMVEVv1Z1u1Z1t1p5p1p9v1p1r1Ztl05hk1Jhj1JiE3aiH3apn05y5zHnDzHFu1Zlv15uL2ayv4MKv4cKv4cOr4L972KNm1Z3NyWxawr1ky7Fw1pto1Zqq3L3j4+Pi4+Lj5OPh4uHL1c9rz5po155q2J1jzK4vp+dKtNRt1Zxx1Z530J50zpxzzZuD0qN/1KSQwpLGooZ+zplr1Z2K3Kt82KRu1Zxu1p1t1p1r1Jtp0pmC26eC3qmbvpHVlICEypdr1ZyH3Kl72aJs1p1y05xs154jW/0IAAAAWklEQVQI12NgIAQYGaE0MsnI8J/pD5TLyALkMkLB1z8QQVZuqOB3LiDxDCIozYgEbjH/AQtqIAsynmZgYAEK3jBDEvsCtxdEmwFN/vTp5n8kQSAwY/x/Co8nAFplERv849BpAAAAAElFTkSuQmCC","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/2FE0jPLhO8j8oGnZ3BkXfK/204461c97e571703683da746f1141366/5_steps_to_build_and_improve_your_QA_process.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/2FE0jPLhO8j8oGnZ3BkXfK/204461c97e571703683da746f1141366/5_steps_to_build_and_improve_your_QA_process.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2FE0jPLhO8j8oGnZ3BkXfK/204461c97e571703683da746f1141366/5_steps_to_build_and_improve_your_QA_process.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2FE0jPLhO8j8oGnZ3BkXfK/204461c97e571703683da746f1141366/5_steps_to_build_and_improve_your_QA_process.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2FE0jPLhO8j8oGnZ3BkXfK/204461c97e571703683da746f1141366/5_steps_to_build_and_improve_your_QA_process.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2FE0jPLhO8j8oGnZ3BkXfK/204461c97e571703683da746f1141366/5_steps_to_build_and_improve_your_QA_process.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2FE0jPLhO8j8oGnZ3BkXfK/204461c97e571703683da746f1141366/5_steps_to_build_and_improve_your_QA_process.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/2FE0jPLhO8j8oGnZ3BkXfK/204461c97e571703683da746f1141366/5_steps_to_build_and_improve_your_QA_process.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/2FE0jPLhO8j8oGnZ3BkXfK/204461c97e571703683da746f1141366/5_steps_to_build_and_improve_your_QA_process.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2FE0jPLhO8j8oGnZ3BkXfK/204461c97e571703683da746f1141366/5_steps_to_build_and_improve_your_QA_process.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2FE0jPLhO8j8oGnZ3BkXfK/204461c97e571703683da746f1141366/5_steps_to_build_and_improve_your_QA_process.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2FE0jPLhO8j8oGnZ3BkXfK/204461c97e571703683da746f1141366/5_steps_to_build_and_improve_your_QA_process.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2FE0jPLhO8j8oGnZ3BkXfK/204461c97e571703683da746f1141366/5_steps_to_build_and_improve_your_QA_process.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2FE0jPLhO8j8oGnZ3BkXfK/204461c97e571703683da746f1141366/5_steps_to_build_and_improve_your_QA_process.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Shiridi Gandham","slug":"shiridi-gandham"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"5 steps to build and improve your QA process | TinyMCE"},"metaDescription":{"metaDescription":"Discover the essential steps to build and improve your QA process. Learn best practices and tools to ensure software quality."}},{"title":"Angular vs React vs Vue - Detailed Framework Comparison","slug":"vue-react-angular-js-framework-comparison","featured":false,"lastUpdated":"Aug 30th, 2024","description":{"description":"<p>Discover which framework is best for your project. Our detailed comparison of Angular, React, and Vue covers performance, scalability, and community support.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Discover which framework is best for your project. Our detailed comparison of Angular, React, and Vue covers performance, scalability, and community support."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Angular vs React vs Vue trends for each of the two frameworks and a library represented as symbols","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAAtFBMVEXQ6eHQ6uHR6+HS7OHS6+HR6uHQ6uLQ6+PQ6+DR1uaywO/D4+TT7eDS7ODR7ODQ6eDX3dbT5d3P6uHYqe3Jm8yqtcm1x+i0xee1yOXO5N/ltbLa083P6uLV2NPjyY2jgNeVkfSYhvS1qOTN5OHR4dnS5+HQ5ujR6ePO6ODO6uDO5uLh2ff39v349f75+fjT6uG108fO5uDR5ujR6OPS6uHm8+zp9O/k8ezR6eHP6ODP6N/O6eAMO25wAAAAUUlEQVQI12NgwAIYYcR/EP0fIsgCkQIChj+sjP9//4cLsjPCwAe4dkZBuCDjE7iZMghBxpsw7TxIgnAzbzCYAHkgof9w14CA9VsG4aMwJxEPABz0Dj2e3QHvAAAAAElFTkSuQmCC","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/2zovvGaRy7UQ9jXMreHkR2/9400d5dc095753a0bf86f93888e87340/-Blog_Header-__-Rework_-14-_Angular_vs_React_vs_Vue.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/2zovvGaRy7UQ9jXMreHkR2/9400d5dc095753a0bf86f93888e87340/-Blog_Header-__-Rework_-14-_Angular_vs_React_vs_Vue.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2zovvGaRy7UQ9jXMreHkR2/9400d5dc095753a0bf86f93888e87340/-Blog_Header-__-Rework_-14-_Angular_vs_React_vs_Vue.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2zovvGaRy7UQ9jXMreHkR2/9400d5dc095753a0bf86f93888e87340/-Blog_Header-__-Rework_-14-_Angular_vs_React_vs_Vue.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2zovvGaRy7UQ9jXMreHkR2/9400d5dc095753a0bf86f93888e87340/-Blog_Header-__-Rework_-14-_Angular_vs_React_vs_Vue.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2zovvGaRy7UQ9jXMreHkR2/9400d5dc095753a0bf86f93888e87340/-Blog_Header-__-Rework_-14-_Angular_vs_React_vs_Vue.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2zovvGaRy7UQ9jXMreHkR2/9400d5dc095753a0bf86f93888e87340/-Blog_Header-__-Rework_-14-_Angular_vs_React_vs_Vue.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/2zovvGaRy7UQ9jXMreHkR2/9400d5dc095753a0bf86f93888e87340/-Blog_Header-__-Rework_-14-_Angular_vs_React_vs_Vue.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/2zovvGaRy7UQ9jXMreHkR2/9400d5dc095753a0bf86f93888e87340/-Blog_Header-__-Rework_-14-_Angular_vs_React_vs_Vue.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2zovvGaRy7UQ9jXMreHkR2/9400d5dc095753a0bf86f93888e87340/-Blog_Header-__-Rework_-14-_Angular_vs_React_vs_Vue.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2zovvGaRy7UQ9jXMreHkR2/9400d5dc095753a0bf86f93888e87340/-Blog_Header-__-Rework_-14-_Angular_vs_React_vs_Vue.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2zovvGaRy7UQ9jXMreHkR2/9400d5dc095753a0bf86f93888e87340/-Blog_Header-__-Rework_-14-_Angular_vs_React_vs_Vue.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2zovvGaRy7UQ9jXMreHkR2/9400d5dc095753a0bf86f93888e87340/-Blog_Header-__-Rework_-14-_Angular_vs_React_vs_Vue.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2zovvGaRy7UQ9jXMreHkR2/9400d5dc095753a0bf86f93888e87340/-Blog_Header-__-Rework_-14-_Angular_vs_React_vs_Vue.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Coco Poley","slug":"coco-poley"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Angular vs React vs Vue: Detailed Framework Comparison | TinyMCE"},"metaDescription":{"metaDescription":"Discover which framework is best for your project. Our detailed comparison of Angular, React, and Vue covers performance, scalability, and community support."}},{"title":"Supercharge Your Learning Management System with TinyMCE 7","slug":"supercharge-your-lms-in-tinymce-7-webinar","featured":false,"lastUpdated":"Aug 27th, 2024","description":{"description":"<p>Learn how TinyMCE 7 enhances your Learning Management System in our webinar. Get expert tips and see the features in action.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Learn how TinyMCE 7 enhances your Learning Management System in our webinar. Get expert tips and see the features in action."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"A picture of a book, media, spellcheck, and revision history to show learning management systems with TinyMCE","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAAolBMVEXf4//f5P/g5P/h5P7j5//o6v/o6//q7P3w8Pfg5P7h3vng4/7i3/ng4fzL0PvJy/fHyPTFyvjj5Pnp6/vi5fzk2O/j3fTk5f3Izv7HtODRp8fCx/bo6Orr6+vs7e7h5Pnb3/zo4/fV1vvNy/XOyfLL0Pzi5Pbi5PXk5vPj5vbf4/zg4v7l2u/i4/zi5f/k5//k5v7n6f/b3vzc4Pjk5vfh5f/UCT6BAAAATklEQVQI12NgIBYwQqn/TEDiLyPDf7ggUICJEQK+/wPyWUASXIww8AOsDyT4HyHI/RkmyPhGHi4KV8mgCRf7hrAdSDAa/2RgP/OfgUQAABv3DW0TW+g0AAAAAElFTkSuQmCC","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/7l6vsSzRu7xyED9vZgAn1G/5eddb92a34cff554382e07daab6c10a7/Supercharge_Your_Learning_Management_System_with_TinyMCE_7.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/7l6vsSzRu7xyED9vZgAn1G/5eddb92a34cff554382e07daab6c10a7/Supercharge_Your_Learning_Management_System_with_TinyMCE_7.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/7l6vsSzRu7xyED9vZgAn1G/5eddb92a34cff554382e07daab6c10a7/Supercharge_Your_Learning_Management_System_with_TinyMCE_7.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/7l6vsSzRu7xyED9vZgAn1G/5eddb92a34cff554382e07daab6c10a7/Supercharge_Your_Learning_Management_System_with_TinyMCE_7.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/7l6vsSzRu7xyED9vZgAn1G/5eddb92a34cff554382e07daab6c10a7/Supercharge_Your_Learning_Management_System_with_TinyMCE_7.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/7l6vsSzRu7xyED9vZgAn1G/5eddb92a34cff554382e07daab6c10a7/Supercharge_Your_Learning_Management_System_with_TinyMCE_7.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/7l6vsSzRu7xyED9vZgAn1G/5eddb92a34cff554382e07daab6c10a7/Supercharge_Your_Learning_Management_System_with_TinyMCE_7.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/7l6vsSzRu7xyED9vZgAn1G/5eddb92a34cff554382e07daab6c10a7/Supercharge_Your_Learning_Management_System_with_TinyMCE_7.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/7l6vsSzRu7xyED9vZgAn1G/5eddb92a34cff554382e07daab6c10a7/Supercharge_Your_Learning_Management_System_with_TinyMCE_7.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/7l6vsSzRu7xyED9vZgAn1G/5eddb92a34cff554382e07daab6c10a7/Supercharge_Your_Learning_Management_System_with_TinyMCE_7.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/7l6vsSzRu7xyED9vZgAn1G/5eddb92a34cff554382e07daab6c10a7/Supercharge_Your_Learning_Management_System_with_TinyMCE_7.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/7l6vsSzRu7xyED9vZgAn1G/5eddb92a34cff554382e07daab6c10a7/Supercharge_Your_Learning_Management_System_with_TinyMCE_7.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/7l6vsSzRu7xyED9vZgAn1G/5eddb92a34cff554382e07daab6c10a7/Supercharge_Your_Learning_Management_System_with_TinyMCE_7.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/7l6vsSzRu7xyED9vZgAn1G/5eddb92a34cff554382e07daab6c10a7/Supercharge_Your_Learning_Management_System_with_TinyMCE_7.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Bee Lawless","slug":"bee-lawless"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Supercharge Your Learning Management System with TinyMCE 7"},"metaDescription":{"metaDescription":"Learn how TinyMCE 7 enhances your Learning Management System in our webinar. Get expert tips and see the features in action."}},{"title":"Frontend Nation 2024: Exploring DevRel, Full Stack, and AI-Powered Apps","slug":"frontend-conference-wrapup","featured":true,"lastUpdated":"Jul 3rd, 2024","description":{"description":"<p>This year&rsquo;s Frontend Nation conference was held from June 4th through 7th and showcased an impressive array of technical sessions and discussions, establishing itself as a must-attend event for front-end and full-stack developers globally. As Diamond sponsors for this year's event, TinyMCE had a front-row seat for this completely free, virtual conference. Read about the highlights that caught our attention!</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This year’s Frontend Nation conference was held from June 4th through 7th and showcased an impressive array of technical sessions and discussions, establishing itself as a must-attend event for front-end and full-stack developers globally. As Diamond sponsors for this year's event, TinyMCE had a front-row seat for this completely free, virtual conference. Read about the highlights that caught our attention!"}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Header image for the TinyMCE Fronend Nation 2024 Conference wrap up post that displays the logos for TinyMCE and Frontend Nation. ","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAACEFBMVEUADDMADTQADjUADjYADjgADzkAEDoAETsAETwAEjwAEz0AEz4AFEAAFUEAFkIAF0QAF0UAGEYAGUcADjcADzgAEj0AFD8AF0MAGEUAGUYAGkgAG0kAG0oAEDsAET0AEj4AEz8AE0AAFEEAFUIAFkQAF0YAGEcAGEgAGUgAGUkAHEsAHUwAHk0ADT0AADgAADkAAD0ABD8AAD8AAD4AAEEAFEYAFUcAEUkAAEsAAEcAAEYACkkAHE4AH1AACz8ADUBaXW1LUGQ3PlgkLlA+RF1NUmdHTWQAF0kNI1AjLUtjX0NiX0lWXHNZX3haYXlXXXQFJFQAIFMAAkAqM1K2t7ymqK+dn6efoamipaylp6+TlqBFTGZrcINWVk21qRaoni2cmXmenIKXlYFqcIMKKFkAIlcAE0YAFUhPVWo4QF0rNlg/R2IlMlYzPV0yPV0SKFQmNVwWKVJZWU9PUU9CR05ARU08Qk8AE1QAI1kAJlsAG0sAGUsAB0gADkoAEksAEUwAFk4AFU8AGVAAH1MAH1QAH1cAFFgAFVkAGVoAHFsAH1wAJlwAKF0AKV4AH08AIFAAIFEAIFIAIVMAIlQAI1UAJFYAJFcAJVgAJlkAJloAJ1sAJ1wAKV8AKmAAK2EALGIAJVcAKFwAKV0AKl4AKl8ALWMALWQALmUAL2YAJ1oAKFsAK2AALGEAMGcAMWgAMWmGjW3SAAAAYUlEQVQI163Luw6CQAAF0T2wIgtGCpTOx///2toQEsBKCy00tk5352YEn7xXb6TYze1MWpN7jVMOw+u+HWHa49x914+CePVLPPxTjjrEiHbBNg+UKsSyXUNqFrm5mKqaDU8OtRHYujecmwAAAABJRU5ErkJggg==","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/27GgjDXGXoRRLWmBjVtOXv/624a5780405e8338b0278dc7a69bc2c9/Frontend_Nation_Wrapup_Post.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/27GgjDXGXoRRLWmBjVtOXv/624a5780405e8338b0278dc7a69bc2c9/Frontend_Nation_Wrapup_Post.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/27GgjDXGXoRRLWmBjVtOXv/624a5780405e8338b0278dc7a69bc2c9/Frontend_Nation_Wrapup_Post.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/27GgjDXGXoRRLWmBjVtOXv/624a5780405e8338b0278dc7a69bc2c9/Frontend_Nation_Wrapup_Post.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/27GgjDXGXoRRLWmBjVtOXv/624a5780405e8338b0278dc7a69bc2c9/Frontend_Nation_Wrapup_Post.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/27GgjDXGXoRRLWmBjVtOXv/624a5780405e8338b0278dc7a69bc2c9/Frontend_Nation_Wrapup_Post.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/27GgjDXGXoRRLWmBjVtOXv/624a5780405e8338b0278dc7a69bc2c9/Frontend_Nation_Wrapup_Post.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/27GgjDXGXoRRLWmBjVtOXv/624a5780405e8338b0278dc7a69bc2c9/Frontend_Nation_Wrapup_Post.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/27GgjDXGXoRRLWmBjVtOXv/624a5780405e8338b0278dc7a69bc2c9/Frontend_Nation_Wrapup_Post.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/27GgjDXGXoRRLWmBjVtOXv/624a5780405e8338b0278dc7a69bc2c9/Frontend_Nation_Wrapup_Post.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/27GgjDXGXoRRLWmBjVtOXv/624a5780405e8338b0278dc7a69bc2c9/Frontend_Nation_Wrapup_Post.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/27GgjDXGXoRRLWmBjVtOXv/624a5780405e8338b0278dc7a69bc2c9/Frontend_Nation_Wrapup_Post.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/27GgjDXGXoRRLWmBjVtOXv/624a5780405e8338b0278dc7a69bc2c9/Frontend_Nation_Wrapup_Post.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/27GgjDXGXoRRLWmBjVtOXv/624a5780405e8338b0278dc7a69bc2c9/Frontend_Nation_Wrapup_Post.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Mrina Sugosh","slug":"mrina-sugosh"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Frontend Nation 2024: TinyMCE Wrap-up"},"metaDescription":{"metaDescription":"Explore the highlights from Frontend Nation 2024, featuring DevRel insights, full stack and front end development, and OpenAI integration."}},{"title":"Understanding Uncaught TypeErrors in JavaScript","slug":"javascript-uncaught-typeerror","featured":false,"lastUpdated":"Mar 7th, 2024","description":{"description":"<p>It's time for a refresh (or an introduction) to understanding and solving JavaScript Uncaught TypeErrors.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"It's time for a refresh (or an introduction) to understanding and solving JavaScript Uncaught TypeErrors."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Uncaught TypeErrors appears inside an editor with the JavaScript Icon, with colors capturing the error handling phase","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAAw1BMVEX/8PD/8fH/7u7/7+/95+b+4uL+4OD+4eH+5eX+7e3+8PD/7u/75ubz8fD39PX49fX59fX59vb49PX/5+b85eb89PX98PL/8fL/8/T//v/8/P397/D64dz75+b87+/+6en+6Oj95+f+7Oz//P779Mz36aP97uv+5OP66ej5+vr5+fn7/Pz7/v76/v35/P338cnr3Z387Oj/8PH/6en86ur68vL78/P89fX99vb27/D28PH68/T97+//7e3z2tz97e397Ox8UJH1AAAAX0lEQVQIHQXBsQ3CUBBAMb/oN0DHKLRZH4aAETJAaJAOOxAwgA1i2kaAkLaqOoEF16qUL0PkXqnqdxgW5lJVVQ4suFVV1afGwqOqqs4MoXZe7d4HhgXzxNRhQCATDPAHf1YZ8QTlufwAAAAASUVORK5CYII=","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/4M7RjXxIVOXAHZphdOOR0Q/d92f16510de2bfbcce97ac77a9212661/img-Understanding_uncaught_type_errors.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/4M7RjXxIVOXAHZphdOOR0Q/d92f16510de2bfbcce97ac77a9212661/img-Understanding_uncaught_type_errors.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4M7RjXxIVOXAHZphdOOR0Q/d92f16510de2bfbcce97ac77a9212661/img-Understanding_uncaught_type_errors.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4M7RjXxIVOXAHZphdOOR0Q/d92f16510de2bfbcce97ac77a9212661/img-Understanding_uncaught_type_errors.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4M7RjXxIVOXAHZphdOOR0Q/d92f16510de2bfbcce97ac77a9212661/img-Understanding_uncaught_type_errors.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4M7RjXxIVOXAHZphdOOR0Q/d92f16510de2bfbcce97ac77a9212661/img-Understanding_uncaught_type_errors.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4M7RjXxIVOXAHZphdOOR0Q/d92f16510de2bfbcce97ac77a9212661/img-Understanding_uncaught_type_errors.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/4M7RjXxIVOXAHZphdOOR0Q/d92f16510de2bfbcce97ac77a9212661/img-Understanding_uncaught_type_errors.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/4M7RjXxIVOXAHZphdOOR0Q/d92f16510de2bfbcce97ac77a9212661/img-Understanding_uncaught_type_errors.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4M7RjXxIVOXAHZphdOOR0Q/d92f16510de2bfbcce97ac77a9212661/img-Understanding_uncaught_type_errors.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4M7RjXxIVOXAHZphdOOR0Q/d92f16510de2bfbcce97ac77a9212661/img-Understanding_uncaught_type_errors.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4M7RjXxIVOXAHZphdOOR0Q/d92f16510de2bfbcce97ac77a9212661/img-Understanding_uncaught_type_errors.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4M7RjXxIVOXAHZphdOOR0Q/d92f16510de2bfbcce97ac77a9212661/img-Understanding_uncaught_type_errors.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4M7RjXxIVOXAHZphdOOR0Q/d92f16510de2bfbcce97ac77a9212661/img-Understanding_uncaught_type_errors.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Understanding JavaScript uncaught type errors | TinyMCE"},"metaDescription":{"metaDescription":"Discover all you need to know to solve JavaScript Uncaught TypeError messages, the most common kind of error you'll face learning JavaScript"}},{"title":"Understanding byte offset and WYSIWYG cursor position","slug":"byte-offset","featured":false,"lastUpdated":"Apr 18th, 2024","description":{"description":"<p>Byte offsets, and how they affect WYSIWYGs, is important to know. Read on to find out more.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Byte offsets, and how they affect WYSIWYGs, is important to know. Read on to find out more."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"images representing javascript and numbers around the rich text editor","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.7833333333333334,"src":"//images.ctfassets.net/s600jj41gsex/4IVzxBAQGLCegTCvwqBpSr/ec866cf7e42753fb7d7f9995307dacd2/Design_1.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/4IVzxBAQGLCegTCvwqBpSr/ec866cf7e42753fb7d7f9995307dacd2/Design_1.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4IVzxBAQGLCegTCvwqBpSr/ec866cf7e42753fb7d7f9995307dacd2/Design_1.jpg?w=370&h=207&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4IVzxBAQGLCegTCvwqBpSr/ec866cf7e42753fb7d7f9995307dacd2/Design_1.jpg?w=739&h=414&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4IVzxBAQGLCegTCvwqBpSr/ec866cf7e42753fb7d7f9995307dacd2/Design_1.jpg?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4IVzxBAQGLCegTCvwqBpSr/ec866cf7e42753fb7d7f9995307dacd2/Design_1.jpg?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4IVzxBAQGLCegTCvwqBpSr/ec866cf7e42753fb7d7f9995307dacd2/Design_1.jpg?w=1926&h=1080&q=50&fit=scale 1926w","srcWebp":"//images.ctfassets.net/s600jj41gsex/4IVzxBAQGLCegTCvwqBpSr/ec866cf7e42753fb7d7f9995307dacd2/Design_1.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/4IVzxBAQGLCegTCvwqBpSr/ec866cf7e42753fb7d7f9995307dacd2/Design_1.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4IVzxBAQGLCegTCvwqBpSr/ec866cf7e42753fb7d7f9995307dacd2/Design_1.jpg?w=370&h=207&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4IVzxBAQGLCegTCvwqBpSr/ec866cf7e42753fb7d7f9995307dacd2/Design_1.jpg?w=739&h=414&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4IVzxBAQGLCegTCvwqBpSr/ec866cf7e42753fb7d7f9995307dacd2/Design_1.jpg?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4IVzxBAQGLCegTCvwqBpSr/ec866cf7e42753fb7d7f9995307dacd2/Design_1.jpg?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4IVzxBAQGLCegTCvwqBpSr/ec866cf7e42753fb7d7f9995307dacd2/Design_1.jpg?w=1926&h=1080&q=50&fm=webp&fit=scale 1926w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Understanding byte offset and byte offset meaning | TinyMCE"},"metaDescription":{"metaDescription":"Find out the important byte offset information you need to know to understand more about byte offsets in your WYSIWYG"}},{"title":"Understanding cross platform app development","slug":"cross-platform-app-development","featured":false,"lastUpdated":"Feb 21st, 2024","description":{"description":"<p>Getting started with cross platform app development is not without challenges. Find out the essentials in our new guide.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Getting started with cross platform app development is not without challenges. Find out the essentials in our new guide."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"The steps of cross platform app development shown with Android icons, a phone interface, and iOS icons","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAAyVBMVEX+3OD/3OD/3eH/3OH+3uL+3N/+29//3N/93uH93OD74uX48fHN2tqy1NK61tXr1NH61tPy3d/s3t752Nf73+L73uH529r229nj5vHk7vLU0Nze19z42Nr03d/r3Nn008r929392t7+2t7+2uDz6/n87eTd2N/r5uvn09D+2tr45en44+X/29/72tz32Nna4e3V2dPC2+DX1djSwcb619z65On64+b/2+D/3eLhz7vYy7DI1tSu1dGu087x2dz109j62N3729z829ySwQDnAAAAZElEQVQIHQXBsRFBURRAwT38GQ3IFKAEodoVoQEzMtGPedduQAADQRBaDCEcS+ur1tjIqaqq2v1Ec66qqnrNbGi/VFVVLRuT97WqqhYht6qqz5MRHOfeY4lhCDoMshgI5LBggD+plh9Dd3iiZwAAAABJRU5ErkJggg==","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/6VjjHZN8Kr1nKHY4SJJerz/60d0ed9bae480cbf511582778f7796eb/img-Understanding-cross-platform-app-development-1.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6VjjHZN8Kr1nKHY4SJJerz/60d0ed9bae480cbf511582778f7796eb/img-Understanding-cross-platform-app-development-1.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6VjjHZN8Kr1nKHY4SJJerz/60d0ed9bae480cbf511582778f7796eb/img-Understanding-cross-platform-app-development-1.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6VjjHZN8Kr1nKHY4SJJerz/60d0ed9bae480cbf511582778f7796eb/img-Understanding-cross-platform-app-development-1.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6VjjHZN8Kr1nKHY4SJJerz/60d0ed9bae480cbf511582778f7796eb/img-Understanding-cross-platform-app-development-1.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6VjjHZN8Kr1nKHY4SJJerz/60d0ed9bae480cbf511582778f7796eb/img-Understanding-cross-platform-app-development-1.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6VjjHZN8Kr1nKHY4SJJerz/60d0ed9bae480cbf511582778f7796eb/img-Understanding-cross-platform-app-development-1.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6VjjHZN8Kr1nKHY4SJJerz/60d0ed9bae480cbf511582778f7796eb/img-Understanding-cross-platform-app-development-1.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6VjjHZN8Kr1nKHY4SJJerz/60d0ed9bae480cbf511582778f7796eb/img-Understanding-cross-platform-app-development-1.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6VjjHZN8Kr1nKHY4SJJerz/60d0ed9bae480cbf511582778f7796eb/img-Understanding-cross-platform-app-development-1.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6VjjHZN8Kr1nKHY4SJJerz/60d0ed9bae480cbf511582778f7796eb/img-Understanding-cross-platform-app-development-1.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6VjjHZN8Kr1nKHY4SJJerz/60d0ed9bae480cbf511582778f7796eb/img-Understanding-cross-platform-app-development-1.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6VjjHZN8Kr1nKHY4SJJerz/60d0ed9bae480cbf511582778f7796eb/img-Understanding-cross-platform-app-development-1.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6VjjHZN8Kr1nKHY4SJJerz/60d0ed9bae480cbf511582778f7796eb/img-Understanding-cross-platform-app-development-1.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"What is cross platform app development | TinyMCE"},"metaDescription":{"metaDescription":"Cross platform app development can save time and resources, but it's not without challenges. Find out more about cross platform app development in our new guide."}},{"title":"Is there anything better than React? Discovering React alternatives","slug":"react-alternatives","featured":false,"lastUpdated":"Feb 8th, 2024","description":{"description":"<p>What are the React alternatives? Find out what frameworks provide an answer when React isn't the right choice.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"What are the React alternatives? Find out what frameworks provide an answer when React isn't the right choice."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"A rocket launch showing the power of React","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAAz1BMVEUA4KwA4awA4KsA4asA4KoA36pA3qsA4LcA4LMA3qqk49Kf6dIA5beq4sTp6eGE37YX4a2Y38ts4MYA2LCo087y7vyf3dVV48Sw5Mzs6uSF37YA4a2I3cZa4bk74LPg6OvO5uRW18J/3bdx4rmw5N574cU/3qho26Jr3qua5snu8/OS3cYA1q2U2J+W4LvG6fel5Nxc3KWW152a0qDe5dj//f7P5txzxaiV0KRs5Ltw58tM4rgA4q8A4K9i4rl25r5c4LVn4bg14rQA4rEA4KmoahRXAAAATElEQVQI12NgIAgYUSgmRgbGfwzMjH/+wQUZmVgYoeAzSJQFJMjPCAdf4YLcCEGwYSBBaWyCyCoRFkkrQoV+Hv2P7EIWFxYmIMDjBwBWfAvNNMVjIAAAAABJRU5ErkJggg==","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/4hsGQMZeid58sjsjKPwbw1/8a4af88ccd3792f3e764fcf7c6a36348/img-anything-better-than-React-1.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/4hsGQMZeid58sjsjKPwbw1/8a4af88ccd3792f3e764fcf7c6a36348/img-anything-better-than-React-1.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4hsGQMZeid58sjsjKPwbw1/8a4af88ccd3792f3e764fcf7c6a36348/img-anything-better-than-React-1.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4hsGQMZeid58sjsjKPwbw1/8a4af88ccd3792f3e764fcf7c6a36348/img-anything-better-than-React-1.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4hsGQMZeid58sjsjKPwbw1/8a4af88ccd3792f3e764fcf7c6a36348/img-anything-better-than-React-1.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4hsGQMZeid58sjsjKPwbw1/8a4af88ccd3792f3e764fcf7c6a36348/img-anything-better-than-React-1.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4hsGQMZeid58sjsjKPwbw1/8a4af88ccd3792f3e764fcf7c6a36348/img-anything-better-than-React-1.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/4hsGQMZeid58sjsjKPwbw1/8a4af88ccd3792f3e764fcf7c6a36348/img-anything-better-than-React-1.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/4hsGQMZeid58sjsjKPwbw1/8a4af88ccd3792f3e764fcf7c6a36348/img-anything-better-than-React-1.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4hsGQMZeid58sjsjKPwbw1/8a4af88ccd3792f3e764fcf7c6a36348/img-anything-better-than-React-1.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4hsGQMZeid58sjsjKPwbw1/8a4af88ccd3792f3e764fcf7c6a36348/img-anything-better-than-React-1.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4hsGQMZeid58sjsjKPwbw1/8a4af88ccd3792f3e764fcf7c6a36348/img-anything-better-than-React-1.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4hsGQMZeid58sjsjKPwbw1/8a4af88ccd3792f3e764fcf7c6a36348/img-anything-better-than-React-1.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4hsGQMZeid58sjsjKPwbw1/8a4af88ccd3792f3e764fcf7c6a36348/img-anything-better-than-React-1.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Is there anything better than React? Discovering React alternatives | TinyMCE"},"metaDescription":{"metaDescription":"Explore top alternatives to React JS, evaluate its competitors, and learn how to choose the right framework for your needs."}},{"title":"Improving our engineering best practices with semantic versioning","slug":"improving-our-engineering-best-practices-with-semantic-versioning","featured":false,"lastUpdated":"Feb 7th, 2024","description":{"description":"<p>What is semantic versioning, and what does it mean for you? Switching to semantic versioning is just one step you can take for engineering best practice.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"What is semantic versioning, and what does it mean for you? Switching to semantic versioning is just one step you can take for engineering best practice."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"The different stages and levels representing the specific numbering found in semantic versioning","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAAwFBMVEX/yxf/yxb/yxX/yxP/yw3/ywT/yw//yxT/ywD/ygD9yif/ywP/yxD/zBf7zUbT1LO8ycPe0pj9yy//yx7/yxr/zBn6zEbM17yu1dPIxJr8yib7yjH/yxn5vTb5vzX/zRb/zA/6ySrrw0rd0JS10c7HyLnyyF//yxL6ykD/xwD9xx79yh/sz3q/2MzGx6zovHfIz8G6ysjh0JL/zBb/zAf7yBT+yQD5zUvM1ry3zcTjyHr/zAj/zAb7yBr/yw7/ywwGo4veAAAAQHRSTlPl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl3t+NJQAAAH9JREFUCB1dwYcawTAUBtD/puilYtemasVeoUaN938rPsToOXghQYggKxZP2IQ/NidT7KQFJD7IyWRzeS4UqeS6eCMuV6q1eqPJrbYHo+N3e/3BUI3GEwlDTv3ZfLFcrTesYbh6y7tgfzieWOOLVHjm4MJXwi8S1i1UAhH0gKc7tSUJ29tKf+kAAAAASUVORK5CYII=","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/Bd9ENssvqhYSiDbIORoTr/269ba3a4694f50bfe57506ecc8e4d3ca/img-Software-Versioning-best-1.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/Bd9ENssvqhYSiDbIORoTr/269ba3a4694f50bfe57506ecc8e4d3ca/img-Software-Versioning-best-1.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/Bd9ENssvqhYSiDbIORoTr/269ba3a4694f50bfe57506ecc8e4d3ca/img-Software-Versioning-best-1.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/Bd9ENssvqhYSiDbIORoTr/269ba3a4694f50bfe57506ecc8e4d3ca/img-Software-Versioning-best-1.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/Bd9ENssvqhYSiDbIORoTr/269ba3a4694f50bfe57506ecc8e4d3ca/img-Software-Versioning-best-1.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/Bd9ENssvqhYSiDbIORoTr/269ba3a4694f50bfe57506ecc8e4d3ca/img-Software-Versioning-best-1.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/Bd9ENssvqhYSiDbIORoTr/269ba3a4694f50bfe57506ecc8e4d3ca/img-Software-Versioning-best-1.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/Bd9ENssvqhYSiDbIORoTr/269ba3a4694f50bfe57506ecc8e4d3ca/img-Software-Versioning-best-1.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/Bd9ENssvqhYSiDbIORoTr/269ba3a4694f50bfe57506ecc8e4d3ca/img-Software-Versioning-best-1.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/Bd9ENssvqhYSiDbIORoTr/269ba3a4694f50bfe57506ecc8e4d3ca/img-Software-Versioning-best-1.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/Bd9ENssvqhYSiDbIORoTr/269ba3a4694f50bfe57506ecc8e4d3ca/img-Software-Versioning-best-1.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/Bd9ENssvqhYSiDbIORoTr/269ba3a4694f50bfe57506ecc8e4d3ca/img-Software-Versioning-best-1.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/Bd9ENssvqhYSiDbIORoTr/269ba3a4694f50bfe57506ecc8e4d3ca/img-Software-Versioning-best-1.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/Bd9ENssvqhYSiDbIORoTr/269ba3a4694f50bfe57506ecc8e4d3ca/img-Software-Versioning-best-1.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Millie Macdonald","slug":"millie-macdonald"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":null},{"title":"Agile at Tiny: How we’ve adapted agile principles to work for us","slug":"agile-principles-at-tiny","featured":false,"lastUpdated":"Jan 17th, 2024","description":{"description":"<p>How do we use agile principles at Tiny? Find out how we put agile into practice and adapt the concepts to work for our teams.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"How do we use agile principles at Tiny? Find out how we put agile into practice and adapt the concepts to work for our teams."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"A collection of Agile related imagery such as notebooks, pinned cards, and a stop watch","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAA0lBMVEVk86Rk9KRj9KRg9KNf86Ji9KRf9KNe9KNf9aOJ67iQ5Lpe8qFg86Jl8qR37Kp57Kph86Vc9KRZ7qKJ6LSO67hY8p1/26ps6KWO8rby8Ors8+yT6qei4Y5e9KWB4pfaxkalyKVh4LmIzats56SV8rn/4tbz7OOW45+u3Ipf9KV765nXzVCttLduzc1e8p5S3qZ8xcTn7+zd9eeE6qCQ45Vi8aRj9KVh9KVk9KNh8alj8qdf7aVW3KtW261n7ad38Kql6ZyE7Zxh86Ri9KVj9aJg9KKHdYJiAAAAZklEQVQIHW3BywkCMRRA0XszQcQPWIAN2IH70f7X9jHgRvN8GRGy8Bz+kU5SCEEnydTCSds7AiogG9Nza1peQSW5M+3tFgMBzw4ejUo6OAAq6egg+LLMpXi93afTpQiykpUEwUh+PriNFKHJEqftAAAAAElFTkSuQmCC","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/2deNFqN8uYnV3qCLfs4nR0/c9d8e0c108baa1cf58b0eaab0b748174/img-Using-agile-principles-adopt-or-adapt-1.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/2deNFqN8uYnV3qCLfs4nR0/c9d8e0c108baa1cf58b0eaab0b748174/img-Using-agile-principles-adopt-or-adapt-1.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2deNFqN8uYnV3qCLfs4nR0/c9d8e0c108baa1cf58b0eaab0b748174/img-Using-agile-principles-adopt-or-adapt-1.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2deNFqN8uYnV3qCLfs4nR0/c9d8e0c108baa1cf58b0eaab0b748174/img-Using-agile-principles-adopt-or-adapt-1.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2deNFqN8uYnV3qCLfs4nR0/c9d8e0c108baa1cf58b0eaab0b748174/img-Using-agile-principles-adopt-or-adapt-1.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2deNFqN8uYnV3qCLfs4nR0/c9d8e0c108baa1cf58b0eaab0b748174/img-Using-agile-principles-adopt-or-adapt-1.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2deNFqN8uYnV3qCLfs4nR0/c9d8e0c108baa1cf58b0eaab0b748174/img-Using-agile-principles-adopt-or-adapt-1.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/2deNFqN8uYnV3qCLfs4nR0/c9d8e0c108baa1cf58b0eaab0b748174/img-Using-agile-principles-adopt-or-adapt-1.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/2deNFqN8uYnV3qCLfs4nR0/c9d8e0c108baa1cf58b0eaab0b748174/img-Using-agile-principles-adopt-or-adapt-1.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2deNFqN8uYnV3qCLfs4nR0/c9d8e0c108baa1cf58b0eaab0b748174/img-Using-agile-principles-adopt-or-adapt-1.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2deNFqN8uYnV3qCLfs4nR0/c9d8e0c108baa1cf58b0eaab0b748174/img-Using-agile-principles-adopt-or-adapt-1.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2deNFqN8uYnV3qCLfs4nR0/c9d8e0c108baa1cf58b0eaab0b748174/img-Using-agile-principles-adopt-or-adapt-1.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2deNFqN8uYnV3qCLfs4nR0/c9d8e0c108baa1cf58b0eaab0b748174/img-Using-agile-principles-adopt-or-adapt-1.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2deNFqN8uYnV3qCLfs4nR0/c9d8e0c108baa1cf58b0eaab0b748174/img-Using-agile-principles-adopt-or-adapt-1.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ben Long","slug":"ben-long"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Using Agile principles: To adopt or adapt? | Tiny"},"metaDescription":{"metaDescription":"How do we use agile principles at Tiny? Find out how we put agile into practice and adapt the concepts to work for our teams."}},{"title":"How to work with PHP escape quotes","slug":"php-escape","featured":false,"lastUpdated":"Dec 7th, 2023","description":{"description":"<p>There's more to PHP escape quote procedures than using a backslash. Read on to find out the essentials of handling PHP escape characters.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"There's more to PHP escape quote procedures than using a backslash. Read on to find out the essentials of handling PHP escape characters."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"PHP content escaping a page, representing the PHP escape quote process","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAAnFBMVEWqtP+rtP+ps/+qtf+os/+Wr/Kbvuaotf2ptf+ptP+puP+qtv+pt/+Wre293d3i7vCvuPzY2fLV1/Kptv+qt/+quf+quP+mtf+qtOzs7+jn6e6xuPvf3u3a2u+ptPmlruilruaosvSnsv+rs+zq6ufk5O6ps/ertv+ZotScosabosamr++rtf+osv+wufPT2PKxuu+drvCnsvmos/5DvsiFAAAATElEQVQI12NgIBUwMoFIZigHwmQEAQYQ+vGXgYEFJMPOxAgHPxigglzMCMG3cO3yEL4IiLwCVcnADeJdZpW7yKB5BclyBl1juOUkAADBjQlbDxm0tgAAAABJRU5ErkJggg==","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/3EihLXXBO1fnatkO9ozUld/884edeb3c23d2335cc3c4e56e9c36a38/img-Howto-work-with-PHP-escape-quotes.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/3EihLXXBO1fnatkO9ozUld/884edeb3c23d2335cc3c4e56e9c36a38/img-Howto-work-with-PHP-escape-quotes.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/3EihLXXBO1fnatkO9ozUld/884edeb3c23d2335cc3c4e56e9c36a38/img-Howto-work-with-PHP-escape-quotes.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/3EihLXXBO1fnatkO9ozUld/884edeb3c23d2335cc3c4e56e9c36a38/img-Howto-work-with-PHP-escape-quotes.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/3EihLXXBO1fnatkO9ozUld/884edeb3c23d2335cc3c4e56e9c36a38/img-Howto-work-with-PHP-escape-quotes.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/3EihLXXBO1fnatkO9ozUld/884edeb3c23d2335cc3c4e56e9c36a38/img-Howto-work-with-PHP-escape-quotes.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/3EihLXXBO1fnatkO9ozUld/884edeb3c23d2335cc3c4e56e9c36a38/img-Howto-work-with-PHP-escape-quotes.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/3EihLXXBO1fnatkO9ozUld/884edeb3c23d2335cc3c4e56e9c36a38/img-Howto-work-with-PHP-escape-quotes.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/3EihLXXBO1fnatkO9ozUld/884edeb3c23d2335cc3c4e56e9c36a38/img-Howto-work-with-PHP-escape-quotes.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/3EihLXXBO1fnatkO9ozUld/884edeb3c23d2335cc3c4e56e9c36a38/img-Howto-work-with-PHP-escape-quotes.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/3EihLXXBO1fnatkO9ozUld/884edeb3c23d2335cc3c4e56e9c36a38/img-Howto-work-with-PHP-escape-quotes.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/3EihLXXBO1fnatkO9ozUld/884edeb3c23d2335cc3c4e56e9c36a38/img-Howto-work-with-PHP-escape-quotes.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/3EihLXXBO1fnatkO9ozUld/884edeb3c23d2335cc3c4e56e9c36a38/img-Howto-work-with-PHP-escape-quotes.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/3EihLXXBO1fnatkO9ozUld/884edeb3c23d2335cc3c4e56e9c36a38/img-Howto-work-with-PHP-escape-quotes.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"How to work with PHP escape quotes and characters | TinyMCE"},"metaDescription":{"metaDescription":"Master PHP escape sequences with our guide. Learn string escape basics, single vs double quote usage, and how to navigate heredoc syntax."}},{"title":"How to get content and set content in TinyMCE","slug":"how-to-get-content-and-set-content-in-tinymce","featured":true,"lastUpdated":"Jan 24th, 2024","description":{"description":"<p>A brief guide on how to get and set content in TinyMCE, including related FAQs like how to set content on initialization and how to get content without any HTML tags.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"A brief guide on how to get and set content in TinyMCE, including related FAQs like how to set content on initialization and how to get content without any HTML tags."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"All kinds of content including text, video, and images being collected and set in an editor","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAAz1BMVEX5q/P6q/P6q/P6q/T5q/P7qvT6qfT4q/T6qvTyrvD2rfLkx/HI0vDawPHrpfHxr/H4p/P7q/TPvOPivezS39nP4bbX2d3hxb/XtuDzo/Pvr/H5qPP6qPT6qvPup+3rsO3jxtjDxLK2uMy1q8ajjeDnte7szO70yfH2xfL4rPL5qvPtpu3sqOzkm+xudOygrPC0v/NScevNuOTj0d7o2ubn0uX0rO/7q/Pzp/GPguqQjuuomuujh+vinu34p/D2pvDvpvHxpvH3qPL7rPT6rPSbYVaoAAAAAnRSTlP+/qap3hAAAABoSURBVAgdBcGxMQRgFIDB/d79BMY1oA6x2q8NGhDIzIiMe3YBAEBDACzMGe6Z6u/yy0CH9VhV9W2HDvvwVFVVn9JhX6qqqj5y4FpVVeU+B969VlX5MjpY9q1+nm+QgVaX6XqDCBBY4B/PDBUc0FJGtAAAAABJRU5ErkJggg==","aspectRatio":1.780758556891767,"src":"//images.ctfassets.net/s600jj41gsex/6ElZ819XSaYszxbXjWNQIm/0b9d3a3f5f46c2a6ecccb3b3d3db954b/How_to_get_content_and_set_content_in_TinyMCE.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6ElZ819XSaYszxbXjWNQIm/0b9d3a3f5f46c2a6ecccb3b3d3db954b/How_to_get_content_and_set_content_in_TinyMCE.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6ElZ819XSaYszxbXjWNQIm/0b9d3a3f5f46c2a6ecccb3b3d3db954b/How_to_get_content_and_set_content_in_TinyMCE.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6ElZ819XSaYszxbXjWNQIm/0b9d3a3f5f46c2a6ecccb3b3d3db954b/How_to_get_content_and_set_content_in_TinyMCE.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6ElZ819XSaYszxbXjWNQIm/0b9d3a3f5f46c2a6ecccb3b3d3db954b/How_to_get_content_and_set_content_in_TinyMCE.png?w=1109&h=623&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6ElZ819XSaYszxbXjWNQIm/0b9d3a3f5f46c2a6ecccb3b3d3db954b/How_to_get_content_and_set_content_in_TinyMCE.png?w=1478&h=830&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6ElZ819XSaYszxbXjWNQIm/0b9d3a3f5f46c2a6ecccb3b3d3db954b/How_to_get_content_and_set_content_in_TinyMCE.png?w=1925&h=1081&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6ElZ819XSaYszxbXjWNQIm/0b9d3a3f5f46c2a6ecccb3b3d3db954b/How_to_get_content_and_set_content_in_TinyMCE.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6ElZ819XSaYszxbXjWNQIm/0b9d3a3f5f46c2a6ecccb3b3d3db954b/How_to_get_content_and_set_content_in_TinyMCE.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6ElZ819XSaYszxbXjWNQIm/0b9d3a3f5f46c2a6ecccb3b3d3db954b/How_to_get_content_and_set_content_in_TinyMCE.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6ElZ819XSaYszxbXjWNQIm/0b9d3a3f5f46c2a6ecccb3b3d3db954b/How_to_get_content_and_set_content_in_TinyMCE.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6ElZ819XSaYszxbXjWNQIm/0b9d3a3f5f46c2a6ecccb3b3d3db954b/How_to_get_content_and_set_content_in_TinyMCE.png?w=1109&h=623&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6ElZ819XSaYszxbXjWNQIm/0b9d3a3f5f46c2a6ecccb3b3d3db954b/How_to_get_content_and_set_content_in_TinyMCE.png?w=1478&h=830&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6ElZ819XSaYszxbXjWNQIm/0b9d3a3f5f46c2a6ecccb3b3d3db954b/How_to_get_content_and_set_content_in_TinyMCE.png?w=1925&h=1081&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"How to get content from the editor and set content | TinyMCE"},"metaDescription":{"metaDescription":"How to get content from the TinyMCE editor in JavaScript. How to set content in TinyMCE. How to get content out of TinyMCE without HTML tags."}},{"title":"2024 State of Rich Text Editors Developer Survey is open – have your say!","slug":"tinys-developer-survey","featured":false,"lastUpdated":"Mar 8th, 2024","description":{"description":"<p>Announcing our developer survey! Tiny aims to lead innovation, and with your help, we hope to learn what the best practices are and how to cater to future needs of our community.&nbsp;</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Announcing our developer survey! Tiny aims to lead innovation, and with your help, we hope to learn what the best practices are and how to cater to future needs of our community. "}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"A symbolic version of a survey, with star rating, emoji, questions, and results represented.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABNVBMVEWVrf+VrP+SrP+WrP+Trf+Qq/+RrP+NrfuGsPGws9exstWIr/KCsPKCsPGIr/aUrP+Urf+drfbVvsK4seGNv+qg3LPD2puyybSSxsaT47uT4buU47qW0cyhq+aksO2csfuRrf+ureT/zGDZtqu9yfzr6/jO3/bGtvXg1Prv6vvu6Pzv6f3y7Pvf4PaYqPeYqvmVrv6VrP6urOGbpuzR2Pjr5Png2/re1fno4vvv7fTq4/3s5P/i0PnPj/jCgfuumfmTrP+Nqf+Lpvrh5Pnr5Prh2vbl3vnn4fXm4Pvp4v3KyOyEtPeNy/6Lv/iUrP6PqPzV2vXq4/bl3fjm3vnl3fnq4fzb2vKozet/uvGKtPeSq/+kt/24wv21v/60v/22wP62wP+4wv+6w/+zwPyUqv6Vq/+Qqv+Mn4RUAAAAZUlEQVQIHQXBwQ1BQQBAwTeyNxG/ABcXbdCKytxEWzpYiausmaqqqqqqVBWtXdWvSg2AglkaBwCBzxydAADejeYZAFCjeQQCKNV2RawdvFajmnsgsEpVt0uPe9X3WaWqtqpqVvUHgrARVvIC/egAAAAASUVORK5CYII=","aspectRatio":1.7790178571428572,"src":"//images.ctfassets.net/s600jj41gsex/5RkV4KkTsTDLYV5q0UwlHY/f0669377994d735f6a01ec7becfde967/image__1_.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/5RkV4KkTsTDLYV5q0UwlHY/f0669377994d735f6a01ec7becfde967/image__1_.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5RkV4KkTsTDLYV5q0UwlHY/f0669377994d735f6a01ec7becfde967/image__1_.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5RkV4KkTsTDLYV5q0UwlHY/f0669377994d735f6a01ec7becfde967/image__1_.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5RkV4KkTsTDLYV5q0UwlHY/f0669377994d735f6a01ec7becfde967/image__1_.png?w=1109&h=623&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/5RkV4KkTsTDLYV5q0UwlHY/f0669377994d735f6a01ec7becfde967/image__1_.png?w=1478&h=831&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/5RkV4KkTsTDLYV5q0UwlHY/f0669377994d735f6a01ec7becfde967/image__1_.png?w=1594&h=896&q=50&fit=scale 1594w","srcWebp":"//images.ctfassets.net/s600jj41gsex/5RkV4KkTsTDLYV5q0UwlHY/f0669377994d735f6a01ec7becfde967/image__1_.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/5RkV4KkTsTDLYV5q0UwlHY/f0669377994d735f6a01ec7becfde967/image__1_.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5RkV4KkTsTDLYV5q0UwlHY/f0669377994d735f6a01ec7becfde967/image__1_.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5RkV4KkTsTDLYV5q0UwlHY/f0669377994d735f6a01ec7becfde967/image__1_.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5RkV4KkTsTDLYV5q0UwlHY/f0669377994d735f6a01ec7becfde967/image__1_.png?w=1109&h=623&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/5RkV4KkTsTDLYV5q0UwlHY/f0669377994d735f6a01ec7becfde967/image__1_.png?w=1478&h=831&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/5RkV4KkTsTDLYV5q0UwlHY/f0669377994d735f6a01ec7becfde967/image__1_.png?w=1594&h=896&q=50&fm=webp&fit=scale 1594w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Di Mace","slug":"di-mace"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Annual developer survey for rich text editors opens now | TinyMCE"},"metaDescription":{"metaDescription":"The TinyMCE annual developer survey for the state of rich text editors is now open! Have your say on how you develop software with rich text editors."}},{"title":"Angular Change Detection and the OnPush strategy","slug":"angular-change-detection-onpush-strategy","featured":false,"lastUpdated":"Mar 7th, 2023","description":{"description":"<p>There is an alternative method for detecting value changes faster in Angular applications with immutable reference types and the OnPush strategy. Read on to find out how this works.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"There is an alternative method for detecting value changes faster in Angular applications with immutable reference types and the OnPush strategy. Read on to find out how this works."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Angular logo on a yellow background with process elements","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAAqFBMVEX42r/52r/527/728D628D528D53cH53sL53MH428La2MDn2sP63MHxxq7usZvzybD52sD02sKszrHM1r7lqpbmgYLqhYvnjHz12sH32sD117z028P23cTalYLnhYrzur7qmZL23Mb43sf017zqzrTv0bf12L3vz7XclYvhcm7utqH02sDz17322L3v0rjz1rv01Lr22b7x0rfy1Lrz1bvy1brw07j53MAPx842AAAAaUlEQVQIHQXBwUlDARBAwXnfv6BR8O4hbdh/GWILIl6FxHUmCFiAE0GwQMRR1f1mwQmPVfWL5x8kvVZVfXFbTvp7qqp6uNNK57Wqqm8vn+yJS/q4Xqq32qCOmZl5n5kZRQQAWAcLFmD5B8m3FsOkv4dTAAAAAElFTkSuQmCC","aspectRatio":1.7777777777777777,"src":"//images.ctfassets.net/s600jj41gsex/1LXmifcjJCDfpxF9LDdwnI/849dce013c1618601b0333fdc7a093f5/An_Angular_5_tutorial__step-by-step_guide_to_your_first_Angular_5_app.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/1LXmifcjJCDfpxF9LDdwnI/849dce013c1618601b0333fdc7a093f5/An_Angular_5_tutorial__step-by-step_guide_to_your_first_Angular_5_app.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1LXmifcjJCDfpxF9LDdwnI/849dce013c1618601b0333fdc7a093f5/An_Angular_5_tutorial__step-by-step_guide_to_your_first_Angular_5_app.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1LXmifcjJCDfpxF9LDdwnI/849dce013c1618601b0333fdc7a093f5/An_Angular_5_tutorial__step-by-step_guide_to_your_first_Angular_5_app.png?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1LXmifcjJCDfpxF9LDdwnI/849dce013c1618601b0333fdc7a093f5/An_Angular_5_tutorial__step-by-step_guide_to_your_first_Angular_5_app.png?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/1LXmifcjJCDfpxF9LDdwnI/849dce013c1618601b0333fdc7a093f5/An_Angular_5_tutorial__step-by-step_guide_to_your_first_Angular_5_app.png?w=1478&h=831&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/1LXmifcjJCDfpxF9LDdwnI/849dce013c1618601b0333fdc7a093f5/An_Angular_5_tutorial__step-by-step_guide_to_your_first_Angular_5_app.png?w=1920&h=1080&q=50&fit=scale 1920w","srcWebp":"//images.ctfassets.net/s600jj41gsex/1LXmifcjJCDfpxF9LDdwnI/849dce013c1618601b0333fdc7a093f5/An_Angular_5_tutorial__step-by-step_guide_to_your_first_Angular_5_app.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/1LXmifcjJCDfpxF9LDdwnI/849dce013c1618601b0333fdc7a093f5/An_Angular_5_tutorial__step-by-step_guide_to_your_first_Angular_5_app.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1LXmifcjJCDfpxF9LDdwnI/849dce013c1618601b0333fdc7a093f5/An_Angular_5_tutorial__step-by-step_guide_to_your_first_Angular_5_app.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1LXmifcjJCDfpxF9LDdwnI/849dce013c1618601b0333fdc7a093f5/An_Angular_5_tutorial__step-by-step_guide_to_your_first_Angular_5_app.png?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1LXmifcjJCDfpxF9LDdwnI/849dce013c1618601b0333fdc7a093f5/An_Angular_5_tutorial__step-by-step_guide_to_your_first_Angular_5_app.png?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/1LXmifcjJCDfpxF9LDdwnI/849dce013c1618601b0333fdc7a093f5/An_Angular_5_tutorial__step-by-step_guide_to_your_first_Angular_5_app.png?w=1478&h=831&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/1LXmifcjJCDfpxF9LDdwnI/849dce013c1618601b0333fdc7a093f5/An_Angular_5_tutorial__step-by-step_guide_to_your_first_Angular_5_app.png?w=1920&h=1080&q=50&fm=webp&fit=scale 1920w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ahmet Shapiro-Erciyas","slug":"ahmet-shapiro-erciyas"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Angular change detection: how it works and strategies explained | TinyMCE"},"metaDescription":{"metaDescription":"AngularJS's change detection is one of its most powerful features. In this article we explain how it works and review some strategies for using it effectively."}},{"title":"Lessons learned over 20 years as a web developer","slug":"lessons-learned-over-20-years-as-a-web-developer","featured":false,"lastUpdated":"Oct 5th, 2020","description":{"description":"<p>A discussion of the top five areas of expertise that no web developer should be without, covering performance and optimization, tools, image compression, testing, and approaches to learning.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"A discussion of the top five areas of expertise that no web developer should be without, covering performance and optimization, tools, image compression, testing, and approaches to learning."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"The number 20.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAADh0lEQVQYGR3BTUwcVRwA8P9782Zmdz52Z3e2O/vBR4GCbJGkxGjQtCqxFTRROPSstNx782g8GA+mUQ8meLBFaJNi0oMx2prYEA8UG0Ji0kYOFoILC8x+wLJ0dmd33nszY+Lvhz45SySfSxSMCiRfy8LFD4+svJHN5c2EQMTmi1Mh8B2Pp/3OyNFmevc7pALoAKoG6jDxuR8yCCuAZ640xi/Fzw2OZqyUkVCjCkKYMq4rkYB6jtP6x+6jyVz++afYhRA1AYrCKxKQGmgzk+HbV1JDhYyVKR/aTrOpKEqUiBIhB3Z5e+ffuKr19vZtQcyHAcP+AwGA7xJ+BDDSRcYvqemsqqiLCz/cu7UAALNzs9OXJ0JEZm/cYM3jrp6Xbs3PFwYG/+64icZ1016AEDAHUN56j2oxy8pUKxWv1Vr68e7nX36xeHuxuFN8tHzn8sTEysrqO2++8fODB5IsdfcObOfGGRagA1iMALayqqYjjDK57Edz16NhWCmXJ96f6uo/267tm6YZj8dyudyBbXucpU2zEc+exqaDNmBp7AIjoqoqnDFOKe+0d5aX7n/z7dTUZDKTSfb27Ty8f1zalSMRj3PKGBZQNG7UtT6/DRgnUj5GgiAwRlnHRUQ8DvHLr786fL6AI1HJzKSL9erTv1AY+IxRn/HQl2W5rZ5hLmAQJYQQhAGjHiKSXa3e/OXRxekZTdMAIBaRhwE6D5drG094GDCv3em4POA8xKwJmL04DX2fMQYAPAjWVh+PjBaGzxf8IGDUq1fKHoCX6hbTls88r93yaMdpNWVK2Qlgb3MtcFtNxyGiWLbL976//cHVq6quB0HAOeOuiwcg+e6kku+q16oe5x6jjXotrJVpCwivgl+rnsSNpGnuFYsAQCndfPZMkqR8KkmapycRa6vurP653tPdLRBSqdf5kc0OtzoIhDEApIhK/znKueM466uPn6ytrfz2+/bu7lhhKHkmtS3Fv/p6vru/b3bumqZrxdJ+/95O9Nc7IAG6ZkJ4DJm5j6XBISQIRiJBCMEYi6IouE4C89DqctueEdMkWd7dK/W4zfjSzUijJCogXDBkEPzW+lOjMIx13WPM+J+m662TeiphID1GiNhoNPZLB5bTkH+6yzafCwkgMgijMTkMWeDCyfqGlrPiVuagUrEPD91Wq7ZXDBgt1Y5L+wfY95MVGxY+8zbKQQywCAjDf4ZOwjSZZuE9AAAAAElFTkSuQmCC","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/6amp8fmeVDhXPf8o6nxzBC/65575f34ce81cc2cca8e7dba6c5d68d8/Image_default_LessonsLearned.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6amp8fmeVDhXPf8o6nxzBC/65575f34ce81cc2cca8e7dba6c5d68d8/Image_default_LessonsLearned.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6amp8fmeVDhXPf8o6nxzBC/65575f34ce81cc2cca8e7dba6c5d68d8/Image_default_LessonsLearned.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6amp8fmeVDhXPf8o6nxzBC/65575f34ce81cc2cca8e7dba6c5d68d8/Image_default_LessonsLearned.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6amp8fmeVDhXPf8o6nxzBC/65575f34ce81cc2cca8e7dba6c5d68d8/Image_default_LessonsLearned.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6amp8fmeVDhXPf8o6nxzBC/65575f34ce81cc2cca8e7dba6c5d68d8/Image_default_LessonsLearned.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6amp8fmeVDhXPf8o6nxzBC/65575f34ce81cc2cca8e7dba6c5d68d8/Image_default_LessonsLearned.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6amp8fmeVDhXPf8o6nxzBC/65575f34ce81cc2cca8e7dba6c5d68d8/Image_default_LessonsLearned.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6amp8fmeVDhXPf8o6nxzBC/65575f34ce81cc2cca8e7dba6c5d68d8/Image_default_LessonsLearned.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6amp8fmeVDhXPf8o6nxzBC/65575f34ce81cc2cca8e7dba6c5d68d8/Image_default_LessonsLearned.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Marty Friedel","slug":"marty-friedel"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":null},{"title":"A how-to guide to SVG animation","slug":"guide-svg-animation","featured":false,"lastUpdated":"Aug 29th, 2022","description":{"description":"<p>Find out different ways you can animate SVG with HTML, CSS, and JavaScript.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Find out different ways you can animate SVG with HTML, CSS, and JavaScript."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"SVG animation","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/AmJMd7T2Cbyjxwx8g4YrA/a2246d2d63ffe3542c5a5490991ab6fa/img-svg-howto-tinymce.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/AmJMd7T2Cbyjxwx8g4YrA/a2246d2d63ffe3542c5a5490991ab6fa/img-svg-howto-tinymce.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/AmJMd7T2Cbyjxwx8g4YrA/a2246d2d63ffe3542c5a5490991ab6fa/img-svg-howto-tinymce.jpg?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/AmJMd7T2Cbyjxwx8g4YrA/a2246d2d63ffe3542c5a5490991ab6fa/img-svg-howto-tinymce.jpg?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/AmJMd7T2Cbyjxwx8g4YrA/a2246d2d63ffe3542c5a5490991ab6fa/img-svg-howto-tinymce.jpg?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/AmJMd7T2Cbyjxwx8g4YrA/a2246d2d63ffe3542c5a5490991ab6fa/img-svg-howto-tinymce.jpg?w=1478&h=832&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/AmJMd7T2Cbyjxwx8g4YrA/a2246d2d63ffe3542c5a5490991ab6fa/img-svg-howto-tinymce.jpg?w=1528&h=860&q=50&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/AmJMd7T2Cbyjxwx8g4YrA/a2246d2d63ffe3542c5a5490991ab6fa/img-svg-howto-tinymce.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/AmJMd7T2Cbyjxwx8g4YrA/a2246d2d63ffe3542c5a5490991ab6fa/img-svg-howto-tinymce.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/AmJMd7T2Cbyjxwx8g4YrA/a2246d2d63ffe3542c5a5490991ab6fa/img-svg-howto-tinymce.jpg?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/AmJMd7T2Cbyjxwx8g4YrA/a2246d2d63ffe3542c5a5490991ab6fa/img-svg-howto-tinymce.jpg?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/AmJMd7T2Cbyjxwx8g4YrA/a2246d2d63ffe3542c5a5490991ab6fa/img-svg-howto-tinymce.jpg?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/AmJMd7T2Cbyjxwx8g4YrA/a2246d2d63ffe3542c5a5490991ab6fa/img-svg-howto-tinymce.jpg?w=1478&h=832&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/AmJMd7T2Cbyjxwx8g4YrA/a2246d2d63ffe3542c5a5490991ab6fa/img-svg-howto-tinymce.jpg?w=1528&h=860&q=50&fm=webp&fit=scale 1528w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Juan Calou","slug":"juan-calou"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"How to create SVG animations | TinyMCE"},"metaDescription":{"metaDescription":"Guide on different ways you can animate SVG with HTML, CSS, JavaScript with detailed instructions and examples."}},{"title":"Software development trends 2023: Stack Overflow survey analysis","slug":"software-development-trends","featured":false,"lastUpdated":"Oct 4th, 2023","description":{"description":"<p>Curious about your career direction? Stack Overflow's software developer survey has some useful career insights. Read on to find out about education, business size, and AI adoption.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Curious about your career direction? Stack Overflow's software developer survey has some useful career insights. Read on to find out about education, business size, and AI adoption."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Charts and code brackets are arrayed together with a robot character completing results analysis","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAALABQDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAQQHCP/EACUQAAICAQMDBAMAAAAAAAAAAAECAwQRAAUGEhMxByFBYQgikf/EABgBAAMBAQAAAAAAAAAAAAAAAAIEBQcG/8QAJhEAAgEDAgQHAAAAAAAAAAAAAQIRAAMEISIFEjFhBkFRcaGxwf/aAAwDAQACEQMRAD8ArXo5xTh/Il3ibmN9aFWt2hXJs9juM3V1DP1hf7raeOZOfYCLw8HmMzAnQR2PepOLZtsrXLo2j7+Ko+/fjbsFqtYucf3etFQtVopduee40hY+/U2Av7K2QB4xjXO43iLLtALlqWKk820DT08oI9qYbFsONhiY7/tZvKsjFXUo4OGU/B+RrSVYOoZTINR2UqSrdRQBMbB19nHhh50RAYQaHprT0XJt4ghSKPdr0cUYCpGtlwqqPAAzgD60s+Di3CWe0pJ66CjFx1GhpJpGlYu56nYkkn5OmFVUAVRAFBM6mv/Z","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/wpK4Dky9vEeRjCrUC76HV/66974732f1d0f49234f332fbc669e579/TinyMCE___-Blog_Header-_-Rework_-34-_v1.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/wpK4Dky9vEeRjCrUC76HV/66974732f1d0f49234f332fbc669e579/TinyMCE___-Blog_Header-_-Rework_-34-_v1.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/wpK4Dky9vEeRjCrUC76HV/66974732f1d0f49234f332fbc669e579/TinyMCE___-Blog_Header-_-Rework_-34-_v1.jpg?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/wpK4Dky9vEeRjCrUC76HV/66974732f1d0f49234f332fbc669e579/TinyMCE___-Blog_Header-_-Rework_-34-_v1.jpg?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/wpK4Dky9vEeRjCrUC76HV/66974732f1d0f49234f332fbc669e579/TinyMCE___-Blog_Header-_-Rework_-34-_v1.jpg?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/wpK4Dky9vEeRjCrUC76HV/66974732f1d0f49234f332fbc669e579/TinyMCE___-Blog_Header-_-Rework_-34-_v1.jpg?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/wpK4Dky9vEeRjCrUC76HV/66974732f1d0f49234f332fbc669e579/TinyMCE___-Blog_Header-_-Rework_-34-_v1.jpg?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/wpK4Dky9vEeRjCrUC76HV/66974732f1d0f49234f332fbc669e579/TinyMCE___-Blog_Header-_-Rework_-34-_v1.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/wpK4Dky9vEeRjCrUC76HV/66974732f1d0f49234f332fbc669e579/TinyMCE___-Blog_Header-_-Rework_-34-_v1.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/wpK4Dky9vEeRjCrUC76HV/66974732f1d0f49234f332fbc669e579/TinyMCE___-Blog_Header-_-Rework_-34-_v1.jpg?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/wpK4Dky9vEeRjCrUC76HV/66974732f1d0f49234f332fbc669e579/TinyMCE___-Blog_Header-_-Rework_-34-_v1.jpg?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/wpK4Dky9vEeRjCrUC76HV/66974732f1d0f49234f332fbc669e579/TinyMCE___-Blog_Header-_-Rework_-34-_v1.jpg?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/wpK4Dky9vEeRjCrUC76HV/66974732f1d0f49234f332fbc669e579/TinyMCE___-Blog_Header-_-Rework_-34-_v1.jpg?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/wpK4Dky9vEeRjCrUC76HV/66974732f1d0f49234f332fbc669e579/TinyMCE___-Blog_Header-_-Rework_-34-_v1.jpg?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Latest software development trends 2023: Stack Overflow survey | TinyMCE"},"metaDescription":{"metaDescription":"The most recent info on software development trends based Stack Overflow survey results for developers"}},{"title":"How to add rich text editor in Django ","slug":"django-tinymce","featured":false,"lastUpdated":"May 13th, 2020","description":{"description":"<p>Thanks to the django-tinymce project, built and maintained by a dedicated community of open source contributors, developers can enhance their Django apps with the power and flexibility that comes with our TinyMCE rich text editor.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Thanks to the django-tinymce project, built and maintained by a dedicated community of open source contributors, developers can enhance their Django apps with the power and flexibility that comes with our TinyMCE rich text editor."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Text \"django-tinymce\".","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAMAAAAhxq8pAAAC9FBMVEUHougGougNpekRqOkSqOkKpOgEoOgYs+siw+8eu+0GoegIo+gIn+cOo+gRpegSpegLoegHn+cFnecWr+ogvu4bt+wGnucJoOcPpOgInOcOn+cRoecSoecLnecHm+YEmOYVrOkevO0atOsIm+YNnucImOYOmuYRnOYSm+YRm+YLmeYPougXruoduewbtOsVpegTpegJmuYPluYRluYRlOYUnecNmOcHkeYHkuYIkeUIkuUTo+gctuwbtuwet+weuOwXrOoKluYRkeURkeYYp+oky+kdstwQm+QOm+gRoekPnegRoOgNmecRoOkbsuwdtOwctOwVp+oKkeYMj+UQiuUXoukn0eYo1OQjxNwix+Aj1eck0uUkzuYkzeQl0OYky+Ml0eYUoOESm+gZsOwSpOkHjOUMjOURjuURiuYPkechvuQhvtocyt0AuNkkutYQqdUAq9oOyeQZ1eEAst0AudkAidYAg+YAk+cAh+YAheUFiuYMiuYVpusKhucGfOMAjOMtodiVr+aSrONxmN9WlOhGs+Q1ptNPjOJdluZYlekpiOhZlelAjudUl+kAhuYXr+0TousIhecAhuhDqebT2+y+x9/M0+XN1Oi5xejAyujFzePU2urQ1+jCzui0wd/CzufU2uZUkOEAgecWre0RmOoIf+cAgOcAid+it+WquNyottiWqtqftOHL0uOPptmbrtqltt2puuCnuuSyvNQ0gdwAf+gQlusJeugIeegEeugAd+kAd+YAdeMAdOQAdOV/oeV7ltUAceUAdeUAd+UAeOUAe+QAeuMAfOcAfegJd+kJeOkIeOkFeOkAeOkAhuoAheoAdOkAeekAe+kCfOkHeukHeOkJduoIduoIdeoKd+oMduoKhusMou8Nou8MiOsNd+oNeeoNeuoMeOoJdOsIdOsLdesMdesMhuwPoO8Po+8RpO8So+8PiewNdusNeOsMdusIcu0Kc+0MdO0Mh+4OpPEPpvEQpvERp/ERqPERpvEOie4LdO1vg87MAAAAeElEQVQYGQXBQUrDABRAwTfhG7Q0ICb3P2JxEypUiTPKtZBXtcLz5l6IV7UCs4X89l5v4HmbO3hVtQab2QC64Fown4Br4W+A+QIAwBwAAJgDAIBmBwDAHAAQMDsA4FqYPTyuPVBhtsodQDmbrQRAzi3fFQA/H2f1D4+IFQEAslCnAAAAAElFTkSuQmCC","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/7C0UgRv1Jnh4eKxONOcOoU/615f7b30daaea58215eb692c0672c96c/Image_default_Django.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/7C0UgRv1Jnh4eKxONOcOoU/615f7b30daaea58215eb692c0672c96c/Image_default_Django.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/7C0UgRv1Jnh4eKxONOcOoU/615f7b30daaea58215eb692c0672c96c/Image_default_Django.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/7C0UgRv1Jnh4eKxONOcOoU/615f7b30daaea58215eb692c0672c96c/Image_default_Django.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/7C0UgRv1Jnh4eKxONOcOoU/615f7b30daaea58215eb692c0672c96c/Image_default_Django.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/7C0UgRv1Jnh4eKxONOcOoU/615f7b30daaea58215eb692c0672c96c/Image_default_Django.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/7C0UgRv1Jnh4eKxONOcOoU/615f7b30daaea58215eb692c0672c96c/Image_default_Django.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/7C0UgRv1Jnh4eKxONOcOoU/615f7b30daaea58215eb692c0672c96c/Image_default_Django.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/7C0UgRv1Jnh4eKxONOcOoU/615f7b30daaea58215eb692c0672c96c/Image_default_Django.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/7C0UgRv1Jnh4eKxONOcOoU/615f7b30daaea58215eb692c0672c96c/Image_default_Django.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ben Long","slug":"ben-long"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"How to add rich text editor in Django | TinyMCE"},"metaDescription":{"metaDescription":"Enhance your Django apps with the power of a WYSIWYG rich text editor, thanks to the django-tinymce project."}},{"title":"React accessibility: making your React app accessible","slug":"react-accessibility","featured":false,"lastUpdated":"Sep 6th, 2023","description":{"description":"<p>A11y best practices are essential. For a guide on getting started with accessibility in your React app, read on.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"A11y best practices are essential. For a guide on getting started with accessibility in your React app, read on."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"The text area and a react app expressed in symbols on a green background","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAA5FBMVEUPqlgOqlgMqlgNqlgJqlcAqVUAqVMAqFIAqVQCqlYKqlcLqlcMqlcIqVcvq2AsqV4pq14AqE4Ap0kAqE8EqlYBqlcApUiyxKHs8uvZ59xVsHNEr2lhtYCFwqJnt4QAqEwHqlYAqlcApETMx6/f3//d3v/w9fVNr208rGS22tnR7v+62905rGMOqlcApkq+upjSzNvPydrZ3tIwrF8xq1+73eDS7/+/2+NEq2gIqlgAqlVDplFYqVJXqFFAqFMAqFEApklyuY2XxbR2tpAGqVYGqlcAqlYAqlQBqlYAp0cAqE0IqlcLeSYnAAAAdUlEQVQIHW3BsQ7BQACA4f+/qzS9dhSDZ/AA3sEz2ztKbDazwSQSoecapYvv4x8pRBwyXwJGP3K4ZQqBNCzUu416fQGCSxUn5wwV0Dk7bY5QUXTOKAS3/lxW+wwBct+2Q3o2j0Ndr/vMxBhCMKZdioxkJmRGb2rwGStd8qt6AAAAAElFTkSuQmCC","aspectRatio":1.7824074074074074,"src":"//images.ctfassets.net/s600jj41gsex/336v6qodKUybJ7KZztKyiL/cb4079e45a50a4bb3c6b0a8bd082c1ec/How_to_enrich_React_textarea_with_TinyMCE.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/336v6qodKUybJ7KZztKyiL/cb4079e45a50a4bb3c6b0a8bd082c1ec/How_to_enrich_React_textarea_with_TinyMCE.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/336v6qodKUybJ7KZztKyiL/cb4079e45a50a4bb3c6b0a8bd082c1ec/How_to_enrich_React_textarea_with_TinyMCE.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/336v6qodKUybJ7KZztKyiL/cb4079e45a50a4bb3c6b0a8bd082c1ec/How_to_enrich_React_textarea_with_TinyMCE.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/336v6qodKUybJ7KZztKyiL/cb4079e45a50a4bb3c6b0a8bd082c1ec/How_to_enrich_React_textarea_with_TinyMCE.png?w=1109&h=622&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/336v6qodKUybJ7KZztKyiL/cb4079e45a50a4bb3c6b0a8bd082c1ec/How_to_enrich_React_textarea_with_TinyMCE.png?w=1478&h=829&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/336v6qodKUybJ7KZztKyiL/cb4079e45a50a4bb3c6b0a8bd082c1ec/How_to_enrich_React_textarea_with_TinyMCE.png?w=1925&h=1080&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/336v6qodKUybJ7KZztKyiL/cb4079e45a50a4bb3c6b0a8bd082c1ec/How_to_enrich_React_textarea_with_TinyMCE.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/336v6qodKUybJ7KZztKyiL/cb4079e45a50a4bb3c6b0a8bd082c1ec/How_to_enrich_React_textarea_with_TinyMCE.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/336v6qodKUybJ7KZztKyiL/cb4079e45a50a4bb3c6b0a8bd082c1ec/How_to_enrich_React_textarea_with_TinyMCE.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/336v6qodKUybJ7KZztKyiL/cb4079e45a50a4bb3c6b0a8bd082c1ec/How_to_enrich_React_textarea_with_TinyMCE.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/336v6qodKUybJ7KZztKyiL/cb4079e45a50a4bb3c6b0a8bd082c1ec/How_to_enrich_React_textarea_with_TinyMCE.png?w=1109&h=622&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/336v6qodKUybJ7KZztKyiL/cb4079e45a50a4bb3c6b0a8bd082c1ec/How_to_enrich_React_textarea_with_TinyMCE.png?w=1478&h=829&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/336v6qodKUybJ7KZztKyiL/cb4079e45a50a4bb3c6b0a8bd082c1ec/How_to_enrich_React_textarea_with_TinyMCE.png?w=1925&h=1080&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"React accessibility: making your React app accessible | TinyMCE"},"metaDescription":{"metaDescription":"Dive into React accessibility: Understand web standards, build accessible components, learn a11y best practices, and master"}},{"title":"HTML editor with preview: single screen or side-by-side editing?","slug":"side-by-side-single-screen-wysiwyg-html-editing","featured":false,"lastUpdated":"Sep 20th, 2021","description":{"description":"<p>Side-by-side and single screen editing are two separate ways you can edit source code. WYSIWYG HTML editors running in web applications or websites typically use the single screen method for modifying any source code inside the editor. VS Code uses Side-by-side editing. An issue of trust and resources appear when thinking about implementing a side-by-side editing view in a WYSIWYG. It&rsquo;s possible to optimize TinyMCE for single screen HTML editing, and this article explains how.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Side-by-side and single screen editing are two separate ways you can edit source code. WYSIWYG HTML editors running in web applications or websites typically use the single screen method for modifying any source code inside the editor. VS Code uses Side-by-side editing. An issue of trust and resources appear when thinking about implementing a side-by-side editing view in a WYSIWYG. It’s possible to optimize TinyMCE for single screen HTML editing, and this article explains how."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"A laptop and notebook on a table, representing the single scree and side-by-side WYSIWYG HTML editing","artistName":"Mel Poole","image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.8120481927710843,"src":"//images.ctfassets.net/s600jj41gsex/59sYysl1s64w37koGAoUN9/4dd8044db633f6824cc6a39fba9c2b07/mel-poole-nuFOLbZn6KA-unsplash-BW.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/59sYysl1s64w37koGAoUN9/4dd8044db633f6824cc6a39fba9c2b07/mel-poole-nuFOLbZn6KA-unsplash-BW.jpg?w=185&h=102&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/59sYysl1s64w37koGAoUN9/4dd8044db633f6824cc6a39fba9c2b07/mel-poole-nuFOLbZn6KA-unsplash-BW.jpg?w=370&h=204&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/59sYysl1s64w37koGAoUN9/4dd8044db633f6824cc6a39fba9c2b07/mel-poole-nuFOLbZn6KA-unsplash-BW.jpg?w=739&h=408&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/59sYysl1s64w37koGAoUN9/4dd8044db633f6824cc6a39fba9c2b07/mel-poole-nuFOLbZn6KA-unsplash-BW.jpg?w=1109&h=612&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/59sYysl1s64w37koGAoUN9/4dd8044db633f6824cc6a39fba9c2b07/mel-poole-nuFOLbZn6KA-unsplash-BW.jpg?w=1478&h=816&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/59sYysl1s64w37koGAoUN9/4dd8044db633f6824cc6a39fba9c2b07/mel-poole-nuFOLbZn6KA-unsplash-BW.jpg?w=2217&h=1223&q=50&fit=scale 2217w","srcWebp":"//images.ctfassets.net/s600jj41gsex/59sYysl1s64w37koGAoUN9/4dd8044db633f6824cc6a39fba9c2b07/mel-poole-nuFOLbZn6KA-unsplash-BW.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/59sYysl1s64w37koGAoUN9/4dd8044db633f6824cc6a39fba9c2b07/mel-poole-nuFOLbZn6KA-unsplash-BW.jpg?w=185&h=102&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/59sYysl1s64w37koGAoUN9/4dd8044db633f6824cc6a39fba9c2b07/mel-poole-nuFOLbZn6KA-unsplash-BW.jpg?w=370&h=204&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/59sYysl1s64w37koGAoUN9/4dd8044db633f6824cc6a39fba9c2b07/mel-poole-nuFOLbZn6KA-unsplash-BW.jpg?w=739&h=408&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/59sYysl1s64w37koGAoUN9/4dd8044db633f6824cc6a39fba9c2b07/mel-poole-nuFOLbZn6KA-unsplash-BW.jpg?w=1109&h=612&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/59sYysl1s64w37koGAoUN9/4dd8044db633f6824cc6a39fba9c2b07/mel-poole-nuFOLbZn6KA-unsplash-BW.jpg?w=1478&h=816&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/59sYysl1s64w37koGAoUN9/4dd8044db633f6824cc6a39fba9c2b07/mel-poole-nuFOLbZn6KA-unsplash-BW.jpg?w=2217&h=1223&q=50&fm=webp&fit=scale 2217w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"HTML editor with preview: single screen or side-by-side editing? | TinyMCE"},"metaDescription":{"metaDescription":"There are two ways to check HTML code changes in real time: with the help of a single screen or a side-by-side editing preview. We'll talk about both methods and considerations for their use."}},{"title":"Easy comparison of IDE vs text editors for developers","slug":"text-editor-vs-ide-vs-code-editor","featured":false,"lastUpdated":"Jan 12th, 2023","description":{"description":"<p>Confused how IDE differs from text editor? Get clarity in this article, which explores the major differences between the two.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Confused how IDE differs from text editor? Get clarity in this article, which explores the major differences between the two."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"IDE and Text Editors separated by a large slash character to represent the divide","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABHVBMVEUMEywKESsGDioACSgABycBCygIECoMEiwLEisHDyoABCYACCgSFy4FDioAACIAAB4AABkAACECCykAACUkJzdVV143OUUbHzJUVl55e3+am556e4ABCigABSdAQkxcXmQ9P0kJESsIESsWGzBGSFFsbXOJio5tbnQAACQeIjRUVV1UVl0AASYIECsGDyoAACMAABsAABE7PUhcXWQ+QEoAAiYKEisEDSlRU1pWWF8iJjYACihFRlARFy2HiIyPkJOQkpVBQ00AAB8ABicSGC5OUFhZWmEqLTsAACBISlNub3SDhIhyc3lLTFUvMT8wM0BbXWNJS1MAABp7fIGio6acnaCFhotXWGAEDik8PkkxNEEYHDEgIzUkKDgpLDsiQMDLAAAAtElEQVQIHQXBzUoCYRhA4XOcV2f8xgqin01K1CIIail449Gqfd5BP1gGFUUmgUiT49jzCKiqVaG6bioCiraq88KkzlsQ0CTVpXuqs6MnEE5U/TxUm8z7ClrwVpZl+TFIKUVv2q2ADOqffHuR78TkoF73x3kNAkMfs373a1/V5wkIwy3V6bGqXsUvQW5Pr1fNuaKmP8iIUadzs7l8fVncnUVE+70mYLxieTEumt3v2e3g4XQD/17JNp95bZJAAAAAAElFTkSuQmCC","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/0yNGl6CZizsVGScJAIfXz/08db183d82e5cc2285830849c35f1dbf/img-ide-vs-text-edtor-version2.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/0yNGl6CZizsVGScJAIfXz/08db183d82e5cc2285830849c35f1dbf/img-ide-vs-text-edtor-version2.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/0yNGl6CZizsVGScJAIfXz/08db183d82e5cc2285830849c35f1dbf/img-ide-vs-text-edtor-version2.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/0yNGl6CZizsVGScJAIfXz/08db183d82e5cc2285830849c35f1dbf/img-ide-vs-text-edtor-version2.png?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/0yNGl6CZizsVGScJAIfXz/08db183d82e5cc2285830849c35f1dbf/img-ide-vs-text-edtor-version2.png?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/0yNGl6CZizsVGScJAIfXz/08db183d82e5cc2285830849c35f1dbf/img-ide-vs-text-edtor-version2.png?w=1478&h=832&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/0yNGl6CZizsVGScJAIfXz/08db183d82e5cc2285830849c35f1dbf/img-ide-vs-text-edtor-version2.png?w=1528&h=860&q=50&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/0yNGl6CZizsVGScJAIfXz/08db183d82e5cc2285830849c35f1dbf/img-ide-vs-text-edtor-version2.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/0yNGl6CZizsVGScJAIfXz/08db183d82e5cc2285830849c35f1dbf/img-ide-vs-text-edtor-version2.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/0yNGl6CZizsVGScJAIfXz/08db183d82e5cc2285830849c35f1dbf/img-ide-vs-text-edtor-version2.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/0yNGl6CZizsVGScJAIfXz/08db183d82e5cc2285830849c35f1dbf/img-ide-vs-text-edtor-version2.png?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/0yNGl6CZizsVGScJAIfXz/08db183d82e5cc2285830849c35f1dbf/img-ide-vs-text-edtor-version2.png?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/0yNGl6CZizsVGScJAIfXz/08db183d82e5cc2285830849c35f1dbf/img-ide-vs-text-edtor-version2.png?w=1478&h=832&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/0yNGl6CZizsVGScJAIfXz/08db183d82e5cc2285830849c35f1dbf/img-ide-vs-text-edtor-version2.png?w=1528&h=860&q=50&fm=webp&fit=scale 1528w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Difference between text editor and IDE and code editor | TinyMCE"},"metaDescription":{"metaDescription":"Confused how IDE differs from text editor? We’ve covered the major differences and provided examples to clarify this"}},{"title":"Modular programming: beyond the spaghetti mess","slug":"modular-programming-principle","featured":true,"lastUpdated":"Jun 28th, 2023","description":{"description":"<p>Considering a modular programming approach? We unpack this programming principle with everything software developers need to know.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Considering a modular programming approach? We unpack this programming principle with everything software developers need to know."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"A bowl of spaghetti contrasted with modular code blocks","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAABHVBMVEUW1eoV1eoU1eoW1eoV1esR1esI1esP1esU1esS1esN1esA1esV1eoO1eoA1Ooc1eoA1eoP1eoJ1esA1exR2O0z1usF1etI1ObB5u2G1eQW0ucI1epu1eaY2uOo08di094Q1esM1esA0+mI1+H29fLh4ehD0eVS1+pU0t2fzsmvz7SOzbpxz9RA0ucB1esO0+Xb7+z/+vnH4eur4+rI6vEA1OiP0Na9x6K+xpqQzc4A1uwQ1eoE1esf1eXE6emk4OwA0OWy5ObA5u0C1OZtrdyjl9uilNhosd4A1usS1utdzN4AzuQAyt9WzNtGydtbyM1AwtVLquFMreILzOUP1usU1usU1eoO1esb1OkC1esE1usA1+oO1usT1esV1utx4B6YAAAAA3RSTlP+/v6VFoksAAAAg0lEQVQIHWXBoQ6CUABA0Xt5wCTADNr8A4PfQfYvDXa/wWQyGpyBos5ZHMoTkmyeIwMhgkKMgAFw8CbTNmkBAxTqO9PXRH20YIA8K9Rnae+yOIOBYu7ItYmkQOlI1UAKVI5FSIH9bOUPYIC17qY3asXXFggJHE/Lw72ru+6Tu6Fn4N8XDY0gAXlft78AAAAASUVORK5CYII=","aspectRatio":1.780758556891767,"src":"//images.ctfassets.net/s600jj41gsex/2ZBzMsB6nN3dZynFMfQSiJ/1e98de5f4623c4866183c9c126f7f404/Modular_programming__beyond_the_spaghetti_mess.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/2ZBzMsB6nN3dZynFMfQSiJ/1e98de5f4623c4866183c9c126f7f404/Modular_programming__beyond_the_spaghetti_mess.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2ZBzMsB6nN3dZynFMfQSiJ/1e98de5f4623c4866183c9c126f7f404/Modular_programming__beyond_the_spaghetti_mess.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2ZBzMsB6nN3dZynFMfQSiJ/1e98de5f4623c4866183c9c126f7f404/Modular_programming__beyond_the_spaghetti_mess.png?w=739&h=415&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2ZBzMsB6nN3dZynFMfQSiJ/1e98de5f4623c4866183c9c126f7f404/Modular_programming__beyond_the_spaghetti_mess.png?w=1109&h=623&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2ZBzMsB6nN3dZynFMfQSiJ/1e98de5f4623c4866183c9c126f7f404/Modular_programming__beyond_the_spaghetti_mess.png?w=1478&h=830&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2ZBzMsB6nN3dZynFMfQSiJ/1e98de5f4623c4866183c9c126f7f404/Modular_programming__beyond_the_spaghetti_mess.png?w=1925&h=1081&q=50&fit=scale 1925w","srcWebp":"//images.ctfassets.net/s600jj41gsex/2ZBzMsB6nN3dZynFMfQSiJ/1e98de5f4623c4866183c9c126f7f404/Modular_programming__beyond_the_spaghetti_mess.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/2ZBzMsB6nN3dZynFMfQSiJ/1e98de5f4623c4866183c9c126f7f404/Modular_programming__beyond_the_spaghetti_mess.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2ZBzMsB6nN3dZynFMfQSiJ/1e98de5f4623c4866183c9c126f7f404/Modular_programming__beyond_the_spaghetti_mess.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2ZBzMsB6nN3dZynFMfQSiJ/1e98de5f4623c4866183c9c126f7f404/Modular_programming__beyond_the_spaghetti_mess.png?w=739&h=415&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2ZBzMsB6nN3dZynFMfQSiJ/1e98de5f4623c4866183c9c126f7f404/Modular_programming__beyond_the_spaghetti_mess.png?w=1109&h=623&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/2ZBzMsB6nN3dZynFMfQSiJ/1e98de5f4623c4866183c9c126f7f404/Modular_programming__beyond_the_spaghetti_mess.png?w=1478&h=830&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/2ZBzMsB6nN3dZynFMfQSiJ/1e98de5f4623c4866183c9c126f7f404/Modular_programming__beyond_the_spaghetti_mess.png?w=1925&h=1081&q=50&fm=webp&fit=scale 1925w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Millie Macdonald","slug":"millie-macdonald"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Modular programming: Definitions, benefits, and predictions"},"metaDescription":{"metaDescription":"Considering a modular programming approach? We unpack this programming principle with everything software developers need to know."}},{"title":"Javascript vs Python: A comparison for new web developers and rich text editors","slug":"python-vs-javascript","featured":false,"lastUpdated":"Dec 15th, 2022","description":{"description":"<p>Find out whether Python or JavaScript is better for web development and rich text editor integration</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Find out whether Python or JavaScript is better for web development and rich text editor integration"}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"JavaScript vs Python text displayed over a background with a pattern of diagonal lines","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/5bvY0hnEYIbnWk5guqtJiZ/65aa65f60cb3f14abda14145229fc1ef/img-js-v-python-ver0.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/5bvY0hnEYIbnWk5guqtJiZ/65aa65f60cb3f14abda14145229fc1ef/img-js-v-python-ver0.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5bvY0hnEYIbnWk5guqtJiZ/65aa65f60cb3f14abda14145229fc1ef/img-js-v-python-ver0.jpg?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5bvY0hnEYIbnWk5guqtJiZ/65aa65f60cb3f14abda14145229fc1ef/img-js-v-python-ver0.jpg?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5bvY0hnEYIbnWk5guqtJiZ/65aa65f60cb3f14abda14145229fc1ef/img-js-v-python-ver0.jpg?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/5bvY0hnEYIbnWk5guqtJiZ/65aa65f60cb3f14abda14145229fc1ef/img-js-v-python-ver0.jpg?w=1478&h=832&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/5bvY0hnEYIbnWk5guqtJiZ/65aa65f60cb3f14abda14145229fc1ef/img-js-v-python-ver0.jpg?w=1528&h=860&q=50&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/5bvY0hnEYIbnWk5guqtJiZ/65aa65f60cb3f14abda14145229fc1ef/img-js-v-python-ver0.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/5bvY0hnEYIbnWk5guqtJiZ/65aa65f60cb3f14abda14145229fc1ef/img-js-v-python-ver0.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5bvY0hnEYIbnWk5guqtJiZ/65aa65f60cb3f14abda14145229fc1ef/img-js-v-python-ver0.jpg?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5bvY0hnEYIbnWk5guqtJiZ/65aa65f60cb3f14abda14145229fc1ef/img-js-v-python-ver0.jpg?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5bvY0hnEYIbnWk5guqtJiZ/65aa65f60cb3f14abda14145229fc1ef/img-js-v-python-ver0.jpg?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/5bvY0hnEYIbnWk5guqtJiZ/65aa65f60cb3f14abda14145229fc1ef/img-js-v-python-ver0.jpg?w=1478&h=832&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/5bvY0hnEYIbnWk5guqtJiZ/65aa65f60cb3f14abda14145229fc1ef/img-js-v-python-ver0.jpg?w=1528&h=860&q=50&fm=webp&fit=scale 1528w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Javascript vs Python: which is better for web development and rich text editors | TinyMCE"},"metaDescription":{"metaDescription":"We compare Python and JavaScript programming languages to help you decide which one to choose for web development and rich text editor integration."}},{"title":"How effective is your web application testing process? ","slug":"web-application-testing-process","featured":false,"lastUpdated":"Aug 11th, 2021","description":{"description":"<p>In this article, we take a look at normalization. A large part of the automated testing is making sure your app or website looks the same and works the same, across different browsers and operating systems. This process is called normalization.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In this article, we take a look at normalization. A large part of the automated testing is making sure your app or website looks the same and works the same, across different browsers and operating systems. This process is called normalization."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Woman coding in her city apartment","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.4976353126642143,"src":"//images.ctfassets.net/s600jj41gsex/4SqRagiKVtUJM9PqLWrf6j/e597ec44d9103b0a42f1ed4877e73f8b/photo-1573495612937-f01934eeaaa7.jpeg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/4SqRagiKVtUJM9PqLWrf6j/e597ec44d9103b0a42f1ed4877e73f8b/photo-1573495612937-f01934eeaaa7.jpeg?w=185&h=124&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4SqRagiKVtUJM9PqLWrf6j/e597ec44d9103b0a42f1ed4877e73f8b/photo-1573495612937-f01934eeaaa7.jpeg?w=370&h=247&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4SqRagiKVtUJM9PqLWrf6j/e597ec44d9103b0a42f1ed4877e73f8b/photo-1573495612937-f01934eeaaa7.jpeg?w=739&h=493&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4SqRagiKVtUJM9PqLWrf6j/e597ec44d9103b0a42f1ed4877e73f8b/photo-1573495612937-f01934eeaaa7.jpeg?w=1109&h=741&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4SqRagiKVtUJM9PqLWrf6j/e597ec44d9103b0a42f1ed4877e73f8b/photo-1573495612937-f01934eeaaa7.jpeg?w=1478&h=987&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4SqRagiKVtUJM9PqLWrf6j/e597ec44d9103b0a42f1ed4877e73f8b/photo-1573495612937-f01934eeaaa7.jpeg?w=2217&h=1480&q=50&fit=scale 2217w,\n//images.ctfassets.net/s600jj41gsex/4SqRagiKVtUJM9PqLWrf6j/e597ec44d9103b0a42f1ed4877e73f8b/photo-1573495612937-f01934eeaaa7.jpeg?w=2850&h=1903&q=50&fit=scale 2850w","srcWebp":"//images.ctfassets.net/s600jj41gsex/4SqRagiKVtUJM9PqLWrf6j/e597ec44d9103b0a42f1ed4877e73f8b/photo-1573495612937-f01934eeaaa7.jpeg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/4SqRagiKVtUJM9PqLWrf6j/e597ec44d9103b0a42f1ed4877e73f8b/photo-1573495612937-f01934eeaaa7.jpeg?w=185&h=124&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4SqRagiKVtUJM9PqLWrf6j/e597ec44d9103b0a42f1ed4877e73f8b/photo-1573495612937-f01934eeaaa7.jpeg?w=370&h=247&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4SqRagiKVtUJM9PqLWrf6j/e597ec44d9103b0a42f1ed4877e73f8b/photo-1573495612937-f01934eeaaa7.jpeg?w=739&h=493&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4SqRagiKVtUJM9PqLWrf6j/e597ec44d9103b0a42f1ed4877e73f8b/photo-1573495612937-f01934eeaaa7.jpeg?w=1109&h=741&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4SqRagiKVtUJM9PqLWrf6j/e597ec44d9103b0a42f1ed4877e73f8b/photo-1573495612937-f01934eeaaa7.jpeg?w=1478&h=987&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4SqRagiKVtUJM9PqLWrf6j/e597ec44d9103b0a42f1ed4877e73f8b/photo-1573495612937-f01934eeaaa7.jpeg?w=2217&h=1480&q=50&fm=webp&fit=scale 2217w,\n//images.ctfassets.net/s600jj41gsex/4SqRagiKVtUJM9PqLWrf6j/e597ec44d9103b0a42f1ed4877e73f8b/photo-1573495612937-f01934eeaaa7.jpeg?w=2850&h=1903&q=50&fm=webp&fit=scale 2850w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"How effective is your web application testing process? "},"metaDescription":{"metaDescription":"In this article, we take a look at normalization. A large part of the automated testing is making sure your app or website looks the same and works the same, across different browsers and operating systems. This process is called normalization.\n"}},{"title":"A quick guide to browser selection models","slug":"a-quick-guide-to-browser-selection-models","featured":false,"lastUpdated":"Feb 20th, 2017","description":{"description":"<p>One of the complexities of writing a web-based text editor is accounting for differences between browser selection APIs.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"One of the complexities of writing a web-based text editor is accounting for differences between browser selection APIs."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Abstract image of browser tab and content.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAANABQDAREAAhEBAxEB/8QAFwABAAMAAAAAAAAAAAAAAAAABwUGCP/EACsQAAEDAwMCAwkAAAAAAAAAAAECAxEEBQYABxIhQQgUIhMVIzEzUVJhcf/EABgBAAMBAQAAAAAAAAAAAAAAAAMFBgIE/8QAKBEAAQIEAwgDAAAAAAAAAAAAAQIEAAMREgUhMRMVQVFhocHhBpLi/9oADAMBAAIRAxEAPwDaGHYCLw2uqerDSUDIKXCloEhXSPUT+/lGppu2E4XE0EXbp4G4sCaqPXxTzEyrZure+nk9KsL6oSKCTHafi66N38l9vcB3xIAzbn7/AJigXHH/ACtY6w4UuONKLalpTAUQYmO2lak2qKeUMkrC0hYFAc4XMl2mXedrshxdm9u0DtzRwTcGmfWwZSeSU8hJ6fcafhoNiqTdrxifaYyWmJSX+zCtma2nQ9Dl4gs2a8Jdz20z2mvtbuRc8mZbZda8jW0xCJUmOQJdVBH876yhimWsTAo5RT4383XjLIsy0ly6kGqRQ5cNIVqzaZNVVvPe9Cnmsqj2ExJn8tDUwuUVXdolEYqUJCbNOvqP/9k=","aspectRatio":1.5633587786259542,"src":"//images.ctfassets.net/s600jj41gsex/6zfHmjbMtiVMcClusKRcHB/086ad9a0a8049df10d1fc4dd8d887df8/iStock-609056396_A-quick-guide-to-browser-selection-models-1024x655.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6zfHmjbMtiVMcClusKRcHB/086ad9a0a8049df10d1fc4dd8d887df8/iStock-609056396_A-quick-guide-to-browser-selection-models-1024x655.jpg?w=185&h=118&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6zfHmjbMtiVMcClusKRcHB/086ad9a0a8049df10d1fc4dd8d887df8/iStock-609056396_A-quick-guide-to-browser-selection-models-1024x655.jpg?w=370&h=237&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6zfHmjbMtiVMcClusKRcHB/086ad9a0a8049df10d1fc4dd8d887df8/iStock-609056396_A-quick-guide-to-browser-selection-models-1024x655.jpg?w=739&h=473&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6zfHmjbMtiVMcClusKRcHB/086ad9a0a8049df10d1fc4dd8d887df8/iStock-609056396_A-quick-guide-to-browser-selection-models-1024x655.jpg?w=1024&h=655&q=50&fit=scale 1024w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6zfHmjbMtiVMcClusKRcHB/086ad9a0a8049df10d1fc4dd8d887df8/iStock-609056396_A-quick-guide-to-browser-selection-models-1024x655.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6zfHmjbMtiVMcClusKRcHB/086ad9a0a8049df10d1fc4dd8d887df8/iStock-609056396_A-quick-guide-to-browser-selection-models-1024x655.jpg?w=185&h=118&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6zfHmjbMtiVMcClusKRcHB/086ad9a0a8049df10d1fc4dd8d887df8/iStock-609056396_A-quick-guide-to-browser-selection-models-1024x655.jpg?w=370&h=237&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6zfHmjbMtiVMcClusKRcHB/086ad9a0a8049df10d1fc4dd8d887df8/iStock-609056396_A-quick-guide-to-browser-selection-models-1024x655.jpg?w=739&h=473&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6zfHmjbMtiVMcClusKRcHB/086ad9a0a8049df10d1fc4dd8d887df8/iStock-609056396_A-quick-guide-to-browser-selection-models-1024x655.jpg?w=1024&h=655&q=50&fm=webp&fit=scale 1024w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Team Tiny","slug":"team-tiny"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":null},{"title":"Handling undo functions in rich text editors","slug":"undo-function-handling","featured":false,"lastUpdated":"May 16th, 2022","description":{"description":"<p>Undo redo in a rich text editor can be complicated, so this article explains how it works, and how to implement undo in TinyMCE with the Undo Manager API.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Undo redo in a rich text editor can be complicated, so this article explains how it works, and how to implement undo in TinyMCE with the Undo Manager API."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Undo functionality represented by writing and circular arrow symbols","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/IICBKTjU9L8gUFJukA9Uf/962ce44ac46123e01dcb3472d516359b/Image_TInyMCE_Undo_Functionality2.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/IICBKTjU9L8gUFJukA9Uf/962ce44ac46123e01dcb3472d516359b/Image_TInyMCE_Undo_Functionality2.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/IICBKTjU9L8gUFJukA9Uf/962ce44ac46123e01dcb3472d516359b/Image_TInyMCE_Undo_Functionality2.jpg?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/IICBKTjU9L8gUFJukA9Uf/962ce44ac46123e01dcb3472d516359b/Image_TInyMCE_Undo_Functionality2.jpg?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/IICBKTjU9L8gUFJukA9Uf/962ce44ac46123e01dcb3472d516359b/Image_TInyMCE_Undo_Functionality2.jpg?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/IICBKTjU9L8gUFJukA9Uf/962ce44ac46123e01dcb3472d516359b/Image_TInyMCE_Undo_Functionality2.jpg?w=1478&h=832&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/IICBKTjU9L8gUFJukA9Uf/962ce44ac46123e01dcb3472d516359b/Image_TInyMCE_Undo_Functionality2.jpg?w=1528&h=860&q=50&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/IICBKTjU9L8gUFJukA9Uf/962ce44ac46123e01dcb3472d516359b/Image_TInyMCE_Undo_Functionality2.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/IICBKTjU9L8gUFJukA9Uf/962ce44ac46123e01dcb3472d516359b/Image_TInyMCE_Undo_Functionality2.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/IICBKTjU9L8gUFJukA9Uf/962ce44ac46123e01dcb3472d516359b/Image_TInyMCE_Undo_Functionality2.jpg?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/IICBKTjU9L8gUFJukA9Uf/962ce44ac46123e01dcb3472d516359b/Image_TInyMCE_Undo_Functionality2.jpg?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/IICBKTjU9L8gUFJukA9Uf/962ce44ac46123e01dcb3472d516359b/Image_TInyMCE_Undo_Functionality2.jpg?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/IICBKTjU9L8gUFJukA9Uf/962ce44ac46123e01dcb3472d516359b/Image_TInyMCE_Undo_Functionality2.jpg?w=1478&h=832&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/IICBKTjU9L8gUFJukA9Uf/962ce44ac46123e01dcb3472d516359b/Image_TInyMCE_Undo_Functionality2.jpg?w=1528&h=860&q=50&fm=webp&fit=scale 1528w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ravgeet Dhillon","slug":"ravgeet-dhillon"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Handling undo function in rich text editors | TinyMCE"},"metaDescription":{"metaDescription":"Undo redo function implementation in a rich text editor can be complicated. Learn how to implement undo in TinyMCE with Undo Manager API"}},{"title":"Benefits of gradual strong typing in JavaScript","slug":"benefits-of-gradual-strong-typing-in-javascript","featured":false,"lastUpdated":"Jan 24th, 2019","description":{"description":"<p>Engineer Andy Herron tells the story of the migration to vanilla ES5 at Tiny, and explores the future of TinyMCE with TypeScript. We also share Millie Macdonald's presentation at ForwardJS 2019.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Engineer Andy Herron tells the story of the migration to vanilla ES5 at Tiny, and explores the future of TinyMCE with TypeScript. We also share Millie Macdonald's presentation at ForwardJS 2019."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Developer coding on mac","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAANABQDAREAAhEBAxEB/8QAFgAAAwAAAAAAAAAAAAAAAAAABQYH/8QAJxAAAQQBBAECBwAAAAAAAAAAAQIDBBEFAAYHEiETMRQiMkFCYYH/xAAZAQACAwEAAAAAAAAAAAAAAAAEBQECAwb/xAAhEQACAgIBBAMAAAAAAAAAAAABAgADBBEhEjFBUYGRwf/aAAwDAQACEQMRAD8AXuNZ0XYe68TkDKE1t/vCkMMG1lKx2SqgRdKQB7/kdK8OxjYUI4MdZ1StWG9Sn5znU7ecMaNhZCJgaU70n9WKTfhRAs1760uayngjcHw8FchSzPoD7k03tuHa3MeVZzuS2w1Ifbjoihxbqz2CSVeCEURaz5Gq2WVo3S7AH5M0qw8ll3Rsqe3j9gHinHRpm4bksNyWwk206nsk/wA1FPB3CrORqGOVMCmVhn4kWS9AZWikhshfp+b+TtfUfoUNEXXMB0+IPTUpbY4izxvkVYzacXHugzfgiWEPOkBRQPpvx9ga0ltALE6nRYzkVgep/9k=","aspectRatio":1.510185185185185,"src":"//images.ctfassets.net/s600jj41gsex/U4IZCLq00wIhd4eQe9yd6/d2895fc649d487c792bf2e6864a80277/pexels-photo-574071-1.jpeg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/U4IZCLq00wIhd4eQe9yd6/d2895fc649d487c792bf2e6864a80277/pexels-photo-574071-1.jpeg?w=185&h=123&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/U4IZCLq00wIhd4eQe9yd6/d2895fc649d487c792bf2e6864a80277/pexels-photo-574071-1.jpeg?w=370&h=245&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/U4IZCLq00wIhd4eQe9yd6/d2895fc649d487c792bf2e6864a80277/pexels-photo-574071-1.jpeg?w=739&h=489&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/U4IZCLq00wIhd4eQe9yd6/d2895fc649d487c792bf2e6864a80277/pexels-photo-574071-1.jpeg?w=1109&h=734&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/U4IZCLq00wIhd4eQe9yd6/d2895fc649d487c792bf2e6864a80277/pexels-photo-574071-1.jpeg?w=1478&h=979&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/U4IZCLq00wIhd4eQe9yd6/d2895fc649d487c792bf2e6864a80277/pexels-photo-574071-1.jpeg?w=1631&h=1080&q=50&fit=scale 1631w","srcWebp":"//images.ctfassets.net/s600jj41gsex/U4IZCLq00wIhd4eQe9yd6/d2895fc649d487c792bf2e6864a80277/pexels-photo-574071-1.jpeg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/U4IZCLq00wIhd4eQe9yd6/d2895fc649d487c792bf2e6864a80277/pexels-photo-574071-1.jpeg?w=185&h=123&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/U4IZCLq00wIhd4eQe9yd6/d2895fc649d487c792bf2e6864a80277/pexels-photo-574071-1.jpeg?w=370&h=245&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/U4IZCLq00wIhd4eQe9yd6/d2895fc649d487c792bf2e6864a80277/pexels-photo-574071-1.jpeg?w=739&h=489&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/U4IZCLq00wIhd4eQe9yd6/d2895fc649d487c792bf2e6864a80277/pexels-photo-574071-1.jpeg?w=1109&h=734&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/U4IZCLq00wIhd4eQe9yd6/d2895fc649d487c792bf2e6864a80277/pexels-photo-574071-1.jpeg?w=1478&h=979&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/U4IZCLq00wIhd4eQe9yd6/d2895fc649d487c792bf2e6864a80277/pexels-photo-574071-1.jpeg?w=1631&h=1080&q=50&fm=webp&fit=scale 1631w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Andrew Herron","slug":"andrew-herron"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":null},{"title":"How to select and highlight text in rich text editors","slug":"select-and-highlight-text","featured":false,"lastUpdated":"Jun 20th, 2022","description":{"description":"<p>Dive into the complex cases of text selection and highlighting in text editors, find out how they work, and solutions to common problems.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Dive into the complex cases of text selection and highlighting in text editors, find out how they work, and solutions to common problems."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Highlight and select text show with highlighting and selection elements","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/4t4ougkRDOLfpI4ybW1MYA/97d3818532313f3fdaf94f68ac39cf88/img-without-background-icons-tinymce-selection.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/4t4ougkRDOLfpI4ybW1MYA/97d3818532313f3fdaf94f68ac39cf88/img-without-background-icons-tinymce-selection.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4t4ougkRDOLfpI4ybW1MYA/97d3818532313f3fdaf94f68ac39cf88/img-without-background-icons-tinymce-selection.jpg?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4t4ougkRDOLfpI4ybW1MYA/97d3818532313f3fdaf94f68ac39cf88/img-without-background-icons-tinymce-selection.jpg?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4t4ougkRDOLfpI4ybW1MYA/97d3818532313f3fdaf94f68ac39cf88/img-without-background-icons-tinymce-selection.jpg?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4t4ougkRDOLfpI4ybW1MYA/97d3818532313f3fdaf94f68ac39cf88/img-without-background-icons-tinymce-selection.jpg?w=1478&h=832&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4t4ougkRDOLfpI4ybW1MYA/97d3818532313f3fdaf94f68ac39cf88/img-without-background-icons-tinymce-selection.jpg?w=1528&h=860&q=50&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/4t4ougkRDOLfpI4ybW1MYA/97d3818532313f3fdaf94f68ac39cf88/img-without-background-icons-tinymce-selection.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/4t4ougkRDOLfpI4ybW1MYA/97d3818532313f3fdaf94f68ac39cf88/img-without-background-icons-tinymce-selection.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4t4ougkRDOLfpI4ybW1MYA/97d3818532313f3fdaf94f68ac39cf88/img-without-background-icons-tinymce-selection.jpg?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4t4ougkRDOLfpI4ybW1MYA/97d3818532313f3fdaf94f68ac39cf88/img-without-background-icons-tinymce-selection.jpg?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4t4ougkRDOLfpI4ybW1MYA/97d3818532313f3fdaf94f68ac39cf88/img-without-background-icons-tinymce-selection.jpg?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4t4ougkRDOLfpI4ybW1MYA/97d3818532313f3fdaf94f68ac39cf88/img-without-background-icons-tinymce-selection.jpg?w=1478&h=832&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4t4ougkRDOLfpI4ybW1MYA/97d3818532313f3fdaf94f68ac39cf88/img-without-background-icons-tinymce-selection.jpg?w=1528&h=860&q=50&fm=webp&fit=scale 1528w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Keanan Koppenhaver","slug":"keanan-koppenhaver"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"How to select and highlight text in rich text editors | TinyMCE"},"metaDescription":{"metaDescription":"In this article we have a deep dive into complex cases of text selection and highlighting in text editors and explain possible solutions."}},{"title":"Five common mistakes to avoid when using Angular","slug":"five-common-mistakes-to-avoid-when-using-angular","featured":false,"lastUpdated":"Jul 1st, 2020","description":{"description":"<p>Front-end frameworks like Angular enable developers to build scalable applications that can run on multiple device types. This article highlights five common mistakes to avoid when using Angular.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Front-end frameworks like Angular enable developers to build scalable applications that can run on multiple device types. This article highlights five common mistakes to avoid when using Angular."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Angular logo and a number 5.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAMAAAAhxq8pAAACwVBMVEUGFDgGEzcFATIAAAAmtbk5/v84+vw4+/04/f8dkZYIEjgMGTwHFTkHFDkFADMCAAotzdE5//84/P4WdXsEABkMFjwIFjoIFjsHFDoGADEMFT0y4eQ29PY06+007e817/Ey4+UPUVsMADEIFDsIFzwIFDwLADEUTmA17/IkrrIFEDILOEsMPU4MP1AMQ1MOQlIIADEIDToLGT4OHEEIFz4JGD4OGUEMAC0bdYA3+fsahosEABsCAAAIACwMADcIDjsPHkMSIUYIGD8JGUAMHUMMGUMAACAblp43/v8x4OIx3+Iw294pvsMZcn4KACoIADcJFT4OHkQQIEURIEUJGUEKHEQAFkIAADQArbMi//8v/v82/f84//839fchm6IGACUPE0ERIEYRIUYLHkYAFUQACUBYWmqloqiwwsh7zNJI4uUu9PY1+vw18fMVX2sPADgRH0cRIUgPH0YGHUgAADWPkZn5+fn//v65t77Py9TAw8tWgYsAdn8jp6006+4hoqYMACUSHkgPH0cLG0QAGUcAACqVlp7////e3uCAgo7AwszP0NlTS2MAABYEAAAdiJI4+fsms7YJABoQG0gMHEYLG0YAFUUAADJ6fIj8/Pylpq2LjpmUl6TGyNI7P1sAAD4EACsUWWs5/f8ipKgGABkMGEYMHEcCGUcAADxgYnPf3uHW1Nfe3uOkoq6vrbghAEIAADEEAAIjmKEXd30GAC0MGkgMHkkJHUoAEUaDl6Df7O3j3+SlwstewskAZXYKPVohjpk17O8v2NoFBS8LAEINHUoNHksPIU0JHEsAXHA94+Zl4OQq8fQo//8z8/U07fAWdHoGACgNGUsOH0wOIE4PIU8LFUoZrbYq/P40//83/P4y5ugZgIYNEkoOH04OIU8RHk8PAEYKADoflqEw3+M29vk39vgy4uUKOUgNAEcOHE7hp+U3AAAAvElEQVQYGQXBsS4DcQAH4N8X/0S4O64dPQSJRbvWaqytW3eGLhIPYOgbeAOJ1TuoUbCbmpgk2hskcr5PEiBJgt9d6gR01U+SuqtRqgQ6+5XEITalSeArDYC2tAE7/WA1eh5jWzMBXjbnAJji8RKekgsQcwDfD00/AxYAuGv6KygDACxv9oZQhgC4vb8eImUAgG6+bJHSWh8B9PUppLTWLXBWZXaAxBuvJzj+Sz6MVrqkVDGG/tOkmb7bVsk/aYcqACyFa5sAAAAASUVORK5CYII=","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/5jvgQr5vdDWm9WguPC86YD/28a889ef6992534b85997557aa5ef664/Image_default_5angular-mistakes.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/5jvgQr5vdDWm9WguPC86YD/28a889ef6992534b85997557aa5ef664/Image_default_5angular-mistakes.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5jvgQr5vdDWm9WguPC86YD/28a889ef6992534b85997557aa5ef664/Image_default_5angular-mistakes.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5jvgQr5vdDWm9WguPC86YD/28a889ef6992534b85997557aa5ef664/Image_default_5angular-mistakes.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5jvgQr5vdDWm9WguPC86YD/28a889ef6992534b85997557aa5ef664/Image_default_5angular-mistakes.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/5jvgQr5vdDWm9WguPC86YD/28a889ef6992534b85997557aa5ef664/Image_default_5angular-mistakes.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/5jvgQr5vdDWm9WguPC86YD/28a889ef6992534b85997557aa5ef664/Image_default_5angular-mistakes.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5jvgQr5vdDWm9WguPC86YD/28a889ef6992534b85997557aa5ef664/Image_default_5angular-mistakes.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5jvgQr5vdDWm9WguPC86YD/28a889ef6992534b85997557aa5ef664/Image_default_5angular-mistakes.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5jvgQr5vdDWm9WguPC86YD/28a889ef6992534b85997557aa5ef664/Image_default_5angular-mistakes.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ben Long","slug":"ben-long"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":null},{"title":"An Angular 5 tutorial: step-by-step guide to your first Angular 5 app","slug":"angular-5-tutorial-step-step-guide-first-angular-5-app","featured":false,"lastUpdated":"Feb 21st, 2018","description":{"description":"<p>Get to know Angular 5 by building a simple notes application in this tutorial. Guest author Sergey Moiseev walks through the basics of using the Angular CLI, working with forms, and more.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Get to know Angular 5 by building a simple notes application in this tutorial. Guest author Sergey Moiseev walks through the basics of using the Angular CLI, working with forms, and more."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Build a simple notes app with Angular 5","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAMAAACDi47UAAABVlBMVEUPJW4PJG4OJW4LJG4AJW4AJG4AJW8AI28AIW8GJG4PJG0PLHIOLHMBKnIbKnQxIm0AM3QAMXRfNm6BOmkmIGsPJW8PJ28PK3IPK3MOKHQAI3ZYPHq0Kk6cJlZlFWGsRmHWbnNnGGIAJnINJW4PJnAPKXEQMHUQKnQNKHkAD3RvdpvYlJnJAAC3ADlxKmeINWUxKHAAKXgPKHUPJm8PJXAPKHAPKXAMKHgAFXViWojnyczLM0GwADgAJ3EAJ3IAJ3AMKHYPJ3MNKHgAFnNfVYXw3uDfmZylADQAIW4MJG0QKXcQKHYQJ3MPJnEQL3UQLXQOKnoAJHhRGW7QdX3mr7CWCE8EJW4RKXcPJnIPJ3AOKXMAJ3dVIHC1ADaOJlo2HmoLJW4QKHUOJG4PLnQAKnIqLXVCJGsAIG4IJG4OJG0RJm4eLnEOJm8KJW4AJm8NJG4eLXBBSnwKquyNAAAAl0lEQVQI12NkAAHG/0yMjIwMQPyX5ec/BhawGCcjHHwE8YFYlBEF3AUKivIzoAp+esbCIPdRgJHxHzNCTPYZE8NHhg8M7xm4IeA4F5ckNwMzA7Phn4+afBxg8Mtgs+Ev3pvMDN/eM/B/FWcDg03Gn1W+CwgzQpzkzwUybl7yrH+MGYyMzGDH/7lszco65zzL63cMDNYsLAB9+CYdo6OwpAAAAABJRU5ErkJggg==","aspectRatio":1.9104477611940298,"src":"//images.ctfassets.net/s600jj41gsex/2T9SRFBlKsWAuFrOFm2YQR/1a4843866b0cf3642e355e17a332e03a/toptal-blog-image-1518187252525-03f6db7b1c131066061024c236c7e3ff-1024x536.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/2T9SRFBlKsWAuFrOFm2YQR/1a4843866b0cf3642e355e17a332e03a/toptal-blog-image-1518187252525-03f6db7b1c131066061024c236c7e3ff-1024x536.png?w=185&h=97&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2T9SRFBlKsWAuFrOFm2YQR/1a4843866b0cf3642e355e17a332e03a/toptal-blog-image-1518187252525-03f6db7b1c131066061024c236c7e3ff-1024x536.png?w=370&h=194&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2T9SRFBlKsWAuFrOFm2YQR/1a4843866b0cf3642e355e17a332e03a/toptal-blog-image-1518187252525-03f6db7b1c131066061024c236c7e3ff-1024x536.png?w=739&h=387&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2T9SRFBlKsWAuFrOFm2YQR/1a4843866b0cf3642e355e17a332e03a/toptal-blog-image-1518187252525-03f6db7b1c131066061024c236c7e3ff-1024x536.png?w=1024&h=536&q=50&fit=scale 1024w","srcWebp":"//images.ctfassets.net/s600jj41gsex/2T9SRFBlKsWAuFrOFm2YQR/1a4843866b0cf3642e355e17a332e03a/toptal-blog-image-1518187252525-03f6db7b1c131066061024c236c7e3ff-1024x536.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/2T9SRFBlKsWAuFrOFm2YQR/1a4843866b0cf3642e355e17a332e03a/toptal-blog-image-1518187252525-03f6db7b1c131066061024c236c7e3ff-1024x536.png?w=185&h=97&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2T9SRFBlKsWAuFrOFm2YQR/1a4843866b0cf3642e355e17a332e03a/toptal-blog-image-1518187252525-03f6db7b1c131066061024c236c7e3ff-1024x536.png?w=370&h=194&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2T9SRFBlKsWAuFrOFm2YQR/1a4843866b0cf3642e355e17a332e03a/toptal-blog-image-1518187252525-03f6db7b1c131066061024c236c7e3ff-1024x536.png?w=739&h=387&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2T9SRFBlKsWAuFrOFm2YQR/1a4843866b0cf3642e355e17a332e03a/toptal-blog-image-1518187252525-03f6db7b1c131066061024c236c7e3ff-1024x536.png?w=1024&h=536&q=50&fm=webp&fit=scale 1024w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Sergey Moiseev","slug":"sergey-moiseev"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":null},{"title":"Six common mistakes to avoid when using React","slug":"six-common-mistakes-to-avoid-when-using-react","featured":false,"lastUpdated":"Jun 1st, 2020","description":{"description":"<p>React is an excellent JavaScript library for building user interfaces. However, if you don't use React properly, you could end up creating more problems than you solve. So, here are six common mistakes to avoid when using React.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"React is an excellent JavaScript library for building user interfaces. However, if you don't use React properly, you could end up creating more problems than you solve. So, here are six common mistakes to avoid when using React."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Number 6 with React logo inside.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAMAAAAhxq8pAAACTFBMVEUGFDgGETcFAC8AAAAXhIwv9/ow+/4w+v0x/v8Ue4EEACEGEjcHFTgJFzoKGDsHFTkHDjcEACIKNksq3uIx/f8huLwDABAGADIHEzkIFjoKFzsMGT0LGT0IFjsIEzoEAA0ht70p2t0FAy8DAAAGAC4HCDcHEjkIFTsMGz8OHEAIFz0IFjwICjkEABEXfogv9fkx/P8v9fgcn6QTbHcRYW4IH0AEAA8HADAMFD4MGT8NG0AIFz4IEz0ML0oq3eEx//8v+Psv9Pcw+Psv9Pgq4OQeo6oNJEUKAC0IDTsLGT8PH0QIFj8ICDsIABwhq7Iw/P4w/P8nz9QMPVQJADAPG0MQH0UIEj8KADQUTGAt6u4w/f8u9/olxcoOADcQC0ARHUUMDkAOACofm6Qs7vAUp60AbnwAbn8XqLEs7vEZfokPADIRGEURC0IQADEnyM4u9fgDgosnAD9eVHReU3MoAEYQhZYkvsMOB0ESAEIOAEAp3OAm19oAADhxcIiztLuzs7lxbXwAADUo2N0p2d0LADcKADwOAD4MFkUr4eUiy88VAEONjZrBwsaNjJUUACQjzNEq4OMJET8KAD0MAEAp2d4p4uYAF1RWS2WdnaRWS2AADEEq4uco2dwIADUMAEEPDUYLADAju8Iw+/0ftr8NBUglACglACkIAD4etbwiu78IACcMCUYNF0oOADwYdYUo3OAbuL8n2+Av+/4Uc3wLADkOHU0ODkkjtr4htbkIAC4OD0oOHk0OIE8OGU0MAD4RAEgnx84kxsoIADEOGk6yTaD4AAAA9UlEQVQYGS3BMU4CQRiG4e9dx4UM889CYWEMFZ3G0nADA3QGb2BjYqW3MV7BWJgoQT0AHMDYWhILo4sJkijrIjwPklj7dZSmimQSS9MiMWDmARfFvMpkQTRKEfhyxlL9RU3WPpuuwWQbRlLGWh1Xp8HDAilDr9m4S8nVAKGuR8Xude+9CWwcpOngm35M07RSbd3uv+1UKkkIYY/Olv177gwKm4UkhDDWMKz0h5K1oosgKQICpPEROCuS9igEQECYtgMkIZqu8nMzizGe5YXMLDGzjwu6J7Wa975HzL2HO2b+8p7i+EYhp+idUnqidIhWikd+Nud/Q2E7t+RGtD4AAAAASUVORK5CYII=","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/1KcZaJy3VX0YikyVL3rN6e/27e982f3f25644551ec376bf54b0950d/Image_default_ReactMistakes.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/1KcZaJy3VX0YikyVL3rN6e/27e982f3f25644551ec376bf54b0950d/Image_default_ReactMistakes.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1KcZaJy3VX0YikyVL3rN6e/27e982f3f25644551ec376bf54b0950d/Image_default_ReactMistakes.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1KcZaJy3VX0YikyVL3rN6e/27e982f3f25644551ec376bf54b0950d/Image_default_ReactMistakes.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1KcZaJy3VX0YikyVL3rN6e/27e982f3f25644551ec376bf54b0950d/Image_default_ReactMistakes.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/1KcZaJy3VX0YikyVL3rN6e/27e982f3f25644551ec376bf54b0950d/Image_default_ReactMistakes.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/1KcZaJy3VX0YikyVL3rN6e/27e982f3f25644551ec376bf54b0950d/Image_default_ReactMistakes.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1KcZaJy3VX0YikyVL3rN6e/27e982f3f25644551ec376bf54b0950d/Image_default_ReactMistakes.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1KcZaJy3VX0YikyVL3rN6e/27e982f3f25644551ec376bf54b0950d/Image_default_ReactMistakes.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1KcZaJy3VX0YikyVL3rN6e/27e982f3f25644551ec376bf54b0950d/Image_default_ReactMistakes.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ben Long","slug":"ben-long"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Six common mistakes to avoid when using React"},"metaDescription":null},{"title":"A guide to npm: The node.js package manager","slug":"a-guide-to-npm-the-node-js-package-manager","featured":false,"lastUpdated":"Feb 22nd, 2023","description":{"description":"<p>Toptal Developer Martin Gouws walks through the in's and out's of working with npm. Read on to find out how to get the most out of npm.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Toptal Developer Martin Gouws walks through the in's and out's of working with npm. Read on to find out how to get the most out of npm."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"npm logo appearing on a grid background.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAAolBMVEUXIk8WIk8TIU8OIE8JH04IHk4RIU8AGk0AAEMAAEAAAD4AAD8AAEQSIU8AHU5HIEu6kJW+j5S/l5u8i5DDn6O5i5BII00VIU8AG01dMVHtysryyMf95uXyzcz10dDmtbRdNVMAG04CH08xG0t/S1+YWWa2iI6IUGGCSV1/Q1gxHkwUIU8AHk4ADUsAAEgAAEIAB0oAE0wAH04PIE8QIE8VIk9NEVuMAAAAVUlEQVQI12NgwAIYkRn/UQQZQYDhPwiAuCxgQVaw6H+m32yf4YKMHIwQwPWD8T9MuzgjHHx7CRNkVISJ/bj/H6b9PyfESBCB5DJxJmNmE14mUwYSAQAJkhP45oV4xAAAAABJRU5ErkJggg==","aspectRatio":1.7777777777777777,"src":"//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=1478&h=831&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=1920&h=1080&q=50&fit=scale 1920w","srcWebp":"//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=1478&h=831&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=1920&h=1080&q=50&fm=webp&fit=scale 1920w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Martin Gouws","slug":"martin-gouws"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"A guide to npm: How to install & configure npm for your project | TinyMCE"},"metaDescription":{"metaDescription":"npm is an essential tool for modern web development. It allows us to install and manage packages from npmjs.org. In this guide, we'll show you how to install and configure it for your project. A guide to npm: How to install & configure npm for your project"}},{"title":"4 essential skills developers can learn from doing QA","slug":"software-developer-skills-learned-from-qa","featured":false,"lastUpdated":"Aug 26th, 2020","description":{"description":"<p>Whether you&rsquo;re looking to improve your software developer skills, starting your first software developer job, or thinking about switching from QA to development, here are 4 essential developer skills you can learn from doing QA.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Whether you’re looking to improve your software developer skills, starting your first software developer job, or thinking about switching from QA to development, here are 4 essential developer skills you can learn from doing QA."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Photograph of chess pieces on a chess board. Image by Wooden Earth Ltd (https://www.woodenearth.com/)","artistName":"Image by Wooden Earth Ltd","image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAD2ElEQVQYGQXBWY8aBQDA8T/DDAMMsMuyLLuw3Ysea2rr1o2N9Ypp1USfmpr65GvjB/DF+Cn8DNr6YqI1JvrSRI090jQ9d7vdwlLOcg4DDDAHMzD+fr5+v+/alkG9XuW/23/z6MkzVjOb7J6/wM7ZsyQWFhAEAdMY02o1qFSKRGMLZNIZXNchf5Rnfj5BSJYpvTxAtEzDr/W71BtVOp0G81GFSEhGkXxMDB1dAFGS8PCQZYlYNEo4JCP6fXjTGWqjjN7rsbS0TKFYQayUC+TzLynk9lBrNWQ5QlyyiL2+R/3uTwQkP5HYHKOTlxj5AmidJqLoZ9hfwjJH5PYeoKoG6bUtqpUKYnHvLr3qEVKvTdg1MMZDpokJE72Mc3SXaAxCCrxo98hPFygWDogoQdaXE/S6HTwvwLISwmzmsDUVcSeb5lHxMdPWAevxNK2gQ0tzyCgicVFkaro0/ZB6/xLiJMCN67/y1okM6ZlNVoG13Q8YeTKWabLSVhHHh3/SeHgTo22xdRra4TBda8Rjv8ylZJbI7CUPfW/SfLTPi1ybw1qDw1qD/naGby7vEvNGDFw/A2PG1B9GNLsVMnGZlm7hOUOqTZueNcFLJRDWFAI+cHWL2v4tfvt9HwCAUFhgNLbptlU6MyipFmIwjMDKRWZLH1LqgBt8g1R4g0DgBMnoJsLMh2vDavojrly9xvffXgMAICpJjI0pPd1hPhIhu5ZiagwQnz58itTe41gG1o8leO/iFYgkkLGp3/yBvgo7n3xMbeJH1YYAALR0k0BQZvvtHWaSwsj1o6tNxJVFCduQEQ2RmRyk8uwBieQiyuoWw/GEYRecf35B8/xQfA7A7kqQTWWEo1UZNYpoA5tGd0AhX0LczGYpjzX65Rxur0mlVIXjccyDvwjpt0lmIR75g5j/M9KZDWBAcm7KxlIA7C7aqz3MmYCtjRDtPsLyqXdoa2NKDXAmFhc/3eL0uTM4yklKFahWoV6LsLyWYmlRAkwauktnYNPqqOgjm9VEkOOLcDzuIdQKBbTmIZ4Cxee3wduA0Cla1fsISXBDoFkSe81j/Jv3AUPKA4/eZA6HCEf795CTG7x7+Ws+v/ol4v2fv2NqAT7o1UFIZEltn+GLr84zdVLMvDDdlo8f72jcuPMagP54Qk4XUEQFp9bFim5jJy/g+FSEV5NzlPsxGj3oVaBRazMyfKglgfqTIt18g3lxijJ6AIMnAIBFrlxmoDcxmlDLHzCxDHTTRaibLkpygaEfHpvwrG5QH0u0pAvcut5lqENwcR3DFwcAACAgy9izIMMZjB0Pz7WZEwb8D0cf9Q/ExMdbAAAAAElFTkSuQmCC","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/7zZ4oY9AQgCkpPpdUfH8Hl/999b3e7a97cb7a6e4cfa0dd5069fe102/Image_default_4-dev-skills.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/7zZ4oY9AQgCkpPpdUfH8Hl/999b3e7a97cb7a6e4cfa0dd5069fe102/Image_default_4-dev-skills.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/7zZ4oY9AQgCkpPpdUfH8Hl/999b3e7a97cb7a6e4cfa0dd5069fe102/Image_default_4-dev-skills.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/7zZ4oY9AQgCkpPpdUfH8Hl/999b3e7a97cb7a6e4cfa0dd5069fe102/Image_default_4-dev-skills.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/7zZ4oY9AQgCkpPpdUfH8Hl/999b3e7a97cb7a6e4cfa0dd5069fe102/Image_default_4-dev-skills.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/7zZ4oY9AQgCkpPpdUfH8Hl/999b3e7a97cb7a6e4cfa0dd5069fe102/Image_default_4-dev-skills.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/7zZ4oY9AQgCkpPpdUfH8Hl/999b3e7a97cb7a6e4cfa0dd5069fe102/Image_default_4-dev-skills.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/7zZ4oY9AQgCkpPpdUfH8Hl/999b3e7a97cb7a6e4cfa0dd5069fe102/Image_default_4-dev-skills.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/7zZ4oY9AQgCkpPpdUfH8Hl/999b3e7a97cb7a6e4cfa0dd5069fe102/Image_default_4-dev-skills.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/7zZ4oY9AQgCkpPpdUfH8Hl/999b3e7a97cb7a6e4cfa0dd5069fe102/Image_default_4-dev-skills.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Millie Macdonald","slug":"millie-macdonald"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"4 essential skills developers can learn from doing QA"},"metaDescription":{"metaDescription":"Whether you’re looking to improve your software developer skills, starting your first software developer job, or thinking about switching from QA to development, here are 4 essential developer skills you can learn from doing QA, covering problem solving, creative analysis, product understanding, and empathy."}},{"title":"The why and how behind Tiny’s RTC end-to-end encryption","slug":"real-time-collaboration-end-to-end-encryption","featured":false,"lastUpdated":"Jan 13th, 2021","description":{"description":"<p>Find out more about how Tiny implements end-to-end encryption for real-time collaboration in TinyMCE, including a discussion of operational transformation methods. Secure real-time collaboration for document sharing and other team-based productivity and communication tools.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Find out more about how Tiny implements end-to-end encryption for real-time collaboration in TinyMCE, including a discussion of operational transformation methods. Secure real-time collaboration for document sharing and other team-based productivity and communication tools."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Text: \"Real-time Collaboration & End-to-end Encryption\"","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAADK0lEQVQYGXXByU8kVRwH8O/v915V9UJvdMMwS2CGAWxkGGVcJoJxi0ui0ajReDbRxBivatTE+BfMf+BJb8bEgydvJqKIigQVxFkgwNDddNPd1VR1dS3vPR3P+vmQXbmK/6MVIh/eFu6QVJgjKwVm8y8AkogN/osxpGKjlF76OClNcn1D//ylLFZY2qA7AAjKjMcaylPKkNJQkVEaKjbqH72WevGavv/10VMzg6knq2OVxtpXqp82KSmYiFhoeQ4a995dqe+6CL3SSH7QiiAJ/i1gAc+9O99aqV7/qFS859zkwtzwnqao1QjIFkws0dMPPHT6g/feqNcb7Y5bLORc96RUHAoHJwqZTWG2a/tba8uvLm498sS0ePj93Rubb7/1SaItIUhAjIsUVUopgARzp+MeHtaEXegNPWOVLtd98TXNdy+9OX929pvd7Lc7mfUbJ/3by4EXsiUFnPPS4amJyg+rvydJ3G67fa/zh39lNfPoei9HIr1YtkqpIVc5ByEeP8PfJRMLhaC7u9LXjsQAMxPl6l0X5+erlXJJa51OicCMxVbND5LhHMVxrA0nijZbpaem3JutUpvyI+V0qwaJIbHyU+PUyGrzuNftBZXhbNxv9qffSaYWjhRGWBUkWaS7CbXhrB+n1gbyMhQRAyTRN1eXxl55+enbh3VLWtpo6EHfKTfSYiI/SBSGM+EXf6Y3IgcqOAgIpBgaLCBYwhbNdrCzsx9GUTabbTaPU7ZJjXqI/SRwB4lwE90OGN3DkdqPlgp9uwjZA9tgkhAUK+P5wa8bNw/qbi5rd47280sPji/ktpvZo4QHGtcNUC40h8+DCADtfUZEIJZQPH66eN+VS7PViwaIwrCQz9qZbGLvRkoQib22/eFfFRBADAb7HTvYUcYBJ0Rnnk1LWpwb9fyQmRxbzs6cdd2uryu50WoUx/3Erk9fyNR6IkxgtHO0HnV++2W7N1Cg/IUXYm0CX0EbKANl4ClAQ+rJKSfjCHHi47XHci89zyyM5/Wufbq/fNhPW5ZkSUwOsxgibQwAbWBKxhhoY251NCKFDuPzVafuEbOOkuj7eoqELQUL+htGE53NcW8wrwAAAABJRU5ErkJggg==","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/6enckfqO3a0fP0KlTPeNS5/d9ad146a33a4796f527b554f6b77e7a5/BlogImage_default_RTC-Encryption.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6enckfqO3a0fP0KlTPeNS5/d9ad146a33a4796f527b554f6b77e7a5/BlogImage_default_RTC-Encryption.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6enckfqO3a0fP0KlTPeNS5/d9ad146a33a4796f527b554f6b77e7a5/BlogImage_default_RTC-Encryption.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6enckfqO3a0fP0KlTPeNS5/d9ad146a33a4796f527b554f6b77e7a5/BlogImage_default_RTC-Encryption.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6enckfqO3a0fP0KlTPeNS5/d9ad146a33a4796f527b554f6b77e7a5/BlogImage_default_RTC-Encryption.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6enckfqO3a0fP0KlTPeNS5/d9ad146a33a4796f527b554f6b77e7a5/BlogImage_default_RTC-Encryption.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6enckfqO3a0fP0KlTPeNS5/d9ad146a33a4796f527b554f6b77e7a5/BlogImage_default_RTC-Encryption.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6enckfqO3a0fP0KlTPeNS5/d9ad146a33a4796f527b554f6b77e7a5/BlogImage_default_RTC-Encryption.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6enckfqO3a0fP0KlTPeNS5/d9ad146a33a4796f527b554f6b77e7a5/BlogImage_default_RTC-Encryption.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6enckfqO3a0fP0KlTPeNS5/d9ad146a33a4796f527b554f6b77e7a5/BlogImage_default_RTC-Encryption.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Tim Dettrick","slug":"tim-dettrick"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"TinyMCE’s real-time collaboration solution is end-to-end encrypted"},"metaDescription":{"metaDescription":"Find out why (and how) Tiny implements end-to-end encryption for real-time collaboration in TinyMCE, including a discussion of operational transformation methods. Secure real-time collaboration for document sharing and other team-based productivity and communication tools.\n"}},{"title":"Collaboration needs a clean Slate","slug":"real-time-collaborative-editing-slate-js","featured":false,"lastUpdated":"Feb 20th, 2020","description":{"description":"<p>Real-time collaboration in a rich text editing environment is a hard problem. In this article, we discuss why we have settled on Slate as the library that we will use to build a high-quality collaborative editing solution.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Real-time collaboration in a rich text editing environment is a hard problem. In this article, we discuss why we have settled on Slate as the library that we will use to build a high-quality collaborative editing solution."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Abstract browser window with six online avatars overlaid and the word Slate appearing above.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAACyUlEQVQYGQXBS2tcZRjA8f/zXuacmZOZyTSNl1xIQosIRqxdSAVBt92JK/0arvRDuPUTuHXhQooLbRFBEKEootRALDapaSaZZJI5M3Mu7/P4+8n6N2MzlolkAGa0CiCCFwAA8ELmaY1aATqO6AhWW6UkQ8AAuNn3GKp6fm0ieBHMvKNNNIZAFKJBIlQVyXAAqDJa9bu3m9mzK9fxOb1Q5P2RXR7VoRtfnKqpZUJwkMAI2pgAAKBUpdZL131lxWZXG7tzcbUlzXd97MwWx1zbIDhIBgCBFgwAEMMaqvG8PR2r73ZWtLmcSn+oSUN7WU0HsRCSAQCCFF+eGmgCBVBF26TgnMuw1mgMgegsi94JYDgRj0GwRkKq+mszyRwKDgzACYgoghlmTgAAEbTW8qyoXB60kW6vvLG/FPH0cn97BxEARKtG5wvfLyR4MDAAES3n9Vcn81k3iEpz2V7/C95DK8dHqCFCNeXpnzHPmlbZ3SdkYgaYCHXVTFSCBDGpr/zJr0N12WBbBjtl+bw3ObD820dbnw7WPvnw+LMvJt+v2v7boikprQp1CFbKmjhLzrfzFZ5Hp1lvHs5/C73a5zF7oytii78OwqvD4p2u60bLosZIJ+abuR9EXRJS2ayOjkbvrhw/OJz+vVdOttqRC5H8/gfDj4YuSri1Xf9Y179gzlmyl97PeqMr8/2LPzrevff5zXvD4s2NRTWYnfVSccOJd1DPYzLXip8euOlPkxX3tL3ybth7+X6n/u5hXMs6r22GGOP5Y67HneujiKYYKfZ8WrB4puMfaqRpW1mtn2x8XLx4cHAxv7v8+QlCc/hfdbYVvJPlSVOeN9KNXl3/dT/YPLRsdDofNWfJBIXw1h3Z7mT32uZRNv7a8sf/pPWN8i4hqUOcBOedYK49mdQnv1t/R5erqqLgRMYHxezSVRcdwartO9X6HvWcfPA/nUt0AwiPspUAAAAASUVORK5CYII=","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/5joAuBjNUxkzxpmEuJxy6J/ff51e43bd540899ec12a9b93e125ecd6/Image_default_slate.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/5joAuBjNUxkzxpmEuJxy6J/ff51e43bd540899ec12a9b93e125ecd6/Image_default_slate.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5joAuBjNUxkzxpmEuJxy6J/ff51e43bd540899ec12a9b93e125ecd6/Image_default_slate.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5joAuBjNUxkzxpmEuJxy6J/ff51e43bd540899ec12a9b93e125ecd6/Image_default_slate.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5joAuBjNUxkzxpmEuJxy6J/ff51e43bd540899ec12a9b93e125ecd6/Image_default_slate.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/5joAuBjNUxkzxpmEuJxy6J/ff51e43bd540899ec12a9b93e125ecd6/Image_default_slate.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/5joAuBjNUxkzxpmEuJxy6J/ff51e43bd540899ec12a9b93e125ecd6/Image_default_slate.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5joAuBjNUxkzxpmEuJxy6J/ff51e43bd540899ec12a9b93e125ecd6/Image_default_slate.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5joAuBjNUxkzxpmEuJxy6J/ff51e43bd540899ec12a9b93e125ecd6/Image_default_slate.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5joAuBjNUxkzxpmEuJxy6J/ff51e43bd540899ec12a9b93e125ecd6/Image_default_slate.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Andrew Herron","slug":"andrew-herron"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Collaborative editing: real-time collaboration with Slate.js"},"metaDescription":{"metaDescription":"Real-time collaboration in a rich text editing environment is a hard problem. In this article, we discuss why we have settled on Slate as the library that we will use to build a high-quality collaborative editing solution."}},{"title":"Functional Programming and Category Theory at Tiny","slug":"category-theory-functional-programming","featured":false,"lastUpdated":"Jun 7th, 2021","description":{"description":"<p>Because Category Theory is abstract, it can be difficult to learn. At Tiny, we use Functional Programming, which is based on Category Theory. We have some recommendations for learning Category Theory: a book, a lecture series, and a talk recording.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Because Category Theory is abstract, it can be difficult to learn. At Tiny, we use Functional Programming, which is based on Category Theory. We have some recommendations for learning Category Theory: a book, a lecture series, and a talk recording."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Woman teaching and drawing diagrams on a whiteboard ","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.526542324246772,"src":"//images.ctfassets.net/s600jj41gsex/5thrJiM0BoBnbhtsZcVduF/c8c4bd7c8873370b135c1070f9e5a8ae/Category_theory.jpeg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/5thrJiM0BoBnbhtsZcVduF/c8c4bd7c8873370b135c1070f9e5a8ae/Category_theory.jpeg?w=185&h=121&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5thrJiM0BoBnbhtsZcVduF/c8c4bd7c8873370b135c1070f9e5a8ae/Category_theory.jpeg?w=370&h=242&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5thrJiM0BoBnbhtsZcVduF/c8c4bd7c8873370b135c1070f9e5a8ae/Category_theory.jpeg?w=739&h=484&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5thrJiM0BoBnbhtsZcVduF/c8c4bd7c8873370b135c1070f9e5a8ae/Category_theory.jpeg?w=1064&h=697&q=50&fit=scale 1064w","srcWebp":"//images.ctfassets.net/s600jj41gsex/5thrJiM0BoBnbhtsZcVduF/c8c4bd7c8873370b135c1070f9e5a8ae/Category_theory.jpeg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/5thrJiM0BoBnbhtsZcVduF/c8c4bd7c8873370b135c1070f9e5a8ae/Category_theory.jpeg?w=185&h=121&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5thrJiM0BoBnbhtsZcVduF/c8c4bd7c8873370b135c1070f9e5a8ae/Category_theory.jpeg?w=370&h=242&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5thrJiM0BoBnbhtsZcVduF/c8c4bd7c8873370b135c1070f9e5a8ae/Category_theory.jpeg?w=739&h=484&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5thrJiM0BoBnbhtsZcVduF/c8c4bd7c8873370b135c1070f9e5a8ae/Category_theory.jpeg?w=1064&h=697&q=50&fm=webp&fit=scale 1064w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Team Tiny","slug":"team-tiny"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Functional Programming and Category Theory at Tiny"},"metaDescription":{"metaDescription":"Because Category Theory is abstract, it can be difficult to learn. At Tiny, we use Functional Programming, which is based on Category Theory. We have some recommendations for learning Category Theory: a book, a lecture series, and a talk recording."}},{"title":"New TinyMCE integration: How to get started with Blazor","slug":"how-to-get-started-with-blazor","featured":false,"lastUpdated":"Mar 24th, 2021","description":{"description":"<p>Blazor is now supported by TinyMCE and this article we go through the why's and how's about getting started with Blazor.&nbsp;</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Blazor is now supported by TinyMCE and this article we go through the why's and how's about getting started with Blazor. "}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Tessellating wires ","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.3332195288494366,"src":"//images.ctfassets.net/s600jj41gsex/5kHg6dSDavyVM59QHWQNXI/1f72da1dd6564c63b4e6f31efac4902e/jj-ying-7JX0-bfiuxQ-unsplash.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/5kHg6dSDavyVM59QHWQNXI/1f72da1dd6564c63b4e6f31efac4902e/jj-ying-7JX0-bfiuxQ-unsplash.jpg?w=185&h=139&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5kHg6dSDavyVM59QHWQNXI/1f72da1dd6564c63b4e6f31efac4902e/jj-ying-7JX0-bfiuxQ-unsplash.jpg?w=370&h=278&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5kHg6dSDavyVM59QHWQNXI/1f72da1dd6564c63b4e6f31efac4902e/jj-ying-7JX0-bfiuxQ-unsplash.jpg?w=739&h=554&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5kHg6dSDavyVM59QHWQNXI/1f72da1dd6564c63b4e6f31efac4902e/jj-ying-7JX0-bfiuxQ-unsplash.jpg?w=1109&h=832&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/5kHg6dSDavyVM59QHWQNXI/1f72da1dd6564c63b4e6f31efac4902e/jj-ying-7JX0-bfiuxQ-unsplash.jpg?w=1478&h=1109&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/5kHg6dSDavyVM59QHWQNXI/1f72da1dd6564c63b4e6f31efac4902e/jj-ying-7JX0-bfiuxQ-unsplash.jpg?w=2217&h=1663&q=50&fit=scale 2217w,\n//images.ctfassets.net/s600jj41gsex/5kHg6dSDavyVM59QHWQNXI/1f72da1dd6564c63b4e6f31efac4902e/jj-ying-7JX0-bfiuxQ-unsplash.jpg?w=3905&h=2929&q=50&fit=scale 3905w","srcWebp":"//images.ctfassets.net/s600jj41gsex/5kHg6dSDavyVM59QHWQNXI/1f72da1dd6564c63b4e6f31efac4902e/jj-ying-7JX0-bfiuxQ-unsplash.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/5kHg6dSDavyVM59QHWQNXI/1f72da1dd6564c63b4e6f31efac4902e/jj-ying-7JX0-bfiuxQ-unsplash.jpg?w=185&h=139&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5kHg6dSDavyVM59QHWQNXI/1f72da1dd6564c63b4e6f31efac4902e/jj-ying-7JX0-bfiuxQ-unsplash.jpg?w=370&h=278&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5kHg6dSDavyVM59QHWQNXI/1f72da1dd6564c63b4e6f31efac4902e/jj-ying-7JX0-bfiuxQ-unsplash.jpg?w=739&h=554&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5kHg6dSDavyVM59QHWQNXI/1f72da1dd6564c63b4e6f31efac4902e/jj-ying-7JX0-bfiuxQ-unsplash.jpg?w=1109&h=832&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/5kHg6dSDavyVM59QHWQNXI/1f72da1dd6564c63b4e6f31efac4902e/jj-ying-7JX0-bfiuxQ-unsplash.jpg?w=1478&h=1109&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/5kHg6dSDavyVM59QHWQNXI/1f72da1dd6564c63b4e6f31efac4902e/jj-ying-7JX0-bfiuxQ-unsplash.jpg?w=2217&h=1663&q=50&fm=webp&fit=scale 2217w,\n//images.ctfassets.net/s600jj41gsex/5kHg6dSDavyVM59QHWQNXI/1f72da1dd6564c63b4e6f31efac4902e/jj-ying-7JX0-bfiuxQ-unsplash.jpg?w=3905&h=2929&q=50&fm=webp&fit=scale 3905w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Elise Bentley","slug":"elise-bentley"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"How to integrate TinyMCE with Blazor"},"metaDescription":{"metaDescription":"Blazor is now supported by TinyMCE. Learn how to get TinyMCE started with Blazor today. "}},{"title":"It’s hard to find a good chameleon","slug":"reduce-software-development-costs","featured":false,"lastUpdated":"Apr 27th, 2021","description":{"description":"<p>When you are building products that depend on other third party software components, think about choosing chameleon components that help you reduce software development costs.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"When you are building products that depend on other third party software components, think about choosing chameleon components that help you reduce software development costs."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Image of someone holding a green chameleon in their hand. ","artistName":"Amy Humphries","image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.3333333333333333,"src":"//images.ctfassets.net/s600jj41gsex/6aXhFgcTFlwOguPJuI6s4X/159fc74f55c7adabbae2f4ecfd344638/amy-humphries-Qb_eemSJg0k-unsplash.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6aXhFgcTFlwOguPJuI6s4X/159fc74f55c7adabbae2f4ecfd344638/amy-humphries-Qb_eemSJg0k-unsplash.jpg?w=185&h=139&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6aXhFgcTFlwOguPJuI6s4X/159fc74f55c7adabbae2f4ecfd344638/amy-humphries-Qb_eemSJg0k-unsplash.jpg?w=370&h=278&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6aXhFgcTFlwOguPJuI6s4X/159fc74f55c7adabbae2f4ecfd344638/amy-humphries-Qb_eemSJg0k-unsplash.jpg?w=739&h=554&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6aXhFgcTFlwOguPJuI6s4X/159fc74f55c7adabbae2f4ecfd344638/amy-humphries-Qb_eemSJg0k-unsplash.jpg?w=1109&h=832&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6aXhFgcTFlwOguPJuI6s4X/159fc74f55c7adabbae2f4ecfd344638/amy-humphries-Qb_eemSJg0k-unsplash.jpg?w=1478&h=1109&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6aXhFgcTFlwOguPJuI6s4X/159fc74f55c7adabbae2f4ecfd344638/amy-humphries-Qb_eemSJg0k-unsplash.jpg?w=2217&h=1663&q=50&fit=scale 2217w,\n//images.ctfassets.net/s600jj41gsex/6aXhFgcTFlwOguPJuI6s4X/159fc74f55c7adabbae2f4ecfd344638/amy-humphries-Qb_eemSJg0k-unsplash.jpg?w=3264&h=2448&q=50&fit=scale 3264w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6aXhFgcTFlwOguPJuI6s4X/159fc74f55c7adabbae2f4ecfd344638/amy-humphries-Qb_eemSJg0k-unsplash.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6aXhFgcTFlwOguPJuI6s4X/159fc74f55c7adabbae2f4ecfd344638/amy-humphries-Qb_eemSJg0k-unsplash.jpg?w=185&h=139&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6aXhFgcTFlwOguPJuI6s4X/159fc74f55c7adabbae2f4ecfd344638/amy-humphries-Qb_eemSJg0k-unsplash.jpg?w=370&h=278&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6aXhFgcTFlwOguPJuI6s4X/159fc74f55c7adabbae2f4ecfd344638/amy-humphries-Qb_eemSJg0k-unsplash.jpg?w=739&h=554&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6aXhFgcTFlwOguPJuI6s4X/159fc74f55c7adabbae2f4ecfd344638/amy-humphries-Qb_eemSJg0k-unsplash.jpg?w=1109&h=832&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6aXhFgcTFlwOguPJuI6s4X/159fc74f55c7adabbae2f4ecfd344638/amy-humphries-Qb_eemSJg0k-unsplash.jpg?w=1478&h=1109&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6aXhFgcTFlwOguPJuI6s4X/159fc74f55c7adabbae2f4ecfd344638/amy-humphries-Qb_eemSJg0k-unsplash.jpg?w=2217&h=1663&q=50&fm=webp&fit=scale 2217w,\n//images.ctfassets.net/s600jj41gsex/6aXhFgcTFlwOguPJuI6s4X/159fc74f55c7adabbae2f4ecfd344638/amy-humphries-Qb_eemSJg0k-unsplash.jpg?w=3264&h=2448&q=50&fm=webp&fit=scale 3264w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ben Long","slug":"ben-long"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Reduce software development costs with chameleon components"},"metaDescription":{"metaDescription":"When you are building products that depend on other third party software components, think about choosing chameleon components that help you reduce software development costs."}},{"title":"Top 10 JavaScript how-tos","slug":"javascript-how-to-top-ten","featured":false,"lastUpdated":"May 20th, 2020","description":{"description":"<p>What are the top ten JavaScript how-tos? Check out this list of popular JavaScript FAQs with answers.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"What are the top ten JavaScript how-tos? Check out this list of popular JavaScript FAQs with answers."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Text \"How-tos\" with JavaScript logo nestled in the top of the 'H'.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAMAAAAhxq8pAAAC91BMVEUGFDgFFDcIFzoNGz4OHD8MGTwHFTgJFzoHFDgLGTwHFTkGFTkEFDkCEzkBEjkEFTsLGz8OHUAMGj4HFToIFjoKGDwKGTwIFjsHFjsBEzoAADUAADIAADsAADoAATsEFz4EFDsFFTsGFjsNG0ANGz8IFz0EFTw+Q1hlZWlxZihpZ2JMUWUAADAAADYABjgACzkADjoADToAETsGGD8IGT8OHEEIFz4BFD0AACSRlJ7a1cHZwADUzKqqrLQAAAAkK0cAAC4AACwAAC8AFD4AETwKGkEQH0UIGEAAEz4AACWUlp/p6OPLxKfg39mwsbehoqjV1de+vsKwsbVzdX+7vL+Eho+mp6xpa3cAADgOH0UQIEUIGUEEGEIAAC2WmKDd3uGVl6LQ0dXFxsnLzM9OUmPT09XS0tXJys3h4ePPz9JESV0ACUAPIEYRIUcNHUUMH0cAADSZm6LCwsanqK66u7/ExciwsLXW1tiDhY7q6uump63d3t+7u8AAGUUQIUgRIUgSIkoQIUoAAUBUWGlucH0AACmZmqHBwsZpbHlGS2F+gIoZJEiGiJFrbnwGHUgRIUkNHUYTJEwOH0kEGUUAAD8AE0O/wMTu7/B/gYy5ur7Y2NvDxMeRk5vV1tmlp64AD0UBG0gMHUcLG0YPIEoMHUgKHEgEGUcAAEGfoKeXmKDHyMxdYXPX19orM1K2t7zQ0dS6u8AkL1IADkQJHEcOH0oMHkkIHEkAEkZCR19HTGJ0doTf4OKHiZTGx8vMzdGNj5nCw8jZ2dxFSmEABkMKHUkMHkoPIUwPIEwNH0sMHksHHEoAD0YAAEMAHExzdoNPU2k4P1x+gY5LUWktN1l7fotXW28CGUkOIE0PIU4NH00MH0wNIE0OIk8AF0sAAEIABUgAEUsAAEYADEsAEksAAEQBGksLH0wOIU4OIE4PIk8PIlATJVIPIU8MIE4QI1ETJVMSJVMRJFIMIE8KHk4LH04NIE4PIVAOIVASJFIWJ1UWKFUUJlQPIlFxTLwjAAAAp0lEQVQYGQXBPU4CUQAGwG+WFxNXTFj84QTaURoLQ02hl/MMXoF4AkJhLO04gInakFUwIfKckSQJ2Cc54jDQBsAuSVp/xQQA2yR1qHfl+xSA2rAZlc4Y4Ovi83J9rWMOAIByDgAEyhm83gBY3VHGMD8MfEzA+gGPWM5qAwCewNsUnu/BxkIAXm4BVgCAXdvX0gkAlrMR8U6AAH2NrfBz/HtS09gnqck/cvYp3w9fWEcAAAAASUVORK5CYII=","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/7H0fdAxUhe8rvniGHk2j7h/5d47ce6a732e1143c5ea2bb35d138ce9/Image_default_JShow-tos.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/7H0fdAxUhe8rvniGHk2j7h/5d47ce6a732e1143c5ea2bb35d138ce9/Image_default_JShow-tos.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/7H0fdAxUhe8rvniGHk2j7h/5d47ce6a732e1143c5ea2bb35d138ce9/Image_default_JShow-tos.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/7H0fdAxUhe8rvniGHk2j7h/5d47ce6a732e1143c5ea2bb35d138ce9/Image_default_JShow-tos.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/7H0fdAxUhe8rvniGHk2j7h/5d47ce6a732e1143c5ea2bb35d138ce9/Image_default_JShow-tos.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/7H0fdAxUhe8rvniGHk2j7h/5d47ce6a732e1143c5ea2bb35d138ce9/Image_default_JShow-tos.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/7H0fdAxUhe8rvniGHk2j7h/5d47ce6a732e1143c5ea2bb35d138ce9/Image_default_JShow-tos.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/7H0fdAxUhe8rvniGHk2j7h/5d47ce6a732e1143c5ea2bb35d138ce9/Image_default_JShow-tos.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/7H0fdAxUhe8rvniGHk2j7h/5d47ce6a732e1143c5ea2bb35d138ce9/Image_default_JShow-tos.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/7H0fdAxUhe8rvniGHk2j7h/5d47ce6a732e1143c5ea2bb35d138ce9/Image_default_JShow-tos.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ben Long","slug":"ben-long"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Top 10 JavaScript how-tos | JavaScript FAQ"},"metaDescription":{"metaDescription":"What are the top ten JavaScript how-tos? Check out this list of popular JavaScript FAQs with answers."}},{"title":"How to integrate React with TinyMCE","slug":"how-to-integrate-react-with-tinymce","featured":false,"lastUpdated":"Mar 26th, 2017","description":{"description":"<p>In this tutorial, I'll walk you through how to integrate React.js with TinyMCE. Without further ado, let's get started!</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In this tutorial, I'll walk you through how to integrate React.js with TinyMCE. Without further ado, let's get started!"}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"React and Tiny MCE","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/jC7yKmwpLMQQnMbORx6xn/fcc229b86e617c1e7becf3f74276462e/img-react-improvements-01.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/jC7yKmwpLMQQnMbORx6xn/fcc229b86e617c1e7becf3f74276462e/img-react-improvements-01.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/jC7yKmwpLMQQnMbORx6xn/fcc229b86e617c1e7becf3f74276462e/img-react-improvements-01.jpg?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/jC7yKmwpLMQQnMbORx6xn/fcc229b86e617c1e7becf3f74276462e/img-react-improvements-01.jpg?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/jC7yKmwpLMQQnMbORx6xn/fcc229b86e617c1e7becf3f74276462e/img-react-improvements-01.jpg?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/jC7yKmwpLMQQnMbORx6xn/fcc229b86e617c1e7becf3f74276462e/img-react-improvements-01.jpg?w=1478&h=832&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/jC7yKmwpLMQQnMbORx6xn/fcc229b86e617c1e7becf3f74276462e/img-react-improvements-01.jpg?w=1528&h=860&q=50&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/jC7yKmwpLMQQnMbORx6xn/fcc229b86e617c1e7becf3f74276462e/img-react-improvements-01.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/jC7yKmwpLMQQnMbORx6xn/fcc229b86e617c1e7becf3f74276462e/img-react-improvements-01.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/jC7yKmwpLMQQnMbORx6xn/fcc229b86e617c1e7becf3f74276462e/img-react-improvements-01.jpg?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/jC7yKmwpLMQQnMbORx6xn/fcc229b86e617c1e7becf3f74276462e/img-react-improvements-01.jpg?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/jC7yKmwpLMQQnMbORx6xn/fcc229b86e617c1e7becf3f74276462e/img-react-improvements-01.jpg?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/jC7yKmwpLMQQnMbORx6xn/fcc229b86e617c1e7becf3f74276462e/img-react-improvements-01.jpg?w=1478&h=832&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/jC7yKmwpLMQQnMbORx6xn/fcc229b86e617c1e7becf3f74276462e/img-react-improvements-01.jpg?w=1528&h=860&q=50&fm=webp&fit=scale 1528w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Team Tiny","slug":"team-tiny"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":{"metaDescription":"In this tutorial, I’ll walk you through how to integrate React.js with TinyMCE. Without further ado, let’s get started!"}},{"title":"A multi-language spell checker for our rich text editor","slug":"a-multi-language-spell-checker-for-our-rich-text-editor","featured":false,"lastUpdated":"Mar 29th, 2020","description":{"description":"<p>More situations are arising where more than one language needs to be included in a single piece of content. With the release of TinyMCE 5.2, you can check up to thirteen languages simultaneously.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"More situations are arising where more than one language needs to be included in a single piece of content. With the release of TinyMCE 5.2, you can check up to thirteen languages simultaneously."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Text 'Hello' in foreground with greetings in several languages in the background.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAAC/klEQVQYGQ3B3WpcVRQA4LXW3ud/pmcmk8RJSLQasAmCRUEpeCFSQb3wXm99Fh/BB/DCJ+gjFBQUKvXvooopSZpkYnPm5/zvffZey34fHj+6nqWqq7swDnNtUWsQOV0TIyHRUe60guK/xiT5fmqsB0IAwPOSKNB61XA96F1S1bo3JJ4dEhW9cjqIlPzbuizEtiXrvdm4gIRZlKKNIRcS6h9eOgEQ2dNw6+QgotZxSHgxACDCKyIRAQLuafECKw+xwm3Nzy3pj+84IkBEYO8GH4WaCJzjExWwCHjXOXXRKS9wPIEQBmM8hRHa7mgU6X65UVoLi1IoItWqRkIACKIA/KAIoWNnMwEo2BO7LNHYGBFIEkb47gZE4BWk8fnT2WFZP7kYnm2EEBHIepUHtJVxZXnViRL36ZfD/K5lLyx6DpKG2rI4IClLnZp02iffnHBrhuuX5sez7OG7yQf36se/2t+X3U/XR1+4OJWrTimF+sGcFXaeFYAsMrdY1hTE2YP7Mgy+bvRXn7t1RVk0fvghfhY0vz3bWTfTrLubkzVeX934zridXLx1L0odn4yGq035+GfetOGbe2yNObtU45F4DmaT4fbmsphtclJsyx70L5sEEOYFL6zkQazbqr1Y2e//wZDIPFF7itc+nChXeLcb6EVz9vVHsBmBeEBA+LZ4bwvf2HFXBeqhrpdVI1Ec4mREy9JddpSHeP/AvVgMopNJ1J/3W/Pt9LZ0Zx3pdyITYWjKahaShLQ922Hv0oQGjwPC6+OocaDGcBibOBI/hFMRonqo5O000X+V4VaPwFlECtjHGhh0qsUy9owLDyOFp2fWWlYk1qtIYztQx7TwSr+VBbsj/ruIrg3tRvB8AEAEBwDy/hT2kZ8W+EeXACKAgEAewL2p1AZDw/r4Na98c2ceOgmmY+6MIJEiOF3gOKAUq0/2EyRCkD8vFREeTnGkm4OtaFm0tCwDpEBLP9JVvekUW+yWtizJdos1rSsdU59gnSd9wI6cW9WodFivyr71/wOTlcVH5OBhgwAAAABJRU5ErkJggg==","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/1AY9IY1ZyN0JlYtxBktwsW/fbca674d8cbfdb45cc52d213eb11f1de/Image_default_multilingual.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/1AY9IY1ZyN0JlYtxBktwsW/fbca674d8cbfdb45cc52d213eb11f1de/Image_default_multilingual.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1AY9IY1ZyN0JlYtxBktwsW/fbca674d8cbfdb45cc52d213eb11f1de/Image_default_multilingual.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1AY9IY1ZyN0JlYtxBktwsW/fbca674d8cbfdb45cc52d213eb11f1de/Image_default_multilingual.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1AY9IY1ZyN0JlYtxBktwsW/fbca674d8cbfdb45cc52d213eb11f1de/Image_default_multilingual.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/1AY9IY1ZyN0JlYtxBktwsW/fbca674d8cbfdb45cc52d213eb11f1de/Image_default_multilingual.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/1AY9IY1ZyN0JlYtxBktwsW/fbca674d8cbfdb45cc52d213eb11f1de/Image_default_multilingual.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1AY9IY1ZyN0JlYtxBktwsW/fbca674d8cbfdb45cc52d213eb11f1de/Image_default_multilingual.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1AY9IY1ZyN0JlYtxBktwsW/fbca674d8cbfdb45cc52d213eb11f1de/Image_default_multilingual.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1AY9IY1ZyN0JlYtxBktwsW/fbca674d8cbfdb45cc52d213eb11f1de/Image_default_multilingual.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ben Long","slug":"ben-long"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":null},{"title":"API integrations and getting the most from TinyMCE’s APIs","slug":"api-release","featured":false,"lastUpdated":"Dec 14th, 2022","description":{"description":"<p>Looking for API guides? This guide shows some of the essential API integrations availble with TinyMCE's APIs</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Looking for API guides? This guide shows some of the essential API integrations availble with TinyMCE's APIs"}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"A cross icon and a cog icon representing APIs on a hexagon pattern background","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/4aSJRwwfIUTbit3A6YGxFR/e147350256ecf89f26b014102e1c3a00/img-api-basics-guide-0.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/4aSJRwwfIUTbit3A6YGxFR/e147350256ecf89f26b014102e1c3a00/img-api-basics-guide-0.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4aSJRwwfIUTbit3A6YGxFR/e147350256ecf89f26b014102e1c3a00/img-api-basics-guide-0.jpg?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4aSJRwwfIUTbit3A6YGxFR/e147350256ecf89f26b014102e1c3a00/img-api-basics-guide-0.jpg?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4aSJRwwfIUTbit3A6YGxFR/e147350256ecf89f26b014102e1c3a00/img-api-basics-guide-0.jpg?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4aSJRwwfIUTbit3A6YGxFR/e147350256ecf89f26b014102e1c3a00/img-api-basics-guide-0.jpg?w=1478&h=832&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4aSJRwwfIUTbit3A6YGxFR/e147350256ecf89f26b014102e1c3a00/img-api-basics-guide-0.jpg?w=1528&h=860&q=50&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/4aSJRwwfIUTbit3A6YGxFR/e147350256ecf89f26b014102e1c3a00/img-api-basics-guide-0.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/4aSJRwwfIUTbit3A6YGxFR/e147350256ecf89f26b014102e1c3a00/img-api-basics-guide-0.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4aSJRwwfIUTbit3A6YGxFR/e147350256ecf89f26b014102e1c3a00/img-api-basics-guide-0.jpg?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4aSJRwwfIUTbit3A6YGxFR/e147350256ecf89f26b014102e1c3a00/img-api-basics-guide-0.jpg?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4aSJRwwfIUTbit3A6YGxFR/e147350256ecf89f26b014102e1c3a00/img-api-basics-guide-0.jpg?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4aSJRwwfIUTbit3A6YGxFR/e147350256ecf89f26b014102e1c3a00/img-api-basics-guide-0.jpg?w=1478&h=832&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4aSJRwwfIUTbit3A6YGxFR/e147350256ecf89f26b014102e1c3a00/img-api-basics-guide-0.jpg?w=1528&h=860&q=50&fm=webp&fit=scale 1528w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joel Olawanle","slug":"joel-olawanle"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"API integrations and getting the most from TinyMCE’s APIs | TinyMCE"},"metaDescription":{"metaDescription":"API integrations can be confusing, but this guide shows API integration with TinyMCE APIs with API examples you can see to get started"}},{"title":"Using HTML and contenteditable to build a rich text editor","slug":"using-html-contenteditable","featured":false,"lastUpdated":"Apr 18th, 2022","description":{"description":"<p>Learn about <code>contenteditable</code> attribute, how it is used in text editors, its limitations, and how to overcome those limits with rich text editors.</p>\n<p>&nbsp;</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Learn about "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"contenteditable"}]},{"type":"text","value":" attribute, how it is used in text editors, its limitations, and how to overcome those limits with rich text editors."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":" "}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"An online HTML editor and the HTML displayed in real-time.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAMAAAAhxq8pAAACZFBMVEUHG0wDGEsAD0kAAEUAAEQAAEMAAEcAC00ADU4AAEIAFEsEGUwGGksEGUsAE0kAAUQAAEEAADwAADsAAD8AAEYAAEAAADkAFkoIHE0AFkhvc4TEytbEydXCyNTDydXBx9PCx9PL0d3L0NxvdIUMIVAAE0YAADCFiZfn7fnp7/rw9f/o7vrq8Pvl6/bk6fXi6PTq8Pzm7Pjk6vWCh5YAADgAFUgAEUQAACuFipft8//o7//p8P/p8P7q8f/n7/7r8f/u9P/v9f+Dh5YAAC0AEkUAEEMAACeGipfn7//V4frb5fva5fvd5vvc5vvw9v+Ch5QAACkAGUcAEUEAACWHjJnp7/vl7Pjo7vvx9//y+P+EiZYAAC4DG0cAE0CAhJLk6vbj6fXj6PTi6PV+gpAAADMGHEUEFj8ADD0hKEJLUGNNVnJYXHJTWG9WWnBVWnBIUnBGTGhFS2VESmRFS2ZKUGkfKEgAEj8MHkQNHEEMHUIABzMAOGUxVWxGPls5PWIpQmsAQmgENFctGEo8Ql8vNlYzOVg0OlkoL1IOHEEJG0EMHEESIEIQHkEIFTQEFDsAI1AALVEeH0sIGU0AIFIAK1AUK1AhIU0qMlUnL1IoMFMnL1MhKlASHkELGj0JFzsPHT4NGjwJFDIIFTkJGUoIFkkEGEkGGUkIGEgJF0gHF0kBFkgCF0kIFzwJFzgJFzkKFzcJFjcJFDEIFjoKG0wKG0sJG0sIFzsJFjYIFTMIFDAIFTcKGUQJGUMKGUMLGUQIEy8JFDAJFC8KFTALFTEMFzIIEi0LFS8IEy0MFi8MFjAKFC4IEizODDOKAAAAt0lEQVQYGQXBMWpUYQCAwW92/2SzwUU22niAEJAlhfexFey9hZVdbpGjWGlh4QUUEoigSd6+54xAhXk9NW+wA+V+T03ru1e8+bclzOvnU7Ws7vcuAZhOIow9AD3WBsZLgB7alB3Gjt+/3n7veP3z8LfOwfsfV3yt3mWupYEPAFBgXHDzEQDgMwAAxmsApk9f8rTBLahK1bLS2H47oGW1mFsf9ees4dAJTEY1H9vWeFGl5YziqdP6D+0HK9sR51AKAAAAAElFTkSuQmCC","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/hBZlqB7HMp6MD6i1LQMdL/7d62ec1165ff209d9ec5c9af839ff5ce/Image_default_OnlineHTMLEditor.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/hBZlqB7HMp6MD6i1LQMdL/7d62ec1165ff209d9ec5c9af839ff5ce/Image_default_OnlineHTMLEditor.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/hBZlqB7HMp6MD6i1LQMdL/7d62ec1165ff209d9ec5c9af839ff5ce/Image_default_OnlineHTMLEditor.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/hBZlqB7HMp6MD6i1LQMdL/7d62ec1165ff209d9ec5c9af839ff5ce/Image_default_OnlineHTMLEditor.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/hBZlqB7HMp6MD6i1LQMdL/7d62ec1165ff209d9ec5c9af839ff5ce/Image_default_OnlineHTMLEditor.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/hBZlqB7HMp6MD6i1LQMdL/7d62ec1165ff209d9ec5c9af839ff5ce/Image_default_OnlineHTMLEditor.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/hBZlqB7HMp6MD6i1LQMdL/7d62ec1165ff209d9ec5c9af839ff5ce/Image_default_OnlineHTMLEditor.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/hBZlqB7HMp6MD6i1LQMdL/7d62ec1165ff209d9ec5c9af839ff5ce/Image_default_OnlineHTMLEditor.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/hBZlqB7HMp6MD6i1LQMdL/7d62ec1165ff209d9ec5c9af839ff5ce/Image_default_OnlineHTMLEditor.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/hBZlqB7HMp6MD6i1LQMdL/7d62ec1165ff209d9ec5c9af839ff5ce/Image_default_OnlineHTMLEditor.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Shahed Nasser","slug":"shahed-nasser"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Using HTML Contententeditable to build a RTE | TinyMCE"},"metaDescription":{"metaDescription":"Learn about contenteditable attribute, how it is used in text editors, its limitations and how to overcome those.\n"}},{"title":"HTML compliance and rich text editors","slug":"html-compliance","featured":false,"lastUpdated":"Mar 21st, 2022","description":{"description":"<p>HTML compliance and validity is an essential part of web development. RTE can introduce possible HTML issues &ndash; compliance features and best practices keep the HTML validity of the web content.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"HTML compliance and validity is an essential part of web development. RTE can introduce possible HTML issues – compliance features and best practices keep the HTML validity of the web content."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Rich Text Editor HTML compliance and validity representation","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/42G3GpDezOShsBGbMDqQWi/83d067e9f3af4af9ed0d68d2ec11250e/Image_HTML_Compliance_Valid_explore.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/42G3GpDezOShsBGbMDqQWi/83d067e9f3af4af9ed0d68d2ec11250e/Image_HTML_Compliance_Valid_explore.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/42G3GpDezOShsBGbMDqQWi/83d067e9f3af4af9ed0d68d2ec11250e/Image_HTML_Compliance_Valid_explore.jpg?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/42G3GpDezOShsBGbMDqQWi/83d067e9f3af4af9ed0d68d2ec11250e/Image_HTML_Compliance_Valid_explore.jpg?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/42G3GpDezOShsBGbMDqQWi/83d067e9f3af4af9ed0d68d2ec11250e/Image_HTML_Compliance_Valid_explore.jpg?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/42G3GpDezOShsBGbMDqQWi/83d067e9f3af4af9ed0d68d2ec11250e/Image_HTML_Compliance_Valid_explore.jpg?w=1478&h=832&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/42G3GpDezOShsBGbMDqQWi/83d067e9f3af4af9ed0d68d2ec11250e/Image_HTML_Compliance_Valid_explore.jpg?w=1528&h=860&q=50&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/42G3GpDezOShsBGbMDqQWi/83d067e9f3af4af9ed0d68d2ec11250e/Image_HTML_Compliance_Valid_explore.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/42G3GpDezOShsBGbMDqQWi/83d067e9f3af4af9ed0d68d2ec11250e/Image_HTML_Compliance_Valid_explore.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/42G3GpDezOShsBGbMDqQWi/83d067e9f3af4af9ed0d68d2ec11250e/Image_HTML_Compliance_Valid_explore.jpg?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/42G3GpDezOShsBGbMDqQWi/83d067e9f3af4af9ed0d68d2ec11250e/Image_HTML_Compliance_Valid_explore.jpg?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/42G3GpDezOShsBGbMDqQWi/83d067e9f3af4af9ed0d68d2ec11250e/Image_HTML_Compliance_Valid_explore.jpg?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/42G3GpDezOShsBGbMDqQWi/83d067e9f3af4af9ed0d68d2ec11250e/Image_HTML_Compliance_Valid_explore.jpg?w=1478&h=832&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/42G3GpDezOShsBGbMDqQWi/83d067e9f3af4af9ed0d68d2ec11250e/Image_HTML_Compliance_Valid_explore.jpg?w=1528&h=860&q=50&fm=webp&fit=scale 1528w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Prakash Verma","slug":"prakash-verma"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"HTML compliance and compliance features of RTE editors | TinyMCE"},"metaDescription":{"metaDescription":"Learn more about HTML compliance of RTE editors: possible issues, compliance features and best practices to keep the html validity of the web content."}},{"title":"How HTML focus works in rich text editors","slug":"text-editor-focus","featured":false,"lastUpdated":"Mar 2nd, 2022","description":{"description":"<p>HTML focus can be complex &ndash; this is especially true for the textarea HTML element. Find out what HTML focus means, and how HTML focus works in rich text editors.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"HTML focus can be complex – this is especially true for the textarea HTML element. Find out what HTML focus means, and how HTML focus works in rich text editors."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"How HTML focus works in rich text editors.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/64w7Q9hY2R5s7AiLyzkqR1/93897c5aad3bb563440429b810bb1561/Image_Focus_HTML_Textarea__1_.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/64w7Q9hY2R5s7AiLyzkqR1/93897c5aad3bb563440429b810bb1561/Image_Focus_HTML_Textarea__1_.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/64w7Q9hY2R5s7AiLyzkqR1/93897c5aad3bb563440429b810bb1561/Image_Focus_HTML_Textarea__1_.jpg?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/64w7Q9hY2R5s7AiLyzkqR1/93897c5aad3bb563440429b810bb1561/Image_Focus_HTML_Textarea__1_.jpg?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/64w7Q9hY2R5s7AiLyzkqR1/93897c5aad3bb563440429b810bb1561/Image_Focus_HTML_Textarea__1_.jpg?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/64w7Q9hY2R5s7AiLyzkqR1/93897c5aad3bb563440429b810bb1561/Image_Focus_HTML_Textarea__1_.jpg?w=1478&h=832&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/64w7Q9hY2R5s7AiLyzkqR1/93897c5aad3bb563440429b810bb1561/Image_Focus_HTML_Textarea__1_.jpg?w=1528&h=860&q=50&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/64w7Q9hY2R5s7AiLyzkqR1/93897c5aad3bb563440429b810bb1561/Image_Focus_HTML_Textarea__1_.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/64w7Q9hY2R5s7AiLyzkqR1/93897c5aad3bb563440429b810bb1561/Image_Focus_HTML_Textarea__1_.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/64w7Q9hY2R5s7AiLyzkqR1/93897c5aad3bb563440429b810bb1561/Image_Focus_HTML_Textarea__1_.jpg?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/64w7Q9hY2R5s7AiLyzkqR1/93897c5aad3bb563440429b810bb1561/Image_Focus_HTML_Textarea__1_.jpg?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/64w7Q9hY2R5s7AiLyzkqR1/93897c5aad3bb563440429b810bb1561/Image_Focus_HTML_Textarea__1_.jpg?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/64w7Q9hY2R5s7AiLyzkqR1/93897c5aad3bb563440429b810bb1561/Image_Focus_HTML_Textarea__1_.jpg?w=1478&h=832&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/64w7Q9hY2R5s7AiLyzkqR1/93897c5aad3bb563440429b810bb1561/Image_Focus_HTML_Textarea__1_.jpg?w=1528&h=860&q=50&fm=webp&fit=scale 1528w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Keanan Koppenhaver","slug":"keanan-koppenhaver"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"What is HTML focus, and how focus works for rich text editors | TinyMCE"},"metaDescription":{"metaDescription":"HTML focus can be complex, especially in textarea focus cases. Find out what HTML focus means, and how HTML focus works in rich text editors."}},{"title":"HTML content models in rich text editors","slug":"html-content-models","featured":false,"lastUpdated":"Feb 21st, 2022","description":{"description":"<p>HTML content models are essential for rich text editors. They define what HTML element the content should have. Knowing how they work makes producing content in a rich text editor easier, and improves your flow.&nbsp;</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"HTML content models are essential for rich text editors. They define what HTML element the content should have. Knowing how they work makes producing content in a rich text editor easier, and improves your flow. "}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"HTML mapping is important to understand for writing quickly in rich text editors","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/6ohdvJvwCih51h92ht2eEd/7f9a8d9953f402ef97dfbd212260b98f/Image_HTML_Mapping__1_.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6ohdvJvwCih51h92ht2eEd/7f9a8d9953f402ef97dfbd212260b98f/Image_HTML_Mapping__1_.jpg?w=185&h=104&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6ohdvJvwCih51h92ht2eEd/7f9a8d9953f402ef97dfbd212260b98f/Image_HTML_Mapping__1_.jpg?w=370&h=208&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6ohdvJvwCih51h92ht2eEd/7f9a8d9953f402ef97dfbd212260b98f/Image_HTML_Mapping__1_.jpg?w=739&h=416&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6ohdvJvwCih51h92ht2eEd/7f9a8d9953f402ef97dfbd212260b98f/Image_HTML_Mapping__1_.jpg?w=1109&h=624&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6ohdvJvwCih51h92ht2eEd/7f9a8d9953f402ef97dfbd212260b98f/Image_HTML_Mapping__1_.jpg?w=1478&h=832&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6ohdvJvwCih51h92ht2eEd/7f9a8d9953f402ef97dfbd212260b98f/Image_HTML_Mapping__1_.jpg?w=1528&h=860&q=50&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6ohdvJvwCih51h92ht2eEd/7f9a8d9953f402ef97dfbd212260b98f/Image_HTML_Mapping__1_.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6ohdvJvwCih51h92ht2eEd/7f9a8d9953f402ef97dfbd212260b98f/Image_HTML_Mapping__1_.jpg?w=185&h=104&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6ohdvJvwCih51h92ht2eEd/7f9a8d9953f402ef97dfbd212260b98f/Image_HTML_Mapping__1_.jpg?w=370&h=208&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6ohdvJvwCih51h92ht2eEd/7f9a8d9953f402ef97dfbd212260b98f/Image_HTML_Mapping__1_.jpg?w=739&h=416&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6ohdvJvwCih51h92ht2eEd/7f9a8d9953f402ef97dfbd212260b98f/Image_HTML_Mapping__1_.jpg?w=1109&h=624&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6ohdvJvwCih51h92ht2eEd/7f9a8d9953f402ef97dfbd212260b98f/Image_HTML_Mapping__1_.jpg?w=1478&h=832&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6ohdvJvwCih51h92ht2eEd/7f9a8d9953f402ef97dfbd212260b98f/Image_HTML_Mapping__1_.jpg?w=1528&h=860&q=50&fm=webp&fit=scale 1528w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ochuko Onojakpor","slug":"ochuko-onojakpor"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"HTML content models in rich text editors | TinyMCE"},"metaDescription":{"metaDescription":"HTML content models define the type of content each element is allowed to have. Learn about how rich text editors convert content to HTML."}},{"title":"Open source security pros and cons","slug":"open-source-software-security","featured":false,"lastUpdated":"Jan 27th, 2022","description":{"description":"<p>How can you know if an open source software dependency you&rsquo;d like to use is secure (or not)? Find out more..</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"How can you know if an open source software dependency you’d like to use is secure (or not)? Find out more.."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Learn more on how to assess the security of the open source project, possible risks and best practices on how to avoid those.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.0979142526071843,"src":"//images.ctfassets.net/s600jj41gsex/4cFCQEovjuciYoGlvAtYda/00ab5c450ecafff220d3b3108e3c3cc6/Image_Github_Security.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/4cFCQEovjuciYoGlvAtYda/00ab5c450ecafff220d3b3108e3c3cc6/Image_Github_Security.png?w=185&h=169&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4cFCQEovjuciYoGlvAtYda/00ab5c450ecafff220d3b3108e3c3cc6/Image_Github_Security.png?w=370&h=337&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4cFCQEovjuciYoGlvAtYda/00ab5c450ecafff220d3b3108e3c3cc6/Image_Github_Security.png?w=739&h=673&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4cFCQEovjuciYoGlvAtYda/00ab5c450ecafff220d3b3108e3c3cc6/Image_Github_Security.png?w=1109&h=1010&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4cFCQEovjuciYoGlvAtYda/00ab5c450ecafff220d3b3108e3c3cc6/Image_Github_Security.png?w=1478&h=1346&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4cFCQEovjuciYoGlvAtYda/00ab5c450ecafff220d3b3108e3c3cc6/Image_Github_Security.png?w=1895&h=1726&q=50&fit=scale 1895w","srcWebp":"//images.ctfassets.net/s600jj41gsex/4cFCQEovjuciYoGlvAtYda/00ab5c450ecafff220d3b3108e3c3cc6/Image_Github_Security.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/4cFCQEovjuciYoGlvAtYda/00ab5c450ecafff220d3b3108e3c3cc6/Image_Github_Security.png?w=185&h=169&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4cFCQEovjuciYoGlvAtYda/00ab5c450ecafff220d3b3108e3c3cc6/Image_Github_Security.png?w=370&h=337&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4cFCQEovjuciYoGlvAtYda/00ab5c450ecafff220d3b3108e3c3cc6/Image_Github_Security.png?w=739&h=673&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4cFCQEovjuciYoGlvAtYda/00ab5c450ecafff220d3b3108e3c3cc6/Image_Github_Security.png?w=1109&h=1010&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4cFCQEovjuciYoGlvAtYda/00ab5c450ecafff220d3b3108e3c3cc6/Image_Github_Security.png?w=1478&h=1346&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4cFCQEovjuciYoGlvAtYda/00ab5c450ecafff220d3b3108e3c3cc6/Image_Github_Security.png?w=1895&h=1726&q=50&fm=webp&fit=scale 1895w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Open source software security: better or bad from the start? "},"metaDescription":{"metaDescription":"Learn more on how to assess the security of the open source project, possible risks and best practices on how to avoid those."}},{"title":"Tracking engineering performance with analytics","slug":"tracking-engineering-performance-with-analytics","featured":false,"lastUpdated":"Jan 10th, 2022","description":{"description":"<p>Engineering performance metrics are essential for supporting software development.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Engineering performance metrics are essential for supporting software development."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Engineering performance and culture are better with analytics","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.0979142526071843,"src":"//images.ctfassets.net/s600jj41gsex/48GmaUah7PNcm3jKAxP9KT/16251ff0f9d7cceb46ebbba7cff5dec2/Image_engineering_Analytics_Header.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/48GmaUah7PNcm3jKAxP9KT/16251ff0f9d7cceb46ebbba7cff5dec2/Image_engineering_Analytics_Header.png?w=185&h=169&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/48GmaUah7PNcm3jKAxP9KT/16251ff0f9d7cceb46ebbba7cff5dec2/Image_engineering_Analytics_Header.png?w=370&h=337&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/48GmaUah7PNcm3jKAxP9KT/16251ff0f9d7cceb46ebbba7cff5dec2/Image_engineering_Analytics_Header.png?w=739&h=673&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/48GmaUah7PNcm3jKAxP9KT/16251ff0f9d7cceb46ebbba7cff5dec2/Image_engineering_Analytics_Header.png?w=1109&h=1010&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/48GmaUah7PNcm3jKAxP9KT/16251ff0f9d7cceb46ebbba7cff5dec2/Image_engineering_Analytics_Header.png?w=1478&h=1346&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/48GmaUah7PNcm3jKAxP9KT/16251ff0f9d7cceb46ebbba7cff5dec2/Image_engineering_Analytics_Header.png?w=1895&h=1726&q=50&fit=scale 1895w","srcWebp":"//images.ctfassets.net/s600jj41gsex/48GmaUah7PNcm3jKAxP9KT/16251ff0f9d7cceb46ebbba7cff5dec2/Image_engineering_Analytics_Header.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/48GmaUah7PNcm3jKAxP9KT/16251ff0f9d7cceb46ebbba7cff5dec2/Image_engineering_Analytics_Header.png?w=185&h=169&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/48GmaUah7PNcm3jKAxP9KT/16251ff0f9d7cceb46ebbba7cff5dec2/Image_engineering_Analytics_Header.png?w=370&h=337&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/48GmaUah7PNcm3jKAxP9KT/16251ff0f9d7cceb46ebbba7cff5dec2/Image_engineering_Analytics_Header.png?w=739&h=673&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/48GmaUah7PNcm3jKAxP9KT/16251ff0f9d7cceb46ebbba7cff5dec2/Image_engineering_Analytics_Header.png?w=1109&h=1010&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/48GmaUah7PNcm3jKAxP9KT/16251ff0f9d7cceb46ebbba7cff5dec2/Image_engineering_Analytics_Header.png?w=1478&h=1346&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/48GmaUah7PNcm3jKAxP9KT/16251ff0f9d7cceb46ebbba7cff5dec2/Image_engineering_Analytics_Header.png?w=1895&h=1726&q=50&fm=webp&fit=scale 1895w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Tracking engineering performance with analytics | TinyMCE"},"metaDescription":{"metaDescription":"Learn about why it’s important to track your engineering performance and what software development metrics you can use."}},{"title":"Open source software and managing technical debt ","slug":"open-source-manage-technical-debt","featured":false,"lastUpdated":"Oct 4th, 2021","description":{"description":"<p>While technical debt may appear to be an issue for large, private software products, open source software projects can experience it when they expand in size, or when volunteers depart projects. It's possible to identify the skill set needed to manage it, apply for funding resources to attract contributors with the relevant skills, or even create an associated business to garner attention and resources for an open source project.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"While technical debt may appear to be an issue for large, private software products, open source software projects can experience it when they expand in size, or when volunteers depart projects. It's possible to identify the skill set needed to manage it, apply for funding resources to attract contributors with the relevant skills, or even create an associated business to garner attention and resources for an open source project."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"An hour glass, a pair of hands holding it, and a computer screen. The hour glass represents the time pressures associated with technical debt.","artistName":"Fakurian Design","image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.4922222222222221,"src":"//images.ctfassets.net/s600jj41gsex/658ocwXKWBWtrGwltiTxmx/c4f6c0bd42690c0fee34705a2bcb18ba/fakurian-design-mqm-Ze_q_9A-unsplash-technical-debt.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/658ocwXKWBWtrGwltiTxmx/c4f6c0bd42690c0fee34705a2bcb18ba/fakurian-design-mqm-Ze_q_9A-unsplash-technical-debt.png?w=185&h=124&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/658ocwXKWBWtrGwltiTxmx/c4f6c0bd42690c0fee34705a2bcb18ba/fakurian-design-mqm-Ze_q_9A-unsplash-technical-debt.png?w=370&h=248&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/658ocwXKWBWtrGwltiTxmx/c4f6c0bd42690c0fee34705a2bcb18ba/fakurian-design-mqm-Ze_q_9A-unsplash-technical-debt.png?w=739&h=495&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/658ocwXKWBWtrGwltiTxmx/c4f6c0bd42690c0fee34705a2bcb18ba/fakurian-design-mqm-Ze_q_9A-unsplash-technical-debt.png?w=1109&h=743&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/658ocwXKWBWtrGwltiTxmx/c4f6c0bd42690c0fee34705a2bcb18ba/fakurian-design-mqm-Ze_q_9A-unsplash-technical-debt.png?w=1478&h=990&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/658ocwXKWBWtrGwltiTxmx/c4f6c0bd42690c0fee34705a2bcb18ba/fakurian-design-mqm-Ze_q_9A-unsplash-technical-debt.png?w=2217&h=1486&q=50&fit=scale 2217w,\n//images.ctfassets.net/s600jj41gsex/658ocwXKWBWtrGwltiTxmx/c4f6c0bd42690c0fee34705a2bcb18ba/fakurian-design-mqm-Ze_q_9A-unsplash-technical-debt.png?w=2686&h=1800&q=50&fit=scale 2686w","srcWebp":"//images.ctfassets.net/s600jj41gsex/658ocwXKWBWtrGwltiTxmx/c4f6c0bd42690c0fee34705a2bcb18ba/fakurian-design-mqm-Ze_q_9A-unsplash-technical-debt.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/658ocwXKWBWtrGwltiTxmx/c4f6c0bd42690c0fee34705a2bcb18ba/fakurian-design-mqm-Ze_q_9A-unsplash-technical-debt.png?w=185&h=124&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/658ocwXKWBWtrGwltiTxmx/c4f6c0bd42690c0fee34705a2bcb18ba/fakurian-design-mqm-Ze_q_9A-unsplash-technical-debt.png?w=370&h=248&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/658ocwXKWBWtrGwltiTxmx/c4f6c0bd42690c0fee34705a2bcb18ba/fakurian-design-mqm-Ze_q_9A-unsplash-technical-debt.png?w=739&h=495&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/658ocwXKWBWtrGwltiTxmx/c4f6c0bd42690c0fee34705a2bcb18ba/fakurian-design-mqm-Ze_q_9A-unsplash-technical-debt.png?w=1109&h=743&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/658ocwXKWBWtrGwltiTxmx/c4f6c0bd42690c0fee34705a2bcb18ba/fakurian-design-mqm-Ze_q_9A-unsplash-technical-debt.png?w=1478&h=990&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/658ocwXKWBWtrGwltiTxmx/c4f6c0bd42690c0fee34705a2bcb18ba/fakurian-design-mqm-Ze_q_9A-unsplash-technical-debt.png?w=2217&h=1486&q=50&fm=webp&fit=scale 2217w,\n//images.ctfassets.net/s600jj41gsex/658ocwXKWBWtrGwltiTxmx/c4f6c0bd42690c0fee34705a2bcb18ba/fakurian-design-mqm-Ze_q_9A-unsplash-technical-debt.png?w=2686&h=1800&q=50&fm=webp&fit=scale 2686w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":null},{"title":"Learn JavaScript in 2021: Hassib Moddasser’s recommendation ","slug":"learn-javascript-guide-2021","featured":false,"lastUpdated":"Sep 21st, 2021","description":{"description":"<p>To learn JavaScript in 2021, we have a resource to share - a twitter thread from Hassib Moddasser. Their recommendations can help users to start to learn JavaScript with the best resources in 2021.&nbsp;</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"To learn JavaScript in 2021, we have a resource to share - a twitter thread from Hassib Moddasser. Their recommendations can help users to start to learn JavaScript with the best resources in 2021. "}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"The twitter handle of @hassibmoddasser who's tweets are showcased in this blog to learn JavaScript","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.4169570267131242,"src":"//images.ctfassets.net/s600jj41gsex/5YYKT2puI3GQH5cMJcj2j0/c0cbe2799bdd2ff7c8a3141892d2fc10/twitter-showcase-blog2.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/5YYKT2puI3GQH5cMJcj2j0/c0cbe2799bdd2ff7c8a3141892d2fc10/twitter-showcase-blog2.png?w=185&h=131&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5YYKT2puI3GQH5cMJcj2j0/c0cbe2799bdd2ff7c8a3141892d2fc10/twitter-showcase-blog2.png?w=370&h=261&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5YYKT2puI3GQH5cMJcj2j0/c0cbe2799bdd2ff7c8a3141892d2fc10/twitter-showcase-blog2.png?w=739&h=522&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5YYKT2puI3GQH5cMJcj2j0/c0cbe2799bdd2ff7c8a3141892d2fc10/twitter-showcase-blog2.png?w=1109&h=783&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/5YYKT2puI3GQH5cMJcj2j0/c0cbe2799bdd2ff7c8a3141892d2fc10/twitter-showcase-blog2.png?w=1220&h=861&q=50&fit=scale 1220w","srcWebp":"//images.ctfassets.net/s600jj41gsex/5YYKT2puI3GQH5cMJcj2j0/c0cbe2799bdd2ff7c8a3141892d2fc10/twitter-showcase-blog2.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/5YYKT2puI3GQH5cMJcj2j0/c0cbe2799bdd2ff7c8a3141892d2fc10/twitter-showcase-blog2.png?w=185&h=131&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5YYKT2puI3GQH5cMJcj2j0/c0cbe2799bdd2ff7c8a3141892d2fc10/twitter-showcase-blog2.png?w=370&h=261&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5YYKT2puI3GQH5cMJcj2j0/c0cbe2799bdd2ff7c8a3141892d2fc10/twitter-showcase-blog2.png?w=739&h=522&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5YYKT2puI3GQH5cMJcj2j0/c0cbe2799bdd2ff7c8a3141892d2fc10/twitter-showcase-blog2.png?w=1109&h=783&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/5YYKT2puI3GQH5cMJcj2j0/c0cbe2799bdd2ff7c8a3141892d2fc10/twitter-showcase-blog2.png?w=1220&h=861&q=50&fm=webp&fit=scale 1220w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joe Robinson","slug":"joseph-robinson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":null},{"title":"How tiny.cloud uses free monads for testing","slug":"tiny-cloud-free-monads","featured":false,"lastUpdated":"Jul 19th, 2021","description":{"description":"<p>At Tiny, we devised a solution to a file system problem using a solution from mathematics: Free Monads. In this deep dive into our process, we walk through what went into implementing Free Monads for testing our rich text editor.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"At Tiny, we devised a solution to a file system problem using a solution from mathematics: Free Monads. In this deep dive into our process, we walk through what went into implementing Free Monads for testing our rich text editor."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Graphics of TinyMCE and the Cloud","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAMAAAAhxq8pAAACc1BMVEUMEywMEiwMESsMGy4MIS8MHC4MEisMHi8MIC8MFSwMITAKGC0LEisNGy4NIjEMFiwMIjAXIzEMHi4IESoLEysQJDIMFi0MEioMESkLESoMECk3IDwxJjsbFCgHESgJEisMEysRIDESIjILECoLDycJESEMHzYMFi8MECQwIEIjKF8wIT4qGjMSEyoJEikWIzQUIjIMEykJDiAKGysYL18lPYgTIEsLDRMxJFUwUtonQKUhIUckIEUYGTcKESkKESsWHzIXITEIDCIIFyQTKk4iOX4rQpksQpwTH0sLDBEwIEg5WeExUtkhIkkrJE4eI08XH0YQFzUeJTQMFyUPJUIeNXEoPo4rQZgtQ5ssQpoMDhswHjgbKmkeM4YZI04pJE0zKU8lJ1AXIlARFSsiLkAZMWQmO4YrP5MsQZUrQZYrQZclOIQRG0ANESUwHz8bJlQZJlIjJVEoJE4dI08iJk8VIU8KESoRFigmN1cnO4kqPo8qPpAqPpEmOYYcKmQSGz4QGTcOEysvIEIbJ1gbKFkaJFMrJU4yKU4iJU8UIU8MESQlNlYnO4coPIslN38XIUkYIkkWH0QRGTorHz8gJlYZJlgiJVMlI08eJE8kJk4JDyMWLE8nOYUpPIohMnQSGjkYIksWIEYTGz4LEy0TFCwfHT4eJVIdJFMvJk8xKE8gJE8KECQSK04mOYMoO4kqPo4hMXETGz0ZJE8QGDcKEioKEikRFjAXH0QWI1AiJVAnKE8WIU8TK04lOIIlN4AcK2UQGTwOFjEOFjMNFC4LEioLEikVIEkWIlELECUSLE0eLmsRGj8IDBYKECMKEScSGz0XI0/uMlZ+AAAArElEQVQYGW3BTQoBcQDG4fc3/kYkzaCEkoWNE9hxASucQzkLO0tsbe2dw8IBfJU0RYz5aJR4npQiWJKlBAohC8HDVwSFbMDLPQ03XwEUsDNc08oSOkhCEipzcUnsZSTSdSjwYdeM8Nt8cRvQ5Vf+3id2LpLotfhhOvxRnQDHMoHxlMjOvBzg6BBYEBOVGbFTabgmZiSHiDuq9ZtLTiXm2FtCw9Ugu5ea3sbL8QaJ9CFZflaXeQAAAABJRU5ErkJggg==","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/sQsL5FErxkutJXb8qwwFy/5d0f772e5c09dec7689b38b895717830/How_Cloud_used_Free_Monads_for_testability.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/sQsL5FErxkutJXb8qwwFy/5d0f772e5c09dec7689b38b895717830/How_Cloud_used_Free_Monads_for_testability.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/sQsL5FErxkutJXb8qwwFy/5d0f772e5c09dec7689b38b895717830/How_Cloud_used_Free_Monads_for_testability.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/sQsL5FErxkutJXb8qwwFy/5d0f772e5c09dec7689b38b895717830/How_Cloud_used_Free_Monads_for_testability.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/sQsL5FErxkutJXb8qwwFy/5d0f772e5c09dec7689b38b895717830/How_Cloud_used_Free_Monads_for_testability.png?w=1109&h=911&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/sQsL5FErxkutJXb8qwwFy/5d0f772e5c09dec7689b38b895717830/How_Cloud_used_Free_Monads_for_testability.png?w=1478&h=1214&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/sQsL5FErxkutJXb8qwwFy/5d0f772e5c09dec7689b38b895717830/How_Cloud_used_Free_Monads_for_testability.png?w=1792&h=1472&q=50&fit=scale 1792w","srcWebp":"//images.ctfassets.net/s600jj41gsex/sQsL5FErxkutJXb8qwwFy/5d0f772e5c09dec7689b38b895717830/How_Cloud_used_Free_Monads_for_testability.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/sQsL5FErxkutJXb8qwwFy/5d0f772e5c09dec7689b38b895717830/How_Cloud_used_Free_Monads_for_testability.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/sQsL5FErxkutJXb8qwwFy/5d0f772e5c09dec7689b38b895717830/How_Cloud_used_Free_Monads_for_testability.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/sQsL5FErxkutJXb8qwwFy/5d0f772e5c09dec7689b38b895717830/How_Cloud_used_Free_Monads_for_testability.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/sQsL5FErxkutJXb8qwwFy/5d0f772e5c09dec7689b38b895717830/How_Cloud_used_Free_Monads_for_testability.png?w=1109&h=911&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/sQsL5FErxkutJXb8qwwFy/5d0f772e5c09dec7689b38b895717830/How_Cloud_used_Free_Monads_for_testability.png?w=1478&h=1214&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/sQsL5FErxkutJXb8qwwFy/5d0f772e5c09dec7689b38b895717830/How_Cloud_used_Free_Monads_for_testability.png?w=1792&h=1472&q=50&fm=webp&fit=scale 1792w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Morgan Smith","slug":"morgan-smith"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"How tiny.cloud uses free monads for testing"},"metaDescription":{"metaDescription":"At Tiny, we devised a solution to a file system problem using mathematics: a concept called Free Monads. In this deep dive into our process, we walk through what went into implementing Free Monads for testing our rich text editor."}},{"title":"The essential git stash and git reset guide","slug":"the-essential-git-stash-and-git-reset-guide","featured":false,"lastUpdated":"Jun 9th, 2021","description":{"description":"<p>In this guide, we take you through two essential git commands. Git stash saves your work and lets you switch branches.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In this guide, we take you through two essential git commands. Git stash saves your work and lets you switch branches."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":" An octocat figurine stands in front of a computer screen","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.5316091954022988,"src":"//images.ctfassets.net/s600jj41gsex/3kGjWY2aHvXl6Hjad2Ch7V/3bb82ab03e8e0e44db961e742cb3505f/GitHub_reset.jpeg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/3kGjWY2aHvXl6Hjad2Ch7V/3bb82ab03e8e0e44db961e742cb3505f/GitHub_reset.jpeg?w=185&h=121&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/3kGjWY2aHvXl6Hjad2Ch7V/3bb82ab03e8e0e44db961e742cb3505f/GitHub_reset.jpeg?w=370&h=242&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/3kGjWY2aHvXl6Hjad2Ch7V/3bb82ab03e8e0e44db961e742cb3505f/GitHub_reset.jpeg?w=739&h=482&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/3kGjWY2aHvXl6Hjad2Ch7V/3bb82ab03e8e0e44db961e742cb3505f/GitHub_reset.jpeg?w=1066&h=696&q=50&fit=scale 1066w","srcWebp":"//images.ctfassets.net/s600jj41gsex/3kGjWY2aHvXl6Hjad2Ch7V/3bb82ab03e8e0e44db961e742cb3505f/GitHub_reset.jpeg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/3kGjWY2aHvXl6Hjad2Ch7V/3bb82ab03e8e0e44db961e742cb3505f/GitHub_reset.jpeg?w=185&h=121&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/3kGjWY2aHvXl6Hjad2Ch7V/3bb82ab03e8e0e44db961e742cb3505f/GitHub_reset.jpeg?w=370&h=242&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/3kGjWY2aHvXl6Hjad2Ch7V/3bb82ab03e8e0e44db961e742cb3505f/GitHub_reset.jpeg?w=739&h=482&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/3kGjWY2aHvXl6Hjad2Ch7V/3bb82ab03e8e0e44db961e742cb3505f/GitHub_reset.jpeg?w=1066&h=696&q=50&fm=webp&fit=scale 1066w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Team Tiny","slug":"team-tiny"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"The essential git stash and git reset guide | TinyMCE"},"metaDescription":{"metaDescription":"Guide to git stash and get reset - essential git commands. Git stash makes a temporary, local save of your code. Git reset lets you tidy up your code before doing a commit."}},{"title":"3 reasons why a great developer experience is crucial","slug":"why-have-a-great-developer-experience","featured":false,"lastUpdated":"Apr 14th, 2021","description":{"description":"<p>More often than not, we cater to our users by creating an intuitive user experience, but we should also focus on building a great developer experience. Learn the benefits of having a great developer experience in our latest blog.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"More often than not, we cater to our users by creating an intuitive user experience, but we should also focus on building a great developer experience. Learn the benefits of having a great developer experience in our latest blog."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Laptop at a desk office","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.5,"src":"//images.ctfassets.net/s600jj41gsex/4wRTVDqpVEIDf4C7Q0bNxx/c2b0d83dd4770065cbb9dd1e23ed5322/christopher-gower-vjMgqUkS8q8-unsplash.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/4wRTVDqpVEIDf4C7Q0bNxx/c2b0d83dd4770065cbb9dd1e23ed5322/christopher-gower-vjMgqUkS8q8-unsplash.jpg?w=185&h=123&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4wRTVDqpVEIDf4C7Q0bNxx/c2b0d83dd4770065cbb9dd1e23ed5322/christopher-gower-vjMgqUkS8q8-unsplash.jpg?w=370&h=247&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4wRTVDqpVEIDf4C7Q0bNxx/c2b0d83dd4770065cbb9dd1e23ed5322/christopher-gower-vjMgqUkS8q8-unsplash.jpg?w=739&h=493&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4wRTVDqpVEIDf4C7Q0bNxx/c2b0d83dd4770065cbb9dd1e23ed5322/christopher-gower-vjMgqUkS8q8-unsplash.jpg?w=1109&h=739&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4wRTVDqpVEIDf4C7Q0bNxx/c2b0d83dd4770065cbb9dd1e23ed5322/christopher-gower-vjMgqUkS8q8-unsplash.jpg?w=1478&h=985&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4wRTVDqpVEIDf4C7Q0bNxx/c2b0d83dd4770065cbb9dd1e23ed5322/christopher-gower-vjMgqUkS8q8-unsplash.jpg?w=2217&h=1478&q=50&fit=scale 2217w","srcWebp":"//images.ctfassets.net/s600jj41gsex/4wRTVDqpVEIDf4C7Q0bNxx/c2b0d83dd4770065cbb9dd1e23ed5322/christopher-gower-vjMgqUkS8q8-unsplash.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/4wRTVDqpVEIDf4C7Q0bNxx/c2b0d83dd4770065cbb9dd1e23ed5322/christopher-gower-vjMgqUkS8q8-unsplash.jpg?w=185&h=123&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4wRTVDqpVEIDf4C7Q0bNxx/c2b0d83dd4770065cbb9dd1e23ed5322/christopher-gower-vjMgqUkS8q8-unsplash.jpg?w=370&h=247&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4wRTVDqpVEIDf4C7Q0bNxx/c2b0d83dd4770065cbb9dd1e23ed5322/christopher-gower-vjMgqUkS8q8-unsplash.jpg?w=739&h=493&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4wRTVDqpVEIDf4C7Q0bNxx/c2b0d83dd4770065cbb9dd1e23ed5322/christopher-gower-vjMgqUkS8q8-unsplash.jpg?w=1109&h=739&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/4wRTVDqpVEIDf4C7Q0bNxx/c2b0d83dd4770065cbb9dd1e23ed5322/christopher-gower-vjMgqUkS8q8-unsplash.jpg?w=1478&h=985&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/4wRTVDqpVEIDf4C7Q0bNxx/c2b0d83dd4770065cbb9dd1e23ed5322/christopher-gower-vjMgqUkS8q8-unsplash.jpg?w=2217&h=1478&q=50&fm=webp&fit=scale 2217w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Qiran Gabrielle-Grace","slug":"qiran-gabrielle-grace"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"The importance of a great developer experience?"},"metaDescription":{"metaDescription":"More often than not, we cater to our users by creating an intuitive user experience, but we should also focus on building a great developer experience. Learn the benefits of having a great developer experience in our latest blog. "}},{"title":"Collecting and analyzing metrics in engineering","slug":"collecting-and-analyzing-engineering-metrics","featured":false,"lastUpdated":"Feb 10th, 2021","description":{"description":"<p>Software development metrics done right can be extremely fascinating and illuminating. They can save your development teams from myriad unnecessary costs and frustrations, and improve performance as a result.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Software development metrics done right can be extremely fascinating and illuminating. They can save your development teams from myriad unnecessary costs and frustrations, and improve performance as a result."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Series of graphs on a screen ","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAADbUlEQVQYGQXBy24bVRgA4P9c5ubx+BZnbMeO08R1moYQS1XUtLShRDQLoGxbsUPsYAMb3oAFEq/AkiVPgFARIlIkAlUSgZI6iZ3E93vs8Vw8c+ZMvw/ByjOomJt7W9sPNzO6HpJlgiklBFNCCAaAWEiNqIogUlkSZEmQJEGWRFEUMMIUKgPQ0ztPt7Lp5Mz1PcZUTUGEEIxlUVRlSVVkURIoxQgC0zL7Q9ucWoPBuNsbUYDQoycbuYWkKiuxMA0rIVEQAQHBhHnMmEybzfZwdKtpocp1++yi6fmwf9iBugvgUQBl7f4dRRECzhnz2r1+rzvq9EZaRLus9fdP29O/x5BC33y1dXLRFgkmga+lBAP7nz7J0Px2NpmMHhydVuqjOU3rje1/GxOwZi8/KJ63htz3IAOfPMsxj/1X7WgSrQ9sEAi47vMPS3T70TrzvXKtCxwrEm4NDXBne+u661qXg36UAqRZoaBfdcwxlixJjuTVCWNSXLx77x4tFHO1egcjtrI4b1qsOWMgCfPz0ePTazDZ2A8kVVBk6a+jY2iYXsC9AKDjf/wqH0stUUWm7swtraSKS+l6q/+Cxx0n0MIiQPB+PuJ5/vqKDoinQ6iwESMIAQQj29vdKQVCFP3w8y/A+GJ6LpdKMMZMx5t52HK4MTEJIQAQj2kIAWNMEkVRoAIhsoTzi/l/ajL97eDopmPsllay6YSAfds2U8n0yWX7qnE7NWzHdD7/6MF5reNzznkgCLTVn2Ri8vfffv222saN/m3A2YyxN2c3JxdNx+UYB4BcxmeHlbYmYcb5YGwgFPx+Wvv1+Gq/3E5ockDV03INc24u69rYMF+XG/tvm56HylfNRrc7taeA/PdWF3vj6djjjYkdiSoLmggSerBZnDjo4qxDMXWiidD/TcsRZcdxGPMPyxcz7hpWUFgAXY+9PqpWplZEEsKawjEBma4Wi9dd4+ECpV+++Ax8FCYNfWhTHJ9MJ2+qVTUuR0RUymcggIN6MykQzok7wx3P39PVpL7wx5+t3cdZOjGc7Pz83s4WIYRzPhqOMolEtz+46rSykVy91QXTceJqmGCREttjT0tFLGo31aMvXhbpT9/9CPnC88dr62t3lwuL6XR6eekO5wFzGcG41+/PxULH57XKyBAw1kSycX916oBgmbls4h1y9LwoBnnxQQAAAABJRU5ErkJggg==","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/6PhK9JTfUHcfDbO6sE4S6J/b60deb9f420181df16d4fc311d799cb5/BlogImage_Feb2021_default_analytics.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6PhK9JTfUHcfDbO6sE4S6J/b60deb9f420181df16d4fc311d799cb5/BlogImage_Feb2021_default_analytics.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6PhK9JTfUHcfDbO6sE4S6J/b60deb9f420181df16d4fc311d799cb5/BlogImage_Feb2021_default_analytics.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6PhK9JTfUHcfDbO6sE4S6J/b60deb9f420181df16d4fc311d799cb5/BlogImage_Feb2021_default_analytics.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6PhK9JTfUHcfDbO6sE4S6J/b60deb9f420181df16d4fc311d799cb5/BlogImage_Feb2021_default_analytics.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6PhK9JTfUHcfDbO6sE4S6J/b60deb9f420181df16d4fc311d799cb5/BlogImage_Feb2021_default_analytics.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6PhK9JTfUHcfDbO6sE4S6J/b60deb9f420181df16d4fc311d799cb5/BlogImage_Feb2021_default_analytics.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6PhK9JTfUHcfDbO6sE4S6J/b60deb9f420181df16d4fc311d799cb5/BlogImage_Feb2021_default_analytics.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6PhK9JTfUHcfDbO6sE4S6J/b60deb9f420181df16d4fc311d799cb5/BlogImage_Feb2021_default_analytics.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6PhK9JTfUHcfDbO6sE4S6J/b60deb9f420181df16d4fc311d799cb5/BlogImage_Feb2021_default_analytics.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Dylan Just","slug":"dylan-just"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Collecting and analyzing metrics in engineering"},"metaDescription":{"metaDescription":"Software development metrics done right can be extremely fascinating and illuminating. They can save your development teams from myriad unnecessary costs and frustrations, and improve performance as a result."}},{"title":"Tiny Programming Principles: The concept of Optionals","slug":"javascript-optionals","featured":false,"lastUpdated":"Feb 8th, 2021","description":{"description":"<p>Just because you can use null or undefined doesn&rsquo;t mean you should. We talk about the problems that come up and how Optionals can help overcome them.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Just because you can use null or undefined doesn’t mean you should. We talk about the problems that come up and how Optionals can help overcome them."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"People discussing at a table in an office ","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.5,"src":"//images.ctfassets.net/s600jj41gsex/6kqW0LP4TCJbdW2de79axH/b8ab73e7c040b67c0caf3667069d33d7/Optionals.jpeg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6kqW0LP4TCJbdW2de79axH/b8ab73e7c040b67c0caf3667069d33d7/Optionals.jpeg?w=185&h=123&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6kqW0LP4TCJbdW2de79axH/b8ab73e7c040b67c0caf3667069d33d7/Optionals.jpeg?w=370&h=247&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6kqW0LP4TCJbdW2de79axH/b8ab73e7c040b67c0caf3667069d33d7/Optionals.jpeg?w=739&h=493&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6kqW0LP4TCJbdW2de79axH/b8ab73e7c040b67c0caf3667069d33d7/Optionals.jpeg?w=1109&h=739&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6kqW0LP4TCJbdW2de79axH/b8ab73e7c040b67c0caf3667069d33d7/Optionals.jpeg?w=1478&h=985&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6kqW0LP4TCJbdW2de79axH/b8ab73e7c040b67c0caf3667069d33d7/Optionals.jpeg?w=1950&h=1300&q=50&fit=scale 1950w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6kqW0LP4TCJbdW2de79axH/b8ab73e7c040b67c0caf3667069d33d7/Optionals.jpeg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6kqW0LP4TCJbdW2de79axH/b8ab73e7c040b67c0caf3667069d33d7/Optionals.jpeg?w=185&h=123&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/6kqW0LP4TCJbdW2de79axH/b8ab73e7c040b67c0caf3667069d33d7/Optionals.jpeg?w=370&h=247&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/6kqW0LP4TCJbdW2de79axH/b8ab73e7c040b67c0caf3667069d33d7/Optionals.jpeg?w=739&h=493&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/6kqW0LP4TCJbdW2de79axH/b8ab73e7c040b67c0caf3667069d33d7/Optionals.jpeg?w=1109&h=739&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/6kqW0LP4TCJbdW2de79axH/b8ab73e7c040b67c0caf3667069d33d7/Optionals.jpeg?w=1478&h=985&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/6kqW0LP4TCJbdW2de79axH/b8ab73e7c040b67c0caf3667069d33d7/Optionals.jpeg?w=1950&h=1300&q=50&fm=webp&fit=scale 1950w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Millie Macdonald","slug":"millie-macdonald"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Programming Principles: Optionals Vs Null Or Undefined"},"metaDescription":{"metaDescription":"Just because you can use null or undefined doesn’t mean you should. We talk about the problems that come up and how Optionals can help overcome them."}},{"title":"Tiny Programming Principles: Immutability","slug":"mutable-vs-immutable-javascript","featured":false,"lastUpdated":"Jan 26th, 2021","description":{"description":"<p>We share key benefits of immutability, and why JavaScript developers (in particular) should choose immutable objects over mutating functions.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"We share key benefits of immutability, and why JavaScript developers (in particular) should choose immutable objects over mutating functions."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Five eggs are stacked precariously on top of each other.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":0.6669390614055568,"src":"//images.ctfassets.net/s600jj41gsex/5b81UPp1646TlwGYqCwI2U/8a0d08a26791a54e23998303dfa9a0f2/jiangxulei1990-eIzzzwtkBjU-unsplash.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/5b81UPp1646TlwGYqCwI2U/8a0d08a26791a54e23998303dfa9a0f2/jiangxulei1990-eIzzzwtkBjU-unsplash.jpg?w=185&h=277&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5b81UPp1646TlwGYqCwI2U/8a0d08a26791a54e23998303dfa9a0f2/jiangxulei1990-eIzzzwtkBjU-unsplash.jpg?w=370&h=555&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5b81UPp1646TlwGYqCwI2U/8a0d08a26791a54e23998303dfa9a0f2/jiangxulei1990-eIzzzwtkBjU-unsplash.jpg?w=739&h=1108&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5b81UPp1646TlwGYqCwI2U/8a0d08a26791a54e23998303dfa9a0f2/jiangxulei1990-eIzzzwtkBjU-unsplash.jpg?w=1109&h=1663&q=50&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/5b81UPp1646TlwGYqCwI2U/8a0d08a26791a54e23998303dfa9a0f2/jiangxulei1990-eIzzzwtkBjU-unsplash.jpg?w=1478&h=2216&q=50&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/5b81UPp1646TlwGYqCwI2U/8a0d08a26791a54e23998303dfa9a0f2/jiangxulei1990-eIzzzwtkBjU-unsplash.jpg?w=2217&h=3324&q=50&fit=scale 2217w","srcWebp":"//images.ctfassets.net/s600jj41gsex/5b81UPp1646TlwGYqCwI2U/8a0d08a26791a54e23998303dfa9a0f2/jiangxulei1990-eIzzzwtkBjU-unsplash.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/5b81UPp1646TlwGYqCwI2U/8a0d08a26791a54e23998303dfa9a0f2/jiangxulei1990-eIzzzwtkBjU-unsplash.jpg?w=185&h=277&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5b81UPp1646TlwGYqCwI2U/8a0d08a26791a54e23998303dfa9a0f2/jiangxulei1990-eIzzzwtkBjU-unsplash.jpg?w=370&h=555&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5b81UPp1646TlwGYqCwI2U/8a0d08a26791a54e23998303dfa9a0f2/jiangxulei1990-eIzzzwtkBjU-unsplash.jpg?w=739&h=1108&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5b81UPp1646TlwGYqCwI2U/8a0d08a26791a54e23998303dfa9a0f2/jiangxulei1990-eIzzzwtkBjU-unsplash.jpg?w=1109&h=1663&q=50&fm=webp&fit=scale 1109w,\n//images.ctfassets.net/s600jj41gsex/5b81UPp1646TlwGYqCwI2U/8a0d08a26791a54e23998303dfa9a0f2/jiangxulei1990-eIzzzwtkBjU-unsplash.jpg?w=1478&h=2216&q=50&fm=webp&fit=scale 1478w,\n//images.ctfassets.net/s600jj41gsex/5b81UPp1646TlwGYqCwI2U/8a0d08a26791a54e23998303dfa9a0f2/jiangxulei1990-eIzzzwtkBjU-unsplash.jpg?w=2217&h=3324&q=50&fm=webp&fit=scale 2217w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Millie Macdonald","slug":"millie-macdonald"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Immutable vs mutable: Definitions, benefits & practical tips"},"metaDescription":{"metaDescription":"We share key benefits of immutability, and why JavaScript developers (in particular) should choose immutable objects over mutating functions."}},{"title":"What is DevOps?","slug":"what-is-devops","featured":false,"lastUpdated":"Sep 20th, 2020","description":{"description":"<p>DevOps is a mashup of &ldquo;development&rdquo; and &ldquo;operations&rdquo;, but it has become shorthand for a significant culture shift that, done right, can drive meaningful organizational change.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"DevOps is a mashup of “development” and “operations”, but it has become shorthand for a significant culture shift that, done right, can drive meaningful organizational change."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"At least three cogs interlocked.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAMAAAAhxq8pAAAC6FBMVEXx8vWhpLAAAAATFR8gIy0KDhmbnqn////S09qIh5fMx8mXlZ3Y19na2dq2truamqSqpqjV09Dq6+66u8PHyM37+vy3t8BPVW7QzMzDv8HX1tipqaxlZWp1dH5RTViAgIrIyc3i4eS1trpyc3dRUldYWl+FiIzO0NP09PbPz9NSV2ZFSmDNysvY1tfY19jIxsibnKAAAA55e4VDR1KenqPY19rW1NbZ2dzg4OTX19qlpqpCRlIAAB18fYfV09Ti4OC2tLdhYWU8PUE8PkZlZmt5eHx4d3phYWYxMz1dX2/EwsampKW0sbKVlZhfZHQhJzlKTVqPkJjEw8bHxMXT0NCSkZMAAwmDhIiipa+ytb6eoaqLjpiNj5eYm6S3uL6zs7fGxcfRzs5VVFVgX2FzdHguMTZ0dXhRUlWpp6h7foSFh46Eh47MzdObm5+Nj5XMzNF6enw7PT+amJpVVFZrbXDf3d3Gw8SenqJsbnZzc3hMTld+f4chIyhnaW45Oj5ydHp0dHuurbO7ub6bmpzJyMvMycvc2duAfoEdHCF3d3rKxMfAur61r7WqpKrJyMjl4+De29nMycbW0s7FwsI+PkVpanGsqKmYk5W/t7fMwb/HurjGu7qFgYIQGiHDwL3n4d3q5uDx7unIxcNWU1NkYmIoKS1gYmi2sLHAtbbAs7LCtLC7rKjIubWzqqySkI7l3trZ08/RzMrc2dXf3NjY1NJ3dnxram+NiYmakpS6ra2/r6rEsqzEsavJtq/AsK0GDxbFvrnf1tLGv77Y0czo493o5eC7t7VNSEc6ODgAAA+Sk5zHwMHTxsTMvLbAr6nOvLXTwrnMubCyo6HKw77g19Hb0s7Zz8va0Mvb1M/X0Mzf2dTW0Muyr7EyN0JKSEmQi465r7K2qKmnnJuroJuimJapm5uwoqTf2NLd2dPg2dPm3NXd1dDh3tng2tXf2NPY089raW1pa3XSzMq8tri0q66TiotGREetoaF10cWDAAAAqElEQVQYGWXBoQ4BARzH8d/X/sm4w64qHsBsmiZJJEyRdE26aYgEbyCfhKLwCp5A0QlE4xyG+XwQCLgaH5bhqNtNcvgwB5dfuwJFLgm+bSViKvOwVoVDFlaSqLFQqOTxMK8HUsPitEC8KOgAlj6leJtIctnnzHEJjXwGCvVXCfJYEvBHGioSbwI9xkS6Ck15MpfIjLaU5iUW8FTVkrcN/8zjn3n8SEpn7nFxHj+FrHhdAAAAAElFTkSuQmCC","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/1OC5CO8rBreAg4edplgfGY/d323567754d2a63829544c582c9be790/Image_default_WhatIsDevOps.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/1OC5CO8rBreAg4edplgfGY/d323567754d2a63829544c582c9be790/Image_default_WhatIsDevOps.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1OC5CO8rBreAg4edplgfGY/d323567754d2a63829544c582c9be790/Image_default_WhatIsDevOps.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1OC5CO8rBreAg4edplgfGY/d323567754d2a63829544c582c9be790/Image_default_WhatIsDevOps.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1OC5CO8rBreAg4edplgfGY/d323567754d2a63829544c582c9be790/Image_default_WhatIsDevOps.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/1OC5CO8rBreAg4edplgfGY/d323567754d2a63829544c582c9be790/Image_default_WhatIsDevOps.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/1OC5CO8rBreAg4edplgfGY/d323567754d2a63829544c582c9be790/Image_default_WhatIsDevOps.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1OC5CO8rBreAg4edplgfGY/d323567754d2a63829544c582c9be790/Image_default_WhatIsDevOps.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1OC5CO8rBreAg4edplgfGY/d323567754d2a63829544c582c9be790/Image_default_WhatIsDevOps.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1OC5CO8rBreAg4edplgfGY/d323567754d2a63829544c582c9be790/Image_default_WhatIsDevOps.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Cameron Bowden","slug":"cameron-bowden"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":null},{"title":"XSS security issue - Tiny’s commitment","slug":"xss-security-issue-tinys-commitment","featured":false,"lastUpdated":"Aug 12th, 2020","description":{"description":"<p>Tiny has released a security update for its open source HTML editor based on a cross-site scripting (XSS) vulnerability discovered by Bishop Fox Labs.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Tiny has released a security update for its open source HTML editor based on a cross-site scripting (XSS) vulnerability discovered by Bishop Fox Labs."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Laptop keyboard viewed from the side with screen half closed.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAMAAAAhxq8pAAACtVBMVEUAAAAEAAABCCQAR28AeqYAm74AlLccja0+kKhPkp89eoYGRFYACBcBAAABAQECAAAHAwAKGi4COFwAWYcAdqYAhqwFgaI5iJ9IhpNAc34mUVsAHicEAgQcIjEWNlUCRW8ARG0AR3UETnoQUHYpXno0YG0ZPUkABBUBAQArKjkpNk8TPWAHOmEAJEgAJUgQQWAdTGQRPVEHJjMAAAMlLkkhMU0IHT0EDiwAGjYCMEkKMkMEGSUEHjwABTIACDEACioACB8AAhEMNlsAETsBDCkABBECFycBCAsRNT0AKTEDAQAgHSEUExwcHCYDCBktNDwVKDYPLDYYNDwySU86Tk8wSVIAN0oKMkUIKToFIjEDGygiRlEqQUwxNkgvM0kuM0oqNU4MLEk+VGU2VmceWm1jho5Fd4BCeoMnam8ua3Q9hJYudo8nYnwhUWobRFxRX29GVnAmOmJHUGs0P1wAN1w9YXhGb4InbIA4gJBqoKdQk5tem6EhfYM9en5fo6wxmLEXf6ATaIsRVnckOWFJUnJYX3okOV4ANFxGYHpZeo4YaYIzhppam6dlqa9gpat9tLdToKJ7qat8rrM4qr4AiKoAapEAUngtO2VcYnotPV8AKVcAMltFZX89cYpIh507jKBXoK1wsrmBu8CKwcM/padpq66Er7VFr70AkLAAa5IAT3dWWnk/SW0AKVgALVsYQ2pOd5RMhaBOlK0Ai6Y8pLd/wsyWzdWKyM0/sbY9q7NXp7MvobQIkbEAbJYAU3wAGUwAIVYAKl4ANmgASHgAX44AeKMAjbMAnb8Arsctu81VxdJbx9JMw84vusgAq70AlrEAhKcAapMAUnsAEjgAGUEAIUsAK1QAOWIAS3MAXoUAcJQAgaAAj6gAma4Pn68coK8XnasAk6MAhZgAcYoAYH4ATW4AOFrOWP21AAAAZklEQVQY08XOMQ4BURhG0fMlf0QiLwoqbMBObFkUKqWeBZgNzAYUiDexALc81Q1E+hTLHh4asevoTtsOsv/SFS2oxVsuPkTNkyRnGmwMqFmSE4xwo1GVo0kjObzWJqO1ym+1/ic+Ae+2DOEd8QKdAAAAAElFTkSuQmCC","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/RfipD0YfixdLF2pYVYTZd/059012812c4fa3815751fc619c66ef02/Image_default_security__1_.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/RfipD0YfixdLF2pYVYTZd/059012812c4fa3815751fc619c66ef02/Image_default_security__1_.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/RfipD0YfixdLF2pYVYTZd/059012812c4fa3815751fc619c66ef02/Image_default_security__1_.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/RfipD0YfixdLF2pYVYTZd/059012812c4fa3815751fc619c66ef02/Image_default_security__1_.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/RfipD0YfixdLF2pYVYTZd/059012812c4fa3815751fc619c66ef02/Image_default_security__1_.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/RfipD0YfixdLF2pYVYTZd/059012812c4fa3815751fc619c66ef02/Image_default_security__1_.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/RfipD0YfixdLF2pYVYTZd/059012812c4fa3815751fc619c66ef02/Image_default_security__1_.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/RfipD0YfixdLF2pYVYTZd/059012812c4fa3815751fc619c66ef02/Image_default_security__1_.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/RfipD0YfixdLF2pYVYTZd/059012812c4fa3815751fc619c66ef02/Image_default_security__1_.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/RfipD0YfixdLF2pYVYTZd/059012812c4fa3815751fc619c66ef02/Image_default_security__1_.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Dylan Just","slug":"dylan-just"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":null},{"title":"Full-stack developer skills and the importance of learning","slug":"full-stack-developer-skills-and-the-importance-of-learning","featured":false,"lastUpdated":"Jun 29th, 2020","description":{"description":"<p>What skills are required for a full-stack developer? We list 12 essential skills, and discuss the importance of learning, theory vs practice, depth vs breadth, and more.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"What skills are required for a full-stack developer? We list 12 essential skills, and discuss the importance of learning, theory vs practice, depth vs breadth, and more."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Laptop with hands poised ready to type code.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAADeklEQVQYGT3BW0xbZRwA8P/3ne9cOD1t6Wl7uBTEcW1hkrhN57QkWwbbg+7BS5zJNPHN6Ksmanz3ae8+aLwkJiYuXuKy6SIu2iAbAhMGG6ygbaWjF9jKDufQc/+LJvr7kco9XeA4SgmlZB/sQ0BAAPD8AAEB4b6+O7two1vTCCGu5zqO5fqeHyADIAiA8K8AABABgiAAQggAILi+73pe4HsEkALhCHCUYkCB+OyTLy6IsuJYTd/xpJAiyi30H8JToyMHOtRiuTp5LafIfFiWKQFCkACQ/7DJXK5zoP/zKzNwy1SfSHUnVNsOXj11IqYozT3nux+nNmrr586cIpQn/4N9iBiwgd5+SeGPHWgvOFtdsuyoaqcqjx0ZDYn89PW5j678kApR0zTVeAKR7AsoJQCIAQY+HRhKi5zU09XuEOp7wDx3fPiRtmS8tFH/4MOPqdPAWFulviXwTOCZyASBMUIAEBCBam2a1fRUNdI/0G4R6FNaRx/uM2z3wuXvL1389I+ruXqpnF8vUsqJgkAZFwAGiAQQEJkXoK6byVTbS+eeW1gqjA0elETx4uLM+/PfAqgiR2pLK7/L8Mzpk0hooVyW0dU4SAR+IMvc2++8JzC2US77hKvUmxNHD5uG/tr587BSyp59fpeSxp1r67qQfbTPMHdLpfX2Sin/02SzWkiEJS47MR4grq39OZjJ3ClVbNOam73+OG289cqLL5w8/uzxLOXYwtSlaDwuRSOKrldzV2tIeh/qlnmOe2zsSVkJb9XqiWR8+mbpy6++yYbvv/7y2cxgv6Yltc7O9MhI44GxuLxkuX5rYzvTEY/ydHOrsVzc5ERJ4CV517Bc9H3KDabCT2d6uuMRY8/MzS/MzM4xAqlUSke+LzPiRBKLa+XLKxs3mn5+zyYAEI/GDo+fOXjkWCgaEyhod28Pdyh3DXfbNE5MnG7VOjzKfl1es5hMCdkzzdrm5vz0Lz9//Rl548131UQyGo04lrWYL8aSHYXV1bRXjUVC6Uzf8KGjrZ094bhm+1C8t1vbMX6bnb15+5a5XSeew2hEfeBDpVypFourM1OWbQMv5glNcJwgQnuqm8W7PBsZL3RpiWRrVOH8ZFzNFzfcwGfbuim3SKZu7FSqEi/IosRRNGxrrlA/NJTs9QXbJsqOIQl8iyCEZGkknR7qH/irWi9Wt/4GTjShYZiAiZYAAAAASUVORK5CYII=","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/2mHaYURLMpWxhkwcb3T4m7/9568def5d5cfe4003dd8cb9838febc85/Image_default_fullstackdevskills.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/2mHaYURLMpWxhkwcb3T4m7/9568def5d5cfe4003dd8cb9838febc85/Image_default_fullstackdevskills.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2mHaYURLMpWxhkwcb3T4m7/9568def5d5cfe4003dd8cb9838febc85/Image_default_fullstackdevskills.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2mHaYURLMpWxhkwcb3T4m7/9568def5d5cfe4003dd8cb9838febc85/Image_default_fullstackdevskills.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2mHaYURLMpWxhkwcb3T4m7/9568def5d5cfe4003dd8cb9838febc85/Image_default_fullstackdevskills.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/2mHaYURLMpWxhkwcb3T4m7/9568def5d5cfe4003dd8cb9838febc85/Image_default_fullstackdevskills.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/2mHaYURLMpWxhkwcb3T4m7/9568def5d5cfe4003dd8cb9838febc85/Image_default_fullstackdevskills.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2mHaYURLMpWxhkwcb3T4m7/9568def5d5cfe4003dd8cb9838febc85/Image_default_fullstackdevskills.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2mHaYURLMpWxhkwcb3T4m7/9568def5d5cfe4003dd8cb9838febc85/Image_default_fullstackdevskills.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2mHaYURLMpWxhkwcb3T4m7/9568def5d5cfe4003dd8cb9838febc85/Image_default_fullstackdevskills.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Dylan Just","slug":"dylan-just"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"12 essential skills for full-stack developers and the importance of learning"},"metaDescription":{"metaDescription":"What skills are required for a full-stack developer? We list 12 essential skills, and discuss the importance of learning, theory vs practice, depth vs breadth, and more."}},{"title":"Tiny takes security seriously","slug":"tinymce-security-tiny-takes-security-seriously","featured":false,"lastUpdated":"Jun 18th, 2020","description":{"description":"<p>When it comes to developing software for commercial use, more and more developers understand the importance of security. That&rsquo;s why, at Tiny, security is a top priority.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"When it comes to developing software for commercial use, more and more developers understand the importance of security. That’s why, at Tiny, security is a top priority."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Blurred code on a screen in shades of blue and purple.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAAC3UlEQVQYGQXBWXIbVRQA0HvvG7s1tIbIsl0hwWX45CMbAJbC5tgLK+CDpChXKA+yJMtSD6/feDkHv/z0Z1L/htIq48/juvf86Spz8d5DcIG4num5RVOB9uE/RW4RbwxLCH6WrYRKCr2NXo9o1TxVSexDzjgBKChcLdTFK8+yy2eLVmsKyoWYhIwWSEymvwXp1CRrfZqu1GJjZFWkIYDcTM2miSkrQkclT+XK6BLimM9WhWosrbz93Nilr2ZY3JMxF5IyJMFoE6/2u/fHXTS4ksJnsc8Cz23K3gV6qIqcw1Jub9dJtiV/43gUuurf3pbLdYaOrJneX0P6x2BKPbQh+eQQxuVk0wUHaRjSkby/EMVFjZW1JLW2NQNgiZyHSsft9gdbT3JZBj9HqACwCyfOGGPq0kk0zRdrkjGCtDa2koILYGIq1LjQKDHVQKF/SSEQvkkGoXxRhwpmE5jLl13cbnqrts99XYnEBQAogI2nlkR/6WnYP/LYlmKAA6JJMVCeK64EZUl8/fe3/Uu86tMlcz+bbFPiflSa52UInGepba6nHMM1jEtM3OhFPR/5RBCSXJrVw/5xgMNmpST3h2758zYahIcXklkrdjpvgk8Kk6CJFcBdarvxGpcGUXxa/6Ht449XUdBUoTyf3Ptxh2wgBIgTlTPF6NuILl7RnUoip8vg9yqjAhJz/vXm47D54A+v34feiCwlcCUwO1fjZj31xEf0eWXWhc+ZDw1NyHReHUf9Jj/fWizr/dPj2J6QdIlcV0hlpmk305V3uzH/lS0dYbVQm1S6NiQWQ4/Pb/2zbD48PLx+jTmXchzHrwh6KJ0n7N25p+ucOZdXAtGVp5ZqJu/TxeAUi1jwR/zl7ncXWucjMFaVdcEpoRmCFLJ376v6DhFLLAKE4YmUiF7M8yrzSFzkyt6Mcg2VKFnUtjlcdmtzPwY/xL3FsuF7zEyFY+k4Bx2FT5e2HA/xe1sO/wOzBta69+xBfAAAAABJRU5ErkJggg==","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/2Zcdq5Pd0z0UVsJbHukFqR/54e32cfad87249c4c86e6cd5edf09405/Image_default_Security.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/2Zcdq5Pd0z0UVsJbHukFqR/54e32cfad87249c4c86e6cd5edf09405/Image_default_Security.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2Zcdq5Pd0z0UVsJbHukFqR/54e32cfad87249c4c86e6cd5edf09405/Image_default_Security.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2Zcdq5Pd0z0UVsJbHukFqR/54e32cfad87249c4c86e6cd5edf09405/Image_default_Security.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2Zcdq5Pd0z0UVsJbHukFqR/54e32cfad87249c4c86e6cd5edf09405/Image_default_Security.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/2Zcdq5Pd0z0UVsJbHukFqR/54e32cfad87249c4c86e6cd5edf09405/Image_default_Security.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/2Zcdq5Pd0z0UVsJbHukFqR/54e32cfad87249c4c86e6cd5edf09405/Image_default_Security.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2Zcdq5Pd0z0UVsJbHukFqR/54e32cfad87249c4c86e6cd5edf09405/Image_default_Security.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2Zcdq5Pd0z0UVsJbHukFqR/54e32cfad87249c4c86e6cd5edf09405/Image_default_Security.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2Zcdq5Pd0z0UVsJbHukFqR/54e32cfad87249c4c86e6cd5edf09405/Image_default_Security.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ben Long","slug":"ben-long"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"TinyMCE security: Tiny takes security seriously"},"metaDescription":{"metaDescription":"When it comes to developing software for commercial use, more and more developers understand the importance of security. That’s why, at Tiny, security is a top priority."}},{"title":"8 habits of successful development teams","slug":"habits-successful-developers","featured":false,"lastUpdated":"Jun 8th, 2020","description":{"description":"<p>Successful developers work well with other people, continually learn new skills, and build up their team. We talk about 8 regular habits for success as a developer.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Successful developers work well with other people, continually learn new skills, and build up their team. We talk about 8 regular habits for success as a developer."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Two developers working at a laptop.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAADeklEQVQYGQXB209bdQAH8O/vcm7taSltEToog7aUlg2miRbRTLPEeHlYjEs0vvlkjL6ZmBjjn+Db4ptvPpgZjcZkcxvbHERkGWQXrl0ZrJQWKPS0O2vp5fTc/HxIsLcXVOgJ9H//1Wf7+4WPP/8ynUofHB5c/e3W9GtvCCJnlDBKCUCNtsM5lwRKAODG9RvUcWzT7JQKedHsXrr4kXZ0BECRFUJcTohACaeUU8IoIaJICaGAQGlD16/P/k0d12kbHZ994vcp3lCgVCwAkBVZ4IS6LieUgzJQTqgASh2XOCAuyW5m/5z9i1uWZRndU31e7lr7hcLS8vKlTz4VRdF2zVrlWFZkAAAcx3Gsru3aTBBl2iw9vQmAd00bQDTSH/B7B2KJ3JMfNU0DyObRcf55QxS5LImEuJZpOrZrmt13L5zvuMLiykMA3DItAH6Jeny+odHY2Hi6fHio9gTF8KhXVS2bbVQsSqWhoPz6RG+rWU8mk6Ztb1VVABxwB3s8oWDIAkBIPDG2urqWSKVnJqOl506h4vxcbMIkX0zJo4NBveY8y+c1TfN4lbff+YADmEzG25b5ePNeyWA9geCpyEvFUikQGfo3V7uyZUARwBy/AkLcjmEcl/WNbHZx/vbQSJIDCAYC2sl+OnOhb+hcdOS0RxbvLT94nD9QqTMTJgKjeyb1K6xr2o1GY272ai6XBVDZz3MAtXLVAlfUwXhi1AUs25Ylsfp0rb9e9zOPqiq6jbbWs7DUS1r17779ZuG/hbm7dwzTZGAIl7uHxwfk1lZ8Mu4fiQqc91MrHomQk7orCWFVCooO6zQUxl6ZOnfm7ERVb+6UKnvPcvR9FnoTAylEC32kWq9z2+0cFMoL114Ud7fyxZmI+l4sEGPmbr6UyUyfnXqZAJIkp8fHAbAp4m8ztyDZN/fWW5ouPniydfnKbuV4OPNqKjOdGg679SOiBhOZ87HEGGfMNbvbO/n7y8vrKw/JhCfECZVMq9PtOmjOABIGNMhf//LD1IcXxdqutrGoh1KhWIoSqq/d316av/Zo+/Ift4cHAlx3OjOWd9j2Vbm1yuVFxnbadcMpv/XT7/5kIqq0OobtSKrRbrf0Wm1lrpx7VFzfRKdWrdk0DCEMUSKUwS3D2LObBjUBzN/9dfPOP+SkSrigBnoJF3zBkHT6TMsmhw0T4M36i/8BOASjZXmvKmUAAAAASUVORK5CYII=","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/2NQfs1Q4jjau62Xjmesxqk/88c25f3e7f6c73c45f7b2cbcbce04153/Image_default_8Habits.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/2NQfs1Q4jjau62Xjmesxqk/88c25f3e7f6c73c45f7b2cbcbce04153/Image_default_8Habits.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2NQfs1Q4jjau62Xjmesxqk/88c25f3e7f6c73c45f7b2cbcbce04153/Image_default_8Habits.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2NQfs1Q4jjau62Xjmesxqk/88c25f3e7f6c73c45f7b2cbcbce04153/Image_default_8Habits.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2NQfs1Q4jjau62Xjmesxqk/88c25f3e7f6c73c45f7b2cbcbce04153/Image_default_8Habits.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/2NQfs1Q4jjau62Xjmesxqk/88c25f3e7f6c73c45f7b2cbcbce04153/Image_default_8Habits.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/2NQfs1Q4jjau62Xjmesxqk/88c25f3e7f6c73c45f7b2cbcbce04153/Image_default_8Habits.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/2NQfs1Q4jjau62Xjmesxqk/88c25f3e7f6c73c45f7b2cbcbce04153/Image_default_8Habits.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/2NQfs1Q4jjau62Xjmesxqk/88c25f3e7f6c73c45f7b2cbcbce04153/Image_default_8Habits.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/2NQfs1Q4jjau62Xjmesxqk/88c25f3e7f6c73c45f7b2cbcbce04153/Image_default_8Habits.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Lee Newson","slug":"lee-newson"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"8 habits of highly successful developers and their teams"},"metaDescription":{"metaDescription":"Successful developers work well with other people, continually learn new skills, and build up their team. We talk about 8 regular habits for success as a developer. "}},{"title":"How to stay relevant as a software developer","slug":"software-developer-skills-stay-relevant","featured":false,"lastUpdated":"Jun 2nd, 2020","description":{"description":"<p>What skills do software developers need to stay relevant and up-to-date with the industry? Find out how to stay on top of the changes.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"What skills do software developers need to stay relevant and up-to-date with the industry? Find out how to stay on top of the changes."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Man sips a hot beverage from a yellow teacup, while sitting in front of an open laptop on a yellow table and reading a book.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAADQ0lEQVQYGQXBSW8bZRgA4Hf7vIztmYm3OCEGO5XTtKQ0BaJSFQISRUKoSIhLDz3CqRdOSAg4Fglx4weAygEOHBBSUbkgGkFVbFWQraUkRXGT1Dj1knoZe2zHMx/Pg+VfLhrmvJl9MxCkG7d2Hw1SSggRmVlERBSzEhFhZhEmBoD/du6Pho4oJRpCg856e2Pntw3r9v0ja+ZkNpePJ5NKKRFhFmEREWJmYmYBBAkw+IpUQNpd76lJu/hH5f0PfwCAuXQqfXzh8pUPIuk0EzOLYhFmFCZiYQYAJQJKESvxxn30w7VG70zqTHbeuPzW68qMDydsYRYWJhEWFkZmYWIWBC3MWhiFZcKKDIa635N3XyvMzMQsgqGdCYRjiEAkRERMzISMRMxEoH1m9kWQSFbuNLfLjvOvmk27u/uHdigSKQyN+EGzlUFAJAJCBEQkQgJE0IiIBKQB5b1P2gDRZ1K9825zrbwVMuPL48PgqIGY8QEYEJA0EQGNeq2wYWphANbISMw4MQsRqz3qb+48eOPcs6+8tMRmphUs+BglImYWZmHlOq2/bnzdrY4ms9Ou62jfR0IKMQUlHFBBAApHstv1cT2aP6JJ0AQAGrQG8LS3Wbr54OFaZ3DUdwelYqn2uIYoxLrpYRAxCFbuq5/hoy9Wy/tVAgJArRERibhWrdy8fs02nnt++ewTt3/104+73T4i04TUTF0dcxqMJYgSwNq3134sl3cAkViIlO/7W3/eSUli+fxyJDNZ2X80lZhPpqc8TeL73Smj1xsnPEcuvGqGQxeuf//NZ/XDi2+/bNkmESRgyOV/Tpw66yfNVnN/6+764tKMZXRwPGBSATOArp8cNJrHF4x3Ll2KmYnir9+tllaKtw/SUsoZm9bc09kXU63evb/Xt+9t7J077ZzK/x7wb2HISgonPc67wxB09q9+eWX+5EKjXkeiSDTmVn5KHX0+plzh9Fxq2m51FisPDxSsmvah5484GMkhRYnCSOL19ZP23rHCbCBsAGgkXN2o3C2uPO7a5er0XnOx4aRb3ZAzyg/whSEsYTS+gJJBPfA1OV0PhkMAC8ABKEEsA9o4ZmpFbddJ7rYyciKVjMdMIxK3bdM0/wckHD7pk1V58gAAAABJRU5ErkJggg==","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/PJYmjB39Nlq96Z4vODIYE/18726eacd95cd7302069bef2f488be9b/Image_default_StayRelevant.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/PJYmjB39Nlq96Z4vODIYE/18726eacd95cd7302069bef2f488be9b/Image_default_StayRelevant.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/PJYmjB39Nlq96Z4vODIYE/18726eacd95cd7302069bef2f488be9b/Image_default_StayRelevant.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/PJYmjB39Nlq96Z4vODIYE/18726eacd95cd7302069bef2f488be9b/Image_default_StayRelevant.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/PJYmjB39Nlq96Z4vODIYE/18726eacd95cd7302069bef2f488be9b/Image_default_StayRelevant.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/PJYmjB39Nlq96Z4vODIYE/18726eacd95cd7302069bef2f488be9b/Image_default_StayRelevant.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/PJYmjB39Nlq96Z4vODIYE/18726eacd95cd7302069bef2f488be9b/Image_default_StayRelevant.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/PJYmjB39Nlq96Z4vODIYE/18726eacd95cd7302069bef2f488be9b/Image_default_StayRelevant.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/PJYmjB39Nlq96Z4vODIYE/18726eacd95cd7302069bef2f488be9b/Image_default_StayRelevant.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/PJYmjB39Nlq96Z4vODIYE/18726eacd95cd7302069bef2f488be9b/Image_default_StayRelevant.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ben Long","slug":"ben-long"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"How to stay relevant as a software developer: Skills, habits & more"},"metaDescription":{"metaDescription":"What skills do software developers need to stay relevant and up-to-date with the industry? Find out how to stay on top of the changes."}},{"title":"13 soft skills that will future proof your career as a developer","slug":"developer-soft-skills-career","featured":false,"lastUpdated":"May 24th, 2020","description":{"description":"<p>How can developers benefit from soft skills? Learn about the soft skills that can help software developers work better in teams and deliver better outcomes.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"How can developers benefit from soft skills? Learn about the soft skills that can help software developers work better in teams and deliver better outcomes."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"A stack of colored plastic cups, each a different color, forming a pyramid.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAMAAAAhxq8pAAACnVBMVEXd2tLg3tfi4drk493k497m5eDp6OPt7enq6uft7Onx8e/x8fDz8/H19vT3+Pj4+vr5+vv6+/z8/f7e3dbm5d/o5+Ls6+fs7OnFp43myqr19fT19/X3+Pf5+vr7/P39/v/h4Nnn5uHr6ubv7+zt6+jAgzftxZT6/Pn3+fj4+fn+///q6eTv7uva2NW4j2fpyq7x7vb4+fz6+/3////m5uDn5+aGioHIysfp4u3QvOj39/39/v7o5+Pr6+fy8vH5+Pjd3Nx3d23Q0tTn3/LKs+b39v7o6Obs7Ovu7ezu7uz29fXU3dabu6Krtayzz7LS4dHd0u3Mw+nl4Pjp6ejt7ezv7+7w8O/z9PP19vWCqI4AqkHE58t+2DPI+Y319veFXMnAqO7p6unt7uzx8vHv8O9amHMAr0Kl2q+D3ADG+2jl6uV7RMO6m+/9/P/p6+nt7+3v8PDx9fX05uX0kn/Tp5PK2r/dx1va5ZHJ6suu0OXNzuqmw+6t6vb6///q7Oru7+/w8fLy9/j01tX7PwD/r5b/6dX/0AD/9aPR3/Kh0fXs/P991+5n5fP2///s7e3v8PHx8vTx9ffvwL36UwD6mnj4z6n+0wD/64HBzeGi0/ba7ftvy+hv5vPr/P/t7u/z9vfi19jNPEHynpvUo6PUWWf507z8k5brl9Hp2O71vtvu5PGZueZ7puvy9//y9PX1+frawsTSAADxkJXCkJnfAG73t8j8SqD9kdz+v9r+stD/6/d9ieAXgOrq8/7s7evr6+rp6ujHqKfPAADkc3eycnvdR37oj5/2Vpn6jtT4ncH7ttD02OqAi9Vom+3o8P3g393f3tvg4N3Y1NPdysvn1tfg19np2t/v5Obz4uj46vX38Pb58vf9+v32+Pr1+P0Xd05GAAAAuElEQVQYGV3BMUoDQRiG4e/V32Ky/usGIYgJEWzERhCsRDyA2OZKOUaO4QEsPEQ6w4LYaMKOTCPqmKgwPg8i+9yisP9KX+JbdCB6dPPlOGo1IqvhCTjQdjfuVdVH0w52svZ45VV45yKl2B0+n7LWqgpKXDFfjoZsvChLsh7n3J+w4Y9SksyBW35pzWo6f9vlx+WDQpI5NXv8ubmTZA0lKSRrKCljtjiiMFWyxRklKdg1/0iyPqWJpC+fnCphPHehMgAAAABJRU5ErkJggg==","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/5JI6NTpdUsbj4rD49IyJJK/a7ac4ceed24edb35de056299e55b71d2/Image_default_DeveloperSoftSkills.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/5JI6NTpdUsbj4rD49IyJJK/a7ac4ceed24edb35de056299e55b71d2/Image_default_DeveloperSoftSkills.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5JI6NTpdUsbj4rD49IyJJK/a7ac4ceed24edb35de056299e55b71d2/Image_default_DeveloperSoftSkills.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5JI6NTpdUsbj4rD49IyJJK/a7ac4ceed24edb35de056299e55b71d2/Image_default_DeveloperSoftSkills.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5JI6NTpdUsbj4rD49IyJJK/a7ac4ceed24edb35de056299e55b71d2/Image_default_DeveloperSoftSkills.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/5JI6NTpdUsbj4rD49IyJJK/a7ac4ceed24edb35de056299e55b71d2/Image_default_DeveloperSoftSkills.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/5JI6NTpdUsbj4rD49IyJJK/a7ac4ceed24edb35de056299e55b71d2/Image_default_DeveloperSoftSkills.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/5JI6NTpdUsbj4rD49IyJJK/a7ac4ceed24edb35de056299e55b71d2/Image_default_DeveloperSoftSkills.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/5JI6NTpdUsbj4rD49IyJJK/a7ac4ceed24edb35de056299e55b71d2/Image_default_DeveloperSoftSkills.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/5JI6NTpdUsbj4rD49IyJJK/a7ac4ceed24edb35de056299e55b71d2/Image_default_DeveloperSoftSkills.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ben Long","slug":"ben-long"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Future proof your career as a developer with soft skills"},"metaDescription":{"metaDescription":"How can developers benefit from soft skills? Learn about the soft skills that can help software developers work better in teams and deliver better outcomes."}},{"title":"Facing your fears: marketing for developers","slug":"marketing-for-developers-facing-your-fears","featured":false,"lastUpdated":"May 17th, 2020","description":{"description":"<p>These days, everyone&rsquo;s a marketer - even developers. But that doesn&rsquo;t mean marketing comes easy. We talk about the fear of marketing and how devs can overcome it.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"These days, everyone’s a marketer - even developers. But that doesn’t mean marketing comes easy. We talk about the fear of marketing and how devs can overcome it."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Person standing on a rickety wooden bridge over rushing water.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAADN0lEQVQYGQXBSXPbVAAA4LfqvSdZkuU6jp3GdZuQkpYpHMp0ynKAwgCX/hL+BEd+DqdeywUO0Bn2dCENTeM4XiVrtaW38X0QffX43m6ng4tIF48+/PqHpz998+izdDU92usFQaCNraoqy/Pu8NYkSYbRzqyov/3ue8BccGOPhDuR3/H3WqLHD1p+cHx8G1gloEL1ul4lUus0LwkLHIKVrBlzDgc3Pv70wc/zJdntkA9Gg0FLHHaj0bWeq8DRO7dkntebQmoRZ9tGWSFaNYCtVnBzAAgEQoj37tyud/xeOyD3R8PdIDgcjELhllcX3Ohhr49H+z6U3G9vypJQWikruCi3tbVmlixJyN51+9pCMoiirt92hYsQghAooCmjrUCkr56l66WBKJ6Oewf3jJKUINDI385f5aZR0KZNQzp+yBynljVGGGHkCTcrM9RoolJGpQW4stk2nVZCvLy6PN4ZMEoYxR0qhgEh3OGUEIwwdxh0+M3+sFzHnSgwjqBeCCDkvVhTHpfFWjYIEU6J65CQc5+5KCnWCCHOOLAWQogRjoJ25LWCoE1N42IbtdsIAkCY53rUcdpey3OYNkYaRcaLBUUkr8rrfqiUxErKpl6um/TN6QYg3vJhVUnhGUS5w4ySDiaMUAyRMgb3Hz5YlwVBsCtcWZWFlKtkNZ5egHRpINQQlsnaUAdTR0Hraas4q43hxFFGY3B8Rxszr/KjMFosJrOyKLebeDEJAdhUuS841mqjpPAjQKjJcuC1tkZbaxlm6GS+Ok2ySVY0dRPnOYBIWb2/d/08LV9n20ma/f78X869pq6VNvNVjCwgiBBE4qJAo/5OA0y5bZpGptVGa1PVNdUypHwXgO3lxTQtqNF1medVcXE1s9oEwncd92y1JB6A60aerLIqyyfxWrS7s8vLl2/P8WR59+F9TboUVH88fxHu7dswnMdJmud/vn0zzbKqlmQ8jym0vFJlmp7Nlpj5vzz56+RvDfavsc3s/cD95zyrLl58+Xn37hefxOtksVo+G19e5ZsAYpKVW8od7rmTxWo8j0+XZnYmwcABuKn/S361FjAHdPs/vq4OPtoqqaC2kSOoi8qq+R9UwczQPWD9rwAAAABJRU5ErkJggg==","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/1itszOsRAXmbc7Zac7noOy/4121db9f80d7cca4e9753b5b9aae5696/Image_default_FaceFears.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/1itszOsRAXmbc7Zac7noOy/4121db9f80d7cca4e9753b5b9aae5696/Image_default_FaceFears.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1itszOsRAXmbc7Zac7noOy/4121db9f80d7cca4e9753b5b9aae5696/Image_default_FaceFears.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1itszOsRAXmbc7Zac7noOy/4121db9f80d7cca4e9753b5b9aae5696/Image_default_FaceFears.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1itszOsRAXmbc7Zac7noOy/4121db9f80d7cca4e9753b5b9aae5696/Image_default_FaceFears.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/1itszOsRAXmbc7Zac7noOy/4121db9f80d7cca4e9753b5b9aae5696/Image_default_FaceFears.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/1itszOsRAXmbc7Zac7noOy/4121db9f80d7cca4e9753b5b9aae5696/Image_default_FaceFears.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1itszOsRAXmbc7Zac7noOy/4121db9f80d7cca4e9753b5b9aae5696/Image_default_FaceFears.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1itszOsRAXmbc7Zac7noOy/4121db9f80d7cca4e9753b5b9aae5696/Image_default_FaceFears.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1itszOsRAXmbc7Zac7noOy/4121db9f80d7cca4e9753b5b9aae5696/Image_default_FaceFears.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ben Long","slug":"ben-long"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Marketing for developers: How to face your fears"},"metaDescription":{"metaDescription":"These days, everyone’s a marketer - even developers. But that doesn’t mean marketing comes easy. We talk about the fear of marketing and how devs can overcome it."}},{"title":"Why every developer should write a blog","slug":"developer-blog-writing-social-networks","featured":false,"lastUpdated":"May 5th, 2020","description":{"description":"<p>Why should developers write blogs or post on social media? Whether you&rsquo;re freelance or looking to advance your career, creating your own content has a lot of benefits.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Why should developers write blogs or post on social media? Whether you’re freelance or looking to advance your career, creating your own content has a lot of benefits."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Woman with red hair, black top, and blue jeans sits on a blue armchair and looks at her laptop screen. The back of the screen is covered in stickers including the hashtag #LoveTwitter.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAADXElEQVQYGTXBy2tcVRwA4N8595z7zkwyN5nJJM6kaRttE2shlmARxOJCFyVFRFxYEIRu3AuCG/+DKkgXCoo7oYhdiKAIdSGlhoRJmkQnNrEmM0nam3ncuTNzH+d17abfh775/GMVdjqp9tWd1d3tB8vvvH39g/de8lj77q3GPluv1+3XbuBckSWxFIJzxjkXnKcJS9OUSCnhKWp6pdLJSaVcLpXyJvb/6KeFxatvli48rK2ub0pvqBDKMiUlAHDOg26YxjFhjGOlMk33isWJyU7B8yYcI1rf6Hdpt59glVXLeTXxArYcJTjnQjccztmd73+4v1Ijw2FCpGA6s2yozE7mR8cIxv/t7kWdMm+1bWq1h/zUK8+NT00LxjjnhBhRPKzNTt1fqREuJMF4OAykaI2OScuxmMy2Dw6Okokzjstkst9o6k+OLlycx4AzJTOAQUQrU2MAQJTKEMXUtWdyRZ5GlNKEqXs78GN97dXlq3OnZ5oD9fvNL03bnls4pzRtxB0lhEqlCgBYSglIi1NBdD0ViqgQVNzAswCwtbbRawd3Hxzd22nvrtbQk0bOzaciC/oJ1ogDgCHLQCMScLvlb29vTuQtnWJgPgCs1VY2/q43Tk4AgFomCN4LesNYmIycxmM5AKJpCBM6iAb5wviN6x95laoy6Puf3LqWcIJBUvzZFy/rbDBnJQkaMag97lWD7HFkIrcCJAMAqiOsowxfen4h0GSiWReXLg2Dtmu7hmFKqdzeYeGvX5q9kbXN3ShcpzqpP/bDEAhXwBU2bYdxHoedFIFWsE1QiGKHIoozrgQz3FZ5kRPtt9u/3v7uW3gGywzFLIvjAUaqb+lYd32/mwqYmpzOFDyFEZa6OSifVZZtKAbPEADMkiSJU9vxELWBoajPcwZkcRCGfSUlACAEmVKCSS5UYIzC0hUzPwYAAoDkF9/SX1ySTPS31oJ2iAVmQB/t1KdmZ+YX5qOEKwX7Pv/XT0eoqi6/++mH442Y+3sPd76+SaqX33jkesdbG37j8MqZ6tm5uZTzlBqmaQ4S1g6SLFPjI8jJuUfNlk7puelyVXdXyxXpN4nQyF4Q/nPS/fOwU/zp5/OLl6Xlse5xz2+ipE/yRQ6aaB0QjJrHx9Hry+dnT5UsR2cJ1+j/mL7YsyV93EYAAAAASUVORK5CYII=","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/lOZNyY8P0M6dnhhv2GrYZ/1d90b43562d44cc60a524570b11b9c04/Image_default_DevelopersBlogging.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/lOZNyY8P0M6dnhhv2GrYZ/1d90b43562d44cc60a524570b11b9c04/Image_default_DevelopersBlogging.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/lOZNyY8P0M6dnhhv2GrYZ/1d90b43562d44cc60a524570b11b9c04/Image_default_DevelopersBlogging.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/lOZNyY8P0M6dnhhv2GrYZ/1d90b43562d44cc60a524570b11b9c04/Image_default_DevelopersBlogging.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/lOZNyY8P0M6dnhhv2GrYZ/1d90b43562d44cc60a524570b11b9c04/Image_default_DevelopersBlogging.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/lOZNyY8P0M6dnhhv2GrYZ/1d90b43562d44cc60a524570b11b9c04/Image_default_DevelopersBlogging.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/lOZNyY8P0M6dnhhv2GrYZ/1d90b43562d44cc60a524570b11b9c04/Image_default_DevelopersBlogging.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/lOZNyY8P0M6dnhhv2GrYZ/1d90b43562d44cc60a524570b11b9c04/Image_default_DevelopersBlogging.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/lOZNyY8P0M6dnhhv2GrYZ/1d90b43562d44cc60a524570b11b9c04/Image_default_DevelopersBlogging.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/lOZNyY8P0M6dnhhv2GrYZ/1d90b43562d44cc60a524570b11b9c04/Image_default_DevelopersBlogging.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ben Long","slug":"ben-long"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Why developers should write: From developer blogs to social media"},"metaDescription":{"metaDescription":"Why should developers write blogs or post on social media? Whether you’re freelance or looking to advance your career, creating your own content has a lot of benefits."}},{"title":"How to increase developer productivity: 15 tips to get more done","slug":"developer-productivity","featured":false,"lastUpdated":"Apr 30th, 2020","description":{"description":"<p>Looking for ways to boost your team&rsquo;s productivity? We share 15 ideas including how to measure developer productivity, along with useful tools and best practices.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Looking for ways to boost your team’s productivity? We share 15 ideas including how to measure developer productivity, along with useful tools and best practices."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Photograph of honeycomb with honey bee at work on top.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAAABOk/gAUXy4AEM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+CoUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t////2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAQABQDAREAAhEBAxEB/8QAFwABAAMAAAAAAAAAAAAAAAAABQEECP/EACgQAAICAQMCBAcAAAAAAAAAAAECAxESAAQhBjEFIkFRE2FxgdHw8f/EABkBAQACAwAAAAAAAAAAAAAAAAMCBAUHCP/EACYRAAEDAwMCBwAAAAAAAAAAAAEAAhEDITESUfAUQQQicZGxwdH/2gAMAwEAAhEDEQA/ANYTbvKPNnZaoC75N+vl9TwflWuNhrqMlh57d+62mIBwiB1NAvU8XgkaLuNyYvjT5OmUKm8SylbIYjG/xrKM8K7pOoqugTF8k7YwN4RFw16Wpg4IfJuFiB54iU5el9vah9tUC5lO1uchKJOUGrxzRFGjBDAgrVivrj+gaKkGuHnzz5+glMjCnbGHbTtMqASSKFZsaJUdgTX8076rmuGkyNtub/iiGSLhU9z1BOJmCkpXexVn35XVCrUl2b+itNpiF//Z","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/3M114CzdkBjj5Maljt3vOA/3b051a266bda0a85bed916d64ec5b4ab/Bee.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/3M114CzdkBjj5Maljt3vOA/3b051a266bda0a85bed916d64ec5b4ab/Bee.jpg?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/3M114CzdkBjj5Maljt3vOA/3b051a266bda0a85bed916d64ec5b4ab/Bee.jpg?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/3M114CzdkBjj5Maljt3vOA/3b051a266bda0a85bed916d64ec5b4ab/Bee.jpg?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/3M114CzdkBjj5Maljt3vOA/3b051a266bda0a85bed916d64ec5b4ab/Bee.jpg?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/3M114CzdkBjj5Maljt3vOA/3b051a266bda0a85bed916d64ec5b4ab/Bee.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/3M114CzdkBjj5Maljt3vOA/3b051a266bda0a85bed916d64ec5b4ab/Bee.jpg?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/3M114CzdkBjj5Maljt3vOA/3b051a266bda0a85bed916d64ec5b4ab/Bee.jpg?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/3M114CzdkBjj5Maljt3vOA/3b051a266bda0a85bed916d64ec5b4ab/Bee.jpg?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/3M114CzdkBjj5Maljt3vOA/3b051a266bda0a85bed916d64ec5b4ab/Bee.jpg?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ben Long","slug":"ben-long"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"15 tips to increase developer productivity | TinyMCE"},"metaDescription":{"metaDescription":"Looking for ways to boost your team’s productivity? We share 15 tips on how to improve developer productivity from our own software developers and team leaders."}},{"title":"Continuously refactoring 100000 lines of code","slug":"modern-javascript-refactoring-tinymce","featured":false,"lastUpdated":"Apr 28th, 2020","description":{"description":"<p>Tiny has adopted a continuous improvement process to move TinyMCE to modern JavaScript. Read how we are continuously refactoring 100000 lines of code.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Tiny has adopted a continuous improvement process to move TinyMCE to modern JavaScript. Read how we are continuously refactoring 100000 lines of code."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"An evolution of the JavaScript logo (JS) to the TypeScript logo (TS), with a made up logo that looks like a combination of the two in between.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAACmklEQVQYGU3BQWtcVRgG4Pf9zrl3ZpLppDVJaULEhSml0E1woSLYf+DGjeDWH1Vw4x8Qdyq4FetGG7WV0DZq0SYanYakmczce873vSbgwufh1s5HAPq+RMjdAZAEIAn/Y2Y5pwsSpJBkyXIpXa0RHgA8wkgBNCokgISEZExG99J3XUhNTimnqJ5rX0p1EpckgW3bmlmttZRCs0HTNG0CWPrKbBFuJkWVlFMiaQAHg7bvewDJSGPOyQxm1uTk7qWvEWGJyUiqaRpF5Fp6kAAWi8g5Cexrra7zvi41aTRAP++6k1O45yaxMeQG7TAIGrPkZmlRfDYPhCEATzgmEKfwU/Tp1rq9/U4yBi8Yz160T7+TXED2Whe1zl9iPGEynZz76hX/5ONu6Wp6Mp08mb7y1f2NHzffLbAFAEs4/u3az98geQ1kjzovxDx9dm966/WXVHz7YHzz9gqu3jg6vN6OV2cPFttZH95ePpk7LX3+A/a7ujy0nJKlRJhhHq9uzDbWD5rm2WQ8++noxjw+WB29d2fl7v7ZcOrx1s3JzmvL77+5/sZaW/86VzjkpqioPVAkf/5nfbQ3O/zbfz3dejGb7B+ltdHmznBy3GnvYPHoYNFXba8PgRpR3UsOL5CQ+OkXV5aG27X6L7+3jx8+373/5dMjbg5Wdh/uYW16749m5tr9evD9s0NcawlRwcnW3eIxL8Q/GQhAgIACdLgUk+tDq93srJa+A8DReLQySimRzIqaoMnA+o3eQwTabIkNkAnQSIAcLC9FXwoAkkDIQ2RWVDOGV5MSaBcQECQBiEBcECAZCRIKAQIgZKPCPSJAmBkVkJEE9J8QCZJmBESjh0cEwey1Ey4ZCQmA3EVCCskjABgJMoKXYFRkQyj+BQZQpzRxkkpaAAAAAElFTkSuQmCC","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/3194qQ7O0Fx9mJSzNE3nUx/07e28e06b2cb9573186a2586d8786bd6/Image_default_ModernJavascript.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/3194qQ7O0Fx9mJSzNE3nUx/07e28e06b2cb9573186a2586d8786bd6/Image_default_ModernJavascript.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/3194qQ7O0Fx9mJSzNE3nUx/07e28e06b2cb9573186a2586d8786bd6/Image_default_ModernJavascript.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/3194qQ7O0Fx9mJSzNE3nUx/07e28e06b2cb9573186a2586d8786bd6/Image_default_ModernJavascript.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/3194qQ7O0Fx9mJSzNE3nUx/07e28e06b2cb9573186a2586d8786bd6/Image_default_ModernJavascript.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/3194qQ7O0Fx9mJSzNE3nUx/07e28e06b2cb9573186a2586d8786bd6/Image_default_ModernJavascript.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/3194qQ7O0Fx9mJSzNE3nUx/07e28e06b2cb9573186a2586d8786bd6/Image_default_ModernJavascript.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/3194qQ7O0Fx9mJSzNE3nUx/07e28e06b2cb9573186a2586d8786bd6/Image_default_ModernJavascript.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/3194qQ7O0Fx9mJSzNE3nUx/07e28e06b2cb9573186a2586d8786bd6/Image_default_ModernJavascript.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/3194qQ7O0Fx9mJSzNE3nUx/07e28e06b2cb9573186a2586d8786bd6/Image_default_ModernJavascript.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Joakim Lindkvist","slug":"joakim-lindkvist"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Moving TinyMCE to Modern Javascript"},"metaDescription":null},{"title":"5 tips for building successful agile development teams","slug":"tips-for-agile-development-teams","featured":false,"lastUpdated":"Apr 16th, 2020","description":{"description":"<p>What is agile development? How are agile teams structured? We cover all the basics and 5 key tips to agile success within your dev teams.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"What is agile development? How are agile teams structured? We cover all the basics and 5 key tips to agile success within your dev teams."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Four people meet in a room in front of a cork board covered in notes. They’re smiling at each other as they sit or stand at a table with laptops, notepads, and pens.","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/4Hlc7ucsf6Mu8kyW56XL39/2fa25f943eb0d408e5476f7e498b35c8/woman-wearing-gray-shirt-3184298-cropped.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/4Hlc7ucsf6Mu8kyW56XL39/2fa25f943eb0d408e5476f7e498b35c8/woman-wearing-gray-shirt-3184298-cropped.jpg?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4Hlc7ucsf6Mu8kyW56XL39/2fa25f943eb0d408e5476f7e498b35c8/woman-wearing-gray-shirt-3184298-cropped.jpg?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4Hlc7ucsf6Mu8kyW56XL39/2fa25f943eb0d408e5476f7e498b35c8/woman-wearing-gray-shirt-3184298-cropped.jpg?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4Hlc7ucsf6Mu8kyW56XL39/2fa25f943eb0d408e5476f7e498b35c8/woman-wearing-gray-shirt-3184298-cropped.jpg?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/4Hlc7ucsf6Mu8kyW56XL39/2fa25f943eb0d408e5476f7e498b35c8/woman-wearing-gray-shirt-3184298-cropped.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/4Hlc7ucsf6Mu8kyW56XL39/2fa25f943eb0d408e5476f7e498b35c8/woman-wearing-gray-shirt-3184298-cropped.jpg?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4Hlc7ucsf6Mu8kyW56XL39/2fa25f943eb0d408e5476f7e498b35c8/woman-wearing-gray-shirt-3184298-cropped.jpg?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4Hlc7ucsf6Mu8kyW56XL39/2fa25f943eb0d408e5476f7e498b35c8/woman-wearing-gray-shirt-3184298-cropped.jpg?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4Hlc7ucsf6Mu8kyW56XL39/2fa25f943eb0d408e5476f7e498b35c8/woman-wearing-gray-shirt-3184298-cropped.jpg?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Ben Long","slug":"ben-long"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":{"metaTitle":"Agile development teams: Practices, roles, and structure"},"metaDescription":{"metaDescription":"What is agile development? How are agile teams structured? We cover all the basics and 5 key tips to agile success within your dev teams."}},{"title":"3 tips to improve TinyMCE performance in the cloud","slug":"3-tips-to-improve-tinymce-performance-in-the-cloud","featured":false,"lastUpdated":"Nov 18th, 2019","description":{"description":"<p>Three tips to increase the performance of TinyMCE running on the cloud and take full advantage of our new CDN infrastructure.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Three tips to increase the performance of TinyMCE running on the cloud and take full advantage of our new CDN infrastructure."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Abstract illustration of a person standing at production line","artistName":"Sanni Sahil","image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAACtUlEQVQoz1XMOW9cZRSH8f9Z7jKLfccTsBNT2KBEICJFIhVFoIKCkg/AB6SjRVTUhkA6FMlgBQWHwR57PMtd3vecQwESovlVjx768dOfRcACkWAJYTCHCFiDI0TAFUSC9Z/gf6obEQIAHDBAwW9LIHxtelJxCX/dUwAAgYD4Twp2gxt5AjVCR4UneFAQ5YH62YiORmGIpoiCPcON3OFO7nAjdiczWIfiYTX7bB61pDdmV7br+fzrtn+xlMqDyIy2pOukaUf/XgzqRgAg2D7v8sK8Dw7qelqlav8pFSeua1v9ardrHX9eyy7HnY6HoUqGIHaDO4LIB+ovsgfTsVyFLv6Q6eNGT+ZV7ZMTq59S+9Nt8deq/oBTITYtnEidiIXkkNmDA8xonu1PGh19c737/nL9TpIPtf7k/uzVhrDTVNKLG21YH8/kF1NP8JIiEY1FKkhByTQv49GXk2wjW2H00UwbxcpbIVfncc20pfPX5axUy4FNIILHrPNSFO1vm9mjrimq/mAynDbmA51dytLldIIu2aJzH7sV3i/VnQiRV7H+vfeP4/4XZXd7s7i5rC72dkeHUTmfXTXFRp7s05i689bPu9GzveJ4v/3O1Z0QGHY0/6qYHgVyV+dMfvDybFqN+nK5OHh3iIeFNVVeWb5xBHXPt/mioxTqhmyUnMsmdNNuf8h3XL11zx48qdqbVB9b8X7T35u6KVKq3pvmcevXQ/4zSwF1g45pb07p22HXSDxocrYhVZPTaX2QfGetjeKVo2+RjYaQPUUgVoObq4NCOAVCy34gvczlPu+83p61vkyx8uowVXNlBsGJnTrnCAY7hXpFxh53sBV0DJtQuvPYOu1CCkiJ4U22ZdYJacNkzimYgymEoe6RriFAFOEd+NYZIQopEEweAIMMeRORTSaIiBgCAgj+BljOvHkI1NZsAAAAAElFTkSuQmCC","aspectRatio":1.2173913043478262,"src":"//images.ctfassets.net/s600jj41gsex/4tMojlaPQtZyX7oiawtwXu/fdcee45a2bd08b2d1c7bfa74e46e6ff5/Image_default_machine.png?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/4tMojlaPQtZyX7oiawtwXu/fdcee45a2bd08b2d1c7bfa74e46e6ff5/Image_default_machine.png?w=185&h=152&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4tMojlaPQtZyX7oiawtwXu/fdcee45a2bd08b2d1c7bfa74e46e6ff5/Image_default_machine.png?w=370&h=304&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4tMojlaPQtZyX7oiawtwXu/fdcee45a2bd08b2d1c7bfa74e46e6ff5/Image_default_machine.png?w=739&h=607&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4tMojlaPQtZyX7oiawtwXu/fdcee45a2bd08b2d1c7bfa74e46e6ff5/Image_default_machine.png?w=896&h=736&q=50&fit=scale 896w","srcWebp":"//images.ctfassets.net/s600jj41gsex/4tMojlaPQtZyX7oiawtwXu/fdcee45a2bd08b2d1c7bfa74e46e6ff5/Image_default_machine.png?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/4tMojlaPQtZyX7oiawtwXu/fdcee45a2bd08b2d1c7bfa74e46e6ff5/Image_default_machine.png?w=185&h=152&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/4tMojlaPQtZyX7oiawtwXu/fdcee45a2bd08b2d1c7bfa74e46e6ff5/Image_default_machine.png?w=370&h=304&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/4tMojlaPQtZyX7oiawtwXu/fdcee45a2bd08b2d1c7bfa74e46e6ff5/Image_default_machine.png?w=739&h=607&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/4tMojlaPQtZyX7oiawtwXu/fdcee45a2bd08b2d1c7bfa74e46e6ff5/Image_default_machine.png?w=896&h=736&q=50&fm=webp&fit=scale 896w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Tim Dettrick","slug":"tim-dettrick"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":null},{"title":"Charting with TinyMCE and Highcharts","slug":"charting-with-tinymce-and-highcharts","featured":false,"lastUpdated":"Oct 10th, 2018","description":{"description":"<p>Highcharts makes it easy to add beautiful, interactive charts to TinyMCE. The Tiny team is proud to introduce Highcharts as one of our Technical Partner Program launch partners.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Highcharts makes it easy to add beautiful, interactive charts to TinyMCE. The Tiny team is proud to introduce Highcharts as one of our Technical Partner Program launch partners."}]}],"data":{"quirksMode":false}}}},"heroImage":{"alt":"Tiny Partner Highcharts","artistName":null,"image":{"fluid":{"base64":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAGABQDAREAAhEBAxEB/8QAFgAAAwAAAAAAAAAAAAAAAAAABQcI/8QAIxAAAgEDAwUBAQAAAAAAAAAAAQIDBAURBgchABIiMWEIE//EABcBAQADAAAAAAAAAAAAAAAAAAcEBgj/xAAlEQACAAUDAwUAAAAAAAAAAAABAgADBBFBBSFRBhIxE2GBofH/2gAMAwEAAhEDEQA/ADWxP651xYdyp73qS61GobZeqgLXW928IskBWgUnEfbnGBgEe+eelzWdJozTCVIQKUGxyeb83/IHpHUdTS1oeeSyObEccW4t95i693ty6rQNkpVpQZq+7SslLKyALTr2gnPPkRzj6fnRQig3JxFq6p119FpV9IXeYe1TgbXufjx7wkYKh50/rMxllclndzksT7J6jPUsTtGf2mtMYu5uT5JyY//Z","aspectRatio":3.5555555555555554,"src":"//images.ctfassets.net/s600jj41gsex/1dfahjeX2JWq6jfH9340oH/01042bca83f8eac5257135ccdfe53f50/tiny-partner-blog-header-highcharts-1024x288.jpg?w=739&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/1dfahjeX2JWq6jfH9340oH/01042bca83f8eac5257135ccdfe53f50/tiny-partner-blog-header-highcharts-1024x288.jpg?w=185&h=52&q=50&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1dfahjeX2JWq6jfH9340oH/01042bca83f8eac5257135ccdfe53f50/tiny-partner-blog-header-highcharts-1024x288.jpg?w=370&h=104&q=50&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1dfahjeX2JWq6jfH9340oH/01042bca83f8eac5257135ccdfe53f50/tiny-partner-blog-header-highcharts-1024x288.jpg?w=739&h=208&q=50&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1dfahjeX2JWq6jfH9340oH/01042bca83f8eac5257135ccdfe53f50/tiny-partner-blog-header-highcharts-1024x288.jpg?w=1024&h=288&q=50&fit=scale 1024w","srcWebp":"//images.ctfassets.net/s600jj41gsex/1dfahjeX2JWq6jfH9340oH/01042bca83f8eac5257135ccdfe53f50/tiny-partner-blog-header-highcharts-1024x288.jpg?w=739&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/1dfahjeX2JWq6jfH9340oH/01042bca83f8eac5257135ccdfe53f50/tiny-partner-blog-header-highcharts-1024x288.jpg?w=185&h=52&q=50&fm=webp&fit=scale 185w,\n//images.ctfassets.net/s600jj41gsex/1dfahjeX2JWq6jfH9340oH/01042bca83f8eac5257135ccdfe53f50/tiny-partner-blog-header-highcharts-1024x288.jpg?w=370&h=104&q=50&fm=webp&fit=scale 370w,\n//images.ctfassets.net/s600jj41gsex/1dfahjeX2JWq6jfH9340oH/01042bca83f8eac5257135ccdfe53f50/tiny-partner-blog-header-highcharts-1024x288.jpg?w=739&h=208&q=50&fm=webp&fit=scale 739w,\n//images.ctfassets.net/s600jj41gsex/1dfahjeX2JWq6jfH9340oH/01042bca83f8eac5257135ccdfe53f50/tiny-partner-blog-header-highcharts-1024x288.jpg?w=1024&h=288&q=50&fm=webp&fit=scale 1024w","sizes":"(max-width: 739px) 100vw, 739px"}}},"author":{"name":"Christer Vasseng","slug":"christer-vasseng"},"category":{"title":"Developer Insights","slug":"engineering"},"metaTitle":null,"metaDescription":null}]},"description":{"description":"<p>We&rsquo;ve collected the aspects that can make or break your strategy of tech debt management - read on to find how.</p>","childMarkdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"We’ve collected the aspects that can make or break your strategy of tech debt management - read on to find how."}]}],"data":{"quirksMode":false}}}},"tags":[{"slug":"technical-debt","title":"Technical Debt"},{"slug":"buy-vs-build","title":"Buy-vs-build"},{"slug":"product-development","title":"Product Development"},{"slug":"developers","title":"Developers"}],"body":{"body":"<blockquote>From January 2023, TinyMCE no longer offers Real-Time Collaboration (RTC) for new customers. For Existing customers, we'll be in contact to discuss options. Please reach out to your Account Manager if you are a customer using RTC, and you have any questions about the plugin.</blockquote>\n<div class=\"stk-grid stk-theme_44178__mb_15\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"9\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628517294418 stk-reset stk-theme_44178__color_44178_custom_color_1\" data-ce-tag=\"paragraph\">One of the biggest dangers when starting a new development project, is not understanding the trade-offs you may need to make during development, and the technical debt those decisions could incur. Developing a rich text editor, in particular, is a minefield of potential technical debt. So, before you start, you need a plan.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid stk-grid__layout_columns\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last valign-middle\" data-col-width=\"2\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset stk-theme_44178__style_font_style-1628517714937 stk-theme_44178__mb_0 stk-theme_44178__color_44178_custom_color_1\" data-ce-tag=\"paragraph\">Millie Macdonald</p>\n<p class=\"stk-reset stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3\" data-ce-tag=\"paragraph\">Product Manager at Halo Connect</p>\n</div>\n</div>\n</div>\n</div>\n<hr class=\"stk-theme_44178__separator_basic_divider stk-theme_44178__mb_2 stk-reset\" />\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">After all, technical debt isn&rsquo;t something you can just leave until later. Technical debt lurks in your codebase, accruing interest in the form of lost developer time and complicated workarounds. It can also snowball. A small problem, that carried a small cost, could become a much larger problem if left too long.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">You need to be actively managing technical debt. Every. Day.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Typically, technical debt has a habit of rearing its head at the most unfortunate times &ndash; complicating codebases, delaying releases, and blocking the development of new features.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">So, managing technical debt becomes especially important in a project <a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/considering-building-rich-text-editor/\" target=\"_blank\" rel=\"noopener\">as complicated as a rich text editor.</a> There are a few ways you could approach it, such as trying to pay it down each sprint. However, that could affect your <a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/developer-velocity-effects/\" target=\"_blank\" rel=\"noopener\">developer velocity</a> and clash with project prioritization.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Instead, the best plan is a proactive plan. And that requires an understanding of why rich text editors are so <a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/reduce-technical-debt/\" target=\"_blank\" rel=\"noopener\">prone to technical debt</a>.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid\" data-stk-css=\"stkbJwzk\" data-anim-m=\"false\" data-ce-tag=\"grid\">\n<div class=\"stk-theme_44178__pad_round_1 stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_1 stk-theme_44178__mb_0\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">TABLE OF&nbsp;CONTENTS</strong></p>\n<hr class=\"stk-theme_44178__separator_basic_divider stk-theme_44178__mb_05 stk-reset\" />\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"#stk-1\">Why rich text editors accrue technical debt</a></p>\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"#stk-2\">Deep RTE domain experience minimizes technical debt</a></p>\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"#stk-3\">Programming principles affect code quality and technical debt accrual</a></p>\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 stk-reset\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"#stk-4\">Choosing the right RTE minimizes technical debt accrual</a></p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h2 id=\"stk-1\" class=\"stk-theme_44178__style_large_header stk-reset\" data-ce-tag=\"paragraph\">Why rich text editors accrue technical debt</h2>\n<p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Three key factors make rich text editors especially problematic when it comes to technical debt:</p>\n<ul class=\"stk-reset\" data-ce-tag=\"list\">\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\"><strong class=\"stk-reset\">Rich text editors usually have big, complex codebases</strong> &ndash; especially if you want a full-featured editor.</li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\"><strong class=\"stk-reset\">Rich text editors are at the mercy of an ever-changing environment</strong> &ndash; that you often don&rsquo;t control.</li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\"><strong class=\"stk-reset\">Developing rich text editors requires extensive domain knowledge that rarely overlaps with other kinds of application</strong> &ndash; without which, it can be difficult to find the right solution to many development problems.</li>\n</ul>\n<p class=\"stk-theme_44178__mb_15 stk-reset\" data-ce-tag=\"paragraph\">Understanding these three factors is crucial to understanding how tech debt accrues in a rich text editor, and how proactively managing technical debt can make or break your development schedule.</p>\n<h3 class=\"stk-theme_44178__style_medium_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Where does RTE technical debt accrue?</h3>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Rich text editors tend to be multi-layered applications, with an editing model wrapped in a configuration layer to make a core engine, on top of which other features can be built. This complexity often leads to rather large codebases &ndash; which means plenty of places for technical debt to appear (and hide).</p>\n</div>\n<div class=\"valign-middle stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stkGGcBl\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-slideInRight\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-stk-css=\"stkhp4ek\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stk3UC8i\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_4\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">read MORE</strong></p>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkWg-5c\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\"><a href=\"https://www.tiny.cloud/blog/rte-code-half-life/\" target=\"_blank\" rel=\"noopener\">Insights on the complexities of RTEs</a></p>\n</div>\n</div>\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__mb_05\" data-stk-css=\"stkACyIQ\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://www.tiny.cloud/buy-vs-build-whitepaper/\" target=\"_blank\" rel=\"noopener\">Buy vs Build: The Great Debate White Paper</a></p>\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-theme_44178__mb_05 stk-reset\" data-stk-css=\"stk2TBxt\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://www.tiny.cloud/technical-debt-whitepaper/\" target=\"_blank\" rel=\"noopener\">Opportunity Cost of Technical Debt White Paper</a></p>\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset\" data-stk-css=\"stk3hxGc\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/cost-of-building-rich-text-editor/\" target=\"_blank\" rel=\"noopener\">Tiny puts a price tag on building your own core rich text editor</a></p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Multiple editing models are used in rich text editors</h4>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">For example, from the outset &ndash; on that very first layer of a rich text editor &ndash; you have a rather important decision to make.</p>\n<p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">There isn&rsquo;t just one editing model. Do you choose:</p>\n<ul class=\"stk-reset\" data-ce-tag=\"list\">\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">The browser's <a class=\"stk-reset\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/contenteditable\" target=\"_blank\" rel=\"noopener\">ContentEditable API</a></li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Or a <a class=\"stk-reset\" href=\"https://github.com/ianstormtaylor/slate\" target=\"_blank\" rel=\"noopener\">model-based library like Slate</a></li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Or develop your own library.</li>\n</ul>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Each model has inherent strengths and weaknesses, but crucially, often what&rsquo;s not factored in up front, is that your choice directly affects the features your editor is able to support.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">For example, TinyMCE is a ContentEditable editor, but it switches to using Slate when in real-time collaboration (RTC) mode. This was done because RTC was easier to implement on a model-based editor.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Likewise, the whole editor could have been switched over to Slate. However, some features are easier to implement on a ContentEditable model, so instead Tiny develops and maintains the two models.</p>\n</div>\n<div class=\"valign-middle stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stkSI5rz\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-slideInRight\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-stk-css=\"stk3u4_N\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkQYqk7\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_4\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">read MORE</strong></p>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkTXCYQ\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\"><a href=\"https://docs.slatejs.org/v/v0.47/\" target=\"_blank\" rel=\"noopener\">ContentEditable vs Slate for RTC</a></p>\n</div>\n</div>\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset\" data-stk-css=\"stkzYalc\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/real-time-collaborative-editing-slate-js\" target=\"_blank\" rel=\"noopener\">Collaboration needs a clean Slate</a></p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_15 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Basic editor vs fully-featured editor impacts tech debt</h4>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Choosing a model and building a wrapper only gets you a very basic editor though. Next, you want to start adding features, like support for tables and advanced formatting.</p>\n<p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">However, with every feature you add to a rich text editor, other aspects of the product need to be kept in mind. These include, but aren&rsquo;t limited to:</p>\n<ul class=\"stk-reset\" data-ce-tag=\"list\">\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">UI</li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Security</li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Key handling</li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Undo management</li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Configurability</li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Content filtering, and</li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Mobile support.</li>\n</ul>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">This matrix of considerations multiplies the risk of technical debt for every feature you add, and needs to be planned (not just when the feature is being developed) on an ongoing basis.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">The other problem with rich text editor codebases, is that some pieces of your code may live for a long time, so cruft and code rot can become commonplace, if it&rsquo;s not kept in check. Again, that's where your efforts to proactively manage technical debt comes into play.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"4\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h3 class=\"stk-theme_44178__style_medium_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Over time, rich text editors build up cruft</h3>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">&ldquo;Cruft&rdquo; is a term for code that was badly designed or unnecessarily complicated &ndash; often from a developer implementing a feature they don&rsquo;t fully understand. Similarly, &ldquo;code rot&rdquo; refers to code that has deteriorated over time &ndash; possibly becoming cruft in the process. And both are prolific sources of technical debt.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Unfortunately, this is where forces beyond your control start taking over.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">All software projects have dependencies &ndash; libraries or tools they rely on to function. Usually, you can control which dependencies you use and when they update. However, a rich text editor running in a web application is dependent on the whims of the browser and operating system (OS) of the user.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">This creates a matrix of environments, each carrying its own unique quirks and challenges. And you can&rsquo;t control that, but still have to account for it in your development work.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"valign-middle stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stk7HZ_3\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-slideInRight\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-stk-css=\"stk9P1F9\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkyZb81\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_4\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">LEARN MORE</strong></p>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkNRK1g\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\">What is cruft, code rot, and code half-life?</p>\n</div>\n</div>\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset\" data-stk-css=\"stky0VL7\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://www.tiny.cloud/technical-debt-whitepaper/\" target=\"_blank\" rel=\"noopener\">Find out how they affect rich text editor technical debt &rarr;</a></p>\n</div>\n</div>\n</div>\n</div>\n<table class=\"stk-theme_44178__style_small_text stk-table--zebra stk-theme_44178__var_44178_custom_color_4 stk-theme_44178__mb_05 stk-reset stk-table\" data-responsive-type=\"cards\" data-ce-tag=\"table\"><colgroup> <col class=\"stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"129\" /> <col class=\"stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"130\" /> <col class=\"stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"131\" /> <col class=\"stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"132\" /> </colgroup>\n<thead class=\"stk-reset\">\n<tr class=\"stk-reset stk-table-row\">\n<th class=\"stk-theme_44178__style_font_style-1628517328397 stk-theme_44178__color_44178_custom_color_3 align-left stk-reset stk-table-cell\" data-ce-tag=\"th\">BROWSER</th>\n<th class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 align-center stk-reset stk-table-cell\" data-ce-tag=\"th\">WINDOWS</th>\n<th class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 align-center stk-reset stk-table-cell\" data-ce-tag=\"th\">MAC</th>\n<th class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 align-center stk-reset stk-table-cell\" data-ce-tag=\"th\">GNU/LINUX</th>\n</tr>\n</thead>\n<tbody class=\"stk-reset\">\n<tr class=\"stk-reset stk-table-row\">\n<td class=\"stk-theme_44178__style_small_text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"BROWSER\"><strong class=\"stk-reset\">Chrome</strong></td>\n<td class=\"stk-theme_44178__style_font_style-1628517328397 align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"WINDOWS\">&nbsp;</td>\n<td class=\"stk-theme_44178__style_font_style-1628517328397 align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"MAC\">&nbsp;</td>\n<td class=\"stk-theme_44178__style_font_style-1628517328397 align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"GNU/LINUX\">&nbsp;</td>\n</tr>\n<tr class=\"stk-reset stk-table-row\">\n<td class=\"stk-theme_44178__style_small_text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"BROWSER\"><strong class=\"stk-reset\">Firefox</strong></td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"WINDOWS\">&nbsp;</td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"MAC\">&nbsp;</td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"GNU/LINUX\">&nbsp;</td>\n</tr>\n<tr class=\"stk-reset stk-table-row\">\n<td class=\"stk-theme_44178__style_small_text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"BROWSER\"><strong class=\"stk-reset\">Edge</strong></td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"WINDOWS\">&nbsp;</td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"MAC\">&nbsp;</td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"GNU/LINUX\">&nbsp;</td>\n</tr>\n<tr class=\"stk-reset stk-table-row\">\n<td class=\"stk-theme_44178__style_small_text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"BROWSER\"><strong class=\"stk-reset\">Safari</strong></td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"WINDOWS\">&nbsp;</td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"MAC\">&nbsp;</td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"GNU/LINUX\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n<p class=\"stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\">As an example, TinyMCE 6.2 supports 8 combinations of browser and OS</p>\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Because of this, rich text editors can accumulate cruft and code rot &ndash; not just because of internal factors like code becoming outdated, but also because of external factors (like a browser deprecating an API). This technical debt can multiply if fixes for those external issues are rushed, or problems are bandaged over again, and again, and again&hellip;</p>\n<h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Managing technical debt in rich text editors</h4>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Regularly scheduling developer time to pay down technical debt might help you stay on top of it, but that depends on how much (and how fast) you're accruing technical debt and how much time you can afford to dedicate to remediation.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">So, how do you plan for and manage technical debt in a product as complex as a rich text editor? Or, even better, how can you prevent technical debt from accruing in the first place?</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">The answer is domain knowledge.</p>\n</div>\n</div>\n<div class=\"stk-grid stk-theme_44178__mb_2\" data-stk-css=\"stk7_--j\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-jackInTheBox\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\" data-ce-tag=\"grid\">\n<div class=\"stk-theme_44178__pad_ver_2 stk-grid-col stk-grid-col_last\" data-col-width=\"12\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"2\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628585803915 align-center stk-reset\" data-stk-css=\"stkENCR5\" data-ce-tag=\"paragraph\">Get more insights in our<br />Technical Debt White Paper</p>\n<a class=\"stk-theme_44178__stk-btn_1628586253530 stk-theme_44178__style_font_style-1628586133109 align-center stk-reset\" href=\"https://www.tiny.cloud/technical-debt-whitepaper\" target=\"_blank\" rel=\"noopener\" data-stk-button=\"1\" data-ce-tag=\"button\">DOWNLOAD THE WHITE PAPER</a></div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"2\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h2 id=\"stk-2\" class=\"stk-theme_44178__style_large_header stk-reset\" data-ce-tag=\"paragraph\">Deep RTE domain experience minimizes technical debt</h2>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">When it comes to managing technical debt in a rich text editor, the biggest danger comes from the things you don&rsquo;t know.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"4\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"12\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<table class=\"stk-table--bordered_hv stk-theme_44178__var_44178_custom_color_4 stk-reset stk-table\" data-responsive-type=\"cards\" data-ce-tag=\"table\"><colgroup> <col class=\"stk-reset stk-reset stk-reset stk-reset\" data-stk-css=\"stk31tk8\" data-stk-id=\"189\" /> <col class=\"stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"190\" /> <col class=\"stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"191\" /> </colgroup>\n<thead class=\"stk-reset\">\n<tr class=\"stk-reset stk-table-row\">\n<th class=\"ce-element--empty stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"th\">&nbsp;</th>\n<th class=\"stk-theme_44178__style_small_text align-center stk-reset stk-table-cell\" data-ce-tag=\"th\"><strong class=\"stk-reset\">KNOWNS</strong></th>\n<th class=\"stk-theme_44178__style_small_text align-center stk-reset stk-table-cell\" data-ce-tag=\"th\">UNKNOWNS</th>\n</tr>\n</thead>\n<tbody class=\"stk-reset\">\n<tr class=\"stk-reset stk-table-row\">\n<td class=\"stk-theme_44178__style_small_text valign-middle stk-reset stk-table-cell\" data-ce-tag=\"td\"><strong class=\"stk-reset\">KNOWNS</strong></td>\n<td class=\"valign-middle stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"KNOWNS\" data-stk-css=\"stkSRUjV\">Known knowns: things you are aware of and do know.</td>\n<td class=\"valign-middle stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"UNKNOWNS\" data-stk-css=\"stka-oav\">Known unknowns: things you are aware of but don&rsquo;t know.</td>\n</tr>\n<tr class=\"stk-reset stk-table-row\">\n<td class=\"stk-theme_44178__style_small_text stk-reset stk-table-cell\" data-ce-tag=\"td\"><strong class=\"stk-reset\">UNKNOWNS</strong></td>\n<td class=\"stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"KNOWNS\" data-stk-css=\"stk6MqwR\">Unknown knowns: things you have forgotten you know.</td>\n<td class=\"stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"UNKNOWNS\" data-stk-css=\"stkt-nNv\">Unknown unknowns: things you don&rsquo;t know and aren&rsquo;t aware of.</td>\n</tr>\n</tbody>\n</table>\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 stk-reset\" data-ce-tag=\"paragraph\">The four degrees of knowledge, <a class=\"stk-reset\" href=\"https://en.wikipedia.org/wiki/Johari_window\" target=\"_blank\" rel=\"noopener\">represented using the Johari Window technique</a>. The different colors represent the risk of technical debt in a rich text editor, based on the level of understanding of domain knowledge.</p>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_15 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Developing a rich text editor requires very specific knowledge, such as DOM walking, selection models, keyboard key codes, and input events. There are very few companies in the world that develop rich text editors, and therefore the domain isn&rsquo;t widely known or documented. The learning curve is steep. And without the right knowledge, your risk of adding technical debt (intentional and unintentional) rises.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Why is that?</p>\n<h3 class=\"stk-theme_44178__mb_05 stk-theme_44178__style_medium_header stk-reset\" data-ce-tag=\"paragraph\">Informed choices help to limit technical debt</h3>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Very basically, technical debt is the cost of choosing a simpler solution over a more robust one. However, if you&rsquo;re unaware there&rsquo;s a choice to be made, you can needlessly take on technical debt.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Worse still, even if you&rsquo;re aware of all the factors but you don&rsquo;t really understand them, you can&rsquo;t make an informed decision about whether taking on technical debt is wise. You also can&rsquo;t manage technical debt you aren&rsquo;t aware of, and you can&rsquo;t easily prioritize technical debt you don&rsquo;t understand.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Extensive rich text editor domain knowledge, helps you manage technical debt in five ways:</p>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"7\" data-stk-css=\"stkW8fvU\" data-stk-css-m=\"stkX9yl4\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">By avoiding technical debt in the first place:</strong></p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Implementing features correctly the first time, choosing solutions that are less prone to technical debt, and engineering your rich text editor in future-proof ways.</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"7\" data-stk-css=\"stklAgCM\" data-stk-css-m=\"stkgm-x4\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Estimating and prioritizing technical debt:</strong></p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">This is especially relevant for complex debt that might require refactoring in your rich text editor and advanced features.</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"7\" data-stk-css=\"stkMUGgy\" data-stk-css-m=\"stkrS9FJ\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Managing the impact of existing technical debt on velocity</strong>:</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">This positively affects the quality of your rich text editor, by avoiding hacky workarounds and &ldquo;fixes&rdquo; that only make the problem worse.</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"7\" data-stk-css=\"stkeOJud\" data-stk-css-m=\"stkJ4AOT\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Identifying when existing technical debt will interfere:</strong></p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Whether that's on an upcoming project or feature, avoiding surprises, complications, and delays.</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"7\" data-stk-css=\"stkMFsr8\" data-stk-css-m=\"stkEL-km\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Remediating technical debt faster:</strong></p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">By having a better understanding of the potential solutions and how to implement them, you can manage technical debt more effectively.</p>\n</div>\n</div>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Let&rsquo;s explore a few more concrete examples.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"valign-middle stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid\" data-stk-css=\"stkHD_kz\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-fadeIn\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\">\n<div class=\"stk-theme_44178__pad_round_1 stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__color_44178_custom_color_3 stk-reset stk-theme_44178__style_font_style-1628517714937 stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">Intentional vs unintentional technical debt</strong></p>\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Paraphrasing <a class=\"stk-reset\" href=\"https://www.splunk.com/en_us/data-insider/what-is-tech-debt.html#different\" target=\"_blank\" rel=\"noopener\">Splunk, <strong class=\"stk-reset\">intentional technical debt</strong> is</a> created deliberately so a product can be released quickly. Taking on the technical debt is a known and accepted risk.</p>\n<p class=\"stk-theme_44178__style_small_text stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\">However, <strong class=\"stk-reset\">unintentional technical debt</strong> comes from sloppiness, unexpected complexity, or a lack of expertise or knowledge.</p>\n<p class=\"stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\">This creates unknown risks which can&rsquo;t be tracked or managed.</p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-layout__overhangs_both stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stkY7wje\" data-ce-tag=\"grid\">\n<div class=\"stk-theme_44178__pad_ver_2 stk-grid-col stk-grid-col_last\" data-col-width=\"12\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_15 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">1.&nbsp;Code architecture in rich text editors</strong></h4>\n<p class=\"stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__style_font_style-1628517294418 stk-reset\" data-ce-tag=\"paragraph\">Good architecture can save you from accumulating technical debt, but good architecture requires good domain knowledge.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://github.com/tinymce/tinymce/tree/develop/modules/tinymce/src/core/main/ts\" target=\"_blank\" rel=\"noopener\">TinyMCE&rsquo;s core engine</a> is tens of thousands of lines of code. It isn&rsquo;t just a wrapper around the ContentEditable API &ndash; it also contains code that abstracts out many of the aspects of rich text editing. That includes everything from basic formatting like bold, to DOM walking and selection handling.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">These abstractions mean that TinyMCE&rsquo;s developers don&rsquo;t need to think about them every time they&rsquo;re working on a feature. They just call a TinyMCE API, and the core engine handles it for them. When an abstracted concept needs to be improved or fixed, it also means there&rsquo;s only one place in the code to update &ndash; not several spread across every feature that uses that concept.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">However, architecture can also hinder more than it helps, if done incorrectly. This is where domain knowledge becomes important, so you can find the right balance between ad-hoc and over-architected.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"4\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_15 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">2. Intentional and unintentional technical debt</h4>\n<p class=\"stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__style_font_style-1628517294418 stk-reset\" data-ce-tag=\"paragraph\">Ideally, you would only accrue technical debt you have chosen to take on. Sometimes, though, technical debt creeps in unintentionally. Often, that&rsquo;s due to a lack of knowledge.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Developers can't always know and account for everything. Maybe the developers didn't have enough time to brainstorm, or they didn't have the knowledge required to find the optimal solution. Or maybe the implemented solution was a good solution at the time, but it wasn't future-proofed against a problem that popped up later.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">This is where cruft and code rot can start to pile up, creating an ever-growing backlog of technical debt you might not even realize exists. The risk of stumbling on severe technical debt at an inopportune time also increases &ndash; potentially delaying or blocking future features after you start development.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"4\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">3. Continual refactoring in rich text editors</h4>\n<p class=\"stk-theme_44178__style_font_style-1628517294418 stk-theme_44178__color_44178_custom_color_3 stk-reset\" data-ce-tag=\"paragraph\">Without the domain knowledge required to see the bigger picture, it can be all too easy to continually patch the same piece of code over and over, potentially adding technical debt each time.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">If you find yourself patching and improving and replacing the same piece of code again and again, it&rsquo;s a good idea to stop and ask yourself &ldquo;Why?&rdquo;</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Sometimes it&rsquo;s necessary, due to that feature requiring constant updates. However, there&rsquo;s also a chance it&rsquo;s a sign of a deeper problem &ndash; such as the code having been based on incorrect or incomplete assumptions, due to a lack of understanding.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">The danger of this kind of code is that it&rsquo;s costing time and effort each time it's updated.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Constant changes also increase the chance of cruft and code rot due to something being forgotten or missed. For example, an API that isn&rsquo;t used anymore, but hasn&rsquo;t been cleaned up yet. Such code sits around in your codebase, unnecessarily bloating and complicating it, and making all future work in that area of the codebase more complicated than it needs to be.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Avoiding, finding, and remediating these kinds of situations are all easier with the right domain knowledge.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Planning for and managing technical debt in rich text editors isn&rsquo;t only about features and day-to-day development work. There are other things done at a higher level that can help too.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"4\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h2 id=\"stk-3\" class=\"stk-theme_44178__style_large_header stk-reset\" data-ce-tag=\"paragraph\">Programming principles affect code quality and technical debt accrual</h2>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Quality code is the antithesis of technical debt.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">In addition to domain knowledge, sound software engineering knowledge (particularly in <a class=\"stk-reset\" href=\"https://en.wikipedia.org/wiki/Coding_best_practices\" target=\"_blank\" rel=\"noopener\" data-gtm-vis-has-fired-10171822_255=\"1\">programming principles and their applications</a>) is also essential to developing a quality rich text editor.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Although to be clear, choosing the right programming principles isn&rsquo;t completely divorced from domain knowledge. There are many principles to choose from, such as KISS, DRY, separation of concerns, and incremental development. And no one principle suits every software project.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Choosing the wrong principles may, in fact, have a detrimental effect on your project. It may even increase your technical debt accrual, by promoting ideas that negatively affect your decisions around technical debt.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Over the years, TinyMCE has learned by trial and error which principles are useful for rich text editing, particularly when it comes to reducing technical debt. Some of these principles tie back to our use of functional programming, but most can also be used standalone.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Examples of some programming principles Tiny uses are:</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"valign-middle stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stk29rRT\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-slideInRight\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-stk-css=\"stk4wDLa\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkPJW4T\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_4\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">Recommended resources</strong></p>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkcaU-0\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">&lsquo;<a class=\"stk-reset\" href=\"https://www.amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164\" target=\"_blank\" rel=\"noopener\">Clean Architecture&rsquo; by Robert C. Martin</a></p>\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">&lsquo;<a class=\"stk-reset\" href=\"https://www.callicoder.com/software-development-principles/\" target=\"_blank\" rel=\"noopener\">8 Software Principles to Live By&rsquo; by Rajeev Singh</a></p>\n<p class=\"stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\">&lsquo;<a class=\"stk-reset\" href=\"https://lwn.net/Articles/562333/\" target=\"_blank\" rel=\"noopener\">The 7 Deadly Sins of Software Deployment&rsquo; by Josh Berkus</a></p>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">&nbsp;</div>\n</div>\n<div class=\"stk-layout__overhangs_both stk-grid\" data-stk-css=\"stk30pRI\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last stk-theme_44178__pad_ver_3\" data-col-width=\"12\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"valign-middle stk-grid-col stk-grid-col_last stk-theme_44178__pad_round_1-m\" data-col-width=\"6\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_0 stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n</div>\n</div>","childMarkdownRemark":{"html":"<blockquote>From January 2023, TinyMCE no longer offers Real-Time Collaboration (RTC) for new customers. For Existing customers, we'll be in contact to discuss options. Please reach out to your Account Manager if you are a customer using RTC, and you have any questions about the plugin.</blockquote>\n<div class=\"stk-grid stk-theme_44178__mb_15\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"9\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628517294418 stk-reset stk-theme_44178__color_44178_custom_color_1\" data-ce-tag=\"paragraph\">One of the biggest dangers when starting a new development project, is not understanding the trade-offs you may need to make during development, and the technical debt those decisions could incur. Developing a rich text editor, in particular, is a minefield of potential technical debt. So, before you start, you need a plan.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid stk-grid__layout_columns\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last valign-middle\" data-col-width=\"2\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset stk-theme_44178__style_font_style-1628517714937 stk-theme_44178__mb_0 stk-theme_44178__color_44178_custom_color_1\" data-ce-tag=\"paragraph\">Millie Macdonald</p>\n<p class=\"stk-reset stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3\" data-ce-tag=\"paragraph\">Product Manager at Halo Connect</p>\n</div>\n</div>\n</div>\n</div>\n<hr class=\"stk-theme_44178__separator_basic_divider stk-theme_44178__mb_2 stk-reset\" />\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">After all, technical debt isn&rsquo;t something you can just leave until later. Technical debt lurks in your codebase, accruing interest in the form of lost developer time and complicated workarounds. It can also snowball. A small problem, that carried a small cost, could become a much larger problem if left too long.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">You need to be actively managing technical debt. Every. Day.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Typically, technical debt has a habit of rearing its head at the most unfortunate times &ndash; complicating codebases, delaying releases, and blocking the development of new features.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">So, managing technical debt becomes especially important in a project <a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/considering-building-rich-text-editor/\" target=\"_blank\" rel=\"noopener\">as complicated as a rich text editor.</a> There are a few ways you could approach it, such as trying to pay it down each sprint. However, that could affect your <a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/developer-velocity-effects/\" target=\"_blank\" rel=\"noopener\">developer velocity</a> and clash with project prioritization.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Instead, the best plan is a proactive plan. And that requires an understanding of why rich text editors are so <a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/reduce-technical-debt/\" target=\"_blank\" rel=\"noopener\">prone to technical debt</a>.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid\" data-stk-css=\"stkbJwzk\" data-anim-m=\"false\" data-ce-tag=\"grid\">\n<div class=\"stk-theme_44178__pad_round_1 stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_1 stk-theme_44178__mb_0\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">TABLE OF&nbsp;CONTENTS</strong></p>\n<hr class=\"stk-theme_44178__separator_basic_divider stk-theme_44178__mb_05 stk-reset\" />\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"#stk-1\">Why rich text editors accrue technical debt</a></p>\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"#stk-2\">Deep RTE domain experience minimizes technical debt</a></p>\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"#stk-3\">Programming principles affect code quality and technical debt accrual</a></p>\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 stk-reset\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"#stk-4\">Choosing the right RTE minimizes technical debt accrual</a></p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h2 id=\"stk-1\" class=\"stk-theme_44178__style_large_header stk-reset\" data-ce-tag=\"paragraph\">Why rich text editors accrue technical debt</h2>\n<p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Three key factors make rich text editors especially problematic when it comes to technical debt:</p>\n<ul class=\"stk-reset\" data-ce-tag=\"list\">\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\"><strong class=\"stk-reset\">Rich text editors usually have big, complex codebases</strong> &ndash; especially if you want a full-featured editor.</li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\"><strong class=\"stk-reset\">Rich text editors are at the mercy of an ever-changing environment</strong> &ndash; that you often don&rsquo;t control.</li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\"><strong class=\"stk-reset\">Developing rich text editors requires extensive domain knowledge that rarely overlaps with other kinds of application</strong> &ndash; without which, it can be difficult to find the right solution to many development problems.</li>\n</ul>\n<p class=\"stk-theme_44178__mb_15 stk-reset\" data-ce-tag=\"paragraph\">Understanding these three factors is crucial to understanding how tech debt accrues in a rich text editor, and how proactively managing technical debt can make or break your development schedule.</p>\n<h3 class=\"stk-theme_44178__style_medium_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Where does RTE technical debt accrue?</h3>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Rich text editors tend to be multi-layered applications, with an editing model wrapped in a configuration layer to make a core engine, on top of which other features can be built. This complexity often leads to rather large codebases &ndash; which means plenty of places for technical debt to appear (and hide).</p>\n</div>\n<div class=\"valign-middle stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stkGGcBl\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-slideInRight\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-stk-css=\"stkhp4ek\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stk3UC8i\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_4\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">read MORE</strong></p>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkWg-5c\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\"><a href=\"https://www.tiny.cloud/blog/rte-code-half-life/\" target=\"_blank\" rel=\"noopener\">Insights on the complexities of RTEs</a></p>\n</div>\n</div>\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__mb_05\" data-stk-css=\"stkACyIQ\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://www.tiny.cloud/buy-vs-build-whitepaper/\" target=\"_blank\" rel=\"noopener\">Buy vs Build: The Great Debate White Paper</a></p>\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-theme_44178__mb_05 stk-reset\" data-stk-css=\"stk2TBxt\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://www.tiny.cloud/technical-debt-whitepaper/\" target=\"_blank\" rel=\"noopener\">Opportunity Cost of Technical Debt White Paper</a></p>\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset\" data-stk-css=\"stk3hxGc\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/cost-of-building-rich-text-editor/\" target=\"_blank\" rel=\"noopener\">Tiny puts a price tag on building your own core rich text editor</a></p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Multiple editing models are used in rich text editors</h4>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">For example, from the outset &ndash; on that very first layer of a rich text editor &ndash; you have a rather important decision to make.</p>\n<p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">There isn&rsquo;t just one editing model. Do you choose:</p>\n<ul class=\"stk-reset\" data-ce-tag=\"list\">\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">The browser's <a class=\"stk-reset\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/contenteditable\" target=\"_blank\" rel=\"noopener\">ContentEditable API</a></li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Or a <a class=\"stk-reset\" href=\"https://github.com/ianstormtaylor/slate\" target=\"_blank\" rel=\"noopener\">model-based library like Slate</a></li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Or develop your own library.</li>\n</ul>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Each model has inherent strengths and weaknesses, but crucially, often what&rsquo;s not factored in up front, is that your choice directly affects the features your editor is able to support.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">For example, TinyMCE is a ContentEditable editor, but it switches to using Slate when in real-time collaboration (RTC) mode. This was done because RTC was easier to implement on a model-based editor.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Likewise, the whole editor could have been switched over to Slate. However, some features are easier to implement on a ContentEditable model, so instead Tiny develops and maintains the two models.</p>\n</div>\n<div class=\"valign-middle stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stkSI5rz\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-slideInRight\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-stk-css=\"stk3u4_N\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkQYqk7\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_4\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">read MORE</strong></p>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkTXCYQ\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\"><a href=\"https://docs.slatejs.org/v/v0.47/\" target=\"_blank\" rel=\"noopener\">ContentEditable vs Slate for RTC</a></p>\n</div>\n</div>\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset\" data-stk-css=\"stkzYalc\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/real-time-collaborative-editing-slate-js\" target=\"_blank\" rel=\"noopener\">Collaboration needs a clean Slate</a></p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_15 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Basic editor vs fully-featured editor impacts tech debt</h4>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Choosing a model and building a wrapper only gets you a very basic editor though. Next, you want to start adding features, like support for tables and advanced formatting.</p>\n<p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">However, with every feature you add to a rich text editor, other aspects of the product need to be kept in mind. These include, but aren&rsquo;t limited to:</p>\n<ul class=\"stk-reset\" data-ce-tag=\"list\">\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">UI</li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Security</li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Key handling</li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Undo management</li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Configurability</li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Content filtering, and</li>\n<li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Mobile support.</li>\n</ul>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">This matrix of considerations multiplies the risk of technical debt for every feature you add, and needs to be planned (not just when the feature is being developed) on an ongoing basis.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">The other problem with rich text editor codebases, is that some pieces of your code may live for a long time, so cruft and code rot can become commonplace, if it&rsquo;s not kept in check. Again, that's where your efforts to proactively manage technical debt comes into play.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"4\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h3 class=\"stk-theme_44178__style_medium_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Over time, rich text editors build up cruft</h3>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">&ldquo;Cruft&rdquo; is a term for code that was badly designed or unnecessarily complicated &ndash; often from a developer implementing a feature they don&rsquo;t fully understand. Similarly, &ldquo;code rot&rdquo; refers to code that has deteriorated over time &ndash; possibly becoming cruft in the process. And both are prolific sources of technical debt.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Unfortunately, this is where forces beyond your control start taking over.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">All software projects have dependencies &ndash; libraries or tools they rely on to function. Usually, you can control which dependencies you use and when they update. However, a rich text editor running in a web application is dependent on the whims of the browser and operating system (OS) of the user.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">This creates a matrix of environments, each carrying its own unique quirks and challenges. And you can&rsquo;t control that, but still have to account for it in your development work.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"valign-middle stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stk7HZ_3\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-slideInRight\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-stk-css=\"stk9P1F9\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkyZb81\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_4\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">LEARN MORE</strong></p>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkNRK1g\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\">What is cruft, code rot, and code half-life?</p>\n</div>\n</div>\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset\" data-stk-css=\"stky0VL7\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://www.tiny.cloud/technical-debt-whitepaper/\" target=\"_blank\" rel=\"noopener\">Find out how they affect rich text editor technical debt &rarr;</a></p>\n</div>\n</div>\n</div>\n</div>\n<table class=\"stk-theme_44178__style_small_text stk-table--zebra stk-theme_44178__var_44178_custom_color_4 stk-theme_44178__mb_05 stk-reset stk-table\" data-responsive-type=\"cards\" data-ce-tag=\"table\"><colgroup> <col class=\"stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"129\" /> <col class=\"stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"130\" /> <col class=\"stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"131\" /> <col class=\"stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"132\" /> </colgroup>\n<thead class=\"stk-reset\">\n<tr class=\"stk-reset stk-table-row\">\n<th class=\"stk-theme_44178__style_font_style-1628517328397 stk-theme_44178__color_44178_custom_color_3 align-left stk-reset stk-table-cell\" data-ce-tag=\"th\">BROWSER</th>\n<th class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 align-center stk-reset stk-table-cell\" data-ce-tag=\"th\">WINDOWS</th>\n<th class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 align-center stk-reset stk-table-cell\" data-ce-tag=\"th\">MAC</th>\n<th class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 align-center stk-reset stk-table-cell\" data-ce-tag=\"th\">GNU/LINUX</th>\n</tr>\n</thead>\n<tbody class=\"stk-reset\">\n<tr class=\"stk-reset stk-table-row\">\n<td class=\"stk-theme_44178__style_small_text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"BROWSER\"><strong class=\"stk-reset\">Chrome</strong></td>\n<td class=\"stk-theme_44178__style_font_style-1628517328397 align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"WINDOWS\">&nbsp;</td>\n<td class=\"stk-theme_44178__style_font_style-1628517328397 align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"MAC\">&nbsp;</td>\n<td class=\"stk-theme_44178__style_font_style-1628517328397 align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"GNU/LINUX\">&nbsp;</td>\n</tr>\n<tr class=\"stk-reset stk-table-row\">\n<td class=\"stk-theme_44178__style_small_text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"BROWSER\"><strong class=\"stk-reset\">Firefox</strong></td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"WINDOWS\">&nbsp;</td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"MAC\">&nbsp;</td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"GNU/LINUX\">&nbsp;</td>\n</tr>\n<tr class=\"stk-reset stk-table-row\">\n<td class=\"stk-theme_44178__style_small_text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"BROWSER\"><strong class=\"stk-reset\">Edge</strong></td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"WINDOWS\">&nbsp;</td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"MAC\">&nbsp;</td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"GNU/LINUX\">&nbsp;</td>\n</tr>\n<tr class=\"stk-reset stk-table-row\">\n<td class=\"stk-theme_44178__style_small_text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"BROWSER\"><strong class=\"stk-reset\">Safari</strong></td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"WINDOWS\">&nbsp;</td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"MAC\">&nbsp;</td>\n<td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"GNU/LINUX\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n<p class=\"stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\">As an example, TinyMCE 6.2 supports 8 combinations of browser and OS</p>\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Because of this, rich text editors can accumulate cruft and code rot &ndash; not just because of internal factors like code becoming outdated, but also because of external factors (like a browser deprecating an API). This technical debt can multiply if fixes for those external issues are rushed, or problems are bandaged over again, and again, and again&hellip;</p>\n<h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Managing technical debt in rich text editors</h4>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Regularly scheduling developer time to pay down technical debt might help you stay on top of it, but that depends on how much (and how fast) you're accruing technical debt and how much time you can afford to dedicate to remediation.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">So, how do you plan for and manage technical debt in a product as complex as a rich text editor? Or, even better, how can you prevent technical debt from accruing in the first place?</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">The answer is domain knowledge.</p>\n</div>\n</div>\n<div class=\"stk-grid stk-theme_44178__mb_2\" data-stk-css=\"stk7_--j\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-jackInTheBox\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\" data-ce-tag=\"grid\">\n<div class=\"stk-theme_44178__pad_ver_2 stk-grid-col stk-grid-col_last\" data-col-width=\"12\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"2\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628585803915 align-center stk-reset\" data-stk-css=\"stkENCR5\" data-ce-tag=\"paragraph\">Get more insights in our<br />Technical Debt White Paper</p>\n<a class=\"stk-theme_44178__stk-btn_1628586253530 stk-theme_44178__style_font_style-1628586133109 align-center stk-reset\" href=\"https://www.tiny.cloud/technical-debt-whitepaper\" target=\"_blank\" rel=\"noopener\" data-stk-button=\"1\" data-ce-tag=\"button\">DOWNLOAD THE WHITE PAPER</a></div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"2\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h2 id=\"stk-2\" class=\"stk-theme_44178__style_large_header stk-reset\" data-ce-tag=\"paragraph\">Deep RTE domain experience minimizes technical debt</h2>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">When it comes to managing technical debt in a rich text editor, the biggest danger comes from the things you don&rsquo;t know.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"4\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"12\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<table class=\"stk-table--bordered_hv stk-theme_44178__var_44178_custom_color_4 stk-reset stk-table\" data-responsive-type=\"cards\" data-ce-tag=\"table\"><colgroup> <col class=\"stk-reset stk-reset stk-reset stk-reset\" data-stk-css=\"stk31tk8\" data-stk-id=\"189\" /> <col class=\"stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"190\" /> <col class=\"stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"191\" /> </colgroup>\n<thead class=\"stk-reset\">\n<tr class=\"stk-reset stk-table-row\">\n<th class=\"ce-element--empty stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"th\">&nbsp;</th>\n<th class=\"stk-theme_44178__style_small_text align-center stk-reset stk-table-cell\" data-ce-tag=\"th\"><strong class=\"stk-reset\">KNOWNS</strong></th>\n<th class=\"stk-theme_44178__style_small_text align-center stk-reset stk-table-cell\" data-ce-tag=\"th\">UNKNOWNS</th>\n</tr>\n</thead>\n<tbody class=\"stk-reset\">\n<tr class=\"stk-reset stk-table-row\">\n<td class=\"stk-theme_44178__style_small_text valign-middle stk-reset stk-table-cell\" data-ce-tag=\"td\"><strong class=\"stk-reset\">KNOWNS</strong></td>\n<td class=\"valign-middle stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"KNOWNS\" data-stk-css=\"stkSRUjV\">Known knowns: things you are aware of and do know.</td>\n<td class=\"valign-middle stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"UNKNOWNS\" data-stk-css=\"stka-oav\">Known unknowns: things you are aware of but don&rsquo;t know.</td>\n</tr>\n<tr class=\"stk-reset stk-table-row\">\n<td class=\"stk-theme_44178__style_small_text stk-reset stk-table-cell\" data-ce-tag=\"td\"><strong class=\"stk-reset\">UNKNOWNS</strong></td>\n<td class=\"stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"KNOWNS\" data-stk-css=\"stk6MqwR\">Unknown knowns: things you have forgotten you know.</td>\n<td class=\"stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"UNKNOWNS\" data-stk-css=\"stkt-nNv\">Unknown unknowns: things you don&rsquo;t know and aren&rsquo;t aware of.</td>\n</tr>\n</tbody>\n</table>\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 stk-reset\" data-ce-tag=\"paragraph\">The four degrees of knowledge, <a class=\"stk-reset\" href=\"https://en.wikipedia.org/wiki/Johari_window\" target=\"_blank\" rel=\"noopener\">represented using the Johari Window technique</a>. The different colors represent the risk of technical debt in a rich text editor, based on the level of understanding of domain knowledge.</p>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_15 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Developing a rich text editor requires very specific knowledge, such as DOM walking, selection models, keyboard key codes, and input events. There are very few companies in the world that develop rich text editors, and therefore the domain isn&rsquo;t widely known or documented. The learning curve is steep. And without the right knowledge, your risk of adding technical debt (intentional and unintentional) rises.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Why is that?</p>\n<h3 class=\"stk-theme_44178__mb_05 stk-theme_44178__style_medium_header stk-reset\" data-ce-tag=\"paragraph\">Informed choices help to limit technical debt</h3>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Very basically, technical debt is the cost of choosing a simpler solution over a more robust one. However, if you&rsquo;re unaware there&rsquo;s a choice to be made, you can needlessly take on technical debt.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Worse still, even if you&rsquo;re aware of all the factors but you don&rsquo;t really understand them, you can&rsquo;t make an informed decision about whether taking on technical debt is wise. You also can&rsquo;t manage technical debt you aren&rsquo;t aware of, and you can&rsquo;t easily prioritize technical debt you don&rsquo;t understand.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Extensive rich text editor domain knowledge, helps you manage technical debt in five ways:</p>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"7\" data-stk-css=\"stkW8fvU\" data-stk-css-m=\"stkX9yl4\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">By avoiding technical debt in the first place:</strong></p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Implementing features correctly the first time, choosing solutions that are less prone to technical debt, and engineering your rich text editor in future-proof ways.</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"7\" data-stk-css=\"stklAgCM\" data-stk-css-m=\"stkgm-x4\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Estimating and prioritizing technical debt:</strong></p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">This is especially relevant for complex debt that might require refactoring in your rich text editor and advanced features.</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"7\" data-stk-css=\"stkMUGgy\" data-stk-css-m=\"stkrS9FJ\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Managing the impact of existing technical debt on velocity</strong>:</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">This positively affects the quality of your rich text editor, by avoiding hacky workarounds and &ldquo;fixes&rdquo; that only make the problem worse.</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"7\" data-stk-css=\"stkeOJud\" data-stk-css-m=\"stkJ4AOT\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Identifying when existing technical debt will interfere:</strong></p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Whether that's on an upcoming project or feature, avoiding surprises, complications, and delays.</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"7\" data-stk-css=\"stkMFsr8\" data-stk-css-m=\"stkEL-km\" data-ce-tag=\"grid-col\">\n<p class=\"stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Remediating technical debt faster:</strong></p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">By having a better understanding of the potential solutions and how to implement them, you can manage technical debt more effectively.</p>\n</div>\n</div>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Let&rsquo;s explore a few more concrete examples.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"valign-middle stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid\" data-stk-css=\"stkHD_kz\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-fadeIn\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\">\n<div class=\"stk-theme_44178__pad_round_1 stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__color_44178_custom_color_3 stk-reset stk-theme_44178__style_font_style-1628517714937 stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">Intentional vs unintentional technical debt</strong></p>\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Paraphrasing <a class=\"stk-reset\" href=\"https://www.splunk.com/en_us/data-insider/what-is-tech-debt.html#different\" target=\"_blank\" rel=\"noopener\">Splunk, <strong class=\"stk-reset\">intentional technical debt</strong> is</a> created deliberately so a product can be released quickly. Taking on the technical debt is a known and accepted risk.</p>\n<p class=\"stk-theme_44178__style_small_text stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\">However, <strong class=\"stk-reset\">unintentional technical debt</strong> comes from sloppiness, unexpected complexity, or a lack of expertise or knowledge.</p>\n<p class=\"stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\">This creates unknown risks which can&rsquo;t be tracked or managed.</p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-layout__overhangs_both stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stkY7wje\" data-ce-tag=\"grid\">\n<div class=\"stk-theme_44178__pad_ver_2 stk-grid-col stk-grid-col_last\" data-col-width=\"12\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_15 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">1.&nbsp;Code architecture in rich text editors</strong></h4>\n<p class=\"stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__style_font_style-1628517294418 stk-reset\" data-ce-tag=\"paragraph\">Good architecture can save you from accumulating technical debt, but good architecture requires good domain knowledge.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://github.com/tinymce/tinymce/tree/develop/modules/tinymce/src/core/main/ts\" target=\"_blank\" rel=\"noopener\">TinyMCE&rsquo;s core engine</a> is tens of thousands of lines of code. It isn&rsquo;t just a wrapper around the ContentEditable API &ndash; it also contains code that abstracts out many of the aspects of rich text editing. That includes everything from basic formatting like bold, to DOM walking and selection handling.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">These abstractions mean that TinyMCE&rsquo;s developers don&rsquo;t need to think about them every time they&rsquo;re working on a feature. They just call a TinyMCE API, and the core engine handles it for them. When an abstracted concept needs to be improved or fixed, it also means there&rsquo;s only one place in the code to update &ndash; not several spread across every feature that uses that concept.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">However, architecture can also hinder more than it helps, if done incorrectly. This is where domain knowledge becomes important, so you can find the right balance between ad-hoc and over-architected.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"4\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_15 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">2. Intentional and unintentional technical debt</h4>\n<p class=\"stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__style_font_style-1628517294418 stk-reset\" data-ce-tag=\"paragraph\">Ideally, you would only accrue technical debt you have chosen to take on. Sometimes, though, technical debt creeps in unintentionally. Often, that&rsquo;s due to a lack of knowledge.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Developers can't always know and account for everything. Maybe the developers didn't have enough time to brainstorm, or they didn't have the knowledge required to find the optimal solution. Or maybe the implemented solution was a good solution at the time, but it wasn't future-proofed against a problem that popped up later.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">This is where cruft and code rot can start to pile up, creating an ever-growing backlog of technical debt you might not even realize exists. The risk of stumbling on severe technical debt at an inopportune time also increases &ndash; potentially delaying or blocking future features after you start development.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"4\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">3. Continual refactoring in rich text editors</h4>\n<p class=\"stk-theme_44178__style_font_style-1628517294418 stk-theme_44178__color_44178_custom_color_3 stk-reset\" data-ce-tag=\"paragraph\">Without the domain knowledge required to see the bigger picture, it can be all too easy to continually patch the same piece of code over and over, potentially adding technical debt each time.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">If you find yourself patching and improving and replacing the same piece of code again and again, it&rsquo;s a good idea to stop and ask yourself &ldquo;Why?&rdquo;</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Sometimes it&rsquo;s necessary, due to that feature requiring constant updates. However, there&rsquo;s also a chance it&rsquo;s a sign of a deeper problem &ndash; such as the code having been based on incorrect or incomplete assumptions, due to a lack of understanding.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">The danger of this kind of code is that it&rsquo;s costing time and effort each time it's updated.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Constant changes also increase the chance of cruft and code rot due to something being forgotten or missed. For example, an API that isn&rsquo;t used anymore, but hasn&rsquo;t been cleaned up yet. Such code sits around in your codebase, unnecessarily bloating and complicating it, and making all future work in that area of the codebase more complicated than it needs to be.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Avoiding, finding, and remediating these kinds of situations are all easier with the right domain knowledge.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Planning for and managing technical debt in rich text editors isn&rsquo;t only about features and day-to-day development work. There are other things done at a higher level that can help too.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"4\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h2 id=\"stk-3\" class=\"stk-theme_44178__style_large_header stk-reset\" data-ce-tag=\"paragraph\">Programming principles affect code quality and technical debt accrual</h2>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Quality code is the antithesis of technical debt.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">In addition to domain knowledge, sound software engineering knowledge (particularly in <a class=\"stk-reset\" href=\"https://en.wikipedia.org/wiki/Coding_best_practices\" target=\"_blank\" rel=\"noopener\" data-gtm-vis-has-fired-10171822_255=\"1\">programming principles and their applications</a>) is also essential to developing a quality rich text editor.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Although to be clear, choosing the right programming principles isn&rsquo;t completely divorced from domain knowledge. There are many principles to choose from, such as KISS, DRY, separation of concerns, and incremental development. And no one principle suits every software project.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Choosing the wrong principles may, in fact, have a detrimental effect on your project. It may even increase your technical debt accrual, by promoting ideas that negatively affect your decisions around technical debt.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Over the years, TinyMCE has learned by trial and error which principles are useful for rich text editing, particularly when it comes to reducing technical debt. Some of these principles tie back to our use of functional programming, but most can also be used standalone.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Examples of some programming principles Tiny uses are:</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"valign-middle stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stk29rRT\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-slideInRight\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-stk-css=\"stk4wDLa\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkPJW4T\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_4\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">Recommended resources</strong></p>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkcaU-0\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">&lsquo;<a class=\"stk-reset\" href=\"https://www.amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164\" target=\"_blank\" rel=\"noopener\">Clean Architecture&rsquo; by Robert C. Martin</a></p>\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">&lsquo;<a class=\"stk-reset\" href=\"https://www.callicoder.com/software-development-principles/\" target=\"_blank\" rel=\"noopener\">8 Software Principles to Live By&rsquo; by Rajeev Singh</a></p>\n<p class=\"stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\">&lsquo;<a class=\"stk-reset\" href=\"https://lwn.net/Articles/562333/\" target=\"_blank\" rel=\"noopener\">The 7 Deadly Sins of Software Deployment&rsquo; by Josh Berkus</a></p>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">&nbsp;</div>\n</div>\n<div class=\"stk-layout__overhangs_both stk-grid\" data-stk-css=\"stk30pRI\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last stk-theme_44178__pad_ver_3\" data-col-width=\"12\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"valign-middle stk-grid-col stk-grid-col_last stk-theme_44178__pad_round_1-m\" data-col-width=\"6\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_0 stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n</div>\n</div>","htmlAst":{"type":"root","children":[{"type":"element","tagName":"blockquote","properties":{},"children":[{"type":"text","value":"From January 2023, TinyMCE no longer offers Real-Time Collaboration (RTC) for new customers. For Existing customers, we'll be in contact to discuss options. Please reach out to your Account Manager if you are a customer using RTC, and you have any questions about the plugin."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid","stk-theme_44178__mb_15"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col"],"dataColWidth":"9","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628517294418","stk-reset","stk-theme_44178__color_44178_custom_color_1"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"One of the biggest dangers when starting a new development project, is not understanding the trade-offs you may need to make during development, and the technical debt those decisions could incur. Developing a rich text editor, in particular, is a minefield of potential technical debt. So, before you start, you need a plan."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid","stk-grid__layout_columns"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last","valign-middle"],"dataColWidth":"2","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset","stk-theme_44178__style_font_style-1628517714937","stk-theme_44178__mb_0","stk-theme_44178__color_44178_custom_color_1"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Millie Macdonald"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset","stk-theme_44178__style_small_text","stk-theme_44178__color_44178_custom_color_3"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Product Manager at Halo Connect"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"hr","properties":{"className":["stk-theme_44178__separator_basic_divider","stk-theme_44178__mb_2","stk-reset"]},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_2","stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"After all, technical debt isn’t something you can just leave until later. Technical debt lurks in your codebase, accruing interest in the form of lost developer time and complicated workarounds. It can also snowball. A small problem, that carried a small cost, could become a much larger problem if left too long."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"You need to be actively managing technical debt. Every. Day."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Typically, technical debt has a habit of rearing its head at the most unfortunate times – complicating codebases, delaying releases, and blocking the development of new features."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"So, managing technical debt becomes especially important in a project "},{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://www.tiny.cloud/blog/considering-building-rich-text-editor/","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"as complicated as a rich text editor."}]},{"type":"text","value":" There are a few ways you could approach it, such as trying to pay it down each sprint. However, that could affect your "},{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://www.tiny.cloud/blog/developer-velocity-effects/","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"developer velocity"}]},{"type":"text","value":" and clash with project prioritization."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Instead, the best plan is a proactive plan. And that requires an understanding of why rich text editors are so "},{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://www.tiny.cloud/blog/reduce-technical-debt/","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"prone to technical debt"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"1","dataStkCss":"","dataStkCssM":"","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataStkCss":"stkbJwzk","dataAnimM":"false","dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__pad_round_1","stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628517714937","stk-reset","stk-theme_44178__color_44178_custom_color_1","stk-theme_44178__mb_0"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"TABLE OF CONTENTS"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"hr","properties":{"className":["stk-theme_44178__separator_basic_divider","stk-theme_44178__mb_05","stk-reset"]},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-theme_44178__color_44178_custom_color_3","stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"#stk-1"},"children":[{"type":"text","value":"Why rich text editors accrue technical debt"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-theme_44178__color_44178_custom_color_3","stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"#stk-2"},"children":[{"type":"text","value":"Deep RTE domain experience minimizes technical debt"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-theme_44178__color_44178_custom_color_3","stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"#stk-3"},"children":[{"type":"text","value":"Programming principles affect code quality and technical debt accrual"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-theme_44178__color_44178_custom_color_3","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"#stk-4"},"children":[{"type":"text","value":"Choosing the right RTE minimizes technical debt accrual"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"stk-1","className":["stk-theme_44178__style_large_header","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Why rich text editors accrue technical debt"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Three key factors make rich text editors especially problematic when it comes to technical debt:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{"className":["stk-reset"],"dataCeTag":"list"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{"className":["stk-reset","stk-list-item"],"dataCeTag":"list-item"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"Rich text editors usually have big, complex codebases"}]},{"type":"text","value":" – especially if you want a full-featured editor."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{"className":["stk-reset","stk-list-item"],"dataCeTag":"list-item"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"Rich text editors are at the mercy of an ever-changing environment"}]},{"type":"text","value":" – that you often don’t control."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{"className":["stk-reset","stk-list-item"],"dataCeTag":"list-item"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"Developing rich text editors requires extensive domain knowledge that rarely overlaps with other kinds of application"}]},{"type":"text","value":" – without which, it can be difficult to find the right solution to many development problems."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__mb_15","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Understanding these three factors is crucial to understanding how tech debt accrues in a rich text editor, and how proactively managing technical debt can make or break your development schedule."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"className":["stk-theme_44178__style_medium_header","stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Where does RTE technical debt accrue?"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Rich text editors tend to be multi-layered applications, with an editing model wrapped in a configuration layer to make a core engine, on top of which other features can be built. This complexity often leads to rather large codebases – which means plenty of places for technical debt to appear (and hide)."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["valign-middle","stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_2","stk-grid"],"dataStkCss":"stkGGcBl","dataCeTag":"grid","dataAnimM":"false","dataAnim":"true","dataAnimName":"preset-slideInRight","dataAnimTrigger":"scroll","dataAnimDuration":"1","dataAnimDelay":"0","dataAnimScrollStart":"10","dataAnimScrollFinish":"90"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_05","stk-grid"],"dataStkCss":"stkhp4ek","dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataStkCss":"stk3UC8i","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628517714937","stk-reset","stk-theme_44178__color_44178_custom_color_4"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"read MORE"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_05","stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataStkCss":"stkWg-5c","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"a","properties":{"href":"https://www.tiny.cloud/blog/rte-code-half-life/","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"Insights on the complexities of RTEs"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628517714937","stk-reset","stk-theme_44178__mb_05"],"dataStkCss":"stkACyIQ","dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://www.tiny.cloud/buy-vs-build-whitepaper/","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"Buy vs Build: The Great Debate White Paper"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628517714937","stk-theme_44178__mb_05","stk-reset"],"dataStkCss":"stk2TBxt","dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://www.tiny.cloud/technical-debt-whitepaper/","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"Opportunity Cost of Technical Debt White Paper"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628517714937","stk-reset"],"dataStkCss":"stk3hxGc","dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://www.tiny.cloud/blog/cost-of-building-rich-text-editor/","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"Tiny puts a price tag on building your own core rich text editor"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"className":["stk-theme_44178__style_small_header","stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Multiple editing models are used in rich text editors"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"For example, from the outset – on that very first layer of a rich text editor – you have a rather important decision to make."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"There isn’t just one editing model. Do you choose:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{"className":["stk-reset"],"dataCeTag":"list"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{"className":["stk-reset","stk-list-item"],"dataCeTag":"list-item"},"children":[{"type":"text","value":"The browser's "},{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/contenteditable","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"ContentEditable API"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{"className":["stk-reset","stk-list-item"],"dataCeTag":"list-item"},"children":[{"type":"text","value":"Or a "},{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://github.com/ianstormtaylor/slate","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"model-based library like Slate"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{"className":["stk-reset","stk-list-item"],"dataCeTag":"list-item"},"children":[{"type":"text","value":"Or develop your own library."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Each model has inherent strengths and weaknesses, but crucially, often what’s not factored in up front, is that your choice directly affects the features your editor is able to support."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"For example, TinyMCE is a ContentEditable editor, but it switches to using Slate when in real-time collaboration (RTC) mode. This was done because RTC was easier to implement on a model-based editor."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Likewise, the whole editor could have been switched over to Slate. However, some features are easier to implement on a ContentEditable model, so instead Tiny develops and maintains the two models."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["valign-middle","stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_2","stk-grid"],"dataStkCss":"stkSI5rz","dataCeTag":"grid","dataAnimM":"false","dataAnim":"true","dataAnimName":"preset-slideInRight","dataAnimTrigger":"scroll","dataAnimDuration":"1","dataAnimDelay":"0","dataAnimScrollStart":"10","dataAnimScrollFinish":"90"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_05","stk-grid"],"dataStkCss":"stk3u4_N","dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataStkCss":"stkQYqk7","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628517714937","stk-reset","stk-theme_44178__color_44178_custom_color_4"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"read MORE"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_05","stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataStkCss":"stkTXCYQ","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"a","properties":{"href":"https://docs.slatejs.org/v/v0.47/","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"ContentEditable vs Slate for RTC"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628517714937","stk-reset"],"dataStkCss":"stkzYalc","dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://www.tiny.cloud/blog/real-time-collaborative-editing-slate-js","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"Collaboration needs a clean Slate"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_15","stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"className":["stk-theme_44178__style_small_header","stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Basic editor vs fully-featured editor impacts tech debt"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Choosing a model and building a wrapper only gets you a very basic editor though. Next, you want to start adding features, like support for tables and advanced formatting."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"However, with every feature you add to a rich text editor, other aspects of the product need to be kept in mind. These include, but aren’t limited to:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{"className":["stk-reset"],"dataCeTag":"list"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{"className":["stk-reset","stk-list-item"],"dataCeTag":"list-item"},"children":[{"type":"text","value":"UI"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{"className":["stk-reset","stk-list-item"],"dataCeTag":"list-item"},"children":[{"type":"text","value":"Security"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{"className":["stk-reset","stk-list-item"],"dataCeTag":"list-item"},"children":[{"type":"text","value":"Key handling"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{"className":["stk-reset","stk-list-item"],"dataCeTag":"list-item"},"children":[{"type":"text","value":"Undo management"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{"className":["stk-reset","stk-list-item"],"dataCeTag":"list-item"},"children":[{"type":"text","value":"Configurability"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{"className":["stk-reset","stk-list-item"],"dataCeTag":"list-item"},"children":[{"type":"text","value":"Content filtering, and"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{"className":["stk-reset","stk-list-item"],"dataCeTag":"list-item"},"children":[{"type":"text","value":"Mobile support."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"This matrix of considerations multiplies the risk of technical debt for every feature you add, and needs to be planned (not just when the feature is being developed) on an ongoing basis."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"The other problem with rich text editor codebases, is that some pieces of your code may live for a long time, so cruft and code rot can become commonplace, if it’s not kept in check. Again, that's where your efforts to proactively manage technical debt comes into play."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"4","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"className":["stk-theme_44178__style_medium_header","stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Over time, rich text editors build up cruft"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"“Cruft” is a term for code that was badly designed or unnecessarily complicated – often from a developer implementing a feature they don’t fully understand. Similarly, “code rot” refers to code that has deteriorated over time – possibly becoming cruft in the process. And both are prolific sources of technical debt."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Unfortunately, this is where forces beyond your control start taking over."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"All software projects have dependencies – libraries or tools they rely on to function. Usually, you can control which dependencies you use and when they update. However, a rich text editor running in a web application is dependent on the whims of the browser and operating system (OS) of the user."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"This creates a matrix of environments, each carrying its own unique quirks and challenges. And you can’t control that, but still have to account for it in your development work."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"1","dataStkCss":"","dataStkCssM":"","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["valign-middle","stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_2","stk-grid"],"dataStkCss":"stk7HZ_3","dataCeTag":"grid","dataAnimM":"false","dataAnim":"true","dataAnimName":"preset-slideInRight","dataAnimTrigger":"scroll","dataAnimDuration":"1","dataAnimDelay":"0","dataAnimScrollStart":"10","dataAnimScrollFinish":"90"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_05","stk-grid"],"dataStkCss":"stk9P1F9","dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataStkCss":"stkyZb81","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628517714937","stk-reset","stk-theme_44178__color_44178_custom_color_4"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"LEARN MORE"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_05","stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataStkCss":"stkNRK1g","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"What is cruft, code rot, and code half-life?"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628517714937","stk-reset"],"dataStkCss":"stky0VL7","dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://www.tiny.cloud/technical-debt-whitepaper/","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"Find out how they affect rich text editor technical debt →"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"table","properties":{"className":["stk-theme_44178__style_small_text","stk-table--zebra","stk-theme_44178__var_44178_custom_color_4","stk-theme_44178__mb_05","stk-reset","stk-table"],"dataResponsiveType":"cards","dataCeTag":"table"},"children":[{"type":"element","tagName":"colgroup","properties":{},"children":[{"type":"text","value":" "},{"type":"element","tagName":"col","properties":{"className":["stk-reset","stk-reset","stk-reset","stk-reset"],"dataStkId":"129"},"children":[]},{"type":"text","value":" "},{"type":"element","tagName":"col","properties":{"className":["stk-reset","stk-reset","stk-reset","stk-reset"],"dataStkId":"130"},"children":[]},{"type":"text","value":" "},{"type":"element","tagName":"col","properties":{"className":["stk-reset","stk-reset","stk-reset","stk-reset"],"dataStkId":"131"},"children":[]},{"type":"text","value":" "},{"type":"element","tagName":"col","properties":{"className":["stk-reset","stk-reset","stk-reset","stk-reset"],"dataStkId":"132"},"children":[]},{"type":"text","value":" "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"thead","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"tr","properties":{"className":["stk-reset","stk-table-row"]},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"th","properties":{"className":["stk-theme_44178__style_font_style-1628517328397","stk-theme_44178__color_44178_custom_color_3","align-left","stk-reset","stk-table-cell"],"dataCeTag":"th"},"children":[{"type":"text","value":"BROWSER"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"th","properties":{"className":["stk-theme_44178__style_small_text","stk-theme_44178__color_44178_custom_color_3","align-center","stk-reset","stk-table-cell"],"dataCeTag":"th"},"children":[{"type":"text","value":"WINDOWS"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"th","properties":{"className":["stk-theme_44178__style_small_text","stk-theme_44178__color_44178_custom_color_3","align-center","stk-reset","stk-table-cell"],"dataCeTag":"th"},"children":[{"type":"text","value":"MAC"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"th","properties":{"className":["stk-theme_44178__style_small_text","stk-theme_44178__color_44178_custom_color_3","align-center","stk-reset","stk-table-cell"],"dataCeTag":"th"},"children":[{"type":"text","value":"GNU/LINUX"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"tbody","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"tr","properties":{"className":["stk-reset","stk-table-row"]},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_small_text","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"BROWSER"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"Chrome"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_font_style-1628517328397","align-center","stk-element_no-text","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"WINDOWS"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_font_style-1628517328397","align-center","stk-element_no-text","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"MAC"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_font_style-1628517328397","align-center","stk-element_no-text","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"GNU/LINUX"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"tr","properties":{"className":["stk-reset","stk-table-row"]},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_small_text","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"BROWSER"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"Firefox"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_small_text","align-center","stk-element_no-text","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"WINDOWS"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_small_text","align-center","stk-element_no-text","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"MAC"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_small_text","align-center","stk-element_no-text","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"GNU/LINUX"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"tr","properties":{"className":["stk-reset","stk-table-row"]},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_small_text","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"BROWSER"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"Edge"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_small_text","align-center","stk-element_no-text","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"WINDOWS"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_small_text","align-center","stk-element_no-text","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"MAC"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_small_text","align-center","stk-element_no-text","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"GNU/LINUX"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"tr","properties":{"className":["stk-reset","stk-table-row"]},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_small_text","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"BROWSER"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"Safari"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_small_text","align-center","stk-element_no-text","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"WINDOWS"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_small_text","align-center","stk-element_no-text","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"MAC"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_small_text","align-center","stk-element_no-text","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"GNU/LINUX"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__color_44178_custom_color_3","stk-theme_44178__style_small_text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"As an example, TinyMCE 6.2 supports 8 combinations of browser and OS"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_2","stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Because of this, rich text editors can accumulate cruft and code rot – not just because of internal factors like code becoming outdated, but also because of external factors (like a browser deprecating an API). This technical debt can multiply if fixes for those external issues are rushed, or problems are bandaged over again, and again, and again…"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"className":["stk-theme_44178__style_small_header","stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Managing technical debt in rich text editors"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Regularly scheduling developer time to pay down technical debt might help you stay on top of it, but that depends on how much (and how fast) you're accruing technical debt and how much time you can afford to dedicate to remediation."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"So, how do you plan for and manage technical debt in a product as complex as a rich text editor? Or, even better, how can you prevent technical debt from accruing in the first place?"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"The answer is domain knowledge."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid","stk-theme_44178__mb_2"],"dataStkCss":"stk7_--j","dataAnimM":"false","dataAnim":"true","dataAnimName":"preset-jackInTheBox","dataAnimTrigger":"scroll","dataAnimDuration":"1","dataAnimDelay":"0","dataAnimScrollStart":"10","dataAnimScrollFinish":"90","dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__pad_ver_2","stk-grid-col","stk-grid-col_last"],"dataColWidth":"12","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"2","dataStkCss":"","dataStkCssM":"","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628585803915","align-center","stk-reset"],"dataStkCss":"stkENCR5","dataCeTag":"paragraph"},"children":[{"type":"text","value":"Get more insights in our"},{"type":"element","tagName":"br","properties":{},"children":[]},{"type":"text","value":"Technical Debt White Paper"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"a","properties":{"className":["stk-theme_44178__stk-btn_1628586253530","stk-theme_44178__style_font_style-1628586133109","align-center","stk-reset"],"href":"https://www.tiny.cloud/technical-debt-whitepaper","target":"_blank","rel":["noopener"],"dataStkButton":"1","dataCeTag":"button"},"children":[{"type":"text","value":"DOWNLOAD THE WHITE PAPER"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"2","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"stk-2","className":["stk-theme_44178__style_large_header","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Deep RTE domain experience minimizes technical debt"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"When it comes to managing technical debt in a rich text editor, the biggest danger comes from the things you don’t know."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"4","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"12","dataStkCss":"","dataStkCssM":"","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"table","properties":{"className":["stk-table--bordered_hv","stk-theme_44178__var_44178_custom_color_4","stk-reset","stk-table"],"dataResponsiveType":"cards","dataCeTag":"table"},"children":[{"type":"element","tagName":"colgroup","properties":{},"children":[{"type":"text","value":" "},{"type":"element","tagName":"col","properties":{"className":["stk-reset","stk-reset","stk-reset","stk-reset"],"dataStkCss":"stk31tk8","dataStkId":"189"},"children":[]},{"type":"text","value":" "},{"type":"element","tagName":"col","properties":{"className":["stk-reset","stk-reset","stk-reset","stk-reset"],"dataStkId":"190"},"children":[]},{"type":"text","value":" "},{"type":"element","tagName":"col","properties":{"className":["stk-reset","stk-reset","stk-reset","stk-reset"],"dataStkId":"191"},"children":[]},{"type":"text","value":" "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"thead","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"tr","properties":{"className":["stk-reset","stk-table-row"]},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"th","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset","stk-table-cell"],"dataCeTag":"th"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"th","properties":{"className":["stk-theme_44178__style_small_text","align-center","stk-reset","stk-table-cell"],"dataCeTag":"th"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"KNOWNS"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"th","properties":{"className":["stk-theme_44178__style_small_text","align-center","stk-reset","stk-table-cell"],"dataCeTag":"th"},"children":[{"type":"text","value":"UNKNOWNS"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"tbody","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"tr","properties":{"className":["stk-reset","stk-table-row"]},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_small_text","valign-middle","stk-reset","stk-table-cell"],"dataCeTag":"td"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"KNOWNS"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["valign-middle","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"KNOWNS","dataStkCss":"stkSRUjV"},"children":[{"type":"text","value":"Known knowns: things you are aware of and do know."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["valign-middle","stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"UNKNOWNS","dataStkCss":"stka-oav"},"children":[{"type":"text","value":"Known unknowns: things you are aware of but don’t know."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"tr","properties":{"className":["stk-reset","stk-table-row"]},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-theme_44178__style_small_text","stk-reset","stk-table-cell"],"dataCeTag":"td"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"UNKNOWNS"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"KNOWNS","dataStkCss":"stk6MqwR"},"children":[{"type":"text","value":"Unknown knowns: things you have forgotten you know."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{"className":["stk-reset","stk-table-cell"],"dataCeTag":"td","dataCellHeader":"UNKNOWNS","dataStkCss":"stkt-nNv"},"children":[{"type":"text","value":"Unknown unknowns: things you don’t know and aren’t aware of."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-theme_44178__color_44178_custom_color_3","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"The four degrees of knowledge, "},{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://en.wikipedia.org/wiki/Johari_window","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"represented using the Johari Window technique"}]},{"type":"text","value":". The different colors represent the risk of technical debt in a rich text editor, based on the level of understanding of domain knowledge."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_15","stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Developing a rich text editor requires very specific knowledge, such as DOM walking, selection models, keyboard key codes, and input events. There are very few companies in the world that develop rich text editors, and therefore the domain isn’t widely known or documented. The learning curve is steep. And without the right knowledge, your risk of adding technical debt (intentional and unintentional) rises."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Why is that?"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"className":["stk-theme_44178__mb_05","stk-theme_44178__style_medium_header","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Informed choices help to limit technical debt"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Very basically, technical debt is the cost of choosing a simpler solution over a more robust one. However, if you’re unaware there’s a choice to be made, you can needlessly take on technical debt."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Worse still, even if you’re aware of all the factors but you don’t really understand them, you can’t make an informed decision about whether taking on technical debt is wise. You also can’t manage technical debt you aren’t aware of, and you can’t easily prioritize technical debt you don’t understand."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Extensive rich text editor domain knowledge, helps you manage technical debt in five ways:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col"],"dataColWidth":"1","dataStkCss":"","dataStkCssM":"","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"7","dataStkCss":"stkW8fvU","dataStkCssM":"stkX9yl4","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset","stk-theme_44178__mb_05"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"],"dataGtmVisHasFired-10171822_255":"1"},"children":[{"type":"text","value":"By avoiding technical debt in the first place:"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Implementing features correctly the first time, choosing solutions that are less prone to technical debt, and engineering your rich text editor in future-proof ways."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col"],"dataColWidth":"1","dataStkCss":"","dataStkCssM":"","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"7","dataStkCss":"stklAgCM","dataStkCssM":"stkgm-x4","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset","stk-theme_44178__mb_05"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"],"dataGtmVisHasFired-10171822_255":"1"},"children":[{"type":"text","value":"Estimating and prioritizing technical debt:"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"This is especially relevant for complex debt that might require refactoring in your rich text editor and advanced features."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col"],"dataColWidth":"1","dataStkCss":"","dataStkCssM":"","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"7","dataStkCss":"stkMUGgy","dataStkCssM":"stkrS9FJ","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset","stk-theme_44178__mb_05"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"],"dataGtmVisHasFired-10171822_255":"1"},"children":[{"type":"text","value":"Managing the impact of existing technical debt on velocity"}]},{"type":"text","value":":"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"This positively affects the quality of your rich text editor, by avoiding hacky workarounds and “fixes” that only make the problem worse."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col"],"dataColWidth":"1","dataStkCss":"","dataStkCssM":"","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"7","dataStkCss":"stkeOJud","dataStkCssM":"stkJ4AOT","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset","stk-theme_44178__mb_05"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"],"dataGtmVisHasFired-10171822_255":"1"},"children":[{"type":"text","value":"Identifying when existing technical debt will interfere:"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Whether that's on an upcoming project or feature, avoiding surprises, complications, and delays."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col"],"dataColWidth":"1","dataStkCss":"","dataStkCssM":"","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"7","dataStkCss":"stkMFsr8","dataStkCssM":"stkEL-km","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset","stk-theme_44178__mb_05"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"],"dataGtmVisHasFired-10171822_255":"1"},"children":[{"type":"text","value":"Remediating technical debt faster:"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"By having a better understanding of the potential solutions and how to implement them, you can manage technical debt more effectively."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Let’s explore a few more concrete examples."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"1","dataStkCss":"","dataStkCssM":"","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["valign-middle","stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataStkCss":"stkHD_kz","dataCeTag":"grid","dataAnimM":"false","dataAnim":"true","dataAnimName":"preset-fadeIn","dataAnimTrigger":"scroll","dataAnimDuration":"1","dataAnimDelay":"0","dataAnimScrollStart":"10","dataAnimScrollFinish":"90"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__pad_round_1","stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__color_44178_custom_color_3","stk-reset","stk-theme_44178__style_font_style-1628517714937","stk-theme_44178__mb_05"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"Intentional vs unintentional technical debt"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Paraphrasing "},{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://www.splunk.com/en_us/data-insider/what-is-tech-debt.html#different","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"Splunk, "},{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"intentional technical debt"}]},{"type":"text","value":" is"}]},{"type":"text","value":" created deliberately so a product can be released quickly. Taking on the technical debt is a known and accepted risk."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-reset","stk-theme_44178__mb_05"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"However, "},{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"unintentional technical debt"}]},{"type":"text","value":" comes from sloppiness, unexpected complexity, or a lack of expertise or knowledge."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"This creates unknown risks which can’t be tracked or managed."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-layout__overhangs_both","stk-theme_44178__mb_2","stk-grid"],"dataStkCss":"stkY7wje","dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__pad_ver_2","stk-grid-col","stk-grid-col_last"],"dataColWidth":"12","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_15","stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"className":["stk-theme_44178__style_small_header","stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"1. Code architecture in rich text editors"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__color_44178_custom_color_3","stk-theme_44178__style_font_style-1628517294418","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Good architecture can save you from accumulating technical debt, but good architecture requires good domain knowledge."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://github.com/tinymce/tinymce/tree/develop/modules/tinymce/src/core/main/ts","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"TinyMCE’s core engine"}]},{"type":"text","value":" is tens of thousands of lines of code. It isn’t just a wrapper around the ContentEditable API – it also contains code that abstracts out many of the aspects of rich text editing. That includes everything from basic formatting like bold, to DOM walking and selection handling."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"These abstractions mean that TinyMCE’s developers don’t need to think about them every time they’re working on a feature. They just call a TinyMCE API, and the core engine handles it for them. When an abstracted concept needs to be improved or fixed, it also means there’s only one place in the code to update – not several spread across every feature that uses that concept."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"However, architecture can also hinder more than it helps, if done incorrectly. This is where domain knowledge becomes important, so you can find the right balance between ad-hoc and over-architected."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"4","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_15","stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"className":["stk-theme_44178__style_small_header","stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"2. Intentional and unintentional technical debt"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__color_44178_custom_color_3","stk-theme_44178__style_font_style-1628517294418","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Ideally, you would only accrue technical debt you have chosen to take on. Sometimes, though, technical debt creeps in unintentionally. Often, that’s due to a lack of knowledge."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Developers can't always know and account for everything. Maybe the developers didn't have enough time to brainstorm, or they didn't have the knowledge required to find the optimal solution. Or maybe the implemented solution was a good solution at the time, but it wasn't future-proofed against a problem that popped up later."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"This is where cruft and code rot can start to pile up, creating an ever-growing backlog of technical debt you might not even realize exists. The risk of stumbling on severe technical debt at an inopportune time also increases – potentially delaying or blocking future features after you start development."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"4","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"className":["stk-theme_44178__style_small_header","stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"3. Continual refactoring in rich text editors"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628517294418","stk-theme_44178__color_44178_custom_color_3","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Without the domain knowledge required to see the bigger picture, it can be all too easy to continually patch the same piece of code over and over, potentially adding technical debt each time."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"If you find yourself patching and improving and replacing the same piece of code again and again, it’s a good idea to stop and ask yourself “Why?”"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Sometimes it’s necessary, due to that feature requiring constant updates. However, there’s also a chance it’s a sign of a deeper problem – such as the code having been based on incorrect or incomplete assumptions, due to a lack of understanding."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"The danger of this kind of code is that it’s costing time and effort each time it's updated."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Constant changes also increase the chance of cruft and code rot due to something being forgotten or missed. For example, an API that isn’t used anymore, but hasn’t been cleaned up yet. Such code sits around in your codebase, unnecessarily bloating and complicating it, and making all future work in that area of the codebase more complicated than it needs to be."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Avoiding, finding, and remediating these kinds of situations are all easier with the right domain knowledge."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Planning for and managing technical debt in rich text editors isn’t only about features and day-to-day development work. There are other things done at a higher level that can help too."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"4","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"stk-3","className":["stk-theme_44178__style_large_header","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Programming principles affect code quality and technical debt accrual"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Quality code is the antithesis of technical debt."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"In addition to domain knowledge, sound software engineering knowledge (particularly in "},{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://en.wikipedia.org/wiki/Coding_best_practices","target":"_blank","rel":["noopener"],"dataGtmVisHasFired-10171822_255":"1"},"children":[{"type":"text","value":"programming principles and their applications"}]},{"type":"text","value":") is also essential to developing a quality rich text editor."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Although to be clear, choosing the right programming principles isn’t completely divorced from domain knowledge. There are many principles to choose from, such as KISS, DRY, separation of concerns, and incremental development. And no one principle suits every software project."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Choosing the wrong principles may, in fact, have a detrimental effect on your project. It may even increase your technical debt accrual, by promoting ideas that negatively affect your decisions around technical debt."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Over the years, TinyMCE has learned by trial and error which principles are useful for rich text editing, particularly when it comes to reducing technical debt. Some of these principles tie back to our use of functional programming, but most can also be used standalone."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Examples of some programming principles Tiny uses are:"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"1","dataStkCss":"","dataStkCssM":"","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["valign-middle","stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_2","stk-grid"],"dataStkCss":"stk29rRT","dataCeTag":"grid","dataAnimM":"false","dataAnim":"true","dataAnimName":"preset-slideInRight","dataAnimTrigger":"scroll","dataAnimDuration":"1","dataAnimDelay":"0","dataAnimScrollStart":"10","dataAnimScrollFinish":"90"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_05","stk-grid"],"dataStkCss":"stk4wDLa","dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataStkCss":"stkPJW4T","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628517714937","stk-reset","stk-theme_44178__color_44178_custom_color_4"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"Recommended resources"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_05","stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataStkCss":"stkcaU-0","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"‘"},{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://www.amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"Clean Architecture’ by Robert C. Martin"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"‘"},{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://www.callicoder.com/software-development-principles/","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"8 Software Principles to Live By’ by Rajeev Singh"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"‘"},{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://lwn.net/Articles/562333/","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"The 7 Deadly Sins of Software Deployment’ by Josh Berkus"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_2","stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-layout__overhangs_both","stk-grid"],"dataStkCss":"stk30pRI","dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last","stk-theme_44178__pad_ver_3"],"dataColWidth":"12","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["valign-middle","stk-grid-col","stk-grid-col_last","stk-theme_44178__pad_round_1-m"],"dataColWidth":"6","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-theme_44178__color_44178_custom_color_0","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]}],"data":{"quirksMode":false}}}},"body2":{"body2":"<div class=\"stk-theme_44178__mb_2 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"7\" data-stk-css=\"stkxxRC3\" data-stk-css-m=\"stkYZd2Z\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Immutability:</strong></p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">The <a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/mutable-vs-immutable-javascript/\" target=\"_blank\" rel=\"noopener\" data-gtm-vis-has-fired-10171822_255=\"1\">principle of immutability</a> states that an object can not be modified after it&rsquo;s created. In practice, this means avoiding mutating values in your code. This can be particularly useful when dealing with user input, like in rich text editors, and when using JavaScript, as the language's tendency for mutability can be quite problematic.</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"7\" data-stk-css=\"stkiVJnA\" data-stk-css-m=\"stkhAo3O\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Modularity:</strong></p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Modularity, or modular programming, is the practice of separating code into independent building blocks, each with a specific purpose. Applications are then formed from many modules. <a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/modular-programming-principle/\" target=\"_blank\" rel=\"noopener\">Modularity is a great tool</a> for managing a complex codebase, like a rich text editor, especially if you start abstracting concepts.</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"7\" data-stk-css=\"stknsOV8\" data-stk-css-m=\"stkGkp1H\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Types:</strong></p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">One of the <a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/benefits-of-gradual-strong-typing-in-javascript/\" target=\"_blank\" rel=\"noopener\">easiest ways to add clarity to your codebase is through types</a>. The quick feedback of a type checker, and the ability to know at a glance exactly what types you&rsquo;re dealing with, can be great for avoiding technical debt. In a rich text editor, types can be essential for ensuring the layers of your application work together correctly.</p>\n</div>\n</div>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"valign-middle stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid\" data-stk-css=\"stkewPeN\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-fadeIn\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\">\n<div class=\"stk-theme_44178__pad_round_1 stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__color_44178_custom_color_3 stk-reset stk-theme_44178__style_font_style-1628517714937 stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">What is functional programming?</strong></p>\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Functional programming is a programming paradigm that aims to produce cleaner, clearer, more robust, and more maintainable code.</p>\n<p class=\"stk-theme_44178__style_small_text stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/category-theory-functional-programming/\" target=\"_blank\" rel=\"noopener\">Find out how Tiny uses Functional Programming &rarr;</a></p>\n</div>\n</div>\n</div>\n<h3 class=\"stk-theme_44178__style_medium_header stk-reset\" data-ce-tag=\"paragraph\">Trade-offs rule when managing technical debt</h3>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">It&rsquo;s also worth noting that some principles may be overkill, when you&rsquo;re just starting to develop a rich text editor. However, others might be painful to introduce later, and are better adopted right from the beginning.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Just like technical debt, understanding the rich text editor domain and the trade-offs involved allows you to plan long-term, thus ensuring you&rsquo;re using the right principles, at the right time, for the maximum benefits.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">All that said, there&rsquo;s always another option.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stkTGKru\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-slideInRight\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid stk-theme_44178__mb_0\" data-stk-css=\"stk8fAjK\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkndfmC\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_4\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">FURTHER INSIGHTS</strong></p>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-ce-tag=\"grid\" data-stk-css=\"stkqTSVZ\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkXkExs\" data-ce-tag=\"grid-col\">&nbsp;</div>\n</div>\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset\" data-stk-css=\"stkXqqFX\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://www.tiny.cloud/technical-debt-whitepaper\" target=\"_blank\" rel=\"noopener\">Download and read Technical Debt in Rich Text Editors White Paper &rarr;</a></p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h2 id=\"stk-4\" class=\"stk-theme_44178__style_large_header stk-reset\" data-ce-tag=\"paragraph\">Choosing the right RTE minimizes technical debt accrual</h2>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">The learning curve for developing a rich text editor is steep, and the risks associated with not properly understanding the domain are high. It can take a significant amount of time to build the required domain knowledge in your team. It can take just as long to find the right ways to track and manage your technical debt.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">If your application needs a rich text editor, there&rsquo;s another choice.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">You could take on the overhead of developing and maintaining a rich text editor yourself, or you could buy-and-assemble, relying on the expertise of specialists to carry the weight of the technical debt for you.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">This allows your developers to focus on domains they&rsquo;re already familiar with, driving your innovation, scaling rapidly, and delivering value quickly.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">You still need a plan for choosing the right rich text editor for your use case, and absorbing updates (especially security critical ones) throughout your application&rsquo;s lifecycle. However, that&rsquo;s a significantly simpler plan than developing your own rich text editor.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">It&rsquo;s up to you</p>\n</div>\n</div>\n<div class=\"stk-layout__overhangs_both stk-theme_44178__mb_0 stk-grid\" data-stk-css=\"stkOWp3j\" data-ce-tag=\"grid\">\n<div class=\"stk-theme_44178__pad_ver_2 stk-grid-col stk-grid-col_last\" data-col-width=\"12\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"2\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<p class=\"align-center stk-theme_44178__style_font_style-1652351628236 stk-reset stk-theme_44178__color_44178_custom_color_3\" data-ce-tag=\"paragraph\">Download the white paper</p>\n<p class=\"stk-theme_44178__style_font_style-1628585803915 align-center stk-reset stk-theme_44178__color_44178_custom_color_1\" data-ce-tag=\"paragraph\">Opportunity Cost of Technical Debt: Minimize Your Rich Text Editor Development</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"2\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"2\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<figure class=\"stk-reset stk-embed_rendered\" data-ce-tag=\"embed\"><code class=\"stk-code\"><iframe style=\"border: 0px;\" src=\"https://www2.ephox.com/l/2202/2022-09-29/d9d458\" width=\"100%\" height=\"500\" frameborder=\"0\" data-mce-fragment=\"1\"></iframe></code>\n<figcaption class=\"stk-reset stk-description\" data-ce-tag=\"description\"></figcaption>\n</figure>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"2\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-layout__overhangs_both stk-grid\" data-stk-css=\"stk30pRI\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last stk-theme_44178__pad_ver_3\" data-col-width=\"12\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"valign-middle stk-grid-col stk-grid-col_last stk-theme_44178__pad_round_1-m\" data-col-width=\"6\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628517328397 stk-theme_44178__mb_05 stk-theme_44178__color_44178_custom_color_3 stk-reset\" data-ce-tag=\"paragraph\">author</p>\n<h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__color_44178_custom_color_0 stk-theme_44178__mb_0 stk-reset\" data-ce-tag=\"paragraph\">Millie Macdonald</h4>\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-theme_44178__color_44178_custom_color_2 stk-reset\" data-ce-tag=\"paragraph\">Product Manager at Halo Connect</p>\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_0 stk-reset\" data-ce-tag=\"paragraph\">Millie is a Product Manager at Halo Connect who dabbles in writing. Previously, she worked at Tiny as a Product Owner, dev, and QA engineer. She loves learning above all else, whether it's about people, tech, or leadership.</p>\n</div>\n</div>\n</div>\n</div>","childMarkdownRemark":{"html":"<div class=\"stk-theme_44178__mb_2 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid-col\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"7\" data-stk-css=\"stkxxRC3\" data-stk-css-m=\"stkYZd2Z\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Immutability:</strong></p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">The <a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/mutable-vs-immutable-javascript/\" target=\"_blank\" rel=\"noopener\" data-gtm-vis-has-fired-10171822_255=\"1\">principle of immutability</a> states that an object can not be modified after it&rsquo;s created. In practice, this means avoiding mutating values in your code. This can be particularly useful when dealing with user input, like in rich text editors, and when using JavaScript, as the language's tendency for mutability can be quite problematic.</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"7\" data-stk-css=\"stkiVJnA\" data-stk-css-m=\"stkhAo3O\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Modularity:</strong></p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Modularity, or modular programming, is the practice of separating code into independent building blocks, each with a specific purpose. Applications are then formed from many modules. <a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/modular-programming-principle/\" target=\"_blank\" rel=\"noopener\">Modularity is a great tool</a> for managing a complex codebase, like a rich text editor, especially if you start abstracting concepts.</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"7\" data-stk-css=\"stknsOV8\" data-stk-css-m=\"stkGkp1H\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Types:</strong></p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">One of the <a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/benefits-of-gradual-strong-typing-in-javascript/\" target=\"_blank\" rel=\"noopener\">easiest ways to add clarity to your codebase is through types</a>. The quick feedback of a type checker, and the ability to know at a glance exactly what types you&rsquo;re dealing with, can be great for avoiding technical debt. In a rich text editor, types can be essential for ensuring the layers of your application work together correctly.</p>\n</div>\n</div>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"valign-middle stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid\" data-stk-css=\"stkewPeN\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-fadeIn\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\">\n<div class=\"stk-theme_44178__pad_round_1 stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__color_44178_custom_color_3 stk-reset stk-theme_44178__style_font_style-1628517714937 stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">What is functional programming?</strong></p>\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Functional programming is a programming paradigm that aims to produce cleaner, clearer, more robust, and more maintainable code.</p>\n<p class=\"stk-theme_44178__style_small_text stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/category-theory-functional-programming/\" target=\"_blank\" rel=\"noopener\">Find out how Tiny uses Functional Programming &rarr;</a></p>\n</div>\n</div>\n</div>\n<h3 class=\"stk-theme_44178__style_medium_header stk-reset\" data-ce-tag=\"paragraph\">Trade-offs rule when managing technical debt</h3>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">It&rsquo;s also worth noting that some principles may be overkill, when you&rsquo;re just starting to develop a rich text editor. However, others might be painful to introduce later, and are better adopted right from the beginning.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">Just like technical debt, understanding the rich text editor domain and the trade-offs involved allows you to plan long-term, thus ensuring you&rsquo;re using the right principles, at the right time, for the maximum benefits.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">All that said, there&rsquo;s always another option.</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"1\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stkTGKru\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-slideInRight\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid stk-theme_44178__mb_0\" data-stk-css=\"stk8fAjK\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkndfmC\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_4\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">FURTHER INSIGHTS</strong></p>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_05 stk-grid\" data-ce-tag=\"grid\" data-stk-css=\"stkqTSVZ\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"3\" data-stk-css=\"stkXkExs\" data-ce-tag=\"grid-col\">&nbsp;</div>\n</div>\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset\" data-stk-css=\"stkXqqFX\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://www.tiny.cloud/technical-debt-whitepaper\" target=\"_blank\" rel=\"noopener\">Download and read Technical Debt in Rich Text Editors White Paper &rarr;</a></p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-theme_44178__mb_2 stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<h2 id=\"stk-4\" class=\"stk-theme_44178__style_large_header stk-reset\" data-ce-tag=\"paragraph\">Choosing the right RTE minimizes technical debt accrual</h2>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">The learning curve for developing a rich text editor is steep, and the risks associated with not properly understanding the domain are high. It can take a significant amount of time to build the required domain knowledge in your team. It can take just as long to find the right ways to track and manage your technical debt.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">If your application needs a rich text editor, there&rsquo;s another choice.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">You could take on the overhead of developing and maintaining a rich text editor yourself, or you could buy-and-assemble, relying on the expertise of specialists to carry the weight of the technical debt for you.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">This allows your developers to focus on domains they&rsquo;re already familiar with, driving your innovation, scaling rapidly, and delivering value quickly.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">You still need a plan for choosing the right rich text editor for your use case, and absorbing updates (especially security critical ones) throughout your application&rsquo;s lifecycle. However, that&rsquo;s a significantly simpler plan than developing your own rich text editor.</p>\n<p class=\"stk-reset\" data-ce-tag=\"paragraph\">It&rsquo;s up to you</p>\n</div>\n</div>\n<div class=\"stk-layout__overhangs_both stk-theme_44178__mb_0 stk-grid\" data-stk-css=\"stkOWp3j\" data-ce-tag=\"grid\">\n<div class=\"stk-theme_44178__pad_ver_2 stk-grid-col stk-grid-col_last\" data-col-width=\"12\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"2\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<p class=\"align-center stk-theme_44178__style_font_style-1652351628236 stk-reset stk-theme_44178__color_44178_custom_color_3\" data-ce-tag=\"paragraph\">Download the white paper</p>\n<p class=\"stk-theme_44178__style_font_style-1628585803915 align-center stk-reset stk-theme_44178__color_44178_custom_color_1\" data-ce-tag=\"paragraph\">Opportunity Cost of Technical Debt: Minimize Your Rich Text Editor Development</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"2\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"2\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n<div class=\"stk-grid-col stk-grid-col_last\" data-col-width=\"8\" data-ce-tag=\"grid-col\">\n<figure class=\"stk-reset stk-embed_rendered\" data-ce-tag=\"embed\"><code class=\"stk-code\"><iframe style=\"border: 0px;\" src=\"https://www2.ephox.com/l/2202/2022-09-29/d9d458\" width=\"100%\" height=\"500\" frameborder=\"0\" data-mce-fragment=\"1\"></iframe></code>\n<figcaption class=\"stk-reset stk-description\" data-ce-tag=\"description\"></figcaption>\n</figure>\n</div>\n<div class=\"stk-grid-col stk-grid-col_empty\" data-col-width=\"2\" data-ce-tag=\"grid-col\">\n<p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\">&nbsp;</p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"stk-layout__overhangs_both stk-grid\" data-stk-css=\"stk30pRI\" data-ce-tag=\"grid\">\n<div class=\"stk-grid-col stk-grid-col_last stk-theme_44178__pad_ver_3\" data-col-width=\"12\" data-ce-tag=\"grid-col\">\n<div class=\"stk-grid\" data-ce-tag=\"grid\">\n<div class=\"valign-middle stk-grid-col stk-grid-col_last stk-theme_44178__pad_round_1-m\" data-col-width=\"6\" data-ce-tag=\"grid-col\">\n<p class=\"stk-theme_44178__style_font_style-1628517328397 stk-theme_44178__mb_05 stk-theme_44178__color_44178_custom_color_3 stk-reset\" data-ce-tag=\"paragraph\">author</p>\n<h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__color_44178_custom_color_0 stk-theme_44178__mb_0 stk-reset\" data-ce-tag=\"paragraph\">Millie Macdonald</h4>\n<p class=\"stk-theme_44178__style_font_style-1628517714937 stk-theme_44178__color_44178_custom_color_2 stk-reset\" data-ce-tag=\"paragraph\">Product Manager at Halo Connect</p>\n<p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_0 stk-reset\" data-ce-tag=\"paragraph\">Millie is a Product Manager at Halo Connect who dabbles in writing. Previously, she worked at Tiny as a Product Owner, dev, and QA engineer. She loves learning above all else, whether it's about people, tech, or leadership.</p>\n</div>\n</div>\n</div>\n</div>","htmlAst":{"type":"root","children":[{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_2","stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"7","dataStkCss":"stkxxRC3","dataStkCssM":"stkYZd2Z","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"],"dataGtmVisHasFired-10171822_255":"1"},"children":[{"type":"text","value":"Immutability:"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"The "},{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://www.tiny.cloud/blog/mutable-vs-immutable-javascript/","target":"_blank","rel":["noopener"],"dataGtmVisHasFired-10171822_255":"1"},"children":[{"type":"text","value":"principle of immutability"}]},{"type":"text","value":" states that an object can not be modified after it’s created. In practice, this means avoiding mutating values in your code. This can be particularly useful when dealing with user input, like in rich text editors, and when using JavaScript, as the language's tendency for mutability can be quite problematic."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col"],"dataColWidth":"1","dataStkCss":"","dataStkCssM":"","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"7","dataStkCss":"stkiVJnA","dataStkCssM":"stkhAo3O","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"],"dataGtmVisHasFired-10171822_255":"1"},"children":[{"type":"text","value":"Modularity:"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Modularity, or modular programming, is the practice of separating code into independent building blocks, each with a specific purpose. Applications are then formed from many modules. "},{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://www.tiny.cloud/blog/modular-programming-principle/","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"Modularity is a great tool"}]},{"type":"text","value":" for managing a complex codebase, like a rich text editor, especially if you start abstracting concepts."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"7","dataStkCss":"stknsOV8","dataStkCssM":"stkGkp1H","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"],"dataGtmVisHasFired-10171822_255":"1"},"children":[{"type":"text","value":"Types:"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"One of the "},{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://www.tiny.cloud/blog/benefits-of-gradual-strong-typing-in-javascript/","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"easiest ways to add clarity to your codebase is through types"}]},{"type":"text","value":". The quick feedback of a type checker, and the ability to know at a glance exactly what types you’re dealing with, can be great for avoiding technical debt. In a rich text editor, types can be essential for ensuring the layers of your application work together correctly."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"1","dataStkCss":"","dataStkCssM":"","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["valign-middle","stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataStkCss":"stkewPeN","dataCeTag":"grid","dataAnimM":"false","dataAnim":"true","dataAnimName":"preset-fadeIn","dataAnimTrigger":"scroll","dataAnimDuration":"1","dataAnimDelay":"0","dataAnimScrollStart":"10","dataAnimScrollFinish":"90"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__pad_round_1","stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__color_44178_custom_color_3","stk-reset","stk-theme_44178__style_font_style-1628517714937","stk-theme_44178__mb_05"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"What is functional programming?"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-theme_44178__mb_05","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Functional programming is a programming paradigm that aims to produce cleaner, clearer, more robust, and more maintainable code."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-reset","stk-theme_44178__mb_05"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://www.tiny.cloud/blog/category-theory-functional-programming/","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"Find out how Tiny uses Functional Programming →"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"className":["stk-theme_44178__style_medium_header","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Trade-offs rule when managing technical debt"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"It’s also worth noting that some principles may be overkill, when you’re just starting to develop a rich text editor. However, others might be painful to introduce later, and are better adopted right from the beginning."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Just like technical debt, understanding the rich text editor domain and the trade-offs involved allows you to plan long-term, thus ensuring you’re using the right principles, at the right time, for the maximum benefits."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"All that said, there’s always another option."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"1","dataStkCss":"","dataStkCssM":"","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_2","stk-grid"],"dataStkCss":"stkTGKru","dataCeTag":"grid","dataAnimM":"false","dataAnim":"true","dataAnimName":"preset-slideInRight","dataAnimTrigger":"scroll","dataAnimDuration":"1","dataAnimDelay":"0","dataAnimScrollStart":"10","dataAnimScrollFinish":"90"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid","stk-theme_44178__mb_0"],"dataStkCss":"stk8fAjK","dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataStkCss":"stkndfmC","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628517714937","stk-reset","stk-theme_44178__color_44178_custom_color_4"],"dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"strong","properties":{"className":["stk-reset"]},"children":[{"type":"text","value":"FURTHER INSIGHTS"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_05","stk-grid"],"dataCeTag":"grid","dataStkCss":"stkqTSVZ"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"3","dataStkCss":"stkXkExs","dataCeTag":"grid-col"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628517714937","stk-reset"],"dataStkCss":"stkXqqFX","dataCeTag":"paragraph"},"children":[{"type":"element","tagName":"a","properties":{"className":["stk-reset"],"href":"https://www.tiny.cloud/technical-debt-whitepaper","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"Download and read Technical Debt in Rich Text Editors White Paper →"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__mb_2","stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"stk-4","className":["stk-theme_44178__style_large_header","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Choosing the right RTE minimizes technical debt accrual"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"The learning curve for developing a rich text editor is steep, and the risks associated with not properly understanding the domain are high. It can take a significant amount of time to build the required domain knowledge in your team. It can take just as long to find the right ways to track and manage your technical debt."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"If your application needs a rich text editor, there’s another choice."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"You could take on the overhead of developing and maintaining a rich text editor yourself, or you could buy-and-assemble, relying on the expertise of specialists to carry the weight of the technical debt for you."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"This allows your developers to focus on domains they’re already familiar with, driving your innovation, scaling rapidly, and delivering value quickly."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"You still need a plan for choosing the right rich text editor for your use case, and absorbing updates (especially security critical ones) throughout your application’s lifecycle. However, that’s a significantly simpler plan than developing your own rich text editor."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"It’s up to you"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-layout__overhangs_both","stk-theme_44178__mb_0","stk-grid"],"dataStkCss":"stkOWp3j","dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-theme_44178__pad_ver_2","stk-grid-col","stk-grid-col_last"],"dataColWidth":"12","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"2","dataStkCss":"","dataStkCssM":"","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["align-center","stk-theme_44178__style_font_style-1652351628236","stk-reset","stk-theme_44178__color_44178_custom_color_3"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Download the white paper"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628585803915","align-center","stk-reset","stk-theme_44178__color_44178_custom_color_1"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Opportunity Cost of Technical Debt: Minimize Your Rich Text Editor Development"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"2","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"2","dataStkCss":"","dataStkCssM":"","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last"],"dataColWidth":"8","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"figure","properties":{"className":["stk-reset","stk-embed_rendered"],"dataCeTag":"embed"},"children":[{"type":"element","tagName":"code","properties":{"className":["stk-code"]},"children":[{"type":"element","tagName":"iframe","properties":{"style":"border: 0px;","src":"https://www2.ephox.com/l/2202/2022-09-29/d9d458","width":"100%","height":500,"frameBorder":"0","dataMceFragment":"1"},"children":[]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"figcaption","properties":{"className":["stk-reset","stk-description"],"dataCeTag":"description"},"children":[]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_empty"],"dataColWidth":"2","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["ce-element--empty","stk-element_no-text","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":" "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-layout__overhangs_both","stk-grid"],"dataStkCss":"stk30pRI","dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid-col","stk-grid-col_last","stk-theme_44178__pad_ver_3"],"dataColWidth":"12","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["stk-grid"],"dataCeTag":"grid"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["valign-middle","stk-grid-col","stk-grid-col_last","stk-theme_44178__pad_round_1-m"],"dataColWidth":"6","dataCeTag":"grid-col"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628517328397","stk-theme_44178__mb_05","stk-theme_44178__color_44178_custom_color_3","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"author"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"className":["stk-theme_44178__style_small_header","stk-theme_44178__color_44178_custom_color_0","stk-theme_44178__mb_0","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Millie Macdonald"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_font_style-1628517714937","stk-theme_44178__color_44178_custom_color_2","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Product Manager at Halo Connect"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["stk-theme_44178__style_small_text","stk-theme_44178__color_44178_custom_color_0","stk-reset"],"dataCeTag":"paragraph"},"children":[{"type":"text","value":"Millie is a Product Manager at Halo Connect who dabbles in writing. Previously, she worked at Tiny as a Product Owner, dev, and QA engineer. She loves learning above all else, whether it's about people, tech, or leadership."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]}],"data":{"quirksMode":false}}}},"codepens":null,"heroImage":{"image":{"fluid":{"base64":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAMAAABI111xAAAA/FBMVEUjNHciNHchM3YfMnQdMXIXLGweMXIiM3YlM3UxN304OH5NUaJES5kkL3AeMHImNHc2Pow0RJ05P5FkduFrh/9aacwqNXcfMXMiM3UvPIkwRJ8rQ58wPY9fdN9oiv9pif9TYsAeLWwrP5MpQJooP5goOIlcc91oif9nif9jfe8sOHwgMXMhM3UmNnpCU6pDVq9CVK1CUqhfeOZniP9lgvgzQIkfMHIhMnUoN3pgeupnh/9nhv9mh/9hfe8pOH0dLW1JX71oiP9MY8IjM3VOZ8lkhPxlhf1Qac4kNXggMXIeLm80R5ZEXLdEXLg1SZgfL3AgMHIbK2oXJmMbKmnWBGX7AAAAg0lEQVQIHQXBMUoDUQBAwXnZ1Z9kQbG0VPAiXjrXsBEPYCOIkEIJC8Y4E1CVfi8XCBhV1bpCYGyrqo4rZnBXVdUnBGN9rKrqFTM8VVUq2MCyLMf9frv73u1+YAMvY2zHxclVXzDB33JzO32c7u/m67czAuO5qjqsMIHz+8OYp+lyWME/4pwdJJVHZF8AAAAASUVORK5CYII=","aspectRatio":1.7767441860465116,"src":"//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=2560&q=80&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=640&h=360&q=80&fit=scale 640w,\n//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=1280&h=720&q=80&fit=scale 1280w,\n//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=1528&h=860&q=80&fit=scale 1528w","srcWebp":"//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=2560&q=80&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=640&h=360&q=80&fm=webp&fit=scale 640w,\n//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=1280&h=720&q=80&fm=webp&fit=scale 1280w,\n//images.ctfassets.net/s600jj41gsex/6R0dgGR7Une66VCag5E6Bz/3f09fcd022ea9991bb49499d9bbcd9cc/management-2-2022111614140854.png?w=1528&h=860&q=80&fm=webp&fit=scale 1528w","sizes":"(max-width: 2560px) 100vw, 2560px"}},"alt":"Pie chart depicted in contrasting colours","artistName":null,"artistUrl":null},"author":{"slug":"millie-macdonald","name":"Millie Macdonald","image":{"fluid":{"base64":"data:image/jpeg;base64,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","aspectRatio":1,"src":"//images.ctfassets.net/s600jj41gsex/1WjKPKyRtd0IepFyXQBiHt/46d51b0fc7ee0c7700a2d3a835d20735/seYCjfJw_400x400.jpg?w=48&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/1WjKPKyRtd0IepFyXQBiHt/46d51b0fc7ee0c7700a2d3a835d20735/seYCjfJw_400x400.jpg?w=12&h=12&q=50&fit=scale 12w,\n//images.ctfassets.net/s600jj41gsex/1WjKPKyRtd0IepFyXQBiHt/46d51b0fc7ee0c7700a2d3a835d20735/seYCjfJw_400x400.jpg?w=24&h=24&q=50&fit=scale 24w,\n//images.ctfassets.net/s600jj41gsex/1WjKPKyRtd0IepFyXQBiHt/46d51b0fc7ee0c7700a2d3a835d20735/seYCjfJw_400x400.jpg?w=48&h=48&q=50&fit=scale 48w,\n//images.ctfassets.net/s600jj41gsex/1WjKPKyRtd0IepFyXQBiHt/46d51b0fc7ee0c7700a2d3a835d20735/seYCjfJw_400x400.jpg?w=72&h=72&q=50&fit=scale 72w,\n//images.ctfassets.net/s600jj41gsex/1WjKPKyRtd0IepFyXQBiHt/46d51b0fc7ee0c7700a2d3a835d20735/seYCjfJw_400x400.jpg?w=96&h=96&q=50&fit=scale 96w,\n//images.ctfassets.net/s600jj41gsex/1WjKPKyRtd0IepFyXQBiHt/46d51b0fc7ee0c7700a2d3a835d20735/seYCjfJw_400x400.jpg?w=144&h=144&q=50&fit=scale 144w,\n//images.ctfassets.net/s600jj41gsex/1WjKPKyRtd0IepFyXQBiHt/46d51b0fc7ee0c7700a2d3a835d20735/seYCjfJw_400x400.jpg?w=400&h=400&q=50&fit=scale 400w","srcWebp":"//images.ctfassets.net/s600jj41gsex/1WjKPKyRtd0IepFyXQBiHt/46d51b0fc7ee0c7700a2d3a835d20735/seYCjfJw_400x400.jpg?w=48&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/1WjKPKyRtd0IepFyXQBiHt/46d51b0fc7ee0c7700a2d3a835d20735/seYCjfJw_400x400.jpg?w=12&h=12&q=50&fm=webp&fit=scale 12w,\n//images.ctfassets.net/s600jj41gsex/1WjKPKyRtd0IepFyXQBiHt/46d51b0fc7ee0c7700a2d3a835d20735/seYCjfJw_400x400.jpg?w=24&h=24&q=50&fm=webp&fit=scale 24w,\n//images.ctfassets.net/s600jj41gsex/1WjKPKyRtd0IepFyXQBiHt/46d51b0fc7ee0c7700a2d3a835d20735/seYCjfJw_400x400.jpg?w=48&h=48&q=50&fm=webp&fit=scale 48w,\n//images.ctfassets.net/s600jj41gsex/1WjKPKyRtd0IepFyXQBiHt/46d51b0fc7ee0c7700a2d3a835d20735/seYCjfJw_400x400.jpg?w=72&h=72&q=50&fm=webp&fit=scale 72w,\n//images.ctfassets.net/s600jj41gsex/1WjKPKyRtd0IepFyXQBiHt/46d51b0fc7ee0c7700a2d3a835d20735/seYCjfJw_400x400.jpg?w=96&h=96&q=50&fm=webp&fit=scale 96w,\n//images.ctfassets.net/s600jj41gsex/1WjKPKyRtd0IepFyXQBiHt/46d51b0fc7ee0c7700a2d3a835d20735/seYCjfJw_400x400.jpg?w=144&h=144&q=50&fm=webp&fit=scale 144w,\n//images.ctfassets.net/s600jj41gsex/1WjKPKyRtd0IepFyXQBiHt/46d51b0fc7ee0c7700a2d3a835d20735/seYCjfJw_400x400.jpg?w=400&h=400&q=50&fm=webp&fit=scale 400w","sizes":"(max-width: 48px) 100vw, 48px"}},"shortBio":{"shortBio":"Millie is a JS developer and leads the core editor team at Tiny. She specialises in crazy things like copy and paste, image handling, and tables, and occasionally gets to play with ReasonML. She's also an esports community manager and tournament organiser in her spare time."}},"metaTitle":{"metaTitle":"How to manage technical debt in rich text editors | TinyMCE"},"metaDescription":{"metaDescription":"Dealing with the technical debt of rich text editors isn’t easy. We’ve collected the aspects that can make or break your strategy of tech debt management."},"setkaCss":["https://www.tiny.cloud/blog/setka/common_css_1634572086.css","https://www.tiny.cloud/blog/setka/T-MqHt4_cRRlImdGVfupaQ.css","https://www.tiny.cloud/blog/setka/UnEeJJ5vn9rZGngAji4oNg.css"],"setkaHtml":{"body_html":"<div class=\"stk-post stk-layout_12col_36009 stk-theme_44178\" data-stk=\"{&quot;images&quot;:[{&quot;id&quot;:221203,&quot;alt&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;},{&quot;id&quot;:221202,&quot;alt&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;},{&quot;id&quot;:221201,&quot;alt&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;},{&quot;id&quot;:221200,&quot;alt&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;}]}\" data-ui-id=\"post\" data-ce-tag=\"post\" data-reset-type=\"class\" data-layout-type=\"limited\" data-editor-version=\"3.2.5\"><div class=\"stk-grid stk-theme_44178__mb_2\" data-ce-tag=\"grid\"><div data-col-width=\"12\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"10\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><p class=\"stk-reset stk-theme_44178__color_44178_custom_color_2 ce-element--empty stk-element_no-text\" data-ce-tag=\"paragraph\"></p><p class=\"stk-reset stk-theme_44178__style_font_style-1628517328397 stk-theme_44178__color_44178_custom_color_2 stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">developer insights</strong></p><h1 class=\"stk-reset stk-theme_44178__color_44178_custom_color_1 stk-theme_44178__style_font_style-1635835947787\" data-ce-tag=\"paragraph\">Managing technical debt is difficult in rich text editors</h1></div><div data-col-width=\"2\" class=\"stk-grid-col stk-grid-col_empty\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div></div><p class=\"stk-theme_44178__style_small_text stk-reset stk-theme_44178__color_44178_custom_color_3\" data-ce-tag=\"paragraph\">Published November 26th, 2022</p><figure class=\"stk-reset stk-image-figure\" data-ce-tag=\"image-figure\"><div class=\"stk-mask\" data-ce-tag=\"mask\"><img src=\"https://ucarecdn.com/93a9b8e8-a013-491a-b92d-4b7614e42496/\" data-image-id=\"221203\" data-image-name=\"management-2.png\" class=\"stk-image stk-reset\" width=\"2130\" height=\"860\" loading=\"lazy\"/></div></figure></div></div><div class=\"stk-grid stk-theme_44178__mb_15\" data-ce-tag=\"grid\"><div data-col-width=\"9\" class=\"stk-grid-col\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__style_font_style-1628517294418 stk-reset stk-theme_44178__color_44178_custom_color_1\" data-ce-tag=\"paragraph\">One of the biggest dangers when starting a new development project, is not understanding the trade-offs you may need to make during development, and the technical debt those decisions could incur. Developing a rich text editor, in particular, is a minefield of potential technical debt. So, before you start, you need a plan.</p></div><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-grid stk-grid__layout_columns\" data-ce-tag=\"grid\"><div data-col-width=\"1\" class=\"stk-grid-col\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><figure class=\"stk-reset stk-image-figure\" data-ce-tag=\"image-figure\"><div class=\"stk-mask\" data-ce-tag=\"mask\"><img src=\"https://ucarecdn.com/f4f978a8-138d-4000-8d66-48ab76705afb/\" data-image-id=\"221201\" data-image-name=\"millie.png\" class=\"stk-image stk-reset\" width=\"942\" height=\"942\" loading=\"lazy\"/></div></figure></div><div data-col-width=\"2\" class=\"stk-grid-col stk-grid-col_last valign-middle\" data-ce-tag=\"grid-col\"><p class=\"stk-reset stk-theme_44178__style_font_style-1628517714937 stk-theme_44178__mb_0 stk-theme_44178__color_44178_custom_color_1\" data-ce-tag=\"paragraph\">Millie Macdonald</p><p class=\"stk-reset stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3\" data-ce-tag=\"paragraph\">Product Manager at Halo Connect</p></div></div></div></div><hr class=\"stk-theme_44178__separator_basic_divider stk-theme_44178__mb_2 stk-reset\"/><div class=\"stk-theme_44178__mb_2 stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"8\" class=\"stk-grid-col\" data-ce-tag=\"grid-col\"><p class=\"stk-reset\" data-ce-tag=\"paragraph\">After all, technical debt isn’t something you can just leave until later. Technical debt lurks in your codebase, accruing interest in the form of lost developer time and complicated workarounds. It can also snowball. A small problem, that carried a small cost, could become a much larger problem if left too long.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">You need to be actively managing technical debt. Every. Day.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Typically, technical debt has a habit of rearing its head at the most unfortunate times – complicating codebases, delaying releases, and blocking the development of new features. </p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">So, managing technical debt becomes especially important in a project <a href=\"https://www.tiny.cloud/blog/considering-building-rich-text-editor/\" target=\"_blank\" class=\"stk-reset\">as complicated as a rich text editor.</a> There are a few ways you could approach it, such as trying to pay it down each sprint. However, that could affect your <a href=\"https://www.tiny.cloud/blog/developer-velocity-effects/\" target=\"_blank\" class=\"stk-reset\">developer velocity</a> and clash with project prioritization. </p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Instead, the best plan is a proactive plan. And that requires an understanding of why rich text editors are so <a href=\"https://www.tiny.cloud/blog/reduce-technical-debt/\" target=\"_blank\" class=\"stk-reset\">prone to technical debt</a>.</p></div><div data-col-width=\"1\" class=\"stk-grid-col stk-grid-col_empty\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-grid\" data-stk-css=\"stkbJwzk\" data-anim-m=\"false\" data-ce-tag=\"grid\"><div data-col-width=\"3\" class=\"stk-theme_44178__pad_round_1 stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_1 stk-theme_44178__mb_0\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">TABLE OF&nbsp;CONTENTS</strong></p><hr class=\"stk-theme_44178__separator_basic_divider stk-theme_44178__mb_05 stk-reset\"/><p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"#stk-1\">Why rich text editors accrue technical debt</a></p><p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"#stk-2\">Deep RTE domain experience minimizes technical debt</a></p><p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"#stk-3\">Programming principles affect code quality and technical debt accrual</a></p><p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 stk-reset\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"#stk-4\">Choosing the right RTE minimizes technical debt accrual</a></p></div></div></div></div><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"8\" class=\"stk-grid-col\" data-ce-tag=\"grid-col\"><h2 class=\"stk-theme_44178__style_large_header stk-reset\" id=\"stk-1\" data-ce-tag=\"paragraph\">Why rich text editors accrue technical debt</h2><p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Three key factors make rich text editors especially problematic when it comes to technical debt:</p><ul class=\"stk-reset\" data-ce-tag=\"list\"><li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\"><strong class=\"stk-reset\">Rich text editors usually have big, complex codebases</strong> – especially if you want a full-featured editor.</li><li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\"><strong class=\"stk-reset\">Rich text editors are at the mercy of an ever-changing environment</strong> – that you often don’t control.</li><li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\"><strong class=\"stk-reset\">Developing rich text editors requires extensive domain knowledge that rarely overlaps with other kinds of application</strong> – without which, it can be difficult to find the right solution to many development problems.</li></ul><p class=\"stk-theme_44178__mb_15 stk-reset\" data-ce-tag=\"paragraph\">Understanding these three factors is crucial to understanding how tech debt accrues in a rich text editor, and how proactively managing technical debt can make or break your development schedule.</p><h3 class=\"stk-theme_44178__style_medium_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Where does RTE technical debt accrue?</h3><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Rich text editors tend to be multi-layered applications, with an editing model wrapped in a configuration layer to make a core engine, on top of which other features can be built. This complexity often leads to rather large codebases – which means plenty of places for technical debt to appear (and hide).</p></div><div data-col-width=\"1\" class=\"stk-grid-col stk-grid-col_empty\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div><div data-col-width=\"3\" class=\"valign-middle stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stkGGcBl\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-slideInRight\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-theme_44178__mb_05 stk-grid\" data-stk-css=\"stkhp4ek\" data-ce-tag=\"grid\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stk3UC8i\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_4\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">read MORE</strong></p></div></div><div class=\"stk-theme_44178__mb_05 stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkWg-5c\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\">Insights on the complexities of RTEs</p></div></div><p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__mb_05\" data-stk-css=\"stkACyIQ\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://www.tiny.cloud/buy-vs-build-whitepaper/\" target=\"_blank\">Buy vs Build: The Great Debate White Paper</a></p><p class=\"stk-theme_44178__style_font_style-1628517714937 stk-theme_44178__mb_05 stk-reset\" data-stk-css=\"stk2TBxt\" data-ce-tag=\"paragraph\"><a href=\"https://www.tiny.cloud/technical-debt-whitepaper/\" target=\"_blank\" class=\"stk-reset\">Opportunity Cost of Technical Debt White Paper</a></p><p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset\" data-stk-css=\"stk3hxGc\" data-ce-tag=\"paragraph\"><a href=\"https://www.tiny.cloud/blog/cost-of-building-rich-text-editor/\" target=\"_blank\" class=\"stk-reset\">Tiny puts a price tag on building your own core rich text editor</a></p></div></div></div></div><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"8\" class=\"stk-grid-col\" data-ce-tag=\"grid-col\"><h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Multiple editing models are used in rich text editors</h4><p class=\"stk-reset\" data-ce-tag=\"paragraph\">For example, from the outset – on that very first layer of a rich text editor – you have a rather important decision to make.</p><p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">There isn’t just one editing model. Do you choose:</p><ul class=\"stk-reset\" data-ce-tag=\"list\"><li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">The browser's <a href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/contenteditable\" target=\"_blank\" class=\"stk-reset\">ContentEditable API</a></li><li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Or a <a href=\"https://github.com/ianstormtaylor/slate\" target=\"_blank\" class=\"stk-reset\">model-based library like Slate</a></li><li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Or develop your own library. </li></ul><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Each model has inherent strengths and weaknesses, but crucially, often what’s not factored in up front, is that your choice directly affects the features your editor is able to support.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">For example, TinyMCE is a ContentEditable editor, but it switches to using Slate when in real-time collaboration (RTC) mode. This was done because RTC was easier to implement on a model-based editor. </p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Likewise, the whole editor could have been switched over to Slate. However, some features are easier to implement on a ContentEditable model, so instead Tiny develops and maintains the two models. </p></div><div data-col-width=\"1\" class=\"stk-grid-col stk-grid-col_empty\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div><div data-col-width=\"3\" class=\"valign-middle stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stkSI5rz\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-slideInRight\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-theme_44178__mb_05 stk-grid\" data-stk-css=\"stk3u4_N\" data-ce-tag=\"grid\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkQYqk7\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_4\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">read MORE</strong></p></div></div><div class=\"stk-theme_44178__mb_05 stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkTXCYQ\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\">ContentEditable vs Slate for RTC</p></div></div><p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset\" data-stk-css=\"stkzYalc\" data-ce-tag=\"paragraph\"><a href=\"https://www.tiny.cloud/blog/real-time-collaborative-editing-slate-js\" target=\"_blank\" class=\"stk-reset\">Collaboration needs a clean Slate</a></p></div></div><div class=\"stk-theme_44178__mb_05 stk-grid\" data-stk-css=\"stkXv2fa\" data-ce-tag=\"grid\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkeGUeW\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_4\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">NOTE:</strong></p></div></div><div class=\"stk-theme_44178__mb_05 stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkDpXxi\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__style_small_text stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\">From January 2023, TinyMCE no longer offers Real-Time Collaboration (RTC) for new customers. For Existing customers, we'll be in contact to discuss options. Please reach out to your Account Manager if you are a customer using RTC, and you have any questions about the plugin.</p></div></div></div></div><div class=\"stk-theme_44178__mb_15 stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"8\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Basic editor vs fully-featured editor impacts tech debt</h4><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Choosing a model and building a wrapper only gets you a very basic editor though. Next, you want to start adding features, like support for tables and advanced formatting.</p><p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">However, with every feature you add to a rich text editor, other aspects of the product need to be kept in mind. These include, but aren’t limited to:</p><ul class=\"stk-reset\" data-ce-tag=\"list\"><li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">UI</li><li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Security</li><li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Key handling</li><li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Undo management</li><li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Configurability</li><li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Content filtering, and</li><li class=\"stk-reset stk-list-item\" data-ce-tag=\"list-item\">Mobile support.</li></ul><p class=\"stk-reset\" data-ce-tag=\"paragraph\">This matrix of considerations multiplies the risk of technical debt for every feature you add, and needs to be planned (not just when the feature is being developed) on an ongoing basis. </p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">The other problem with rich text editor codebases, is that some pieces of your code may live for a long time, so cruft and code rot can become commonplace, if it’s not kept in check. Again, that's where your efforts to proactively manage technical debt comes into play.</p></div><div data-col-width=\"4\" class=\"stk-grid-col stk-grid-col_empty\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div></div><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"8\" class=\"stk-grid-col\" data-ce-tag=\"grid-col\"><h3 class=\"stk-theme_44178__style_medium_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Over time, rich text editors build up cruft</h3><p class=\"stk-reset\" data-ce-tag=\"paragraph\">“Cruft” is a term for code that was badly designed or unnecessarily complicated – often from a developer implementing a feature they don’t fully understand. Similarly, “code rot” refers to code that has deteriorated over time – possibly becoming cruft in the process. And both are prolific sources of technical debt.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Unfortunately, this is where forces beyond your control start taking over.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">All software projects have dependencies – libraries or tools they rely on to function. Usually, you can control which dependencies you use and when they update. However, a rich text editor running in a web application is dependent on the whims of the browser and operating system (OS) of the user. </p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">This creates a matrix of environments, each carrying its own unique quirks and challenges. And you can’t control that, but still have to account for it in your development work.</p></div><div data-col-width=\"1\" class=\"stk-grid-col stk-grid-col_empty\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div><div data-col-width=\"3\" class=\"valign-middle stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stk7HZ_3\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-slideInRight\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-theme_44178__mb_05 stk-grid\" data-stk-css=\"stk9P1F9\" data-ce-tag=\"grid\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkyZb81\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_4\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">LEARN MORE</strong></p></div></div><div class=\"stk-theme_44178__mb_05 stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkNRK1g\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\">What is cruft, code rot, and code half-life?</p></div></div><p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset\" data-stk-css=\"stky0VL7\" data-ce-tag=\"paragraph\"><a href=\"https://www.tiny.cloud/technical-debt-whitepaper/\" target=\"_blank\" class=\"stk-reset\">Find out how they affect rich text editor technical debt →</a></p></div></div></div></div><table data-responsive-type=\"cards\" class=\"stk-theme_44178__style_small_text stk-table--zebra stk-theme_44178__var_44178_custom_color_4 stk-theme_44178__mb_05 stk-reset stk-table\" data-ce-tag=\"table\"><colgroup><col class=\"stk-reset stk-reset stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"1694\"/><col class=\"stk-reset stk-reset stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"1695\"/><col class=\"stk-reset stk-reset stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"1696\"/><col class=\"stk-reset stk-reset stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"1697\"/></colgroup><thead class=\"stk-reset\"><tr class=\"stk-reset stk-table-row\"><th class=\"stk-theme_44178__style_font_style-1628517328397 stk-theme_44178__color_44178_custom_color_3 align-left stk-reset stk-table-cell\" data-ce-tag=\"th\">BROWSER</th><th class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 align-center stk-reset stk-table-cell\" data-ce-tag=\"th\">WINDOWS</th><th class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 align-center stk-reset stk-table-cell\" data-ce-tag=\"th\">MAC</th><th class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 align-center stk-reset stk-table-cell\" data-ce-tag=\"th\">GNU/LINUX</th></tr></thead><tbody class=\"stk-reset\"><tr class=\"stk-reset stk-table-row\"><td class=\"stk-theme_44178__style_small_text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"BROWSER\"><strong class=\"stk-reset\">Chrome</strong></td><td class=\"stk-theme_44178__style_font_style-1628517328397 align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"WINDOWS\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3710377 stk-icon\" src=\"https://ucarecdn.com/e9af9ae9-a064-48cb-8ee5-fd0ebe01b8a0/\"></td><td class=\"stk-theme_44178__style_font_style-1628517328397 align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"MAC\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3710377 stk-icon\" src=\"https://ucarecdn.com/e9af9ae9-a064-48cb-8ee5-fd0ebe01b8a0/\"></td><td class=\"stk-theme_44178__style_font_style-1628517328397 align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"GNU/LINUX\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3710377 stk-icon\" src=\"https://ucarecdn.com/e9af9ae9-a064-48cb-8ee5-fd0ebe01b8a0/\"></td></tr><tr class=\"stk-reset stk-table-row\"><td class=\"stk-theme_44178__style_small_text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"BROWSER\"><strong class=\"stk-reset\">Firefox</strong></td><td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"WINDOWS\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3710377 stk-icon\" src=\"https://ucarecdn.com/e9af9ae9-a064-48cb-8ee5-fd0ebe01b8a0/\"></td><td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"MAC\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3710377 stk-icon\" src=\"https://ucarecdn.com/e9af9ae9-a064-48cb-8ee5-fd0ebe01b8a0/\"></td><td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"GNU/LINUX\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3710377 stk-icon\" src=\"https://ucarecdn.com/e9af9ae9-a064-48cb-8ee5-fd0ebe01b8a0/\"></td></tr><tr class=\"stk-reset stk-table-row\"><td class=\"stk-theme_44178__style_small_text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"BROWSER\"><strong class=\"stk-reset\">Edge</strong></td><td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"WINDOWS\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3710377 stk-icon\" src=\"https://ucarecdn.com/e9af9ae9-a064-48cb-8ee5-fd0ebe01b8a0/\"></td><td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"MAC\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3709307 stk-icon\" src=\"https://ucarecdn.com/4ce6c227-a5cd-4f56-b454-563a5fb3d666/\"></td><td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"GNU/LINUX\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3709307 stk-icon\" src=\"https://ucarecdn.com/4ce6c227-a5cd-4f56-b454-563a5fb3d666/\"></td></tr><tr class=\"stk-reset stk-table-row\"><td class=\"stk-theme_44178__style_small_text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"BROWSER\"><strong class=\"stk-reset\">Safari</strong></td><td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"WINDOWS\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3709307 stk-icon\" src=\"https://ucarecdn.com/4ce6c227-a5cd-4f56-b454-563a5fb3d666/\"></td><td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"MAC\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3710377 stk-icon\" src=\"https://ucarecdn.com/e9af9ae9-a064-48cb-8ee5-fd0ebe01b8a0/\"></td><td class=\"stk-theme_44178__style_small_text align-center stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"GNU/LINUX\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3709307 stk-icon\" src=\"https://ucarecdn.com/4ce6c227-a5cd-4f56-b454-563a5fb3d666/\"></td></tr></tbody></table><p class=\"stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\">As an example, TinyMCE 6.2 supports 8 combinations of browser and OS</p><div class=\"stk-theme_44178__mb_2 stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"8\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Because of this, rich text editors can accumulate cruft and code rot – not just because of internal factors like code becoming outdated, but also because of external factors (like a browser deprecating an API). This technical debt can multiply if fixes for those external issues are rushed, or problems are bandaged over again, and again, and again…</p><h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Managing technical debt in rich text editors</h4><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Regularly scheduling developer time to pay down technical debt might help you stay on top of it, but that depends on how much (and how fast) you're accruing technical debt and how much time you can afford to dedicate to remediation.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">So, how do you plan for and manage technical debt in a product as complex as a rich text editor? Or, even better, how can you prevent technical debt from accruing in the first place?</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">The answer is domain knowledge.</p></div><div data-col-width=\"1\" class=\"stk-grid-col stk-grid-col_empty\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_empty\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div></div><div class=\"stk-grid stk-theme_44178__mb_2\" data-stk-css=\"stk7_--j\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-jackInTheBox\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\" data-ce-tag=\"grid\"><div data-col-width=\"12\" class=\"stk-theme_44178__pad_ver_2 stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"2\" class=\"stk-grid-col stk-grid-col_empty\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div><div data-col-width=\"8\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__style_font_style-1628585803915 align-center stk-reset\" data-stk-css=\"stkENCR5\" data-ce-tag=\"paragraph\">Get more insights in our<br>Technical Debt White Paper</p><a class=\"stk-theme_44178__stk-btn_1628586253530 stk-theme_44178__style_font_style-1628586133109 align-center stk-reset\" href=\"https://www.tiny.cloud/technical-debt-whitepaper\" target=\"_blank\" data-stk-button=\"1\" data-ce-tag=\"button\">READ THE WHITE PAPER</a></div><div data-col-width=\"2\" class=\"stk-grid-col stk-grid-col_empty\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div></div></div></div><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"8\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><h2 class=\"stk-theme_44178__style_large_header stk-reset\" id=\"stk-2\" data-ce-tag=\"paragraph\">Deep RTE domain experience minimizes technical debt</h2><p class=\"stk-reset\" data-ce-tag=\"paragraph\">When it comes to managing technical debt in a rich text editor, the biggest danger comes from the things you don’t know.</p></div><div data-col-width=\"4\" class=\"stk-grid-col stk-grid-col_empty\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div></div><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"12\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><table data-responsive-type=\"cards\" class=\"stk-table--bordered_hv stk-theme_44178__var_44178_custom_color_4 stk-reset stk-table\" data-ce-tag=\"table\"><colgroup><col class=\"stk-reset stk-reset stk-reset stk-reset stk-reset stk-reset\" data-stk-css=\"stk31tk8\" data-stk-id=\"1754\"/><col class=\"stk-reset stk-reset stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"1755\"/><col class=\"stk-reset stk-reset stk-reset stk-reset stk-reset stk-reset\" data-stk-id=\"1756\"/></colgroup><thead class=\"stk-reset\"><tr class=\"stk-reset stk-table-row\"><th class=\"ce-element--empty stk-element_no-text stk-reset stk-table-cell\" data-ce-tag=\"th\"></th><th class=\"stk-theme_44178__style_small_text align-center stk-reset stk-table-cell\" data-ce-tag=\"th\"><strong class=\"stk-reset\">KNOWNS</strong></th><th class=\"stk-theme_44178__style_small_text align-center stk-reset stk-table-cell\" data-ce-tag=\"th\">UNKNOWNS</th></tr></thead><tbody class=\"stk-reset\"><tr class=\"stk-reset stk-table-row\"><td class=\"stk-theme_44178__style_small_text valign-middle stk-reset stk-table-cell\" data-ce-tag=\"td\"><strong class=\"stk-reset\">KNOWNS</strong></td><td class=\"valign-middle stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"KNOWNS\" data-stk-css=\"stkSRUjV\">Known knowns: things you are aware of and do know.</td><td class=\"valign-middle stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"UNKNOWNS\" data-stk-css=\"stka-oav\">Known unknowns: things you are aware of but don’t know.</td></tr><tr class=\"stk-reset stk-table-row\"><td class=\"stk-theme_44178__style_small_text stk-reset stk-table-cell\" data-ce-tag=\"td\"><strong class=\"stk-reset\">UNKNOWNS</strong></td><td class=\"stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"KNOWNS\" data-stk-css=\"stk6MqwR\">Unknown knowns: things you have forgotten you know.</td><td class=\"stk-reset stk-table-cell\" data-ce-tag=\"td\" data-cell-header=\"UNKNOWNS\" data-stk-css=\"stkt-nNv\">Unknown unknowns: things you don’t know and aren’t aware of.</td></tr></tbody></table><p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_3 stk-reset\" data-ce-tag=\"paragraph\">The four degrees of knowledge, <a class=\"stk-reset\" href=\"https://en.wikipedia.org/wiki/Johari_window\" target=\"_blank\">represented using the Johari Window technique</a>. The different colors represent the risk of technical debt in a rich text editor, based on the level of understanding of domain knowledge. </p></div></div><div class=\"stk-theme_44178__mb_15 stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"8\" class=\"stk-grid-col\" data-ce-tag=\"grid-col\"><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Developing a rich text editor requires very specific knowledge, such as DOM walking, selection models, keyboard key codes, and input events. There are very few companies in the world that develop rich text editors, and therefore the domain isn’t widely known or documented. The learning curve is steep. And without the right knowledge, your risk of adding technical debt (intentional and unintentional) rises.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Why is that?</p><h3 class=\"stk-theme_44178__mb_05 stk-theme_44178__style_medium_header stk-reset\" data-ce-tag=\"paragraph\">Informed choices help to limit technical debt</h3><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Very basically, technical debt is the cost of choosing a simpler solution over a more robust one. However, if you’re unaware there’s a choice to be made, you can needlessly take on technical debt. </p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Worse still, even if you’re aware of all the factors but you don’t really understand them, you can’t make an informed decision about whether taking on technical debt is wise. You also can’t manage technical debt you aren’t aware of, and you can’t easily prioritize technical debt you don’t understand.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Extensive rich text editor domain knowledge, helps you manage technical debt in five ways:</p><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"1\" class=\"stk-grid-col\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3665662 stk-icon\" src=\"https://ucarecdn.com/1e5f130f-6edb-4bc4-92d3-9b3bdcf40ebc/\"></p></div><div data-col-width=\"7\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkW8fvU\" data-stk-css-m=\"stkX9yl4\" data-ce-tag=\"grid-col\"><p class=\"stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">By avoiding technical debt in the first place:</strong></p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Implementing features correctly the first time, choosing solutions that are less prone to technical debt, and engineering your rich text editor in future-proof ways.</p></div></div><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"1\" class=\"stk-grid-col\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3665661 stk-icon\" src=\"https://ucarecdn.com/bbe0618b-73d4-4ba5-a820-11caea016f36/\"></p></div><div data-col-width=\"7\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stklAgCM\" data-stk-css-m=\"stkgm-x4\" data-ce-tag=\"grid-col\"><p class=\"stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Estimating and prioritizing technical debt:</strong></p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">This is especially relevant for complex debt that might require refactoring in your rich text editor and advanced features.</p></div></div><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"1\" class=\"stk-grid-col\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3665660 stk-icon\" src=\"https://ucarecdn.com/83a98d6f-638d-434f-aa09-89056cd7d361/\"></p></div><div data-col-width=\"7\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkMUGgy\" data-stk-css-m=\"stkrS9FJ\" data-ce-tag=\"grid-col\"><p class=\"stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Managing the impact of existing technical debt on velocity</strong>:</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">This positively affects the quality of your rich text editor, by avoiding hacky workarounds and “fixes” that only make the problem worse.</p></div></div><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"1\" class=\"stk-grid-col\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3665659 stk-icon\" src=\"https://ucarecdn.com/a9010512-ee2f-4cf4-9d09-9313ecc3357c/\"></p></div><div data-col-width=\"7\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkeOJud\" data-stk-css-m=\"stkJ4AOT\" data-ce-tag=\"grid-col\"><p class=\"stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Identifying when existing technical debt will interfere:</strong></p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Whether that's on an upcoming project or feature, avoiding surprises, complications, and delays.</p></div></div><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"1\" class=\"stk-grid-col\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3665658 stk-icon\" src=\"https://ucarecdn.com/7033ec89-1d34-44cf-a2ac-f4d0fcc38d4b/\"></p></div><div data-col-width=\"7\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkMFsr8\" data-stk-css-m=\"stkEL-km\" data-ce-tag=\"grid-col\"><p class=\"stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Remediating technical debt faster:</strong></p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">By having a better understanding of the potential solutions and how to implement them, you can manage technical debt more effectively.</p></div></div><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Let’s explore a few more concrete examples.</p></div><div data-col-width=\"1\" class=\"stk-grid-col stk-grid-col_empty\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div><div data-col-width=\"3\" class=\"valign-middle stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-grid\" data-stk-css=\"stkHD_kz\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-fadeIn\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\"><div data-col-width=\"3\" class=\"stk-theme_44178__pad_round_1 stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__color_44178_custom_color_3 stk-reset stk-theme_44178__style_font_style-1628517714937 stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">Intentional vs unintentional technical debt</strong></p><p class=\"stk-theme_44178__style_small_text stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Paraphrasing <a href=\"https://www.splunk.com/en_us/data-insider/what-is-tech-debt.html#different\" target=\"_blank\" class=\"stk-reset\">Splunk, <strong class=\"stk-reset\">intentional technical debt</strong> is</a> created deliberately so a product can be released quickly. Taking on the technical debt is a known and accepted risk.</p><p class=\"stk-theme_44178__style_small_text stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\">However, <strong class=\"stk-reset\">unintentional technical debt</strong> comes from sloppiness, unexpected complexity, or a lack of expertise or knowledge.</p><p class=\"stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\">This creates unknown risks which can’t be tracked or managed.</p></div></div></div></div><div class=\"stk-layout__overhangs_both stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stkY7wje\" data-ce-tag=\"grid\"><div data-col-width=\"12\" class=\"stk-theme_44178__pad_ver_2 stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-theme_44178__mb_15 stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"8\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">1.&nbsp;Code architecture in rich text editors</strong></h4><p class=\"stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__style_font_style-1628517294418 stk-reset\" data-ce-tag=\"paragraph\">Good architecture can save you from accumulating technical debt, but good architecture requires good domain knowledge.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\"><a href=\"https://github.com/tinymce/tinymce/tree/develop/modules/tinymce/src/core/main/ts\" target=\"_blank\" class=\"stk-reset\">TinyMCE’s core engine</a> is tens of thousands of lines of code. It isn’t just a wrapper around the ContentEditable API – it also contains code that abstracts out many of the aspects of rich text editing. That includes everything from basic formatting like bold, to DOM walking and selection handling.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">These abstractions mean that TinyMCE’s developers don’t need to think about them every time they’re working on a feature. They just call a TinyMCE API, and the core engine handles it for them. When an abstracted concept needs to be improved or fixed, it also means there’s only one place in the code to update – not several spread across every feature that uses that concept.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">However, architecture can also hinder more than it helps, if done incorrectly. This is where domain knowledge becomes important, so you can find the right balance between ad-hoc and over-architected.</p></div><div data-col-width=\"4\" class=\"stk-grid-col stk-grid-col_empty\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div></div><div class=\"stk-theme_44178__mb_15 stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"8\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">2. Intentional and unintentional technical debt</h4><p class=\"stk-theme_44178__color_44178_custom_color_3 stk-theme_44178__style_font_style-1628517294418 stk-reset\" data-ce-tag=\"paragraph\">Ideally, you would only accrue technical debt you have chosen to take on. Sometimes, though, technical debt creeps in unintentionally. Often, that’s due to a lack of knowledge.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Developers can't always know and account for everything. Maybe the developers didn't have enough time to brainstorm, or they didn't have the knowledge required to find the optimal solution. Or maybe the implemented solution was a good solution at the time, but it wasn't future-proofed against a problem that popped up later.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">This is where cruft and code rot can start to pile up, creating an ever-growing backlog of technical debt you might not even realize exists. The risk of stumbling on severe technical debt at an inopportune time also increases – potentially delaying or blocking future features after you start development.</p></div><div data-col-width=\"4\" class=\"stk-grid-col stk-grid-col_empty\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div></div><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"8\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">3. Continual refactoring in rich text editors</h4><p class=\"stk-theme_44178__style_font_style-1628517294418 stk-theme_44178__color_44178_custom_color_3 stk-reset\" data-ce-tag=\"paragraph\">Without the domain knowledge required to see the bigger picture, it can be all too easy to continually patch the same piece of code over and over, potentially adding technical debt each time.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">If you find yourself patching and improving and replacing the same piece of code again and again, it’s a good idea to stop and ask yourself “Why?” </p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Sometimes it’s necessary, due to that feature requiring constant updates. However, there’s also a chance it’s a sign of a deeper problem – such as the code having been based on incorrect or incomplete assumptions, due to a lack of understanding.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">The danger of this kind of code is that it’s costing time and effort each time it's updated.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Constant changes also increase the chance of cruft and code rot due to something being forgotten or missed. For example, an API that isn’t used anymore, but hasn’t been cleaned up yet. Such code sits around in your codebase, unnecessarily bloating and complicating it, and making all future work in that area of the codebase more complicated than it needs to be. </p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Avoiding, finding, and remediating these kinds of situations are all easier with the right domain knowledge.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Planning for and managing technical debt in rich text editors isn’t only about features and day-to-day development work. There are other things done at a higher level that can help too.</p></div><div data-col-width=\"4\" class=\"stk-grid-col stk-grid-col_empty\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div></div></div></div><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"8\" class=\"stk-grid-col\" data-ce-tag=\"grid-col\"><h2 class=\"stk-theme_44178__style_large_header stk-reset\" id=\"stk-3\" data-ce-tag=\"paragraph\">Programming principles affect code quality and technical debt accrual</h2><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Quality code is the antithesis of technical debt.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">In addition to domain knowledge, sound software engineering knowledge (particularly in <a class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\" href=\"https://en.wikipedia.org/wiki/Coding_best_practices\" target=\"_blank\">programming principles and their applications</a>) is also essential to developing a quality rich text editor.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Although to be clear, choosing the right programming principles isn’t completely divorced from domain knowledge. There are many principles to choose from, such as KISS, DRY, separation of concerns, and incremental development. And no one principle suits every software project.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Choosing the wrong principles may, in fact, have a detrimental effect on your project. It may even increase your technical debt accrual, by promoting ideas that negatively affect your decisions around technical debt.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Over the years, TinyMCE has learned by trial and error which principles are useful for rich text editing, particularly when it comes to reducing technical debt. Some of these principles tie back to our use of functional programming, but most can also be used standalone.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Examples of some programming principles Tiny uses are:</p></div><div data-col-width=\"1\" class=\"stk-grid-col stk-grid-col_empty\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div><div data-col-width=\"3\" class=\"valign-middle stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stk29rRT\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-slideInRight\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-theme_44178__mb_05 stk-grid\" data-stk-css=\"stk4wDLa\" data-ce-tag=\"grid\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkPJW4T\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_4\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">Recommended resources</strong></p></div></div><div class=\"stk-theme_44178__mb_05 stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkcaU-0\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__style_small_text stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">‘<a href=\"https://www.amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164\" target=\"_blank\" class=\"stk-reset\">Clean Architecture’ by Robert C. Martin</a></p><p class=\"stk-theme_44178__style_small_text stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">‘<a href=\"https://www.callicoder.com/software-development-principles/\" target=\"_blank\" class=\"stk-reset\">8 Software Principles to Live By’ by Rajeev Singh</a></p><p class=\"stk-theme_44178__style_small_text stk-reset\" data-ce-tag=\"paragraph\">‘<a class=\"stk-reset\" href=\"https://lwn.net/Articles/562333/\" target=\"_blank\">The 7 Deadly Sins of Software Deployment’ by Josh Berkus</a></p></div></div></div></div></div></div><div class=\"stk-theme_44178__mb_15 stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"8\" class=\"stk-grid-col\" data-ce-tag=\"grid-col\"><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"1\" class=\"stk-grid-col\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3665662 stk-icon\" src=\"https://ucarecdn.com/1e5f130f-6edb-4bc4-92d3-9b3bdcf40ebc/\"></p></div><div data-col-width=\"7\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkxxRC3\" data-stk-css-m=\"stkYZd2Z\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Immutability:</strong></p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">The <a class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\" href=\"https://www.tiny.cloud/blog/mutable-vs-immutable-javascript/\" target=\"_blank\">principle of immutability</a> states that an object can not be modified after it’s created. In practice, this means avoiding mutating values in your code. This can be particularly useful when dealing with user input, like in rich text editors, and when using JavaScript, as the language's tendency for mutability can be quite problematic.</p></div></div><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"1\" class=\"stk-grid-col\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3665661 stk-icon\" src=\"https://ucarecdn.com/bbe0618b-73d4-4ba5-a820-11caea016f36/\"></p></div><div data-col-width=\"7\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkiVJnA\" data-stk-css-m=\"stkhAo3O\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Modularity:</strong></p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Modularity, or modular programming, is the practice of separating code into independent building blocks, each with a specific purpose. Applications are then formed from many modules. <a class=\"stk-reset\" href=\"https://www.tiny.cloud/blog/modular-programming-principle/\" target=\"_blank\">Modularity is a great tool</a> for managing a complex codebase, like a rich text editor, especially if you start abstracting concepts.</p></div></div><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"1\" class=\"stk-grid-col\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"><img alt=\"\" class=\"stk-reset stk-theme_44178__symbol_custom_image_3665660 stk-icon\" src=\"https://ucarecdn.com/83a98d6f-638d-434f-aa09-89056cd7d361/\"></p></div><div data-col-width=\"7\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stknsOV8\" data-stk-css-m=\"stkGkp1H\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\" data-gtm-vis-has-fired-10171822_255=\"1\">Types:</strong></p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">One of the <a href=\"https://www.tiny.cloud/blog/benefits-of-gradual-strong-typing-in-javascript/\" target=\"_blank\" class=\"stk-reset\">easiest ways to add clarity to your codebase is through types</a>. The quick feedback of a type checker, and the ability to know at a glance exactly what types you’re dealing with, can be great for avoiding technical debt. In a rich text editor, types can be essential for ensuring the layers of your application work together correctly.</p></div></div></div><div data-col-width=\"1\" class=\"stk-grid-col stk-grid-col_empty\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div><div data-col-width=\"3\" class=\"valign-middle stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-grid\" data-stk-css=\"stkewPeN\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-fadeIn\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\"><div data-col-width=\"3\" class=\"stk-theme_44178__pad_round_1 stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__color_44178_custom_color_3 stk-reset stk-theme_44178__style_font_style-1628517714937 stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">What is functional programming?</strong></p><p class=\"stk-theme_44178__style_small_text stk-theme_44178__mb_05 stk-reset\" data-ce-tag=\"paragraph\">Functional programming is a programming paradigm that aims to produce cleaner, clearer, more robust, and more maintainable code.</p><p class=\"stk-theme_44178__style_small_text stk-reset stk-theme_44178__mb_05\" data-ce-tag=\"paragraph\"><a href=\"https://www.tiny.cloud/blog/category-theory-functional-programming/\" target=\"_blank\" class=\"stk-reset\">Find out how Tiny uses Functional Programming →</a></p></div></div></div></div><div class=\"stk-theme_44178__mb_2 stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"8\" class=\"stk-grid-col\" data-ce-tag=\"grid-col\"><h3 class=\"stk-theme_44178__style_medium_header stk-reset\" data-ce-tag=\"paragraph\">Trade-offs rule when managing technical debt</h3><p class=\"stk-reset\" data-ce-tag=\"paragraph\">It’s also worth noting that some principles may be overkill, when you’re just starting to develop a rich text editor. However, others might be painful to introduce later, and are better adopted right from the beginning. </p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">Just like technical debt, understanding the rich text editor domain and the trade-offs involved allows you to plan long-term, thus ensuring you’re using the right principles, at the right time, for the maximum benefits.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">All that said, there’s always another option.</p></div><div data-col-width=\"1\" class=\"stk-grid-col stk-grid-col_empty\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-theme_44178__mb_2 stk-grid\" data-stk-css=\"stkTGKru\" data-ce-tag=\"grid\" data-anim-m=\"false\" data-anim=\"true\" data-anim-name=\"preset-slideInRight\" data-anim-trigger=\"scroll\" data-anim-duration=\"1\" data-anim-delay=\"0\" data-anim-scroll-start=\"10\" data-anim-scroll-finish=\"90\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-grid stk-theme_44178__mb_0\" data-stk-css=\"stk8fAjK\" data-ce-tag=\"grid\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkndfmC\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset stk-theme_44178__color_44178_custom_color_4\" data-ce-tag=\"paragraph\"><strong class=\"stk-reset\">FURTHER INSIGHTS</strong></p></div></div><div class=\"stk-theme_44178__mb_05 stk-grid\" data-ce-tag=\"grid\" data-stk-css=\"stkqTSVZ\"><div data-col-width=\"3\" class=\"stk-grid-col stk-grid-col_last\" data-stk-css=\"stkXkExs\" data-ce-tag=\"grid-col\"><figure class=\"stk-reset stk-image-figure\" data-ce-tag=\"image-figure\"><div class=\"stk-mask\" data-ce-tag=\"mask\"><img src=\"https://ucarecdn.com/0a6e3096-31e2-4472-8631-4dbc1bb5d260/\" data-image-id=\"202975\" data-image-name=\"Tech Debt -2.png\" class=\"stk-image stk-reset\" width=\"640\" height=\"386\" loading=\"lazy\"/></div></figure></div></div><p class=\"stk-theme_44178__style_font_style-1628517714937 stk-reset\" data-stk-css=\"stkXqqFX\" data-ce-tag=\"paragraph\"><a class=\"stk-reset\" href=\"https://www.tiny.cloud/technical-debt-whitepaper\" target=\"_blank\">Download and read Technical Debt in Rich Text Editors White Paper →</a></p></div></div></div></div><div class=\"stk-theme_44178__mb_2 stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"8\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><h2 class=\"stk-theme_44178__style_large_header stk-reset\" id=\"stk-4\" data-ce-tag=\"paragraph\">Choosing the right RTE minimizes technical debt accrual</h2><p class=\"stk-reset\" data-ce-tag=\"paragraph\">The learning curve for developing a rich text editor is steep, and the risks associated with not properly understanding the domain are high. It can take a significant amount of time to build the required domain knowledge in your team. It can take just as long to find the right ways to track and manage your technical debt. </p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">If your application needs a rich text editor, there’s another choice. </p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">You could take on the overhead of developing and maintaining a rich text editor yourself, or you could buy-and-assemble, relying on the expertise of specialists to carry the weight of the technical debt for you. </p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">This allows your developers to focus on domains they’re already familiar with, driving your innovation, scaling rapidly, and delivering value quickly.</p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">You still need a plan for choosing the right rich text editor for your use case, and absorbing updates (especially security critical ones) throughout your application’s lifecycle. However, that’s a significantly simpler plan than developing your own rich text editor. </p><p class=\"stk-reset\" data-ce-tag=\"paragraph\">It’s up to you.</p></div><div data-col-width=\"4\" class=\"stk-grid-col stk-grid-col_empty\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div></div><div class=\"stk-layout__overhangs_both stk-theme_44178__mb_0 stk-grid\" data-stk-css=\"stkOWp3j\" data-ce-tag=\"grid\"><div data-col-width=\"12\" class=\"stk-theme_44178__pad_ver_2 stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"2\" class=\"stk-grid-col stk-grid-col_empty\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div><div data-col-width=\"8\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><p class=\"align-center stk-theme_44178__style_font_style-1652351628236 stk-reset stk-theme_44178__color_44178_custom_color_3\" data-ce-tag=\"paragraph\">Download the white paper</p><p class=\"stk-theme_44178__style_font_style-1628585803915 align-center stk-reset stk-theme_44178__color_44178_custom_color_1\" data-ce-tag=\"paragraph\">Opportunity Cost of Technical Debt: Minimize Your Rich Text Editor Development</p></div><div data-col-width=\"2\" class=\"stk-grid-col stk-grid-col_empty\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div></div><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"2\" class=\"stk-grid-col stk-grid-col_empty\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div><div data-col-width=\"8\" class=\"stk-grid-col stk-grid-col_last\" data-ce-tag=\"grid-col\"><figure class=\"stk-reset stk-embed_rendered\" data-ce-tag=\"embed\"><code class=\"stk-code\"><iframe src=\"https://www2.ephox.com/l/2202/2022-09-29/d9d458\" width=\"100%\" height=\"500\" type=\"text/html\" frameborder=\"0\" allowtransparency=\"true\" style=\"border: 0\"></iframe></code><figcaption class=\"stk-reset stk-description\" data-ce-tag=\"description\"></figcaption></figure></div><div data-col-width=\"2\" class=\"stk-grid-col stk-grid-col_empty\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div></div></div></div><div class=\"stk-layout__overhangs_both stk-grid\" data-stk-css=\"stk30pRI\" data-ce-tag=\"grid\"><div data-col-width=\"12\" class=\"stk-grid-col stk-grid-col_last stk-theme_44178__pad_ver_3\" data-ce-tag=\"grid-col\"><div class=\"stk-grid\" data-ce-tag=\"grid\"><div data-col-width=\"1\" class=\"stk-grid-col stk-grid-col_empty\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div><div data-col-width=\"4\" class=\"stk-grid-col\" data-stk-css=\"\" data-stk-css-m=\"\" data-ce-tag=\"grid-col\"><figure class=\"stk-blueprint--avatar stk-reset stk-image-figure\" data-stk-css=\"stkbC4a7\" data-ce-tag=\"image-figure\"><div class=\"stk-mask\" data-ce-tag=\"mask\"><img src=\"https://ucarecdn.com/1a5df2bb-82ec-41ae-ba94-e2c4cdaff4bd/\" data-image-id=\"221200\" data-image-name=\"1548508487603.jpeg\" class=\"stk-image stk-reset\" width=\"471\" height=\"471\" loading=\"lazy\"/></div></figure></div><div data-col-width=\"6\" class=\"valign-middle stk-grid-col stk-grid-col_last stk-theme_44178__pad_round_1-m\" data-ce-tag=\"grid-col\"><p class=\"stk-theme_44178__style_font_style-1628517328397 stk-theme_44178__mb_05 stk-theme_44178__color_44178_custom_color_3 stk-reset\" data-ce-tag=\"paragraph\">author</p><h4 class=\"stk-theme_44178__style_small_header stk-theme_44178__color_44178_custom_color_0 stk-theme_44178__mb_0 stk-reset\" data-ce-tag=\"paragraph\">Millie Macdonald</h4><p class=\"stk-theme_44178__style_font_style-1628517714937 stk-theme_44178__color_44178_custom_color_2 stk-reset\" data-ce-tag=\"paragraph\">Product Manager at Halo Connect</p><p class=\"stk-theme_44178__style_small_text stk-theme_44178__color_44178_custom_color_0 stk-reset\" data-ce-tag=\"paragraph\">Millie is a Product Manager at Halo Connect who dabbles in writing. Previously, she worked at Tiny as a Product Owner, dev, and QA engineer. She loves learning above all else, whether it's about people, tech, or leadership.</p></div><div data-col-width=\"1\" class=\"stk-grid-col stk-grid-col_empty\" data-ce-tag=\"grid-col\"><p class=\"ce-element--empty stk-element_no-text stk-reset\" data-ce-tag=\"paragraph\"></p></div></div></div></div><style data-stk-css=\"stkXv2fa\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkXv2fa\"]:not(#stk):not(#stk):not(style) {\n    border-bottom: 1px solid #4D66CB\n  }\n</style><style data-stk-css=\"stkeGUeW\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkeGUeW\"]:not(#stk):not(#stk):not(style) {\n    padding: 5px 10px\n  }\n</style><style data-stk-css=\"stkDpXxi\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkDpXxi\"]:not(#stk):not(#stk):not(style) {\n    padding: 5px 10px\n  }\n</style><style data-stk-css=\"stknsOV8\" class=\"\" media=\"(min-width: 769px)\">[data-stk-css=\"stknsOV8\"]:not(#stk):not(#stk):not(style){margin-left: -20px}</style><style data-stk-css-m=\"stkGkp1H\" media=\"(max-width: 768px)\" class=\"\">[data-stk-css-m=\"stkGkp1H\"]:not(#stk):not(#stk):not(#stk):not(style){}</style><style data-stk-css=\"stkiVJnA\" class=\"\" media=\"(min-width: 769px)\">[data-stk-css=\"stkiVJnA\"]:not(#stk):not(#stk):not(style){margin-left: -20px}</style><style data-stk-css-m=\"stkhAo3O\" media=\"(max-width: 768px)\" class=\"\">[data-stk-css-m=\"stkhAo3O\"]:not(#stk):not(#stk):not(#stk):not(style){}</style><style data-stk-css=\"stkxxRC3\" class=\"\" media=\"(min-width: 769px)\">[data-stk-css=\"stkxxRC3\"]:not(#stk):not(#stk):not(style){margin-left: -20px}</style><style data-stk-css-m=\"stkYZd2Z\" media=\"(max-width: 768px)\" class=\"\">[data-stk-css-m=\"stkYZd2Z\"]:not(#stk):not(#stk):not(#stk):not(style){}</style><style data-stk-css=\"stkMFsr8\" class=\"\" media=\"(min-width: 769px)\">[data-stk-css=\"stkMFsr8\"]:not(#stk):not(#stk):not(style){margin-left: -20px}</style><style data-stk-css-m=\"stkEL-km\" media=\"(max-width: 768px)\" class=\"\">[data-stk-css-m=\"stkEL-km\"]:not(#stk):not(#stk):not(#stk):not(style){}</style><style data-stk-css=\"stkeOJud\" class=\"\" media=\"(min-width: 769px)\">[data-stk-css=\"stkeOJud\"]:not(#stk):not(#stk):not(style){margin-left: -20px}</style><style data-stk-css-m=\"stkJ4AOT\" media=\"(max-width: 768px)\" class=\"\">[data-stk-css-m=\"stkJ4AOT\"]:not(#stk):not(#stk):not(#stk):not(style){}</style><style data-stk-css=\"stkMUGgy\" class=\"\" media=\"(min-width: 769px)\">[data-stk-css=\"stkMUGgy\"]:not(#stk):not(#stk):not(style){margin-left: -20px}</style><style data-stk-css-m=\"stkrS9FJ\" media=\"(max-width: 768px)\" class=\"\">[data-stk-css-m=\"stkrS9FJ\"]:not(#stk):not(#stk):not(#stk):not(style){}</style><style data-stk-css=\"stklAgCM\" class=\"\" media=\"(min-width: 769px)\">[data-stk-css=\"stklAgCM\"]:not(#stk):not(#stk):not(style){margin-left: -20px}</style><style data-stk-css-m=\"stkgm-x4\" media=\"(max-width: 768px)\" class=\"\">[data-stk-css-m=\"stkgm-x4\"]:not(#stk):not(#stk):not(#stk):not(style){}</style><style data-stk-css=\"stk29rRT\" class=\"\" media=\"all\">[data-stk-css=\"stk29rRT\"]:not(#stk):not(#stk):not(style){border: 1px solid #4D66CB; border-radius: 4px; box-shadow: 10px 10px 0 -1px #fff, 10px 10px #4D66CB}</style><style data-stk-css=\"stk4wDLa\" class=\"\" media=\"all\">\n  [data-stk-css=\"stk4wDLa\"]:not(#stk):not(#stk):not(style) {\n    border-bottom: 1px solid #4D66CB\n  }\n</style><style data-stk-css=\"stkPJW4T\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkPJW4T\"]:not(#stk):not(#stk):not(style) {\n    padding: 5px 10px\n  }\n</style><style data-stk-css=\"stkcaU-0\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkcaU-0\"]:not(#stk):not(#stk):not(style) {\n    padding: 5px 10px\n  }\n</style><style data-stk-css=\"stkGGcBl\" class=\"\" media=\"all\">[data-stk-css=\"stkGGcBl\"]:not(#stk):not(#stk):not(style){border: 1px solid #4D66CB; border-radius: 4px; box-shadow: 10px 10px 0 -1px #fff, 10px 10px #4D66CB}</style><style data-stk-css=\"stkhp4ek\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkhp4ek\"]:not(#stk):not(#stk):not(style) {\n    border-bottom: 1px solid #4D66CB\n  }\n</style><style data-stk-css=\"stk3UC8i\" class=\"\" media=\"all\">\n  [data-stk-css=\"stk3UC8i\"]:not(#stk):not(#stk):not(style) {\n    padding: 5px 10px\n  }\n</style><style data-stk-css=\"stkWg-5c\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkWg-5c\"]:not(#stk):not(#stk):not(style) {\n    padding: 5px 10px\n  }\n</style><style data-stk-css=\"stkACyIQ\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkACyIQ\"]:not(#stk):not(#stk):not(style) {\n    padding: 0px 10px 10px\n  }\n</style><style data-stk-css=\"stkSI5rz\" class=\"\" media=\"all\">[data-stk-css=\"stkSI5rz\"]:not(#stk):not(#stk):not(style){border: 1px solid #4D66CB; border-radius: 4px; box-shadow: 10px 10px 0 -1px #fff, 10px 10px #4D66CB}</style><style data-stk-css=\"stk3u4_N\" class=\"\" media=\"all\">\n  [data-stk-css=\"stk3u4_N\"]:not(#stk):not(#stk):not(style) {\n    border-bottom: 1px solid #4D66CB\n  }\n</style><style data-stk-css=\"stkQYqk7\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkQYqk7\"]:not(#stk):not(#stk):not(style) {\n    padding: 5px 10px\n  }\n</style><style data-stk-css=\"stkTXCYQ\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkTXCYQ\"]:not(#stk):not(#stk):not(style) {\n    padding: 5px 10px\n  }\n</style><style data-stk-css=\"stkzYalc\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkzYalc\"]:not(#stk):not(#stk):not(style) {\n    padding: 0px 10px 10px\n  }\n</style><style data-stk-css=\"stk7HZ_3\" class=\"\" media=\"all\">[data-stk-css=\"stk7HZ_3\"]:not(#stk):not(#stk):not(style){border: 1px solid #4D66CB; border-radius: 4px; box-shadow: 10px 10px 0 -1px #fff, 10px 10px #4D66CB}</style><style data-stk-css=\"stk9P1F9\" class=\"\" media=\"all\">\n  [data-stk-css=\"stk9P1F9\"]:not(#stk):not(#stk):not(style) {\n    border-bottom: 1px solid #4D66CB\n  }\n</style><style data-stk-css=\"stkyZb81\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkyZb81\"]:not(#stk):not(#stk):not(style) {\n    padding: 5px 10px\n  }\n</style><style data-stk-css=\"stkNRK1g\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkNRK1g\"]:not(#stk):not(#stk):not(style) {\n    padding: 5px 10px\n  }\n</style><style data-stk-css=\"stky0VL7\" class=\"\" media=\"all\">\n  [data-stk-css=\"stky0VL7\"]:not(#stk):not(#stk):not(style) {\n    padding: 0px 10px 10px\n  }\n</style><style data-stk-css=\"stkHD_kz\" class=\"\" media=\"all\">[data-stk-css=\"stkHD_kz\"]:not(#stk):not(#stk):not(style){background-color: #F9FAFB; border-radius: 4px}</style><style data-stk-css=\"stkewPeN\" class=\"\" media=\"all\">[data-stk-css=\"stkewPeN\"]:not(#stk):not(#stk):not(style){background-color: #F9FAFB; border-radius: 4px}</style><style data-stk-css=\"stkTGKru\" class=\"\" media=\"all\">[data-stk-css=\"stkTGKru\"]:not(#stk):not(#stk):not(style){border: 1px solid #4D66CB; border-radius: 4px; box-shadow: 10px 10px 0 -1px #fff, 10px 10px #4D66CB}</style><style data-stk-css=\"stk8fAjK\" class=\"\" media=\"all\">\n  [data-stk-css=\"stk8fAjK\"]:not(#stk):not(#stk):not(style) {\n    border-bottom: 1px solid #4D66CB\n  }\n</style><style data-stk-css=\"stkndfmC\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkndfmC\"]:not(#stk):not(#stk):not(style) {\n    padding: 5px 10px\n  }\n</style><style data-stk-css=\"stkqTSVZ\" class=\"\" media=\"all\">[data-stk-css=\"stkqTSVZ\"]:not(#stk):not(#stk):not(style){background: #D3E1E6}</style><style data-stk-css=\"stkXkExs\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkXkExs\"]:not(#stk):not(#stk):not(style) {\n    padding: 5px 10px\n  }\n</style><style data-stk-css=\"stkXqqFX\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkXqqFX\"]:not(#stk):not(#stk):not(style) {\n    padding: 0px 10px 10px\n  }\n</style><style data-stk-css=\"stk7_--j\" class=\"\" media=\"all\">[data-stk-css=\"stk7_--j\"]:not(#stk):not(#stk):not(style){background: #CFE3E6}</style><style data-stk-css=\"stkENCR5\" class=\"\" media=\"all\">[data-stk-css=\"stkENCR5\"]:not(#stk):not(#stk):not(style){color: #000}</style><style data-stk-css=\"stk30pRI\" class=\"\" media=\"all\">\n  [data-stk-css=\"stk30pRI\"]:not(#stk):not(#stk):not(style) {\n    background-color: rgba(16, 24, 55, 1)\n  }\n</style><style data-stk-css=\"stkbC4a7\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkbC4a7\"]:not(#stk):not(#stk):not(style) {\n    --avatar-size: 180px;\n    align-self: center\n  }\n</style><style data-stk-css=\"stkOWp3j\" class=\"\" media=\"all\">[data-stk-css=\"stkOWp3j\"]:not(#stk):not(#stk):not(style){background-color: rgba(249, 250, 251, 1)}</style><style data-stk-css=\"stkbJwzk\" class=\"\" media=\"all\">\n  [data-stk-css=\"stkbJwzk\"]:not(#stk):not(#stk):not(style) {\n    border: 1px solid #4D66CB;\n    border-radius: 4px;\n    box-shadow: 10px 10px 0 -1px #fff, 10px 10px #4D66CB\n  }\n</style><style data-stk-css=\"stkY7wje\" class=\"\" media=\"all\">[data-stk-css=\"stkY7wje\"]:not(#stk):not(#stk):not(style){background-color: rgba(249, 250, 251, 1)}</style><style data-stk-css=\"stk2TBxt\" class=\"\" media=\"all\">[data-stk-css=\"stk2TBxt\"]:not(#stk):not(#stk):not(style){padding: 0px 10px 10px}</style><style data-stk-css=\"stk3hxGc\" class=\"\" media=\"all\">[data-stk-css=\"stk3hxGc\"]:not(#stk):not(#stk):not(style){padding: 0px 10px 10px}</style><style data-stk-css=\"stk31tk8\" class=\"\" media=\"all\">[data-stk-css=\"stk31tk8\"]:not(#stk):not(#stk):not(style){width: 20%}</style><style data-anim-name=\"preset-slideInRight\" media=\"screen and (min-width: 768px)\" class=\"\">\n      .stk-post [data-anim-name=\"preset-slideInRight\"]:not(#stk):not([data-anim=\"false\"]) {\n        transform: translate3d(100%, 0, 0)\n      }</style><style data-anim-name=\"preset-slideInRight\" media=\"screen and (max-width: 767px)\" class=\"\">\n      .stk-post [data-anim-name=\"preset-slideInRight\"]:not(#stk):not([data-anim-m]),\n      .stk-post [data-anim-name=\"preset-slideInRight\"]:not(#stk):not([data-anim-m=\"false\"]) {\n        transform: translate3d(100%, 0, 0)\n      }</style><script data-anim-name=\"preset-slideInRight\" type=\"application/json\" class=\"\">{\"keyframes\":[{\"transform\":\"translate3d(100%, 0, 0)\",\"offset\":0},{\"transform\":\"none\",\"offset\":1}],\"options\":{\"id\":\"preset-slideInRight\",\"delay\":0,\"duration\":1000}}</script><style data-stk-css=\"stkW8fvU\" class=\"\" media=\"(min-width: 769px)\">[data-stk-css=\"stkW8fvU\"]:not(#stk):not(#stk):not(style){margin-left: -20px}</style><style data-stk-css-m=\"stkX9yl4\" media=\"(max-width: 768px)\" class=\"\">[data-stk-css-m=\"stkX9yl4\"]:not(#stk):not(#stk):not(#stk):not(style){}</style><style data-stk-css=\"stkSRUjV\" class=\"\" media=\"all\">[data-stk-css=\"stkSRUjV\"]:not(#stk):not(#stk):not(style){background: #00BC84}</style><style data-stk-css=\"stk6MqwR\" class=\"\" media=\"all\">[data-stk-css=\"stk6MqwR\"]:not(#stk):not(#stk):not(style){background: #00BC84}</style><style data-stk-css=\"stka-oav\" class=\"\" media=\"all\">[data-stk-css=\"stka-oav\"]:not(#stk):not(#stk):not(style){background: #FFBB80}</style><style data-stk-css=\"stkt-nNv\" class=\"\" media=\"all\">[data-stk-css=\"stkt-nNv\"]:not(#stk):not(#stk):not(style){background: #FFCCD0}</style></div>","id":"11a1713a-9dcd-529c-aa33-4ccd622840f2"},"resourceFiles":null,"canonicalUrl":null}},"pageContext":{"slug":"manage-technical-debt","setkaPostId":26532}},"staticQueryHashes":["2492987505","740350947"]}