{"id":1887,"date":"2026-07-06T16:13:33","date_gmt":"2026-07-06T16:13:33","guid":{"rendered":"https:\/\/blog.mozilla.org\/l10n\/?p=1887"},"modified":"2026-07-06T16:13:33","modified_gmt":"2026-07-06T16:13:33","slug":"giving-pontoons-editor-its-own-theme","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/l10n\/2026\/07\/06\/giving-pontoons-editor-its-own-theme\/","title":{"rendered":"Giving Pontoon&#8217;s Editor Its Own Theme"},"content":{"rendered":"<blockquote>\n<p class=\"PDq2pG_selectionAnchorContainer\" data-start=\"293\" data-end=\"696\">Each year, Mozilla welcomes interns who work alongside our engineering teams on projects that ship to production and improve the experience for contributors around the world. This year, Ayush joined the Firefox Localization team to work on Pontoon, Mozilla&#8217;s open source localization platform, where he already tackled several user-facing improvements while learning how large-scale open source software is built.<\/p>\n<p data-start=\"698\" data-end=\"1035\" data-is-last-node=\"\" data-is-only-node=\"\">In this post, Ayush shares the story behind one of his first projects: giving Pontoon&#8217;s translation editor its own appearance settings. From understanding long-standing design decisions to balancing accessibility with user expectations, he walks through both the technical implementation and the product thinking that shaped the feature.<\/p>\n<p class=\"isSelectedEnd\">You can follow Ayush\u2019s work on <a href=\"https:\/\/github.com\/ayshushus\">GitHub<\/a> and connect with him on <a href=\"https:\/\/www.linkedin.com\/in\/ayshushus\">LinkedIn<\/a>.<\/p>\n<\/blockquote>\n<h2>Introduction<\/h2>\n<p>Studying <a href=\"https:\/\/future.utoronto.ca\/program\/computer-engineering\">Computer Engineering<\/a> with a <a href=\"https:\/\/discover.engineering.utoronto.ca\/experiential-learning\/professional-experience-year-pey\/\">Professional Experience Year (PEY)<\/a> at the <a href=\"https:\/\/www.engineering.utoronto.ca\/\">University of Toronto\u2019s Faculty of Applied Science<\/a> gave me a variety of opportunities and companies to choose spending a year interning at. I chose Software Engineering at <a href=\"https:\/\/www.mozilla.org\/\">Mozilla<\/a> because it\u2019s an open source company that puts people first, which matters to me a lot and allows me to equip my portfolio using snippets and examples from real code used in production.<\/p>\n<p>I joined <a href=\"https:\/\/language.mozilla.org\/\">Mozilla\u2019s Firefox Localization (l10n) team<\/a> as part of <a href=\"https:\/\/www.mozilla.org\/foundation\/moco\/\">Mozilla Corporation<\/a>\u2019s Firefox Desktop Engineering Team, based in Downtown Toronto. I officially began my internship on Friday, May 1, 2026, but I unofficially began in mid February. Since my team\u2019s flagship product\u2019s (<a href=\"https:\/\/pontoon.mozilla.org\/\">Pontoon<\/a>) codebase is entirely open source, I talked to both my <a href=\"https:\/\/github.com\/flodolo\">manager<\/a> and <a href=\"https:\/\/github.com\/mathjazz\">Pontoon owner<\/a> right after signing my offer and got early access to our weekly meetings and some confidential data. I then started to learn as much as I possibly could.<\/p>\n<p><a href=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image7.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1889\" src=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image7.png\" alt=\"\" width=\"1662\" height=\"856\" srcset=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image7.png 1662w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image7-300x155.png 300w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image7-600x309.png 600w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image7-768x396.png 768w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image7-1536x791.png 1536w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image7-1000x515.png 1000w\" sizes=\"(max-width: 1662px) 100vw, 1662px\" \/><\/a><\/p>\n<p>Even before I started learning the <a href=\"https:\/\/github.com\/mozilla\/pontoon\">codebase<\/a>, just looking at the Pontoon\u2019s default translation UI was rather interesting because of our editor pane\u2019s glaring white color in dark mode\/theme.<\/p>\n<p><a href=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image3.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1890\" src=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image3.png\" alt=\"\" width=\"1664\" height=\"950\" srcset=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image3.png 1664w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image3-300x171.png 300w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image3-600x343.png 600w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image3-768x438.png 768w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image3-1536x877.png 1536w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image3-1000x571.png 1000w\" sizes=\"(max-width: 1664px) 100vw, 1664px\" \/><\/a><\/p>\n<p>Even though I saw the <a href=\"https:\/\/github.com\/mozilla\/pontoon\/issues\/4001\">issue (#4001)<\/a> filed for working on that, I thought that the stark contrast was a stylistic choice because an average user would spend most of their time on said pane editing strings anyway, so I just went on with it.<\/p>\n<p><a href=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image11.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1891\" src=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image11.png\" alt=\"\" width=\"1664\" height=\"794\" srcset=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image11.png 1664w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image11-300x143.png 300w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image11-600x286.png 600w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image11-768x366.png 768w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image11-1536x733.png 1536w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image11-1000x477.png 1000w\" sizes=\"(max-width: 1664px) 100vw, 1664px\" \/><\/a><\/p>\n<p>However, once I officially started to work, I got my onboarding document and saw my starting set of issues. That\u2019s where I came across the very same <a href=\"https:\/\/github.com\/mozilla\/pontoon\/issues\/4001\">issue (#4001)<\/a> on my todo batch, which made me very happy since I could address it and I\u2019d already looked at the surrounding context before working with it.<\/p>\n<h2>The Original Experience<\/h2>\n<p>At first, the user could only change Pontoon\u2019s appearance from their `profile menu` or <a href=\"https:\/\/pontoon.mozilla.org\/settings\/\">Pontoon\u2019s `\/settings` page<\/a>. This is where they have the ability to change their appearance to `dark mode`, `light mode`, or keep the `system theme` that matches their device\u2019s preferences.<\/p>\n<div id=\"attachment_1892\" style=\"width: 1318px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image10.png\"><img aria-describedby=\"caption-attachment-1892\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-1892 size-full\" src=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image10.png\" alt=\"\" width=\"1308\" height=\"362\" srcset=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image10.png 1308w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image10-300x83.png 300w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image10-600x166.png 600w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image10-768x213.png 768w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image10-1000x277.png 1000w\" sizes=\"(max-width: 1308px) 100vw, 1308px\" \/><\/a><p id=\"caption-attachment-1892\" class=\"wp-caption-text\">This is the view from Pontoon\u2019s Settings page.<\/p><\/div>\n<div id=\"attachment_1893\" style=\"width: 1164px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image2.png\"><img aria-describedby=\"caption-attachment-1893\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-1893 size-full\" src=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image2.png\" alt=\"\" width=\"1154\" height=\"1046\" srcset=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image2.png 1154w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image2-300x272.png 300w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image2-600x544.png 600w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image2-768x696.png 768w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image2-1000x906.png 1000w\" sizes=\"(max-width: 1154px) 100vw, 1154px\" \/><\/a><p id=\"caption-attachment-1893\" class=\"wp-caption-text\">This is the view from Pontoon\u2019s Profile menu.<\/p><\/div>\n<div id=\"attachment_1894\" style=\"width: 2009px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image1.png\"><img aria-describedby=\"caption-attachment-1894\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-1894 size-full\" src=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image1.png\" alt=\"\" width=\"1999\" height=\"1126\" srcset=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image1.png 1999w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image1-300x169.png 300w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image1-600x338.png 600w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image1-768x433.png 768w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image1-1536x865.png 1536w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image1-1000x563.png 1000w\" sizes=\"(max-width: 1999px) 100vw, 1999px\" \/><\/a><p id=\"caption-attachment-1894\" class=\"wp-caption-text\">Ironically, the dark appearance warrants a light themed `editor pane`.<\/p><\/div>\n<div id=\"attachment_1895\" style=\"width: 1792px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image9.png\"><img aria-describedby=\"caption-attachment-1895\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1895\" src=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image9.png\" alt=\"\" width=\"1782\" height=\"628\" srcset=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image9.png 1782w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image9-300x106.png 300w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image9-600x211.png 600w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image9-768x271.png 768w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image9-1536x541.png 1536w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image9-1000x352.png 1000w\" sizes=\"(max-width: 1782px) 100vw, 1782px\" \/><\/a><p id=\"caption-attachment-1895\" class=\"wp-caption-text\">There is also no option to change the `editor pane` appearance from the `editor menu`.<\/p><\/div>\n<h2>Design Considerations<\/h2>\n<p>In general, when a product has a large, established user base that has grown accustomed to a particular interface, it&#8217;s important to approach visual changes with care. Even if a redesign is arguably more visually appealing and offers clear accessibility benefits, changing familiar workflows and appearance can still disrupt the user experience.<\/p>\n<p>In fact, according to <a href=\"https:\/\/research.mozilla.org\/\">this Mozilla Research<\/a> article I read, which explored <a href=\"https:\/\/research.mozilla.org\/browser-competition\/remedyconcepts\/\">browser choice design interventions<\/a>, \u201cIt is important that the organizations tasked with designing and regulating current and future interventions (including browser choice screens) are mindful of the design principles we have articulated with this research.\u201d<\/p>\n<p>Even though the relevance of said <a href=\"https:\/\/research.mozilla.org\/browser-competition\/remedyconcepts\/\">research<\/a> is for the browser use-case, the impacts are for a user interface design like in this blog, as the article also mentions \u201cThe inertia is a strong force to overcome\u201d, and Pontoon\u2019s inertia dates back over a decade.<\/p>\n<p>This meant that if we were to change the editor pane color, we would have to allow the user to have things as they currently are.<\/p>\n<h2>The New Experience<\/h2>\n<p>In the update Appearance section of the <a href=\"https:\/\/pontoon.mozilla.org\/settings\/\">Settings page<\/a>, users have the ability to change the main interface as before, but now have the ability to update editor to `dark mode`, `light mode`, or match their `main interface theme` to automatically sync the colors.<\/p>\n<p>The editor theme remains light by default, regardless of the main interface theme.<\/p>\n<div id=\"attachment_1896\" style=\"width: 1600px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image5.png\"><img aria-describedby=\"caption-attachment-1896\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1896\" src=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image5.png\" alt=\"\" width=\"1590\" height=\"652\" srcset=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image5.png 1590w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image5-300x123.png 300w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image5-600x246.png 600w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image5-768x315.png 768w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image5-1536x630.png 1536w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image5-1000x410.png 1000w\" sizes=\"(max-width: 1590px) 100vw, 1590px\" \/><\/a><p id=\"caption-attachment-1896\" class=\"wp-caption-text\">This is the view from Pontoon\u2019s Settings page.<\/p><\/div>\n<div id=\"attachment_1897\" style=\"width: 1722px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image8.png\"><img aria-describedby=\"caption-attachment-1897\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1897\" src=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image8.png\" alt=\"\" width=\"1712\" height=\"896\" srcset=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image8.png 1712w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image8-300x157.png 300w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image8-600x314.png 600w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image8-768x402.png 768w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image8-1536x804.png 1536w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image8-1000x523.png 1000w\" sizes=\"(max-width: 1712px) 100vw, 1712px\" \/><\/a><p id=\"caption-attachment-1897\" class=\"wp-caption-text\">Editor appearance can also be quickly changed from the editor menu.<\/p><\/div>\n<div id=\"attachment_1898\" style=\"width: 1704px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image6.png\"><img aria-describedby=\"caption-attachment-1898\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1898\" src=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image6.png\" alt=\"\" width=\"1694\" height=\"890\" srcset=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image6.png 1694w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image6-300x158.png 300w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image6-600x315.png 600w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image6-768x403.png 768w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image6-1536x807.png 1536w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image6-1000x525.png 1000w\" sizes=\"(max-width: 1694px) 100vw, 1694px\" \/><\/a><p id=\"caption-attachment-1898\" class=\"wp-caption-text\">This UI now matches the dark theme, either by explicitly selecting it or matching the main interface theme.<\/p><\/div>\n<div id=\"attachment_1899\" style=\"width: 1708px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image4.png\"><img aria-describedby=\"caption-attachment-1899\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1899\" src=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image4.png\" alt=\"\" width=\"1698\" height=\"914\" srcset=\"https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image4.png 1698w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image4-300x161.png 300w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image4-600x323.png 600w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image4-768x413.png 768w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image4-1536x827.png 1536w, https:\/\/blog.mozilla.org\/l10n\/files\/2026\/07\/image4-1000x538.png 1000w\" sizes=\"(max-width: 1698px) 100vw, 1698px\" \/><\/a><p id=\"caption-attachment-1899\" class=\"wp-caption-text\">Since the issue was with `dark interface mode` having a `light editor`, setting the default `editor` to `light` neatly agreed with how the UI looked before the changes were brought in.<\/p><\/div>\n<h2>Looking Ahead<\/h2>\n<p>These changes neatly allow the user to modify their theme keeping their general preferences in mind. The change is also remembered by Pontoon and stays consistent at every instance the user logs back in.<\/p>\n<p>Furthermore, we now track if the user has interacted with the `editor theme` which gives us knowledge on if we want to eventually change the default editor theme, addressing the concerns of `UI inertia` brought up in <a href=\"https:\/\/research.mozilla.org\/browser-competition\/remedyconcepts\/\">Mozilla\u2019s research<\/a>.<\/p>\n<p>For more information and technical details, please visit: <a href=\"https:\/\/www.ayshush.us\/mozilla\/issue-notes\/4001\">https:\/\/www.ayshush.us\/mozilla\/issue-notes\/4001<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Each year, Mozilla welcomes interns who work alongside our engineering teams on projects that ship to production and improve the experience for contributors around the world. This year, Ayush joined &hellip; <a class=\"go\" href=\"https:\/\/blog.mozilla.org\/l10n\/2026\/07\/06\/giving-pontoons-editor-its-own-theme\/\">Read more<\/a><\/p>\n","protected":false},"author":451,"featured_media":1900,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[137,286406],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.mozilla.org\/l10n\/wp-json\/wp\/v2\/posts\/1887"}],"collection":[{"href":"https:\/\/blog.mozilla.org\/l10n\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mozilla.org\/l10n\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/l10n\/wp-json\/wp\/v2\/users\/451"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/l10n\/wp-json\/wp\/v2\/comments?post=1887"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/l10n\/wp-json\/wp\/v2\/posts\/1887\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/l10n\/wp-json\/wp\/v2\/media\/1900"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/l10n\/wp-json\/wp\/v2\/media?parent=1887"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/l10n\/wp-json\/wp\/v2\/categories?post=1887"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/l10n\/wp-json\/wp\/v2\/tags?post=1887"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}