{"componentChunkName":"component---src-templates-blog-post-tsx","path":"/a-guide-to-npm-the-node-js-package-manager/","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":"A guide to npm: The node.js package manager","lastUpdated":"February 22nd, 2023","publishDate":"2023-02-22T00:00+10: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,/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/wAARCAANABQDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAACAcF/8QAJxAAAQMDBAEEAwEAAAAAAAAAAQIDBAUGEQAHEiEIEzFBURYiMmH/xAAYAQADAQEAAAAAAAAAAAAAAAABAgMEAP/EABkRAAMBAQEAAAAAAAAAAAAAAAABAhEDIf/aAAwDAQACEQMRAD8AfP5yyyYq4rBkNOK4+p/QB9vg6bDia7rb+y9s7/pEmHGRPdqDCIT1MkyuDalFwcVoAyUn9u1EY9snTqUwb5ghafXGp8JmQEpQXEhRQVZ4n6zjvUgg6sa5KpcflRuja6pio9EpFFpsiNDSgFsOuF0uLxgHKhgHv4B0yCZXkdaqdydsn6bGmP0CTOLKjUI5LjzfBwHAJIPfY6I9/wDNW5tTWtaK154R6/POu/tpryqtn02DR5dPpC0RmHZTLhdUj00EciFgE9/WtXPiqnTLfZzTnD//2Q==","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,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","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>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}}}},"tags":[{"slug":"javascript","title":"Javascript"},{"slug":"node-js","title":"Node.js"},{"slug":"developers","title":"Developers"},{"slug":"product-development","title":"Product Development"}],"body":{"body":"<p>Javascript is the most commonly seen language in web development. And while the multitude of resources that are available to devs is astounding, they&rsquo;re matched by the millions of libraries.</p>\n<p>When you first start using JavaScript libraries, they&rsquo;re easy to maintain. Soon enough though, you&rsquo;ll need a more mature solution &ndash; because libraries start depending on each other.</p>\n<p>Enter the Node Package Manager (npm) &ndash; a JavaScript package manager used in conjunction with <a href=\"https://www.tiny.cloud/solutions/wysiwyg-nodejs-rich-text-editor/\">Node.js</a>, although it can also be used independently. In short, npm gives you control over your project&rsquo;s dependencies, and it&rsquo;s a great way to contribute to the open-source world.&nbsp;</p>\n<p>As an example, TinyMCE has&nbsp; an average of 30,000 deployments with npm per month (TinyMCE is just one of over 1.3 Million packages currently released online).&nbsp;</p>\n<p>This article explains:</p>\n<ul>\n<li>Installing npm</li>\n<li>Configuring npm</li>\n<li>Useful commands, and&nbsp;</li>\n<li>Information on launching your own npm package.&nbsp;</li>\n</ul>\n<p>Read on to see the potential of npm, why it&rsquo;s become the accepted way to keep track of libraries and how it <a href=\"https://www.techtarget.com/searchitoperations/definition/dependency-hell\" target=\"_blank\" rel=\"noopener\">combats dependency hell</a>.</p>\n<h2>Install npm</h2>\n<p>Before you begin to <a href=\"https://docs.npmjs.com/downloading-and-installing-node-js-and-npm\" target=\"_blank\" rel=\"noopener\">run commands and get to installing packages</a>, it&rsquo;s a good idea to know how to check npm versions, and to check if you&rsquo;re already running Node.js or npm is installed.</p>\n<ol>\n<li>\n<p>Run the commands for node and npm with the &ldquo;-v&rdquo; verbose argument to check the version status:</p>\n</li>\n</ol>\n<pre class=\"language-bash\">node -v\nnpm -v</pre>\n<ol start=\"2\">\n<li>\n<p>If you don&rsquo;t receive a version number, you can get Note and npm installed with the following commands:</p>\n</li>\n</ol>\n<pre class=\"language-bash\">npm install -g npm</pre>\n<p>This command installs Node.js, as well as the npm command line interface.&nbsp;</p>\n<h3>How to install a specific version of npm</h3>\n<p>Want to install a specific version? No problem.</p>\n<ol>\n<li>\n<p>Run npm install@[version-number] entering the specific version numbers after the &ldquo;@&rdquo; symbol. For instance:</p>\n</li>\n</ol>\n<pre>npm install [package-name]@[version-number]</pre>\n<h3>How to install a package globally</h3>\n<p>To install a package globally (like Mocha, or Angular-CLI) Add a &ldquo;-g&rdquo; argument like so:</p>\n<pre>npm install -g angular-cli mocha</pre>\n<h3>How to install npm on Windows</h3>\n<p>For Windows environments, make use of the Windows installers. One project is NVM for Windows, which <a href=\"https://github.com/coreybutler/nvm-windows\" target=\"_blank\" rel=\"noopener\">you can find on GitHub</a>, and provides a solution for setting up npm on Windows. Another recommended installer is <a href=\"https://github.com/nullivex/nodist\" target=\"_blank\" rel=\"noopener\">the Nodist project</a>.</p>\n<h3>How to install npm on macOS</h3>\n<p>For macOS, there&rsquo;s <a href=\"https://github.com/nvm-sh/nvm#intro\" target=\"_blank\" rel=\"noopener\">the nvm project</a> for installing and making use of different versions of npm with the command line. The nvm syntax for macOS is slightly different to the npm commands shown in the preceding paragraphs. Take note of these commands:&nbsp;</p>\n<ul>\n<li>nvm ls-remote &ndash; lists available versions</li>\n<li>nvm use node &ndash; makes use of node in a new shell when it is installed</li>\n<li>nvm install &ndash; to get Node and your packages installed</li>\n</ul>\n<h3>How to install npm on Ubuntu</h3>\n<p>The npm documentation recommends making use of a NodeSource installer when working within Linux distributions. NVM, and <a href=\"https://github.com/tj/n\" target=\"_blank\" rel=\"noopener\">another project called &ldquo;n&rdquo;</a>, are designed to work in Unix and Unix-like environments, so these are also options for installing npm on Ubuntu. There are some official <a href=\"https://manpages.ubuntu.com/manpages/bionic/man7/npm-faq.7.html\" target=\"_blank\" rel=\"noopener\">npm Frequently Asked Questions</a> that can help explain some obstacles that might come up with using npm on Ubuntu.</p>\n<h3>How to reinstall npm</h3>\n<p>If you run into the error, and it looks like your npm version is unfixable, here&rsquo;s how to remove it and start over:</p>\n<ol>\n<li>\n<p>Locate the global npm folder. A command to do this:</p>\n</li>\n</ol>\n<pre>npm list -g</pre>\n<ol start=\"2\">\n<li>\n<p>Once located, go to the folder location. The name of the folder to look for is node_modules. Look for a folder named &ldquo;npm&rdquo; inside node_modules, and then delete it</p>\n</li>\n<li>\n<p>Download <a href=\"https://github.com/npm/cli/releases/latest\" target=\"_blank\" rel=\"noopener\">the latest version of npm from GitHub</a> in the form of a .zip file</p>\n</li>\n<li>\n<p>Unzip the file</p>\n</li>\n<li>\n<p>Extract the contents to the node_modules folder</p>\n</li>\n<li>\n<p>Rename the folder extracted from the zip file to &ldquo;npm&rdquo;, and skip any warnings</p>\n</li>\n<li>\n<p>Run npm i -g to update and reinstall npm. Delete any files that are listed in the command update as unnecessary.</p>\n</li>\n</ol>\n<h3>How to uninstall npm</h3>\n<p>The main method to completely remove npm is to search the <code>usr/local/lib</code> folder in your operating system and remove any node or <code>node_modules</code> folders completely. Also:</p>\n<ol>\n<li>\n<p>Check the usr/local/include folder for any node or node_modules folders</p>\n</li>\n<li>\n<p>Check usr/local/bin for any node executables and delete them</p>\n</li>\n<li>\n<p>Search the Home directory for any local, lib, or include folders and delete any node or node_modules folder.</p>\n</li>\n<li>\n<p>Remove any hidden .npm files inside the Home directory.</p>\n</li>\n</ol>\n<p>If you&rsquo;ve made use of an installer like Brew for macOS, also run the brew uninstall node command. The StackOverflow answer <a href=\"https://stackoverflow.com/questions/11177954/how-do-i-completely-uninstall-node-js-and-reinstall-from-beginning-mac-os-x\" target=\"_blank\" rel=\"noopener\">from Dave Jarvis&nbsp; and Dominc Tancredi </a>has more information on completely uninstalling npm and Node.js</p>\n<div align=\"left\">\n<table style=\"width: 468pt;\"><colgroup><col /></colgroup>\n<tbody>\n<tr>\n<td>\n<p><strong>Note:</strong> Some uninstall procedures recommend running sudo rm -rf commands. <strong>Be very careful before running rm -rf commands with sudo</strong>. These commands can unintentionally delete folders without any consultation on the command line.</p>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n<h2>npm Commands</h2>\n<p>Ask a professional front-end developer, and they&rsquo;ll say running npm commands on the command line (CLI) comprises most of the time that they spend interacting with npm. And the npm CLI help interface is actually, well, helpful.</p>\n<ol>\n<li>\n<p>Query help (npm help) with the following:</p>\n</li>\n</ol>\n<pre>npm help</pre>\n<ol start=\"2\">\n<li>\n<p>Read through the returned information the command spews out: it&rsquo;s an entire array of options.</p>\n</li>\n<li>\n<p>Run &ldquo;npm help-search&rdquo; to see a list of search results direct from the npm markdown.</p>\n</li>\n</ol>\n<h3>Useful npm commands</h3>\n<p>This is not an exhaustive list, but here are fourteen useful npm commands to know and run:</p>\n<h4 role=\"presentation\">1. Install</h4>\n<p><strong>The install command is a necessity.</strong> Use it to either install a new package locally or globally (when adding -g ), or to install dependencies listed in the package.json file (more on that later).</p>\n<h4 role=\"presentation\">2. Uninstall</h4>\n<p><strong>Also a necessity. </strong>Purge a specific package from the&nbsp; node_modules directory either locally or globally (when adding -g) using this command.</p>\n<h4 role=\"presentation\">3. Update</h4>\n<p>This usually follows the outdated command to update any outdated packages.</p>\n<h4 role=\"presentation\">4. Access</h4>\n<p>In the context of npm-organizations, and private packages, this command belongs to those who have control of user permissions. That&rsquo;s to say, the project administrators. (Seriously powerful stuff.) Used in conjunction with adduser, owner, team, etc. The command gives fine grained control over who has access to what in a node package.</p>\n<h4 role=\"presentation\">5. Bin</h4>\n<p>Where in the directories are packages installed? Run this command to see an absolute file path.</p>\n<h4 role=\"presentation\">6. Cache</h4>\n<p>If you start installing packages from npm left, right, and center, the cache command is quite useful.</p>\n<ol>\n<li>\n<p>Call the command with the &ldquo;ls&rdquo; subcommand to&nbsp; see a list of locally cached packages</p>\n</li>\n<li>\n<p>Call with the &ldquo;clean&rdquo; subcommand to clear all packages that are in the cache.</p>\n</li>\n</ol>\n<p>Back when the npm registry was still a bit unstable, this was essential to get back to a stable environment or to reset things when you didn&rsquo;t properly set up npm permissions.</p>\n<h4>7. Config</h4>\n<p>We&rsquo;ll get into the different configuration options later, but this command deals primarily with persisting configuration properties in the local or global configuration file by using the&nbsp; set,&nbsp; get or&nbsp; delete subcommands.</p>\n<h4>8. Dedupe</h4>\n<p>Also called &ldquo;ddp&rdquo;, when working on a project over an extensive period of time, and installing packages straight from npm, this command will walk the local package tree and attempt to simplify dependencies.</p>\n<h4>9. ls</h4>\n<p>This command shows a package as a tree structure, depicting its dependencies and their dependencies. It&rsquo;s cool to see and is also useful for comparisons with other projects.</p>\n<h4>10. Outdated</h4>\n<p>A great command used to evaluate the current state of installed dependencies and whether or not they&rsquo;re outdated. In projects where the root dependency list is hundreds of lines long, a manual check on packages is close to impossible. Adding &ldquo;-g --depth=0&rdquo; to this command allows you to also check your globally installed packages.</p>\n<h4>11. Search</h4>\n<p>Use this to search the registry for all packages containing the text provided in the third argument.</p>\n<h4>12. Shrinkwrap</h4>\n<p>In short, this command allows you to lock down specific dependency versions in a package in order, so that a relaxed semver (semantic versioning) number doesn&rsquo;t break production code.</p>\n<h4>13. Star</h4>\n<p>Do you really like the package you&rsquo;re using? Use this command to show your appreciation directly from the terminal, which then reflects on the package&rsquo;s page on the npm registry.</p>\n<h4>14. Version</h4>\n<p>This gives you a shorthand to bump the&nbsp; package.json version property, and do a git tag all in one.</p>\n<h2>npm Configuration&nbsp;</h2>\n<p>Configuration is a major part of npm. There are multiple ways you can configure npm, and they&rsquo;re all important to know. The CLI is the main configuration method.</p>\n<p>A typical setting: <code>npm &lt;command&gt; --&lt;configuration option&gt; [&lt;optional value&gt;].</code></p>\n<p>If there&rsquo;s no value specified, the option sets to &ldquo;true&rdquo; by default.</p>\n<p>An example of one npm configuration could be:</p>\n<ul>\n<li>You&rsquo;re developing your own npm package (more on that later)</li>\n<li>You&rsquo;re working on a scoped (private) npm package</li>\n<li>The team you&rsquo;re working with has decided to publish it as a public package.</li>\n</ul>\n<p>This is done by appending <code>--access=public</code> to your publish command. If the option is not specified, the default would be restricted (private).</p>\n<h3>npm Configuration and environment variables</h3>\n<p>Configuration appended to CLI commands may not persist everywhere you need it to, and it can become tiresome to put together an array of configurations by the commands and options. In these cases, set configuration using environmental variables. On your development workstation, you can <a href=\"https://medium.com/chingu/an-introduction-to-environment-variables-and-how-to-use-them-f602f66d15fa\" target=\"_blank\" rel=\"noopener\">set environment variables</a> as key and value pairs in config files that have the .env file type.</p>\n<p>Any environmental variable set with the <code>npm_config_ prefix</code> will be used to configure npm. Here&rsquo;s an example:&nbsp;</p>\n<pre>export npm_config_registry=localhost:4321</pre>\n<p>This sets the registry configuration option globally. When you run an npm command, and the operating system executes the command, the npm registry location is set to localhost on port 4321, which is the specified value in the key and value pair.</p>\n<h3>npm Configuration and the npmrc file</h3>\n<p>You can also set configuration options using the special .npmrc file. When modifying configuration settings in the .npmrc file, rather than editing the file in a text editor, you can use the CLI by running a command in this format:</p>\n<pre>npm config set &lt;key&gt; &lt;value&gt;</pre>\n<p>For example, you can run <code>npm config set access public </code>to make the publishing configuration of a scoped (private) package persistently public (again, more on this later). By default, this command would persist the configuration locally (the user level configuration as described above), but you can add <code>-g</code> to make it persistent globally across all projects.</p>\n<div align=\"left\">\n<table style=\"width: 468pt;\"><colgroup><col /></colgroup>\n<tbody>\n<tr>\n<td>\n<p><strong>Note:</strong> When persisted configuration needs to happen on the project level, or on the built-in level, the .npmrc file must be modified using a text editor.</p>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>You can set up the .npmrc file to run at different levels depending on your requirements:</p>\n<h4 role=\"presentation\">Project level</h4>\n<p>In the root of a project&rsquo;s code along with its package.json file, typically <code>path/to/project/.npmrc</code></p>\n<h4 role=\"presentation\">User level</h4>\n<p>The directory that configures a specific user&rsquo;s account, typically <code>~/.npmrc.</code></p>\n<h4 role=\"presentation\">Global level</h4>\n<p>The directory where npm looks for global configurations, typically <code>$PREFIX/etc/npmrc</code></p>\n<h4 role=\"presentation\">Built-in level</h4>\n<p>This can typically be found at <code>/path/to/npm/npmrc</code>.</p>\n<div align=\"left\">\n<table><colgroup><col style=\"width: 453px;\" /></colgroup>\n<tbody>\n<tr>\n<td>\n<p><strong>Note:</strong> Be cautious. This configuration is not only global, but it is also part of the npm source code, and best practice recommends (actually demands) that you don&rsquo;t change code you&rsquo;re not responsible for maintaining.&nbsp;</p>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n<h3>npm Configuration with package.json</h3>\n<p>Another method for npm configuration involves settings made from the package.json file. However, this isn&rsquo;t used very often in production, and should only be used if explicitly required.&nbsp;</p>\n<p>The preferred method is using a project level .npmrc file. The package.json file is essential for publishing your own project, and entering the npm registry. The file is where the management part of dependencies comes to life.</p>\n<p>It has two required fields, namely <code>name</code> and <code>version</code>, and together these properties should be a unique identifier.</p>\n<p>The name field should adhere to certain rules, as defined by <a href=\"https://docs.npmjs.com/files/package.json\" target=\"_blank\" rel=\"noopener\">the npm documentation on naming</a>, and the version field is <a href=\"https://docs.npmjs.com/getting-started/semantic-versioning\" target=\"_blank\" rel=\"noopener\">subject to the semver specifications</a>.</p>\n<h2>npm Configuration: notable settings</h2>\n<p>The following settings are important to know for configuring npm.</p>\n<h3>npm Configuration for administration</h3>\n<ul>\n<li>access &ndash; Used to set permissions.</li>\n<li>always-auth &ndash; It&rsquo;s important to note that this setting defaults to false. When it&rsquo;s set to true, npm will always require authentication when contacting the registry.</li>\n<li>ca &ndash; Defaults to the npm certificate authority (CA). It can be changed to null to allow access to only known registrars, or to a specific CA certificate to only grant access to that specific one. This setting, along with cafile, cert and strict-ssl, are seldom used, but speak toward the security and reliability aspect of npm, allowing peace of mind in knowing that the package you are installing is coming from the source you expect.</li>\n</ul>\n<h3>npm configuration command outputs</h3>\n<ul>\n<li>color &ndash; This defaults to true, giving you a break from the standard bleakness of the terminal by coloring the stdout that is allowed by tty file descriptors. If set to false, the terminal remains dull. When it is set to always, it always outputs in color.</li>\n<li>depth &ndash; This setting allows for granular control over what you see with recursive commands, such as ls and outdated, by assigning how deeply they&rsquo;re executed. A value of 0 will only evaluate the first level of dependencies whereas infinity (the default) will cause all levels of dependencies to be evaluated. The exception to this rule is when using it with outdated; in that case, infinity is interpreted as 0 to ensure more relevant output.</li>\n<li>loglevel &ndash; By default, this is set to warn, which gives an error and warning output when running npm commands. Other settings include silent, which provides no output; error, which only logs errors to the output; http, which only announces http request errors; info, for want informative output); verbose, which logs almost everything; and silly, which, like the name suggests, gives a silly amount of output and then some.</li>\n<li>tag-version-prefix &ndash;The conventional default is v, specifying what is prepended to the git tag version when running &ldquo;npm version&rdquo;.</li>\n</ul>\n<h3>npm Configuration development options</h3>\n<ul>\n<li>dev &ndash; This is set to false by default, but when it&rsquo;s set to true (when doing an npm install) all development dependencies in the package.json file will be installed along with the normal dependencies.</li>\n<li>dry-run &ndash; When this setting is set to true, npm will not make any changes to your package but will instead tell you what it would have done. This can be very useful when running certain commands, such as dedupe or update.</li>\n<li>git-tag-version &ndash; It is set to true by default. This setting tags a version in git when running the npm version command. If you are using npm as the package manager for a large project that&rsquo;s tagged versions in git, it can save you time, and remember to update the package.json file for you.</li>\n<li>production &ndash; When this is set to true, npm acts accordingly and runs all commands in production mode. This means that development or optional dependencies won&rsquo;t be installed, nor will any development related tasks be executed.</li>\n<li>rollback &ndash; When set to true, all failed installs are removed. This comes in handy when an installation of dependencies fails. Depending on how verbose and detailed your logs are, you should be able to see what installations failed, make a note of these, and run the npm install command with the rollback option set to true. Then with your notes and a dry-run installation (as described above), you can then debug the problem.</li>\n</ul>\n<h3>npm Configuration saving options</h3>\n<ul>\n<li>save &ndash; When installing a package directly from the registry, you can append &ndash;save to the command which adds the installed package to the dependencies option in the package.json file. For example, npm install lodash` will add lodash to your dependencies.</li>\n<li>save-dev &ndash; Similar to the save configuration option, add --save-dev when installing a package, and it&rsquo;s then added to the devDependencies option in the package.json file.</li>\n<li>save-optional &ndash; Similar to the save configuration option, add --save-optional when installing a package, and it&rsquo;s then added to the optionalDependencies option in the package.json file.</li>\n<li>save-exact &ndash; When installing packages, the save, save-dev and save-optional options modify the package.json file by inserting the installed package into its respective property with a semver range operator. When invoking the &lsquo;save-exact&rsquo; configuration setting with a value of true, in conjunction with one of the mentioned settings above, a specific version number is used, ignoring the semver range.</li>\n<li>save-prefix &ndash; This sets the semver range operator when using save, save-dev or save-optional. The default is ^, allowing for minor upgrades on packages to happen on install. This can be set to any valid prefixed semver range operator.</li>\n</ul>\n<h2>How to update an npm version</h2>\n<p>You can also use npm to update itself.</p>\n<ol>\n<li>\n<p>Run &ldquo;npm install -g npm@latest&rdquo;, and npm updates to the latest stable release.</p>\n</li>\n</ol>\n<div align=\"left\">\n<table style=\"width: 468pt;\"><colgroup><col /></colgroup>\n<tbody>\n<tr>\n<td>\n<p><strong>Note:</strong> Each version of Node.js ships with a specific version of npm, and it&rsquo;s best practice not to mess with that pairing too much. At the end of the day, stick with the pairing as they&rsquo;re intended.</p>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>When using npm as a standalone tool, make sure you understand the implications of using whatever version you choose. There&rsquo;s a great tool for managing different Node.js versions (and in turn npm versions) on the same system called nvm.</p>\n<h2>How to create your own npm package</h2>\n<p>The npm ecosystem is filled with packages, written by millions of different developers around the world. Each solves some sort of problem, providing an abstraction, or presenting an implementation of something. Chances are that, at some point, you too will want to develop your own package to share.</p>\n<ol>\n<li>\n<p>Create a package.json file with the minimum required properties of &ldquo;name&rdquo; and &ldquo;version&rdquo;, and then the &ldquo;main&rdquo; property to specify the entry point, for example, index.js.</p>\n</li>\n<li>\n<p>Write your code in that index.js file</p>\n</li>\n<li>\n<p>Login with your npm user account, or create a new user from the terminal, and you&rsquo;re ready to publish it to the npm registry.</p>\n</li>\n</ol>\n<h3>How to publish an npm package: commands</h3>\n<h4 role=\"presentation\">1. Link</h4>\n<p>When you&rsquo;re developing your own npm package, this allows you to create a symlink to the global context so it can be tested as if it was installed globally from the npm registry. For example, if you&rsquo;re writing an assembly tool in a node that has a CLI installed globally, you can run this command and test your CLI&rsquo;s behavior without needing to deploy it first.</p>\n<h4 role=\"presentation\">2. Publish</h4>\n<p><strong>This command is essential when developing your own package for npm. </strong>It does exactly as the name suggests; it publishes your package to the npm registry.</p>\n<h3>How to publish an npm package: the package.json</h3>\n<p>There are other notable options to add to your package.json file when you&rsquo;re developing your own npm packages. The following list highlights some of these options:</p>\n<h3 role=\"presentation\">1. main</h3>\n<p>This defines the entry point to your application, which defaults to index.js. Depending on convention or your framework, it might be app.jsor main.js. You can, of course, make it anything you want.</p>\n<h3 role=\"presentation\">2. scripts</h3>\n<p>Scripts are an underrated property. First, it can be used to do things on prepublish. Second, it provides a place where you can alias an array of frequently used commands, ranging from build tasks (defined in gulp or grunt), triggering the installation of other dependencies (with something like bower), starting a development server with webpack, or running a set of bash commands.</p>\n<h3 role=\"presentation\">3. dependencies</h3>\n<p>Dependencies is an option needed for a list of packages that&rsquo;s needed by your application, along with the compatible semver number. It is a notable property because you can modify it with commands when you install local packages. This is done by adding <code>--save</code> (or the shorthand -S) at the end of the npm install command. When you do this, the newly installed package(s) gets added to the list of dependencies in your package.json file.&nbsp;</p>\n<p>Similarly, a dependency can also be removed by adding --save when running the npm uninstall command.</p>\n<p>It&rsquo;s important to be aware of the semver versioning patterns of each of the dependencies and what they mean. If the semver rule is too strict, you lose out on new features and improvements, whereas if the semver rule is too relaxed, a breaking version of a package can be installed along the line. A broken package install can prove to be quite difficult to resolve, especially when the minified version of the package is used.</p>\n<h3 role=\"presentation\">4. devDependencies</h3>\n<p>Separate from the dependencies property, the &ldquo;devDependencies&rdquo; property allows you to define dependencies that are only used during the development phase and are not required for the production build (like ESLint, grunt-contrib packages, and Protractor). Just as with dependencies, this property can be modified from the terminal by adding --save-dev (or the shorthand -D) to the end of the npm install command or the npm uninstall command.&nbsp;</p>\n<p>The same caution applies to versioning as mentioned under dependencies.</p>\n<h3 role=\"presentation\">5. bin</h3>\n<p>This is where you can specify your package&rsquo;s executable file(s), like the path to a CLI utility. This property tells npm to create local or global symlinks to your executables when your package is installed.</p>\n<h3 role=\"presentation\">6. config</h3>\n<p>As discussed earlier, this is where you define configuration settings though your package.json file.</p>\n<h3 role=\"presentation\">7. private</h3>\n<p>When set to true, npm will refuse to publish the package. <strong>This should not be confused with the access configuration setting. </strong>The private option is a handy setting when you have a project that utilizes npm along with its package.json but it is not intended to be published to the npm registry, either scoped or public.</p>\n<p>If your intention changes, simply change the setting to false, and you will be able to publish your package.</p>\n<h2>Custom properties</h2>\n<p>The package.json file also accepts custom properties, as long as the name isn&rsquo;t already defined or reserved.</p>\n<h3>How to create a private npm package</h3>\n<p>Packages can be public or private:</p>\n<ul>\n<li>Public packages are free to publish and are available for everyone to utilize.</li>\n<li>Private packages, called scoped packages, can only be published if you&rsquo;re a paid private modules user, and they can be identified by the distinct @username/ that is prepended to the package name.</li>\n</ul>\n<p>Private (scoped) packages can also be published publicly by calling the publish command with <code>--access=public</code>.</p>\n<p>Furthermore, if you spend some more time expanding and improving your package&rsquo;s code base, and it&rsquo;s time for a new version to be published, you simply alter the version (as per the semver rules and convention) of the package in the package.json file and type npm publish.</p>\n<p>You can also use the command line interface and call npm version &lt;update_type&gt;, where update_type is either patch, minor, or major, as described by semver, and this then automatically increments the version number in the package.json file.</p>\n<h2>npm Organizations</h2>\n<p>Again, <a href=\"https://docs.npmjs.com/\" target=\"_blank\" rel=\"noopener\">the npm documentation for this</a> is excellent, and it would be futile to just repeat their words.&nbsp;</p>\n<p>What can be said about organizations in the npm context is that it&rsquo;s extremely fine grained, and when managed correctly, large teams and individuals working on scoped or public packages under one name, can be very well managed and restricted. While it&rsquo;s complex to master, it&rsquo;s very rewarding.</p>\n<h2>The power of npm</h2>\n<p>Ultimately the documentation that npm provides is extensive and should be consulted for specifics, but this article provides a useful overview of both basic and more advanced, involved functionality, conveying the awesomeness of npm.</p>\n<p>As with all things, strong opinions exist and many faults can be found. But if you&rsquo;ve never tried npm (or node, for that matter), dive in, and explore it for yourself. Chances are you&rsquo;ll enjoy it more than you think.</p>\n<p>And if you&rsquo;ve tested out npm by installing TinyMCE (npm -i tinymce 😉) you can explore <a href=\"https://www.tiny.cloud/docs/tinymce/6/\" target=\"_blank\" rel=\"noopener\">the TinyMCE docs pages</a> to learn how you can deploy TinyMCE in your environment with everyone's favorite Node.js package manager.</p>\n<div>\n<p class=\"css-ngpmkc\" style=\"color: white; display: block; text-align: center; font-size: 1.3rem; height: auto; text-transform: initial;\"><a style=\"color: white;\" href=\"https://www.tiny.cloud/auth/signup/?utm_campaign=blogcta&amp;utm_source=blog&amp;utm_medium=internal%20(blog)&amp;utm_content=cta2\" target=\"_blank\" rel=\"noopener\">Put TinyMCE to the test and sign up today for a FREE API key!</a></p>\n</div>","childMarkdownRemark":{"html":"<p>Javascript is the most commonly seen language in web development. And while the multitude of resources that are available to devs is astounding, they&rsquo;re matched by the millions of libraries.</p>\n<p>When you first start using JavaScript libraries, they&rsquo;re easy to maintain. Soon enough though, you&rsquo;ll need a more mature solution &ndash; because libraries start depending on each other.</p>\n<p>Enter the Node Package Manager (npm) &ndash; a JavaScript package manager used in conjunction with <a href=\"https://www.tiny.cloud/solutions/wysiwyg-nodejs-rich-text-editor/\">Node.js</a>, although it can also be used independently. In short, npm gives you control over your project&rsquo;s dependencies, and it&rsquo;s a great way to contribute to the open-source world.&nbsp;</p>\n<p>As an example, TinyMCE has&nbsp; an average of 30,000 deployments with npm per month (TinyMCE is just one of over 1.3 Million packages currently released online).&nbsp;</p>\n<p>This article explains:</p>\n<ul>\n<li>Installing npm</li>\n<li>Configuring npm</li>\n<li>Useful commands, and&nbsp;</li>\n<li>Information on launching your own npm package.&nbsp;</li>\n</ul>\n<p>Read on to see the potential of npm, why it&rsquo;s become the accepted way to keep track of libraries and how it <a href=\"https://www.techtarget.com/searchitoperations/definition/dependency-hell\" target=\"_blank\" rel=\"noopener\">combats dependency hell</a>.</p>\n<h2>Install npm</h2>\n<p>Before you begin to <a href=\"https://docs.npmjs.com/downloading-and-installing-node-js-and-npm\" target=\"_blank\" rel=\"noopener\">run commands and get to installing packages</a>, it&rsquo;s a good idea to know how to check npm versions, and to check if you&rsquo;re already running Node.js or npm is installed.</p>\n<ol>\n<li>\n<p>Run the commands for node and npm with the &ldquo;-v&rdquo; verbose argument to check the version status:</p>\n</li>\n</ol>\n<pre class=\"language-bash\">node -v\nnpm -v</pre>\n<ol start=\"2\">\n<li>\n<p>If you don&rsquo;t receive a version number, you can get Note and npm installed with the following commands:</p>\n</li>\n</ol>\n<pre class=\"language-bash\">npm install -g npm</pre>\n<p>This command installs Node.js, as well as the npm command line interface.&nbsp;</p>\n<h3>How to install a specific version of npm</h3>\n<p>Want to install a specific version? No problem.</p>\n<ol>\n<li>\n<p>Run npm install@[version-number] entering the specific version numbers after the &ldquo;@&rdquo; symbol. For instance:</p>\n</li>\n</ol>\n<pre>npm install [package-name]@[version-number]</pre>\n<h3>How to install a package globally</h3>\n<p>To install a package globally (like Mocha, or Angular-CLI) Add a &ldquo;-g&rdquo; argument like so:</p>\n<pre>npm install -g angular-cli mocha</pre>\n<h3>How to install npm on Windows</h3>\n<p>For Windows environments, make use of the Windows installers. One project is NVM for Windows, which <a href=\"https://github.com/coreybutler/nvm-windows\" target=\"_blank\" rel=\"noopener\">you can find on GitHub</a>, and provides a solution for setting up npm on Windows. Another recommended installer is <a href=\"https://github.com/nullivex/nodist\" target=\"_blank\" rel=\"noopener\">the Nodist project</a>.</p>\n<h3>How to install npm on macOS</h3>\n<p>For macOS, there&rsquo;s <a href=\"https://github.com/nvm-sh/nvm#intro\" target=\"_blank\" rel=\"noopener\">the nvm project</a> for installing and making use of different versions of npm with the command line. The nvm syntax for macOS is slightly different to the npm commands shown in the preceding paragraphs. Take note of these commands:&nbsp;</p>\n<ul>\n<li>nvm ls-remote &ndash; lists available versions</li>\n<li>nvm use node &ndash; makes use of node in a new shell when it is installed</li>\n<li>nvm install &ndash; to get Node and your packages installed</li>\n</ul>\n<h3>How to install npm on Ubuntu</h3>\n<p>The npm documentation recommends making use of a NodeSource installer when working within Linux distributions. NVM, and <a href=\"https://github.com/tj/n\" target=\"_blank\" rel=\"noopener\">another project called &ldquo;n&rdquo;</a>, are designed to work in Unix and Unix-like environments, so these are also options for installing npm on Ubuntu. There are some official <a href=\"https://manpages.ubuntu.com/manpages/bionic/man7/npm-faq.7.html\" target=\"_blank\" rel=\"noopener\">npm Frequently Asked Questions</a> that can help explain some obstacles that might come up with using npm on Ubuntu.</p>\n<h3>How to reinstall npm</h3>\n<p>If you run into the error, and it looks like your npm version is unfixable, here&rsquo;s how to remove it and start over:</p>\n<ol>\n<li>\n<p>Locate the global npm folder. A command to do this:</p>\n</li>\n</ol>\n<pre>npm list -g</pre>\n<ol start=\"2\">\n<li>\n<p>Once located, go to the folder location. The name of the folder to look for is node_modules. Look for a folder named &ldquo;npm&rdquo; inside node_modules, and then delete it</p>\n</li>\n<li>\n<p>Download <a href=\"https://github.com/npm/cli/releases/latest\" target=\"_blank\" rel=\"noopener\">the latest version of npm from GitHub</a> in the form of a .zip file</p>\n</li>\n<li>\n<p>Unzip the file</p>\n</li>\n<li>\n<p>Extract the contents to the node_modules folder</p>\n</li>\n<li>\n<p>Rename the folder extracted from the zip file to &ldquo;npm&rdquo;, and skip any warnings</p>\n</li>\n<li>\n<p>Run npm i -g to update and reinstall npm. Delete any files that are listed in the command update as unnecessary.</p>\n</li>\n</ol>\n<h3>How to uninstall npm</h3>\n<p>The main method to completely remove npm is to search the <code>usr/local/lib</code> folder in your operating system and remove any node or <code>node_modules</code> folders completely. Also:</p>\n<ol>\n<li>\n<p>Check the usr/local/include folder for any node or node_modules folders</p>\n</li>\n<li>\n<p>Check usr/local/bin for any node executables and delete them</p>\n</li>\n<li>\n<p>Search the Home directory for any local, lib, or include folders and delete any node or node_modules folder.</p>\n</li>\n<li>\n<p>Remove any hidden .npm files inside the Home directory.</p>\n</li>\n</ol>\n<p>If you&rsquo;ve made use of an installer like Brew for macOS, also run the brew uninstall node command. The StackOverflow answer <a href=\"https://stackoverflow.com/questions/11177954/how-do-i-completely-uninstall-node-js-and-reinstall-from-beginning-mac-os-x\" target=\"_blank\" rel=\"noopener\">from Dave Jarvis&nbsp; and Dominc Tancredi </a>has more information on completely uninstalling npm and Node.js</p>\n<div align=\"left\">\n<table style=\"width: 468pt;\"><colgroup><col /></colgroup>\n<tbody>\n<tr>\n<td>\n<p><strong>Note:</strong> Some uninstall procedures recommend running sudo rm -rf commands. <strong>Be very careful before running rm -rf commands with sudo</strong>. These commands can unintentionally delete folders without any consultation on the command line.</p>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n<h2>npm Commands</h2>\n<p>Ask a professional front-end developer, and they&rsquo;ll say running npm commands on the command line (CLI) comprises most of the time that they spend interacting with npm. And the npm CLI help interface is actually, well, helpful.</p>\n<ol>\n<li>\n<p>Query help (npm help) with the following:</p>\n</li>\n</ol>\n<pre>npm help</pre>\n<ol start=\"2\">\n<li>\n<p>Read through the returned information the command spews out: it&rsquo;s an entire array of options.</p>\n</li>\n<li>\n<p>Run &ldquo;npm help-search&rdquo; to see a list of search results direct from the npm markdown.</p>\n</li>\n</ol>\n<h3>Useful npm commands</h3>\n<p>This is not an exhaustive list, but here are fourteen useful npm commands to know and run:</p>\n<h4 role=\"presentation\">1. Install</h4>\n<p><strong>The install command is a necessity.</strong> Use it to either install a new package locally or globally (when adding -g ), or to install dependencies listed in the package.json file (more on that later).</p>\n<h4 role=\"presentation\">2. Uninstall</h4>\n<p><strong>Also a necessity. </strong>Purge a specific package from the&nbsp; node_modules directory either locally or globally (when adding -g) using this command.</p>\n<h4 role=\"presentation\">3. Update</h4>\n<p>This usually follows the outdated command to update any outdated packages.</p>\n<h4 role=\"presentation\">4. Access</h4>\n<p>In the context of npm-organizations, and private packages, this command belongs to those who have control of user permissions. That&rsquo;s to say, the project administrators. (Seriously powerful stuff.) Used in conjunction with adduser, owner, team, etc. The command gives fine grained control over who has access to what in a node package.</p>\n<h4 role=\"presentation\">5. Bin</h4>\n<p>Where in the directories are packages installed? Run this command to see an absolute file path.</p>\n<h4 role=\"presentation\">6. Cache</h4>\n<p>If you start installing packages from npm left, right, and center, the cache command is quite useful.</p>\n<ol>\n<li>\n<p>Call the command with the &ldquo;ls&rdquo; subcommand to&nbsp; see a list of locally cached packages</p>\n</li>\n<li>\n<p>Call with the &ldquo;clean&rdquo; subcommand to clear all packages that are in the cache.</p>\n</li>\n</ol>\n<p>Back when the npm registry was still a bit unstable, this was essential to get back to a stable environment or to reset things when you didn&rsquo;t properly set up npm permissions.</p>\n<h4>7. Config</h4>\n<p>We&rsquo;ll get into the different configuration options later, but this command deals primarily with persisting configuration properties in the local or global configuration file by using the&nbsp; set,&nbsp; get or&nbsp; delete subcommands.</p>\n<h4>8. Dedupe</h4>\n<p>Also called &ldquo;ddp&rdquo;, when working on a project over an extensive period of time, and installing packages straight from npm, this command will walk the local package tree and attempt to simplify dependencies.</p>\n<h4>9. ls</h4>\n<p>This command shows a package as a tree structure, depicting its dependencies and their dependencies. It&rsquo;s cool to see and is also useful for comparisons with other projects.</p>\n<h4>10. Outdated</h4>\n<p>A great command used to evaluate the current state of installed dependencies and whether or not they&rsquo;re outdated. In projects where the root dependency list is hundreds of lines long, a manual check on packages is close to impossible. Adding &ldquo;-g --depth=0&rdquo; to this command allows you to also check your globally installed packages.</p>\n<h4>11. Search</h4>\n<p>Use this to search the registry for all packages containing the text provided in the third argument.</p>\n<h4>12. Shrinkwrap</h4>\n<p>In short, this command allows you to lock down specific dependency versions in a package in order, so that a relaxed semver (semantic versioning) number doesn&rsquo;t break production code.</p>\n<h4>13. Star</h4>\n<p>Do you really like the package you&rsquo;re using? Use this command to show your appreciation directly from the terminal, which then reflects on the package&rsquo;s page on the npm registry.</p>\n<h4>14. Version</h4>\n<p>This gives you a shorthand to bump the&nbsp; package.json version property, and do a git tag all in one.</p>\n<h2>npm Configuration&nbsp;</h2>\n<p>Configuration is a major part of npm. There are multiple ways you can configure npm, and they&rsquo;re all important to know. The CLI is the main configuration method.</p>\n<p>A typical setting: <code>npm &lt;command&gt; --&lt;configuration option&gt; [&lt;optional value&gt;].</code></p>\n<p>If there&rsquo;s no value specified, the option sets to &ldquo;true&rdquo; by default.</p>\n<p>An example of one npm configuration could be:</p>\n<ul>\n<li>You&rsquo;re developing your own npm package (more on that later)</li>\n<li>You&rsquo;re working on a scoped (private) npm package</li>\n<li>The team you&rsquo;re working with has decided to publish it as a public package.</li>\n</ul>\n<p>This is done by appending <code>--access=public</code> to your publish command. If the option is not specified, the default would be restricted (private).</p>\n<h3>npm Configuration and environment variables</h3>\n<p>Configuration appended to CLI commands may not persist everywhere you need it to, and it can become tiresome to put together an array of configurations by the commands and options. In these cases, set configuration using environmental variables. On your development workstation, you can <a href=\"https://medium.com/chingu/an-introduction-to-environment-variables-and-how-to-use-them-f602f66d15fa\" target=\"_blank\" rel=\"noopener\">set environment variables</a> as key and value pairs in config files that have the .env file type.</p>\n<p>Any environmental variable set with the <code>npm_config_ prefix</code> will be used to configure npm. Here&rsquo;s an example:&nbsp;</p>\n<pre>export npm_config_registry=localhost:4321</pre>\n<p>This sets the registry configuration option globally. When you run an npm command, and the operating system executes the command, the npm registry location is set to localhost on port 4321, which is the specified value in the key and value pair.</p>\n<h3>npm Configuration and the npmrc file</h3>\n<p>You can also set configuration options using the special .npmrc file. When modifying configuration settings in the .npmrc file, rather than editing the file in a text editor, you can use the CLI by running a command in this format:</p>\n<pre>npm config set &lt;key&gt; &lt;value&gt;</pre>\n<p>For example, you can run <code>npm config set access public </code>to make the publishing configuration of a scoped (private) package persistently public (again, more on this later). By default, this command would persist the configuration locally (the user level configuration as described above), but you can add <code>-g</code> to make it persistent globally across all projects.</p>\n<div align=\"left\">\n<table style=\"width: 468pt;\"><colgroup><col /></colgroup>\n<tbody>\n<tr>\n<td>\n<p><strong>Note:</strong> When persisted configuration needs to happen on the project level, or on the built-in level, the .npmrc file must be modified using a text editor.</p>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>You can set up the .npmrc file to run at different levels depending on your requirements:</p>\n<h4 role=\"presentation\">Project level</h4>\n<p>In the root of a project&rsquo;s code along with its package.json file, typically <code>path/to/project/.npmrc</code></p>\n<h4 role=\"presentation\">User level</h4>\n<p>The directory that configures a specific user&rsquo;s account, typically <code>~/.npmrc.</code></p>\n<h4 role=\"presentation\">Global level</h4>\n<p>The directory where npm looks for global configurations, typically <code>$PREFIX/etc/npmrc</code></p>\n<h4 role=\"presentation\">Built-in level</h4>\n<p>This can typically be found at <code>/path/to/npm/npmrc</code>.</p>\n<div align=\"left\">\n<table><colgroup><col style=\"width: 453px;\" /></colgroup>\n<tbody>\n<tr>\n<td>\n<p><strong>Note:</strong> Be cautious. This configuration is not only global, but it is also part of the npm source code, and best practice recommends (actually demands) that you don&rsquo;t change code you&rsquo;re not responsible for maintaining.&nbsp;</p>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n<h3>npm Configuration with package.json</h3>\n<p>Another method for npm configuration involves settings made from the package.json file. However, this isn&rsquo;t used very often in production, and should only be used if explicitly required.&nbsp;</p>\n<p>The preferred method is using a project level .npmrc file. The package.json file is essential for publishing your own project, and entering the npm registry. The file is where the management part of dependencies comes to life.</p>\n<p>It has two required fields, namely <code>name</code> and <code>version</code>, and together these properties should be a unique identifier.</p>\n<p>The name field should adhere to certain rules, as defined by <a href=\"https://docs.npmjs.com/files/package.json\" target=\"_blank\" rel=\"noopener\">the npm documentation on naming</a>, and the version field is <a href=\"https://docs.npmjs.com/getting-started/semantic-versioning\" target=\"_blank\" rel=\"noopener\">subject to the semver specifications</a>.</p>\n<h2>npm Configuration: notable settings</h2>\n<p>The following settings are important to know for configuring npm.</p>\n<h3>npm Configuration for administration</h3>\n<ul>\n<li>access &ndash; Used to set permissions.</li>\n<li>always-auth &ndash; It&rsquo;s important to note that this setting defaults to false. When it&rsquo;s set to true, npm will always require authentication when contacting the registry.</li>\n<li>ca &ndash; Defaults to the npm certificate authority (CA). It can be changed to null to allow access to only known registrars, or to a specific CA certificate to only grant access to that specific one. This setting, along with cafile, cert and strict-ssl, are seldom used, but speak toward the security and reliability aspect of npm, allowing peace of mind in knowing that the package you are installing is coming from the source you expect.</li>\n</ul>\n<h3>npm configuration command outputs</h3>\n<ul>\n<li>color &ndash; This defaults to true, giving you a break from the standard bleakness of the terminal by coloring the stdout that is allowed by tty file descriptors. If set to false, the terminal remains dull. When it is set to always, it always outputs in color.</li>\n<li>depth &ndash; This setting allows for granular control over what you see with recursive commands, such as ls and outdated, by assigning how deeply they&rsquo;re executed. A value of 0 will only evaluate the first level of dependencies whereas infinity (the default) will cause all levels of dependencies to be evaluated. The exception to this rule is when using it with outdated; in that case, infinity is interpreted as 0 to ensure more relevant output.</li>\n<li>loglevel &ndash; By default, this is set to warn, which gives an error and warning output when running npm commands. Other settings include silent, which provides no output; error, which only logs errors to the output; http, which only announces http request errors; info, for want informative output); verbose, which logs almost everything; and silly, which, like the name suggests, gives a silly amount of output and then some.</li>\n<li>tag-version-prefix &ndash;The conventional default is v, specifying what is prepended to the git tag version when running &ldquo;npm version&rdquo;.</li>\n</ul>\n<h3>npm Configuration development options</h3>\n<ul>\n<li>dev &ndash; This is set to false by default, but when it&rsquo;s set to true (when doing an npm install) all development dependencies in the package.json file will be installed along with the normal dependencies.</li>\n<li>dry-run &ndash; When this setting is set to true, npm will not make any changes to your package but will instead tell you what it would have done. This can be very useful when running certain commands, such as dedupe or update.</li>\n<li>git-tag-version &ndash; It is set to true by default. This setting tags a version in git when running the npm version command. If you are using npm as the package manager for a large project that&rsquo;s tagged versions in git, it can save you time, and remember to update the package.json file for you.</li>\n<li>production &ndash; When this is set to true, npm acts accordingly and runs all commands in production mode. This means that development or optional dependencies won&rsquo;t be installed, nor will any development related tasks be executed.</li>\n<li>rollback &ndash; When set to true, all failed installs are removed. This comes in handy when an installation of dependencies fails. Depending on how verbose and detailed your logs are, you should be able to see what installations failed, make a note of these, and run the npm install command with the rollback option set to true. Then with your notes and a dry-run installation (as described above), you can then debug the problem.</li>\n</ul>\n<h3>npm Configuration saving options</h3>\n<ul>\n<li>save &ndash; When installing a package directly from the registry, you can append &ndash;save to the command which adds the installed package to the dependencies option in the package.json file. For example, npm install lodash` will add lodash to your dependencies.</li>\n<li>save-dev &ndash; Similar to the save configuration option, add --save-dev when installing a package, and it&rsquo;s then added to the devDependencies option in the package.json file.</li>\n<li>save-optional &ndash; Similar to the save configuration option, add --save-optional when installing a package, and it&rsquo;s then added to the optionalDependencies option in the package.json file.</li>\n<li>save-exact &ndash; When installing packages, the save, save-dev and save-optional options modify the package.json file by inserting the installed package into its respective property with a semver range operator. When invoking the &lsquo;save-exact&rsquo; configuration setting with a value of true, in conjunction with one of the mentioned settings above, a specific version number is used, ignoring the semver range.</li>\n<li>save-prefix &ndash; This sets the semver range operator when using save, save-dev or save-optional. The default is ^, allowing for minor upgrades on packages to happen on install. This can be set to any valid prefixed semver range operator.</li>\n</ul>\n<h2>How to update an npm version</h2>\n<p>You can also use npm to update itself.</p>\n<ol>\n<li>\n<p>Run &ldquo;npm install -g npm@latest&rdquo;, and npm updates to the latest stable release.</p>\n</li>\n</ol>\n<div align=\"left\">\n<table style=\"width: 468pt;\"><colgroup><col /></colgroup>\n<tbody>\n<tr>\n<td>\n<p><strong>Note:</strong> Each version of Node.js ships with a specific version of npm, and it&rsquo;s best practice not to mess with that pairing too much. At the end of the day, stick with the pairing as they&rsquo;re intended.</p>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>When using npm as a standalone tool, make sure you understand the implications of using whatever version you choose. There&rsquo;s a great tool for managing different Node.js versions (and in turn npm versions) on the same system called nvm.</p>\n<h2>How to create your own npm package</h2>\n<p>The npm ecosystem is filled with packages, written by millions of different developers around the world. Each solves some sort of problem, providing an abstraction, or presenting an implementation of something. Chances are that, at some point, you too will want to develop your own package to share.</p>\n<ol>\n<li>\n<p>Create a package.json file with the minimum required properties of &ldquo;name&rdquo; and &ldquo;version&rdquo;, and then the &ldquo;main&rdquo; property to specify the entry point, for example, index.js.</p>\n</li>\n<li>\n<p>Write your code in that index.js file</p>\n</li>\n<li>\n<p>Login with your npm user account, or create a new user from the terminal, and you&rsquo;re ready to publish it to the npm registry.</p>\n</li>\n</ol>\n<h3>How to publish an npm package: commands</h3>\n<h4 role=\"presentation\">1. Link</h4>\n<p>When you&rsquo;re developing your own npm package, this allows you to create a symlink to the global context so it can be tested as if it was installed globally from the npm registry. For example, if you&rsquo;re writing an assembly tool in a node that has a CLI installed globally, you can run this command and test your CLI&rsquo;s behavior without needing to deploy it first.</p>\n<h4 role=\"presentation\">2. Publish</h4>\n<p><strong>This command is essential when developing your own package for npm. </strong>It does exactly as the name suggests; it publishes your package to the npm registry.</p>\n<h3>How to publish an npm package: the package.json</h3>\n<p>There are other notable options to add to your package.json file when you&rsquo;re developing your own npm packages. The following list highlights some of these options:</p>\n<h3 role=\"presentation\">1. main</h3>\n<p>This defines the entry point to your application, which defaults to index.js. Depending on convention or your framework, it might be app.jsor main.js. You can, of course, make it anything you want.</p>\n<h3 role=\"presentation\">2. scripts</h3>\n<p>Scripts are an underrated property. First, it can be used to do things on prepublish. Second, it provides a place where you can alias an array of frequently used commands, ranging from build tasks (defined in gulp or grunt), triggering the installation of other dependencies (with something like bower), starting a development server with webpack, or running a set of bash commands.</p>\n<h3 role=\"presentation\">3. dependencies</h3>\n<p>Dependencies is an option needed for a list of packages that&rsquo;s needed by your application, along with the compatible semver number. It is a notable property because you can modify it with commands when you install local packages. This is done by adding <code>--save</code> (or the shorthand -S) at the end of the npm install command. When you do this, the newly installed package(s) gets added to the list of dependencies in your package.json file.&nbsp;</p>\n<p>Similarly, a dependency can also be removed by adding --save when running the npm uninstall command.</p>\n<p>It&rsquo;s important to be aware of the semver versioning patterns of each of the dependencies and what they mean. If the semver rule is too strict, you lose out on new features and improvements, whereas if the semver rule is too relaxed, a breaking version of a package can be installed along the line. A broken package install can prove to be quite difficult to resolve, especially when the minified version of the package is used.</p>\n<h3 role=\"presentation\">4. devDependencies</h3>\n<p>Separate from the dependencies property, the &ldquo;devDependencies&rdquo; property allows you to define dependencies that are only used during the development phase and are not required for the production build (like ESLint, grunt-contrib packages, and Protractor). Just as with dependencies, this property can be modified from the terminal by adding --save-dev (or the shorthand -D) to the end of the npm install command or the npm uninstall command.&nbsp;</p>\n<p>The same caution applies to versioning as mentioned under dependencies.</p>\n<h3 role=\"presentation\">5. bin</h3>\n<p>This is where you can specify your package&rsquo;s executable file(s), like the path to a CLI utility. This property tells npm to create local or global symlinks to your executables when your package is installed.</p>\n<h3 role=\"presentation\">6. config</h3>\n<p>As discussed earlier, this is where you define configuration settings though your package.json file.</p>\n<h3 role=\"presentation\">7. private</h3>\n<p>When set to true, npm will refuse to publish the package. <strong>This should not be confused with the access configuration setting. </strong>The private option is a handy setting when you have a project that utilizes npm along with its package.json but it is not intended to be published to the npm registry, either scoped or public.</p>\n<p>If your intention changes, simply change the setting to false, and you will be able to publish your package.</p>\n<h2>Custom properties</h2>\n<p>The package.json file also accepts custom properties, as long as the name isn&rsquo;t already defined or reserved.</p>\n<h3>How to create a private npm package</h3>\n<p>Packages can be public or private:</p>\n<ul>\n<li>Public packages are free to publish and are available for everyone to utilize.</li>\n<li>Private packages, called scoped packages, can only be published if you&rsquo;re a paid private modules user, and they can be identified by the distinct @username/ that is prepended to the package name.</li>\n</ul>\n<p>Private (scoped) packages can also be published publicly by calling the publish command with <code>--access=public</code>.</p>\n<p>Furthermore, if you spend some more time expanding and improving your package&rsquo;s code base, and it&rsquo;s time for a new version to be published, you simply alter the version (as per the semver rules and convention) of the package in the package.json file and type npm publish.</p>\n<p>You can also use the command line interface and call npm version &lt;update_type&gt;, where update_type is either patch, minor, or major, as described by semver, and this then automatically increments the version number in the package.json file.</p>\n<h2>npm Organizations</h2>\n<p>Again, <a href=\"https://docs.npmjs.com/\" target=\"_blank\" rel=\"noopener\">the npm documentation for this</a> is excellent, and it would be futile to just repeat their words.&nbsp;</p>\n<p>What can be said about organizations in the npm context is that it&rsquo;s extremely fine grained, and when managed correctly, large teams and individuals working on scoped or public packages under one name, can be very well managed and restricted. While it&rsquo;s complex to master, it&rsquo;s very rewarding.</p>\n<h2>The power of npm</h2>\n<p>Ultimately the documentation that npm provides is extensive and should be consulted for specifics, but this article provides a useful overview of both basic and more advanced, involved functionality, conveying the awesomeness of npm.</p>\n<p>As with all things, strong opinions exist and many faults can be found. But if you&rsquo;ve never tried npm (or node, for that matter), dive in, and explore it for yourself. Chances are you&rsquo;ll enjoy it more than you think.</p>\n<p>And if you&rsquo;ve tested out npm by installing TinyMCE (npm -i tinymce 😉) you can explore <a href=\"https://www.tiny.cloud/docs/tinymce/6/\" target=\"_blank\" rel=\"noopener\">the TinyMCE docs pages</a> to learn how you can deploy TinyMCE in your environment with everyone's favorite Node.js package manager.</p>\n<div>\n<p class=\"css-ngpmkc\" style=\"color: white; display: block; text-align: center; font-size: 1.3rem; height: auto; text-transform: initial;\"><a style=\"color: white;\" href=\"https://www.tiny.cloud/auth/signup/?utm_campaign=blogcta&amp;utm_source=blog&amp;utm_medium=internal%20(blog)&amp;utm_content=cta2\" target=\"_blank\" rel=\"noopener\">Put TinyMCE to the test and sign up today for a FREE API key!</a></p>\n</div>","htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Javascript is the most commonly seen language in web development. And while the multitude of resources that are available to devs is astounding, they’re matched by the millions of libraries."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"When you first start using JavaScript libraries, they’re easy to maintain. Soon enough though, you’ll need a more mature solution – because libraries start depending on each other."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Enter the Node Package Manager (npm) – a JavaScript package manager used in conjunction with "},{"type":"element","tagName":"a","properties":{"href":"https://www.tiny.cloud/solutions/wysiwyg-nodejs-rich-text-editor/"},"children":[{"type":"text","value":"Node.js"}]},{"type":"text","value":", although it can also be used independently. In short, npm gives you control over your project’s dependencies, and it’s a great way to contribute to the open-source world. "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"As an example, TinyMCE has  an average of 30,000 deployments with npm per month (TinyMCE is just one of over 1.3 Million packages currently released online). "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This article explains:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Installing npm"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Configuring npm"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Useful commands, and "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Information on launching your own npm package. "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Read on to see the potential of npm, why it’s become the accepted way to keep track of libraries and how it "},{"type":"element","tagName":"a","properties":{"href":"https://www.techtarget.com/searchitoperations/definition/dependency-hell","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"combats dependency hell"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{},"children":[{"type":"text","value":"Install npm"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Before you begin to "},{"type":"element","tagName":"a","properties":{"href":"https://docs.npmjs.com/downloading-and-installing-node-js-and-npm","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"run commands and get to installing packages"}]},{"type":"text","value":", it’s a good idea to know how to check npm versions, and to check if you’re already running Node.js or npm is installed."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Run the commands for node and npm with the “-v” verbose argument to check the version status:"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{"className":["language-bash"]},"children":[{"type":"text","value":"node -v\nnpm -v"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{"start":2},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"If you don’t receive a version number, you can get Note and npm installed with the following commands:"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{"className":["language-bash"]},"children":[{"type":"text","value":"npm install -g npm"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This command installs Node.js, as well as the npm command line interface. "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"How to install a specific version of npm"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Want to install a specific version? No problem."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Run npm install@[version-number] entering the specific version numbers after the “@” symbol. For instance:"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"npm install [package-name]@[version-number]"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"How to install a package globally"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"To install a package globally (like Mocha, or Angular-CLI) Add a “-g” argument like so:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"npm install -g angular-cli mocha"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"How to install npm on Windows"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"For Windows environments, make use of the Windows installers. One project is NVM for Windows, which "},{"type":"element","tagName":"a","properties":{"href":"https://github.com/coreybutler/nvm-windows","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"you can find on GitHub"}]},{"type":"text","value":", and provides a solution for setting up npm on Windows. Another recommended installer is "},{"type":"element","tagName":"a","properties":{"href":"https://github.com/nullivex/nodist","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"the Nodist project"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"How to install npm on macOS"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"For macOS, there’s "},{"type":"element","tagName":"a","properties":{"href":"https://github.com/nvm-sh/nvm#intro","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"the nvm project"}]},{"type":"text","value":" for installing and making use of different versions of npm with the command line. The nvm syntax for macOS is slightly different to the npm commands shown in the preceding paragraphs. Take note of these commands: "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"nvm ls-remote – lists available versions"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"nvm use node – makes use of node in a new shell when it is installed"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"nvm install – to get Node and your packages installed"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"How to install npm on Ubuntu"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The npm documentation recommends making use of a NodeSource installer when working within Linux distributions. NVM, and "},{"type":"element","tagName":"a","properties":{"href":"https://github.com/tj/n","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"another project called “n”"}]},{"type":"text","value":", are designed to work in Unix and Unix-like environments, so these are also options for installing npm on Ubuntu. There are some official "},{"type":"element","tagName":"a","properties":{"href":"https://manpages.ubuntu.com/manpages/bionic/man7/npm-faq.7.html","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"npm Frequently Asked Questions"}]},{"type":"text","value":" that can help explain some obstacles that might come up with using npm on Ubuntu."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"How to reinstall npm"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"If you run into the error, and it looks like your npm version is unfixable, here’s how to remove it and start over:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Locate the global npm folder. A command to do this:"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"npm list -g"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{"start":2},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Once located, go to the folder location. The name of the folder to look for is node_modules. Look for a folder named “npm” inside node_modules, and then delete it"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Download "},{"type":"element","tagName":"a","properties":{"href":"https://github.com/npm/cli/releases/latest","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"the latest version of npm from GitHub"}]},{"type":"text","value":" in the form of a .zip file"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Unzip the file"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Extract the contents to the node_modules folder"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Rename the folder extracted from the zip file to “npm”, and skip any warnings"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Run npm i -g to update and reinstall npm. Delete any files that are listed in the command update as unnecessary."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"How to uninstall npm"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The main method to completely remove npm is to search the "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"usr/local/lib"}]},{"type":"text","value":" folder in your operating system and remove any node or "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"node_modules"}]},{"type":"text","value":" folders completely. Also:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Check the usr/local/include folder for any node or node_modules folders"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Check usr/local/bin for any node executables and delete them"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Search the Home directory for any local, lib, or include folders and delete any node or node_modules folder."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Remove any hidden .npm files inside the Home directory."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"If you’ve made use of an installer like Brew for macOS, also run the brew uninstall node command. The StackOverflow answer "},{"type":"element","tagName":"a","properties":{"href":"https://stackoverflow.com/questions/11177954/how-do-i-completely-uninstall-node-js-and-reinstall-from-beginning-mac-os-x","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"from Dave Jarvis  and Dominc Tancredi "}]},{"type":"text","value":"has more information on completely uninstalling npm and Node.js"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"align":"left"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"table","properties":{"style":"width: 468pt;"},"children":[{"type":"element","tagName":"colgroup","properties":{},"children":[{"type":"element","tagName":"col","properties":{},"children":[]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"tbody","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"tr","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Note:"}]},{"type":"text","value":" Some uninstall procedures recommend running sudo rm -rf commands. "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Be very careful before running rm -rf commands with sudo"}]},{"type":"text","value":". These commands can unintentionally delete folders without any consultation on the command line."}]},{"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":"h2","properties":{},"children":[{"type":"text","value":"npm Commands"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ask a professional front-end developer, and they’ll say running npm commands on the command line (CLI) comprises most of the time that they spend interacting with npm. And the npm CLI help interface is actually, well, helpful."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Query help (npm help) with the following:"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"npm help"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{"start":2},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Read through the returned information the command spews out: it’s an entire array of options."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Run “npm help-search” to see a list of search results direct from the npm markdown."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"Useful npm commands"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This is not an exhaustive list, but here are fourteen useful npm commands to know and run:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"role":"presentation"},"children":[{"type":"text","value":"1. Install"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"The install command is a necessity."}]},{"type":"text","value":" Use it to either install a new package locally or globally (when adding -g ), or to install dependencies listed in the package.json file (more on that later)."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"role":"presentation"},"children":[{"type":"text","value":"2. Uninstall"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Also a necessity. "}]},{"type":"text","value":"Purge a specific package from the  node_modules directory either locally or globally (when adding -g) using this command."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"role":"presentation"},"children":[{"type":"text","value":"3. Update"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This usually follows the outdated command to update any outdated packages."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"role":"presentation"},"children":[{"type":"text","value":"4. Access"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In the context of npm-organizations, and private packages, this command belongs to those who have control of user permissions. That’s to say, the project administrators. (Seriously powerful stuff.) Used in conjunction with adduser, owner, team, etc. The command gives fine grained control over who has access to what in a node package."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"role":"presentation"},"children":[{"type":"text","value":"5. Bin"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Where in the directories are packages installed? Run this command to see an absolute file path."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"role":"presentation"},"children":[{"type":"text","value":"6. Cache"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"If you start installing packages from npm left, right, and center, the cache command is quite useful."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Call the command with the “ls” subcommand to  see a list of locally cached packages"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Call with the “clean” subcommand to clear all packages that are in the cache."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Back when the npm registry was still a bit unstable, this was essential to get back to a stable environment or to reset things when you didn’t properly set up npm permissions."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{},"children":[{"type":"text","value":"7. Config"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"We’ll get into the different configuration options later, but this command deals primarily with persisting configuration properties in the local or global configuration file by using the  set,  get or  delete subcommands."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{},"children":[{"type":"text","value":"8. Dedupe"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Also called “ddp”, when working on a project over an extensive period of time, and installing packages straight from npm, this command will walk the local package tree and attempt to simplify dependencies."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{},"children":[{"type":"text","value":"9. ls"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This command shows a package as a tree structure, depicting its dependencies and their dependencies. It’s cool to see and is also useful for comparisons with other projects."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{},"children":[{"type":"text","value":"10. Outdated"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"A great command used to evaluate the current state of installed dependencies and whether or not they’re outdated. In projects where the root dependency list is hundreds of lines long, a manual check on packages is close to impossible. Adding “-g --depth=0” to this command allows you to also check your globally installed packages."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{},"children":[{"type":"text","value":"11. Search"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Use this to search the registry for all packages containing the text provided in the third argument."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{},"children":[{"type":"text","value":"12. Shrinkwrap"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In short, this command allows you to lock down specific dependency versions in a package in order, so that a relaxed semver (semantic versioning) number doesn’t break production code."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{},"children":[{"type":"text","value":"13. Star"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Do you really like the package you’re using? Use this command to show your appreciation directly from the terminal, which then reflects on the package’s page on the npm registry."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{},"children":[{"type":"text","value":"14. Version"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This gives you a shorthand to bump the  package.json version property, and do a git tag all in one."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{},"children":[{"type":"text","value":"npm Configuration "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Configuration is a major part of npm. There are multiple ways you can configure npm, and they’re all important to know. The CLI is the main configuration method."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"A typical setting: "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"npm <command> --<configuration option> [<optional value>]."}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"If there’s no value specified, the option sets to “true” by default."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"An example of one npm configuration could be:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"You’re developing your own npm package (more on that later)"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"You’re working on a scoped (private) npm package"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"The team you’re working with has decided to publish it as a public package."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This is done by appending "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"--access=public"}]},{"type":"text","value":" to your publish command. If the option is not specified, the default would be restricted (private)."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"npm Configuration and environment variables"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Configuration appended to CLI commands may not persist everywhere you need it to, and it can become tiresome to put together an array of configurations by the commands and options. In these cases, set configuration using environmental variables. On your development workstation, you can "},{"type":"element","tagName":"a","properties":{"href":"https://medium.com/chingu/an-introduction-to-environment-variables-and-how-to-use-them-f602f66d15fa","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"set environment variables"}]},{"type":"text","value":" as key and value pairs in config files that have the .env file type."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Any environmental variable set with the "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"npm_config_ prefix"}]},{"type":"text","value":" will be used to configure npm. Here’s an example: "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"export npm_config_registry=localhost:4321"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This sets the registry configuration option globally. When you run an npm command, and the operating system executes the command, the npm registry location is set to localhost on port 4321, which is the specified value in the key and value pair."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"npm Configuration and the npmrc file"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"You can also set configuration options using the special .npmrc file. When modifying configuration settings in the .npmrc file, rather than editing the file in a text editor, you can use the CLI by running a command in this format:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"npm config set <key> <value>"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"For example, you can run "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"npm config set access public "}]},{"type":"text","value":"to make the publishing configuration of a scoped (private) package persistently public (again, more on this later). By default, this command would persist the configuration locally (the user level configuration as described above), but you can add "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"-g"}]},{"type":"text","value":" to make it persistent globally across all projects."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"align":"left"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"table","properties":{"style":"width: 468pt;"},"children":[{"type":"element","tagName":"colgroup","properties":{},"children":[{"type":"element","tagName":"col","properties":{},"children":[]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"tbody","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"tr","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Note:"}]},{"type":"text","value":" When persisted configuration needs to happen on the project level, or on the built-in level, the .npmrc file must be modified using a text editor."}]},{"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":"p","properties":{},"children":[{"type":"text","value":"You can set up the .npmrc file to run at different levels depending on your requirements:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"role":"presentation"},"children":[{"type":"text","value":"Project level"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In the root of a project’s code along with its package.json file, typically "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"path/to/project/.npmrc"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"role":"presentation"},"children":[{"type":"text","value":"User level"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The directory that configures a specific user’s account, typically "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"~/.npmrc."}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"role":"presentation"},"children":[{"type":"text","value":"Global level"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The directory where npm looks for global configurations, typically "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"$PREFIX/etc/npmrc"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"role":"presentation"},"children":[{"type":"text","value":"Built-in level"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This can typically be found at "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"/path/to/npm/npmrc"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"align":"left"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"table","properties":{},"children":[{"type":"element","tagName":"colgroup","properties":{},"children":[{"type":"element","tagName":"col","properties":{"style":"width: 453px;"},"children":[]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"tbody","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"tr","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Note:"}]},{"type":"text","value":" Be cautious. This configuration is not only global, but it is also part of the npm source code, and best practice recommends (actually demands) that you don’t change code you’re not responsible for maintaining. "}]},{"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":"h3","properties":{},"children":[{"type":"text","value":"npm Configuration with package.json"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Another method for npm configuration involves settings made from the package.json file. However, this isn’t used very often in production, and should only be used if explicitly required. "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The preferred method is using a project level .npmrc file. The package.json file is essential for publishing your own project, and entering the npm registry. The file is where the management part of dependencies comes to life."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"It has two required fields, namely "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"name"}]},{"type":"text","value":" and "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"version"}]},{"type":"text","value":", and together these properties should be a unique identifier."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The name field should adhere to certain rules, as defined by "},{"type":"element","tagName":"a","properties":{"href":"https://docs.npmjs.com/files/package.json","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"the npm documentation on naming"}]},{"type":"text","value":", and the version field is "},{"type":"element","tagName":"a","properties":{"href":"https://docs.npmjs.com/getting-started/semantic-versioning","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"subject to the semver specifications"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{},"children":[{"type":"text","value":"npm Configuration: notable settings"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The following settings are important to know for configuring npm."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"npm Configuration for administration"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"access – Used to set permissions."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"always-auth – It’s important to note that this setting defaults to false. When it’s set to true, npm will always require authentication when contacting the registry."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"ca – Defaults to the npm certificate authority (CA). It can be changed to null to allow access to only known registrars, or to a specific CA certificate to only grant access to that specific one. This setting, along with cafile, cert and strict-ssl, are seldom used, but speak toward the security and reliability aspect of npm, allowing peace of mind in knowing that the package you are installing is coming from the source you expect."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"npm configuration command outputs"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"color – This defaults to true, giving you a break from the standard bleakness of the terminal by coloring the stdout that is allowed by tty file descriptors. If set to false, the terminal remains dull. When it is set to always, it always outputs in color."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"depth – This setting allows for granular control over what you see with recursive commands, such as ls and outdated, by assigning how deeply they’re executed. A value of 0 will only evaluate the first level of dependencies whereas infinity (the default) will cause all levels of dependencies to be evaluated. The exception to this rule is when using it with outdated; in that case, infinity is interpreted as 0 to ensure more relevant output."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"loglevel – By default, this is set to warn, which gives an error and warning output when running npm commands. Other settings include silent, which provides no output; error, which only logs errors to the output; http, which only announces http request errors; info, for want informative output); verbose, which logs almost everything; and silly, which, like the name suggests, gives a silly amount of output and then some."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"tag-version-prefix –The conventional default is v, specifying what is prepended to the git tag version when running “npm version”."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"npm Configuration development options"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"dev – This is set to false by default, but when it’s set to true (when doing an npm install) all development dependencies in the package.json file will be installed along with the normal dependencies."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"dry-run – When this setting is set to true, npm will not make any changes to your package but will instead tell you what it would have done. This can be very useful when running certain commands, such as dedupe or update."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"git-tag-version – It is set to true by default. This setting tags a version in git when running the npm version command. If you are using npm as the package manager for a large project that’s tagged versions in git, it can save you time, and remember to update the package.json file for you."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"production – When this is set to true, npm acts accordingly and runs all commands in production mode. This means that development or optional dependencies won’t be installed, nor will any development related tasks be executed."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"rollback – When set to true, all failed installs are removed. This comes in handy when an installation of dependencies fails. Depending on how verbose and detailed your logs are, you should be able to see what installations failed, make a note of these, and run the npm install command with the rollback option set to true. Then with your notes and a dry-run installation (as described above), you can then debug the problem."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"npm Configuration saving options"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"save – When installing a package directly from the registry, you can append –save to the command which adds the installed package to the dependencies option in the package.json file. For example, npm install lodash` will add lodash to your dependencies."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"save-dev – Similar to the save configuration option, add --save-dev when installing a package, and it’s then added to the devDependencies option in the package.json file."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"save-optional – Similar to the save configuration option, add --save-optional when installing a package, and it’s then added to the optionalDependencies option in the package.json file."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"save-exact – When installing packages, the save, save-dev and save-optional options modify the package.json file by inserting the installed package into its respective property with a semver range operator. When invoking the ‘save-exact’ configuration setting with a value of true, in conjunction with one of the mentioned settings above, a specific version number is used, ignoring the semver range."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"save-prefix – This sets the semver range operator when using save, save-dev or save-optional. The default is ^, allowing for minor upgrades on packages to happen on install. This can be set to any valid prefixed semver range operator."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{},"children":[{"type":"text","value":"How to update an npm version"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"You can also use npm to update itself."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Run “npm install -g npm@latest”, and npm updates to the latest stable release."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"align":"left"},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"table","properties":{"style":"width: 468pt;"},"children":[{"type":"element","tagName":"colgroup","properties":{},"children":[{"type":"element","tagName":"col","properties":{},"children":[]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"tbody","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"tr","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"td","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Note:"}]},{"type":"text","value":" Each version of Node.js ships with a specific version of npm, and it’s best practice not to mess with that pairing too much. At the end of the day, stick with the pairing as they’re intended."}]},{"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":"p","properties":{},"children":[{"type":"text","value":"When using npm as a standalone tool, make sure you understand the implications of using whatever version you choose. There’s a great tool for managing different Node.js versions (and in turn npm versions) on the same system called nvm."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{},"children":[{"type":"text","value":"How to create your own npm package"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The npm ecosystem is filled with packages, written by millions of different developers around the world. Each solves some sort of problem, providing an abstraction, or presenting an implementation of something. Chances are that, at some point, you too will want to develop your own package to share."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Create a package.json file with the minimum required properties of “name” and “version”, and then the “main” property to specify the entry point, for example, index.js."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Write your code in that index.js file"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Login with your npm user account, or create a new user from the terminal, and you’re ready to publish it to the npm registry."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"How to publish an npm package: commands"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"role":"presentation"},"children":[{"type":"text","value":"1. Link"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"When you’re developing your own npm package, this allows you to create a symlink to the global context so it can be tested as if it was installed globally from the npm registry. For example, if you’re writing an assembly tool in a node that has a CLI installed globally, you can run this command and test your CLI’s behavior without needing to deploy it first."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"role":"presentation"},"children":[{"type":"text","value":"2. Publish"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"This command is essential when developing your own package for npm. "}]},{"type":"text","value":"It does exactly as the name suggests; it publishes your package to the npm registry."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"How to publish an npm package: the package.json"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"There are other notable options to add to your package.json file when you’re developing your own npm packages. The following list highlights some of these options:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"role":"presentation"},"children":[{"type":"text","value":"1. main"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This defines the entry point to your application, which defaults to index.js. Depending on convention or your framework, it might be app.jsor main.js. You can, of course, make it anything you want."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"role":"presentation"},"children":[{"type":"text","value":"2. scripts"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Scripts are an underrated property. First, it can be used to do things on prepublish. Second, it provides a place where you can alias an array of frequently used commands, ranging from build tasks (defined in gulp or grunt), triggering the installation of other dependencies (with something like bower), starting a development server with webpack, or running a set of bash commands."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"role":"presentation"},"children":[{"type":"text","value":"3. dependencies"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Dependencies is an option needed for a list of packages that’s needed by your application, along with the compatible semver number. It is a notable property because you can modify it with commands when you install local packages. This is done by adding "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"--save"}]},{"type":"text","value":" (or the shorthand -S) at the end of the npm install command. When you do this, the newly installed package(s) gets added to the list of dependencies in your package.json file. "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Similarly, a dependency can also be removed by adding --save when running the npm uninstall command."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"It’s important to be aware of the semver versioning patterns of each of the dependencies and what they mean. If the semver rule is too strict, you lose out on new features and improvements, whereas if the semver rule is too relaxed, a breaking version of a package can be installed along the line. A broken package install can prove to be quite difficult to resolve, especially when the minified version of the package is used."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"role":"presentation"},"children":[{"type":"text","value":"4. devDependencies"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Separate from the dependencies property, the “devDependencies” property allows you to define dependencies that are only used during the development phase and are not required for the production build (like ESLint, grunt-contrib packages, and Protractor). Just as with dependencies, this property can be modified from the terminal by adding --save-dev (or the shorthand -D) to the end of the npm install command or the npm uninstall command. "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The same caution applies to versioning as mentioned under dependencies."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"role":"presentation"},"children":[{"type":"text","value":"5. bin"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This is where you can specify your package’s executable file(s), like the path to a CLI utility. This property tells npm to create local or global symlinks to your executables when your package is installed."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"role":"presentation"},"children":[{"type":"text","value":"6. config"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"As discussed earlier, this is where you define configuration settings though your package.json file."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"role":"presentation"},"children":[{"type":"text","value":"7. private"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"When set to true, npm will refuse to publish the package. "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"This should not be confused with the access configuration setting. "}]},{"type":"text","value":"The private option is a handy setting when you have a project that utilizes npm along with its package.json but it is not intended to be published to the npm registry, either scoped or public."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"If your intention changes, simply change the setting to false, and you will be able to publish your package."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{},"children":[{"type":"text","value":"Custom properties"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The package.json file also accepts custom properties, as long as the name isn’t already defined or reserved."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"How to create a private npm package"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Packages can be public or private:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Public packages are free to publish and are available for everyone to utilize."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Private packages, called scoped packages, can only be published if you’re a paid private modules user, and they can be identified by the distinct @username/ that is prepended to the package name."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Private (scoped) packages can also be published publicly by calling the publish command with "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"--access=public"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Furthermore, if you spend some more time expanding and improving your package’s code base, and it’s time for a new version to be published, you simply alter the version (as per the semver rules and convention) of the package in the package.json file and type npm publish."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"You can also use the command line interface and call npm version <update_type>, where update_type is either patch, minor, or major, as described by semver, and this then automatically increments the version number in the package.json file."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{},"children":[{"type":"text","value":"npm Organizations"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Again, "},{"type":"element","tagName":"a","properties":{"href":"https://docs.npmjs.com/","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"the npm documentation for this"}]},{"type":"text","value":" is excellent, and it would be futile to just repeat their words. "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"What can be said about organizations in the npm context is that it’s extremely fine grained, and when managed correctly, large teams and individuals working on scoped or public packages under one name, can be very well managed and restricted. While it’s complex to master, it’s very rewarding."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{},"children":[{"type":"text","value":"The power of npm"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ultimately the documentation that npm provides is extensive and should be consulted for specifics, but this article provides a useful overview of both basic and more advanced, involved functionality, conveying the awesomeness of npm."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"As with all things, strong opinions exist and many faults can be found. But if you’ve never tried npm (or node, for that matter), dive in, and explore it for yourself. Chances are you’ll enjoy it more than you think."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"And if you’ve tested out npm by installing TinyMCE (npm -i tinymce 😉) you can explore "},{"type":"element","tagName":"a","properties":{"href":"https://www.tiny.cloud/docs/tinymce/6/","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"the TinyMCE docs pages"}]},{"type":"text","value":" to learn how you can deploy TinyMCE in your environment with everyone's favorite Node.js package manager."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{"className":["css-ngpmkc"],"style":"color: white; display: block; text-align: center; font-size: 1.3rem; height: auto; text-transform: initial;"},"children":[{"type":"element","tagName":"a","properties":{"style":"color: white;","href":"https://www.tiny.cloud/auth/signup/?utm_campaign=blogcta&utm_source=blog&utm_medium=internal%20(blog)&utm_content=cta2","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"Put TinyMCE to the test and sign up today for a FREE API key!"}]}]},{"type":"text","value":"\n"}]}],"data":{"quirksMode":false}}}},"body2":null,"codepens":null,"heroImage":{"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=2560&q=80&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=640&h=360&q=80&fit=scale 640w,\n//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=1280&h=720&q=80&fit=scale 1280w,\n//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=1920&h=1080&q=80&fit=scale 1920w","srcWebp":"//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=2560&q=80&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=640&h=360&q=80&fm=webp&fit=scale 640w,\n//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=1280&h=720&q=80&fm=webp&fit=scale 1280w,\n//images.ctfassets.net/s600jj41gsex/73Ay6sAygYK8Yzyf2i5z0j/e8ec8c9f403a22f0388820da22222c81/npm_guide.png?w=1920&h=1080&q=80&fm=webp&fit=scale 1920w","sizes":"(max-width: 2560px) 100vw, 2560px"}},"alt":"npm logo appearing on a grid background.","artistName":null,"artistUrl":null},"author":{"slug":"martin-gouws","name":"Martin Gouws","image":{"fluid":{"base64":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAUABQDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAACAkG/8QAJxAAAgECBQQCAwEAAAAAAAAAAQIDBAUABggREgchMUETURQVIiP/xAAYAQADAQEAAAAAAAAAAAAAAAADBAUGAv/EACARAAICAgICAwAAAAAAAAAAAAECABEDIQQxEiIFE3H/2gAMAwEAAhEDEQA/ABXoj6VWLq313o7ZmSNZ7PQ0U1ymp3Xkk3AqoVh7G777e9tsD+RythwgJ2dTrELMbWs/T5kK/wCQjJl20065gSh/IopKKmCsRsSilgPB28Yl8TI6OLaxHlRsisHH5JUuhVirAqwOxBGxBxpyL3JkQOhjq7R9GdQ9nvNdSzV1JV08tueGnXm5+TYqQvvuo7YS52L7sVKRY3D4FDN4k1cd2oTUpZaSzZjhsF1lzvcrpbCgs9HCPkpuKn/VlA5RBf6BB99vOwxF4vHdqLjxF9ysyjGg1sSSMiGF2jkUo6HiysNiD9EY1AZQKuQiDctfp/6cZWynbKb9PYLfbyFA5QU6hj77nbc9/vGazkutEwuMkbm46p2i2KklwjtVDBWTrxlmigVWkBHflt5wpxxXreo2uRlXuE3O+W7TX3+WWottJNJxC8ngUnYePWLS+goSa7FjZn//2Q==","aspectRatio":1,"src":"//images.ctfassets.net/s600jj41gsex/3n5Ddmwa32OxLdPtcYaRGs/ca8453cfe0c8d43c50dd25af671924d7/Martin-Gouws-guestauthor-150x150.jpg?w=48&q=50&fit=scale","srcSet":"//images.ctfassets.net/s600jj41gsex/3n5Ddmwa32OxLdPtcYaRGs/ca8453cfe0c8d43c50dd25af671924d7/Martin-Gouws-guestauthor-150x150.jpg?w=12&h=12&q=50&fit=scale 12w,\n//images.ctfassets.net/s600jj41gsex/3n5Ddmwa32OxLdPtcYaRGs/ca8453cfe0c8d43c50dd25af671924d7/Martin-Gouws-guestauthor-150x150.jpg?w=24&h=24&q=50&fit=scale 24w,\n//images.ctfassets.net/s600jj41gsex/3n5Ddmwa32OxLdPtcYaRGs/ca8453cfe0c8d43c50dd25af671924d7/Martin-Gouws-guestauthor-150x150.jpg?w=48&h=48&q=50&fit=scale 48w,\n//images.ctfassets.net/s600jj41gsex/3n5Ddmwa32OxLdPtcYaRGs/ca8453cfe0c8d43c50dd25af671924d7/Martin-Gouws-guestauthor-150x150.jpg?w=72&h=72&q=50&fit=scale 72w,\n//images.ctfassets.net/s600jj41gsex/3n5Ddmwa32OxLdPtcYaRGs/ca8453cfe0c8d43c50dd25af671924d7/Martin-Gouws-guestauthor-150x150.jpg?w=96&h=96&q=50&fit=scale 96w,\n//images.ctfassets.net/s600jj41gsex/3n5Ddmwa32OxLdPtcYaRGs/ca8453cfe0c8d43c50dd25af671924d7/Martin-Gouws-guestauthor-150x150.jpg?w=144&h=144&q=50&fit=scale 144w,\n//images.ctfassets.net/s600jj41gsex/3n5Ddmwa32OxLdPtcYaRGs/ca8453cfe0c8d43c50dd25af671924d7/Martin-Gouws-guestauthor-150x150.jpg?w=150&h=150&q=50&fit=scale 150w","srcWebp":"//images.ctfassets.net/s600jj41gsex/3n5Ddmwa32OxLdPtcYaRGs/ca8453cfe0c8d43c50dd25af671924d7/Martin-Gouws-guestauthor-150x150.jpg?w=48&q=50&fm=webp&fit=scale","srcSetWebp":"//images.ctfassets.net/s600jj41gsex/3n5Ddmwa32OxLdPtcYaRGs/ca8453cfe0c8d43c50dd25af671924d7/Martin-Gouws-guestauthor-150x150.jpg?w=12&h=12&q=50&fm=webp&fit=scale 12w,\n//images.ctfassets.net/s600jj41gsex/3n5Ddmwa32OxLdPtcYaRGs/ca8453cfe0c8d43c50dd25af671924d7/Martin-Gouws-guestauthor-150x150.jpg?w=24&h=24&q=50&fm=webp&fit=scale 24w,\n//images.ctfassets.net/s600jj41gsex/3n5Ddmwa32OxLdPtcYaRGs/ca8453cfe0c8d43c50dd25af671924d7/Martin-Gouws-guestauthor-150x150.jpg?w=48&h=48&q=50&fm=webp&fit=scale 48w,\n//images.ctfassets.net/s600jj41gsex/3n5Ddmwa32OxLdPtcYaRGs/ca8453cfe0c8d43c50dd25af671924d7/Martin-Gouws-guestauthor-150x150.jpg?w=72&h=72&q=50&fm=webp&fit=scale 72w,\n//images.ctfassets.net/s600jj41gsex/3n5Ddmwa32OxLdPtcYaRGs/ca8453cfe0c8d43c50dd25af671924d7/Martin-Gouws-guestauthor-150x150.jpg?w=96&h=96&q=50&fm=webp&fit=scale 96w,\n//images.ctfassets.net/s600jj41gsex/3n5Ddmwa32OxLdPtcYaRGs/ca8453cfe0c8d43c50dd25af671924d7/Martin-Gouws-guestauthor-150x150.jpg?w=144&h=144&q=50&fm=webp&fit=scale 144w,\n//images.ctfassets.net/s600jj41gsex/3n5Ddmwa32OxLdPtcYaRGs/ca8453cfe0c8d43c50dd25af671924d7/Martin-Gouws-guestauthor-150x150.jpg?w=150&h=150&q=50&fm=webp&fit=scale 150w","sizes":"(max-width: 48px) 100vw, 48px"}},"shortBio":{"shortBio":"Martin is a young and talented JavaScript developer and software engineer who has his roots in enterprise Java. He has a mature understanding of the full SDLC and has helped build many applications from scratch for clients such as Anglo American. He has worked in corporate, as well as startup environments, and transparent communication is always prevalent in his work ethic. He is also an advocate of the Agile development mindset."}},"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"},"setkaCss":null,"setkaHtml":null,"resourceFiles":null,"canonicalUrl":null}},"pageContext":{"slug":"a-guide-to-npm-the-node-js-package-manager","setkaPostId":null}},"staticQueryHashes":["2492987505","740350947"]}