CINXE.COM

Developer Spotlight: Port Authority - Mozilla Add-ons Community Blog

<!DOCTYPE html> <html lang="en-US" dir="ltr" class="no-js"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="license" href="#license"> <link rel="profile" href="https://gmpg.org/xfn/11"> <link rel="shortcut icon" type="image/png" href="https://blog.mozilla.org/addons/wp-content/themes/frontierline/img/favicon.png"> <!--[if IE]> <meta name="MSSmartTagsPreventParsing" content="true"> <meta http-equiv="imagetoolbar" content="no"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <![endif]--> <!--[if lte IE 8]> <script src="https://blog.mozilla.org/addons/wp-content/themes/frontierline/js/html5.js"></script> <link rel="shortcut icon" type="image/x-icon" href="https://blog.mozilla.org/addons/wp-content/themes/frontierline/img/favicon.ico"> <link rel="stylesheet" type="text/css" media="all" href="https://blog.mozilla.org/addons/wp-content/themes/frontierline/oldIE.css"> <![endif]--> <meta name="title" content="Developer Spotlight: Port Authority – Mozilla Add-ons Community Blog"> <meta name="description" content="Port Authority gives you intuitive control over global block settings, notifications, and allow-list customization. A few years ago a developer known as ACK-J stumbled onto a tech article that revealed ..."> <meta property="og:site_name" content="Mozilla Add-ons Community Blog"> <meta property="og:url" content="https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority"> <meta property="og:title" content="Developer Spotlight: Port Authority – Mozilla Add-ons Community Blog"> <meta property="og:description" content="Port Authority gives you intuitive control over global block settings, notifications, and allow-list customization. A few years ago a developer known as ACK-J stumbled onto a tech article that revealed ..."> <meta property="twitter:title" content="Developer Spotlight: Port Authority – Mozilla Add-ons Community Blog"> <meta property="twitter:description" content="Port Authority gives you intuitive control over global block settings, notifications, and allow-list customization. A few years ago a developer known as ACK-J stumbled onto a tech article that revealed ..."> <meta name="twitter:card" content="summary"> <meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> <meta name="blog-name" content="Mozilla Add-ons Community Blog" /> <!-- This site is optimized with the Yoast SEO plugin v22.5 - https://yoast.com/wordpress/plugins/seo/ --> <title>Developer Spotlight: Port Authority - Mozilla Add-ons Community Blog</title> <link rel="canonical" href="https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/" /> <meta name="twitter:label1" content="Written by" /> <meta name="twitter:data1" content="Scott DeVaney" /> <meta name="twitter:label2" content="Est. reading time" /> <meta name="twitter:data2" content="4 minutes" /> <script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/","url":"https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/","name":"Developer Spotlight: Port Authority - Mozilla Add-ons Community Blog","isPartOf":{"@id":"https://blog.mozilla.org/addons/#website"},"primaryImageOfPage":{"@id":"https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/#primaryimage"},"image":{"@id":"https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/#primaryimage"},"thumbnailUrl":"https://blog.mozilla.org/addons/files/2024/05/blog_PA.png","datePublished":"2024-05-07T16:44:38+00:00","dateModified":"2024-05-07T16:44:38+00:00","author":{"@id":"https://blog.mozilla.org/addons/#/schema/person/ddef9beeb756a1c0ba23491d305e67b0"},"breadcrumb":{"@id":"https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/#primaryimage","url":"https://blog.mozilla.org/addons/files/2024/05/blog_PA.png","contentUrl":"https://blog.mozilla.org/addons/files/2024/05/blog_PA.png","width":506,"height":922,"caption":"Port Authority gives you intuitive control over global blocking settings, notifications, and allow-list customization."},{"@type":"BreadcrumbList","@id":"https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://blog.mozilla.org/addons/"},{"@type":"ListItem","position":2,"name":"Developer Spotlight: Port Authority"}]},{"@type":"WebSite","@id":"https://blog.mozilla.org/addons/#website","url":"https://blog.mozilla.org/addons/","name":"Mozilla Add-ons Community Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://blog.mozilla.org/addons/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https://blog.mozilla.org/addons/#/schema/person/ddef9beeb756a1c0ba23491d305e67b0","name":"Scott DeVaney","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://blog.mozilla.org/addons/#/schema/person/image/","url":"https://secure.gravatar.com/avatar/dc38a62432c7d12585390805c2bc58e2?s=96&d=mm&r=g","contentUrl":"https://secure.gravatar.com/avatar/dc38a62432c7d12585390805c2bc58e2?s=96&d=mm&r=g","caption":"Scott DeVaney"},"url":"https://blog.mozilla.org/addons/author/sdevaneymozilla-com/"}]}</script> <!-- / Yoast SEO plugin. --> <link rel="alternate" type="application/rss+xml" title="Mozilla Add-ons Community Blog &raquo; Feed" href="https://blog.mozilla.org/addons/feed/" /> <link rel="alternate" type="application/rss+xml" title="Mozilla Add-ons Community Blog &raquo; Comments Feed" href="https://blog.mozilla.org/addons/comments/feed/" /> <link rel="alternate" type="application/rss+xml" title="Mozilla Add-ons Community Blog &raquo; Developer Spotlight: Port Authority Comments Feed" href="https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/feed/" /> <link rel='stylesheet' id='wp-block-library-css' href='https://blog.mozilla.org/addons/wp-includes/css/dist/block-library/style.min.css?ver=6.3.5' type='text/css' media='all' /> <style id='classic-theme-styles-inline-css' type='text/css'> /*! This file is auto-generated */ .wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} </style> <style id='global-styles-inline-css' type='text/css'> body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} .wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;} :where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;} :where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;} .wp-block-pullquote{font-size: 1.5em;line-height: 1.6;} </style> <link rel='stylesheet' id='frontierline-parent-css' href='https://blog.mozilla.org/addons/wp-content/themes/frontierline/style.css?ver=6.3.5' type='text/css' media='all' /> <link rel='stylesheet' id='frontierline-css' href='https://blog.mozilla.org/addons/wp-content/themes/frontierline-firefox/style.css?ver=1686919482' type='text/css' media='all' /> <script type='text/javascript' src='https://blog.mozilla.org/wp-content/mu-plugins/mozilla-custom/ga-snippet.js?ver=.4' id='ga-snippet-js'></script> <script type='text/javascript' src='https://blog.mozilla.org/addons/wp-includes/js/jquery/jquery.min.js?ver=3.7.0' id='jquery-core-js'></script> <script type='text/javascript' src='https://blog.mozilla.org/addons/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1' id='jquery-migrate-js'></script> <link rel="https://api.w.org/" href="https://blog.mozilla.org/addons/wp-json/" /><link rel="alternate" type="application/json" href="https://blog.mozilla.org/addons/wp-json/wp/v2/posts/9169" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://blog.mozilla.org/addons/xmlrpc.php?rsd" /> <link rel='shortlink' href='https://blog.mozilla.org/addons/?p=9169' /> <link rel="alternate" type="application/json+oembed" href="https://blog.mozilla.org/addons/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fblog.mozilla.org%2Faddons%2F2024%2F05%2F07%2Fdeveloper-spotlight-port-authority%2F" /> <link rel="alternate" type="text/xml+oembed" href="https://blog.mozilla.org/addons/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fblog.mozilla.org%2Faddons%2F2024%2F05%2F07%2Fdeveloper-spotlight-port-authority%2F&#038;format=xml" /> </head> <body class="post-template-default single single-post postid-9169 single-format-standard color-scheme-none pattern-slashbracket" data-blogname="Mozilla Add-ons Community Blog"> <nav id="nav-global" class="nav-global can-stick"> <div class="content"> <div class="logo"><a href="https://www.mozilla.org/?utm_source=blog.mozilla.org&amp;utm_medium=referral&amp;utm_campaign=blog-nav" rel="external" title="Visit mozilla.org">Mozilla</a></div> <div class="nav-mozilla"> <span class="toggle" role="button" aria-controls="nav-mozilla-menu" aria-expanded="false" tabindex="0">Menu</span> <ul class="nav-mozilla-menu" id="nav-mozilla-menu"> <li class="nav-global-health"><a href="https://www.mozilla.org/about/?utm_source=blog.mozilla.org&amp;utm_medium=referral&amp;utm_campaign=blog-nav" rel="external">About Mozilla</a></li> <li class="nav-global-tech"><a href="https://www.mozilla.org/firefox/products/?utm_source=blog.mozilla.org&amp;utm_medium=referral&amp;utm_campaign=blog-nav" rel="external">Products</a></li> <li class="nav-global-donate"><a href="https://donate.mozilla.org/?presets=50,30,20,10&amp;amount=30&amp;currency=usd&amp;utm_source=blog.mozilla.org&amp;utm_medium=referral&amp;utm_campaign=blog-nav" rel="external">Give</a></li> </ul> <aside class="nav-global-fxdownload"><a href="https://www.mozilla.org/firefox/new/?utm_source=blog.mozilla.org&amp;utm_medium=referral&amp;utm_campaign=blog-nav" rel="external" class="button button-product">Download Firefox</a></aside> </div> </div> </nav> <header id="masthead" class="section"> <div class="site-id"> <div class="site-title-wrap content"> <a href="https://blog.mozilla.org/addons/" rel="home" title="Go to the front page"> <h4 id="site-title"><span>Mozilla Add-ons Community Blog</span></h4> </a> </div> </div> </header> <div class="site-wrap"> <nav id="nav-util" class="can-stick has-sidebar "> <ul class="content"> <li class="nav-util-sidebar"><a href="#sidebar" aria-controls="sidebar" id="toggle-sidebar">Explore</a></li> <li class="nav-util-search"> <form id="search" class="fm-search" method="get" action="https://blog.mozilla.org/addons/"> <fieldset> <p> <label for="s">Search this site</label> <input type="search" value="" name="s" id="s"> <button type="submit" class="button button-minor">Search</button> </p> </fieldset> </form> </li> </ul> </nav> <main id="content"> <div class="content"> <article id="post-9169" class="post post-9169 type-post status-publish format-standard hentry category-featured-addons tag-privacy"> <header class="entry-header"> <div class="entry-tools"> <div class="categories"> <b>Categories:</b> <a href="https://blog.mozilla.org/addons/category/featured-addons/" rel="category tag">featured addons</a> </div> </div> <h1 class="entry-title"> Developer Spotlight: Port Authority </h1> <div class="entry-info"> <address class="vcard"> <a href="https://blog.mozilla.org/addons/author/sdevaneymozilla-com/" title="Posts by Scott DeVaney" rel="author">Scott DeVaney</a> </address> <time class="date published" datetime="2024-05-07T09:44:38-07:00">May 7, 2024</time> <p class="entry-comments"> <a href="https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/#comments">5 responses</a> </p> </div> </header> <div class="entry-content"> <div id="attachment_9170" style="width: 334px" class="wp-caption alignleft"><img aria-describedby="caption-attachment-9170" decoding="async" fetchpriority="high" class="wp-image-9170" src="https://blog.mozilla.org/addons/files/2024/05/blog_PA.png" alt="" width="324" height="590" /><p id="caption-attachment-9170" class="wp-caption-text">Port Authority gives you intuitive control over global block settings, notifications, and allow-list customization.</p></div> <p>A few years ago a developer known as <a href="https://github.com/ACK-J" target="_blank" rel="noopener">ACK-J</a> stumbled onto a tech article that revealed eBay was secretly port scanning their customers (i.e. scanning their users’ internet-facing devices to learn what apps and services are listening on the network). The article further claimed there was nothing anyone could do to prevent this privacy compromise. ACK-J took that as a challenge. “After going down many rabbit holes,” he says, “I found that this script, which was port scanning everyone, is in my opinion, malware.”</p> <p>We spoke with ACK-J to better understand the obscure privacy risks of port scanning and how his extension <a href="https://addons.mozilla.org/en-US/firefox/addon/port-authority/" target="_blank" rel="noopener">Port Authority</a> offers unique protections.</p> <p><b>Why does port scanning present a privacy risk?</b></p> <p>ACK-J: <i>There is a common misconception/ignorance around how far websites are able to peer into your private home network. While modern browsers limit this to an extent, it is still overly permissive in my opinion. The privacy implications arise when websites, such as</i> <i>g</i><i>o</i><i>ogle.com</i><i>, have the ability to secretly interact with your router&#8217;s administrative interface, local services running on your computer and discover devices on your home network. This behavior should be blocked by the same-origin policy (SOP), a fundamental security mechanism built into every web browser since the mid 1990&#8217;s, however due to convenience it appears to be disabled for these requests. This caught a lot of people by surprise, including myself, and is why I wanted to make this type of traffic &#8220;opt-in&#8221; on my devices.</i></p> <p><b>Do you consider port scanning “malware”? </b></p> <p>ACK-J: <i>I don&#8217;t necessarily consider port scanning malware, port scanning is commonplace and should be expected for any computer connected to the internet with a public IP address. On the other hand, devices on our home networks do not have public IP addresses and instead are protected from this scanning due to a technology called network address translation (NAT). Due to the nature of how browsers and websites work, the website code needs to be rendered on the user&#8217;s device (behind the protections put in place by NAT). This means websites are in a privileged position to communicate with devices on your home network (e.g. IOT devices, routers, TVs, etc.). There are certainly legitimate use cases for port scanning even on internal networks, the most common being communicating with a program running on your PC such as Discord. I prefer to be able to explicitly allow this type of behavior instead of leaving it wide open by default.</i></p> <p><b>Is there a way to summarize how your extension addresses the privacy leak of port scanning?</b></p> <p>ACK-J: <i>Port Authority acts in a similar manner to a bouncer at a bar, whenever your computer tries to make a request, Port Authority will verify that the request is not trying to port scan your private network. If the request passes the check it is allowed in and everything functions as normal. If it fails the request is dropped. This all happens in a matter of milliseconds, but if a request is blocked you will get a notification.</i></p> <p><b>Should Port Authority users expect occasional disruptions using websites that port scan, like eBay?</b></p> <p>ACK-J: <i>Nope, I&#8217;ve been using it for years along with many friends, family, and 1,000 other daily users. I&#8217;ve never received a single report that a website would not allow you to login, check-out, or other expected functionality due to the extension blocking port scans. There are instances where you&#8217;d like your browser to communicate with an app on your PC such as Discord, in this case you&#8217;ll receive an alert and could add Discord to an allow-list or simply click the &#8220;Blocking&#8221; toggle to disable blocking temporarily.</i></p> <p><b>Do you see Port Authority growing in terms of a feature set, or do you feel it’s relatively feature complete and your focus is on maintenance/refinement?</b></p> <p>ACK-J: <i>I like extensions that serve a specific purpose so I don&#8217;t see it growing in features but I&#8217;d never say never. I&#8217;ve added an allow-list to explicitly permit certain domains to interact with services on your private network. I haven&#8217;t enabled this feature on the public extension yet but will soon.</i></p> <p><b>Apart from Port Authority, do you have any plans to develop other extensions?</b></p> <p>ACK-J: <i>I actually do! I just finished writing up an extension called MailFail that checks the website you are on for misconfigurations in their email server that would allow someone to spoof emails using their domain. This will be posted soon!</i></p> <hr /> <p><i>Do you have an intriguing extension development story? Do tell! Maybe your story should appear on this blog. Contact us at </i><b><i>amo-featured [at] mozilla [dot] org</i></b><i> and let us know a bit about your extension development journey. </i></p> </div> <footer class="entry-tags"> <p><b>Tags:</b> <a href="https://blog.mozilla.org/addons/tag/privacy/" rel="tag">privacy</a></p> </footer> <footer class="fx-footer"> <h4>Browse fast. Browse free.</h4> <p><a href="https://www.mozilla.org/firefox/new/?utm_source=blog.mozilla.org&utm_campaign=firefox_frontier&utm_medium=referral" rel="external" class="button button-product">Download Firefox</a></p> </footer> </article><!-- #post --> </div> <nav id="adjacent-posts" class="section nav-paging"> <div class="content"> <p class="nav-paging-prev" role="navigation"> <a href="https://blog.mozilla.org/addons/2024/05/02/1000-firefox-for-android-extensions-now-available/"> <span class="label">Previous article</span> <strong class="entry-title">1000+ Firefox for Android extensions now available</strong> <time class="date" datetime="2024-05-02T12:54:59-07:00">May 2, 2024</time> <svg class="arrow-left" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 23.62 43"><defs><style>.cls-1{fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:3px;}</style></defs><polyline class="cls-1" points="22.12 1.5 2.12 21.5 22.12 41.5"/></svg> </a> </p> <p class="nav-paging-next" role="navigation"> <a href="https://blog.mozilla.org/addons/2024/05/14/manifest-v3-updates/"> <span class="label">Next article</span> <strong class="entry-title">Manifest V3 Updates</strong> <time class="date" datetime="2024-05-14T15:41:23-07:00">May 14, 2024</time> <svg class="arrow-right" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 23.62 43"><defs><style>.cls-1{fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:3px;}</style></defs><polyline class="cls-1" points="1.5 1.5 21.5 21.5 1.5 41.5"/></svg> </a> </p> </div> </nav> <aside id="related-posts" class="section"> <div class="content"> <div class="in-category"> <h4 class="module-title">More articles in “featured addons”</h4> <ul class="cat-posts"> <li> <h5 class="entry-title"><a href="https://blog.mozilla.org/addons/2024/09/19/help-select-new-firefox-recommended-extensions-join-the-community-advisory-board/">Help select new Firefox Recommended Extensions — join the Community Advisory Board</a></h5> <time class="date" datetime="2024-09-19T13:20:34-07:00">September 19, 2024</time> </li> <li> <h5 class="entry-title"><a href="https://blog.mozilla.org/addons/2024/09/03/developer-spotlight-audd-music-recognition/">Developer Spotlight: AudD® Music Recognition</a></h5> <time class="date" datetime="2024-09-03T10:30:49-07:00">September 3, 2024</time> </li> <li> <h5 class="entry-title"><a href="https://blog.mozilla.org/addons/2024/06/13/developer-spotlight-dedalium-turn-the-entire-web-into-an-rpg-game/">Developer Spotlight: Dedalium — turn the entire web into an RPG game</a></h5> <time class="date" datetime="2024-06-13T15:09:34-07:00">June 13, 2024</time> </li> <li> <h5 class="entry-title"><a href="https://blog.mozilla.org/addons/2024/04/04/developer-spotlight-control-panel-for-twitter/">Developer Spotlight: Control Panel for Twitter</a></h5> <time class="date" datetime="2024-04-04T09:52:57-07:00">April 4, 2024</time> </li> <li> <h5 class="entry-title"><a href="https://blog.mozilla.org/addons/2024/03/01/developer-spotlight-youtube-search-fixer/">Developer Spotlight: YouTube Search Fixer</a></h5> <time class="date" datetime="2024-03-01T11:43:06-08:00">March 1, 2024</time> </li> </ul> </div> <div class="popular"> <h4 class="module-title">Recent articles</h4> <ul class="recent-posts"> <li> <h5 class="entry-title"><a href="https://blog.mozilla.org/addons/2024/09/19/help-select-new-firefox-recommended-extensions-join-the-community-advisory-board/">Help select new Firefox Recommended Extensions — join the Community Advisory Board</a></h5> <time class="date" datetime="2024-09-19T13:20:34-07:00">September 19, 2024</time> </li> <li> <h5 class="entry-title"><a href="https://blog.mozilla.org/addons/2024/09/03/developer-spotlight-audd-music-recognition/">Developer Spotlight: AudD® Music Recognition</a></h5> <time class="date" datetime="2024-09-03T10:30:49-07:00">September 3, 2024</time> </li> <li> <h5 class="entry-title"><a href="https://blog.mozilla.org/addons/2024/07/10/manifest-v3-updates-landed-in-firefox-128/">Manifest V3 updates landed in Firefox 128</a></h5> <time class="date" datetime="2024-07-10T07:40:08-07:00">July 10, 2024</time> </li> <li> <h5 class="entry-title"><a href="https://blog.mozilla.org/addons/2024/06/13/developer-spotlight-dedalium-turn-the-entire-web-into-an-rpg-game/">Developer Spotlight: Dedalium — turn the entire web into an RPG game</a></h5> <time class="date" datetime="2024-06-13T15:09:34-07:00">June 13, 2024</time> </li> <li> <h5 class="entry-title"><a href="https://blog.mozilla.org/addons/2024/06/13/manifest-v3-updates-landed-in-firefox-127/">Manifest V3 updates landed in Firefox 127</a></h5> <time class="date" datetime="2024-06-13T08:20:29-07:00">June 13, 2024</time> </li> </ul> </div> </div> </aside> <aside id="newsletter-subscribe" class="section newsletter-firefox"> <form id="newsletter_form" class="content newsletter_form" name="newsletter_form" action="https://www.mozilla.org/en-US/newsletter/" method="post" data-blog="Mozilla Add-ons Community Blog"> <input type="hidden" id="newsletters" name="newsletters" value="mozilla-and-you"> <input type="hidden" id="source_url" name="source_url" value="https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority"> <div class="form-title"> <h3>Keep up with<br> all things Firefox.</h3> </div> <div id="form-contents" class="form-contents"> <div id="newsletter_errors" class="newsletter_errors"></div> <div class="field field-email"> <label for="email">Your e-mail address</label> <input type="email" id="email" name="email" required placeholder="yourname@example.com" size="30"> </div> <div class="form-details"> <div class="field field-country"> <label for="country">Country</label> <select id="country" name="country" required="required"> <option value="" selected="selected">- select -</option> <option value="af">Afghanistan</option> <option value="qz">Akrotiri</option> <option value="al">Albania</option> <option value="dz">Algeria</option> <option value="as">American Samoa</option> <option value="ad">Andorra</option> <option value="ao">Angola</option> <option value="ai">Anguilla</option> <option value="aq">Antarctica</option> <option value="ag">Antigua and Barbuda</option> <option value="ar">Argentina</option> <option value="am">Armenia</option> <option value="aw">Aruba</option> <option value="xa">Ashmore and Cartier Islands</option> <option value="au">Australia</option> <option value="at">Austria</option> <option value="az">Azerbaijan</option> <option value="bs">Bahamas, The</option> <option value="bh">Bahrain</option> <option value="xb">Baker Island</option> <option value="bd">Bangladesh</option> <option value="bb">Barbados</option> <option value="qs">Bassas da India</option> <option value="by">Belarus</option> <option value="be">Belgium</option> <option value="bz">Belize</option> <option value="bj">Benin</option> <option value="bm">Bermuda</option> <option value="bt">Bhutan</option> <option value="bo">Bolivia</option> <option value="bq">Bonaire, Sint Eustatius, and Saba</option> <option value="ba">Bosnia and Herzegovina</option> <option value="bw">Botswana</option> <option value="bv">Bouvet Island</option> <option value="br">Brazil</option> <option value="io">British Indian Ocean Territory</option> <option value="bn">Brunei</option> <option value="bg">Bulgaria</option> <option value="bf">Burkina Faso</option> <option value="mm">Burma</option> <option value="bi">Burundi</option> <option value="cv">Cabo Verde</option> <option value="kh">Cambodia</option> <option value="cm">Cameroon</option> <option value="ca">Canada</option> <option value="ky">Cayman Islands</option> <option value="cf">Central African Republic</option> <option value="td">Chad</option> <option value="cl">Chile</option> <option value="cn">China</option> <option value="cx">Christmas Island</option> <option value="cp">Clipperton Island</option> <option value="cc">Cocos (Keeling) Islands</option> <option value="co">Colombia</option> <option value="km">Comoros</option> <option value="cg">Congo (Brazzaville)</option> <option value="cd">Congo (Kinshasa)</option> <option value="ck">Cook Islands</option> <option value="xc">Coral Sea Islands</option> <option value="cr">Costa Rica</option> <option value="hr">Croatia</option> <option value="cu">Cuba</option> <option value="cw">Curaçao</option> <option value="cy">Cyprus</option> <option value="cz">Czech Republic</option> <option value="ci">Côte d’Ivoire</option> <option value="dk">Denmark</option> <option value="xd">Dhekelia</option> <option value="dg">Diego Garcia</option> <option value="dj">Djibouti</option> <option value="dm">Dominica</option> <option value="do">Dominican Republic</option> <option value="ec">Ecuador</option> <option value="eg">Egypt</option> <option value="sv">El Salvador</option> <option value="gq">Equatorial Guinea</option> <option value="er">Eritrea</option> <option value="ee">Estonia</option> <option value="et">Ethiopia</option> <option value="xe">Europa Island</option> <option value="fk">Falkland Islands (Islas Malvinas)</option> <option value="fo">Faroe Islands</option> <option value="fj">Fiji</option> <option value="fi">Finland</option> <option value="fr">France</option> <option value="gf">French Guiana</option> <option value="pf">French Polynesia</option> <option value="tf">French Southern and Antarctic Lands</option> <option value="ga">Gabon</option> <option value="gm">Gambia, The</option> <option value="xg">Gaza Strip</option> <option value="ge">Georgia</option> <option value="de">Germany</option> <option value="gh">Ghana</option> <option value="gi">Gibraltar</option> <option value="qx">Glorioso Islands</option> <option value="gr">Greece</option> <option value="gl">Greenland</option> <option value="gd">Grenada</option> <option value="gp">Guadeloupe</option> <option value="gu">Guam</option> <option value="gt">Guatemala</option> <option value="gg">Guernsey</option> <option value="gn">Guinea</option> <option value="gw">Guinea-Bissau</option> <option value="gy">Guyana</option> <option value="ht">Haiti</option> <option value="hm">Heard Island and McDonald Islands</option> <option value="hn">Honduras</option> <option value="hk">Hong Kong</option> <option value="xh">Howland Island</option> <option value="hu">Hungary</option> <option value="is">Iceland</option> <option value="in">India</option> <option value="id">Indonesia</option> <option value="ir">Iran</option> <option value="iq">Iraq</option> <option value="ie">Ireland</option> <option value="im">Isle of Man</option> <option value="il">Israel</option> <option value="it">Italy</option> <option value="jm">Jamaica</option> <option value="xj">Jan Mayen</option> <option value="jp">Japan</option> <option value="xq">Jarvis Island</option> <option value="je">Jersey</option> <option value="xu">Johnston Atoll</option> <option value="jo">Jordan</option> <option value="qu">Juan de Nova Island</option> <option value="kz">Kazakhstan</option> <option value="ke">Kenya</option> <option value="xm">Kingman Reef</option> <option value="ki">Kiribati</option> <option value="kp">Korea, North</option> <option value="kr">Korea, South</option> <option value="xk">Kosovo</option> <option value="kw">Kuwait</option> <option value="kg">Kyrgyzstan</option> <option value="la">Laos</option> <option value="lv">Latvia</option> <option value="lb">Lebanon</option> <option value="ls">Lesotho</option> <option value="lr">Liberia</option> <option value="ly">Libya</option> <option value="li">Liechtenstein</option> <option value="lt">Lithuania</option> <option value="lu">Luxembourg</option> <option value="mo">Macau</option> <option value="mk">Macedonia</option> <option value="mg">Madagascar</option> <option value="mw">Malawi</option> <option value="my">Malaysia</option> <option value="mv">Maldives</option> <option value="ml">Mali</option> <option value="mt">Malta</option> <option value="mh">Marshall Islands</option> <option value="mq">Martinique</option> <option value="mr">Mauritania</option> <option value="mu">Mauritius</option> <option value="yt">Mayotte</option> <option value="mx">Mexico</option> <option value="fm">Micronesia, Federated States of</option> <option value="qm">Midway Islands</option> <option value="md">Moldova</option> <option value="mc">Monaco</option> <option value="mn">Mongolia</option> <option value="me">Montenegro</option> <option value="ms">Montserrat</option> <option value="ma">Morocco</option> <option value="mz">Mozambique</option> <option value="na">Namibia</option> <option value="nr">Nauru</option> <option value="xv">Navassa Island</option> <option value="np">Nepal</option> <option value="nl">Netherlands</option> <option value="nc">New Caledonia</option> <option value="nz">New Zealand</option> <option value="ni">Nicaragua</option> <option value="ne">Niger</option> <option value="ng">Nigeria</option> <option value="nu">Niue</option> <option value="nf">Norfolk Island</option> <option value="mp">Northern Mariana Islands</option> <option value="no">Norway</option> <option value="om">Oman</option> <option value="pk">Pakistan</option> <option value="pw">Palau</option> <option value="xl">Palmyra Atoll</option> <option value="pa">Panama</option> <option value="pg">Papua New Guinea</option> <option value="xp">Paracel Islands</option> <option value="py">Paraguay</option> <option value="pe">Peru</option> <option value="ph">Philippines</option> <option value="pn">Pitcairn Islands</option> <option value="pl">Poland</option> <option value="pt">Portugal</option> <option value="pr">Puerto Rico</option> <option value="qa">Qatar</option> <option value="re">Reunion</option> <option value="ro">Romania</option> <option value="ru">Russia</option> <option value="rw">Rwanda</option> <option value="bl">Saint Barthelemy</option> <option value="sh">Saint Helena, Ascension, and Tristan da Cunha</option> <option value="kn">Saint Kitts and Nevis</option> <option value="lc">Saint Lucia</option> <option value="mf">Saint Martin</option> <option value="pm">Saint Pierre and Miquelon</option> <option value="vc">Saint Vincent and the Grenadines</option> <option value="ws">Samoa</option> <option value="sm">San Marino</option> <option value="st">Sao Tome and Principe</option> <option value="sa">Saudi Arabia</option> <option value="sn">Senegal</option> <option value="rs">Serbia</option> <option value="sc">Seychelles</option> <option value="sl">Sierra Leone</option> <option value="sg">Singapore</option> <option value="sx">Sint Maarten</option> <option value="sk">Slovakia</option> <option value="si">Slovenia</option> <option value="sb">Solomon Islands</option> <option value="so">Somalia</option> <option value="za">South Africa</option> <option value="gs">South Georgia and South Sandwich Islands</option> <option value="ss">South Sudan</option> <option value="es">Spain</option> <option value="xs">Spratly Islands</option> <option value="lk">Sri Lanka</option> <option value="sd">Sudan</option> <option value="sr">Suriname</option> <option value="xr">Svalbard</option> <option value="sz">Swaziland</option> <option value="se">Sweden</option> <option value="ch">Switzerland</option> <option value="sy">Syria</option> <option value="tw">Taiwan</option> <option value="tj">Tajikistan</option> <option value="tz">Tanzania</option> <option value="th">Thailand</option> <option value="tl">Timor-Leste</option> <option value="tg">Togo</option> <option value="tk">Tokelau</option> <option value="to">Tonga</option> <option value="tt">Trinidad and Tobago</option> <option value="xt">Tromelin Island</option> <option value="tn">Tunisia</option> <option value="tr">Turkey</option> <option value="tm">Turkmenistan</option> <option value="tc">Turks and Caicos Islands</option> <option value="tv">Tuvalu</option> <option value="ug">Uganda</option> <option value="ua">Ukraine</option> <option value="ae">United Arab Emirates</option> <option value="gb">United Kingdom</option> <option value="us">United States</option> <option value="uy">Uruguay</option> <option value="uz">Uzbekistan</option> <option value="vu">Vanuatu</option> <option value="va">Vatican City</option> <option value="ve">Venezuela</option> <option value="vn">Vietnam</option> <option value="vg">Virgin Islands, British</option> <option value="vi">Virgin Islands, U.S.</option> <option value="qw">Wake Island</option> <option value="wf">Wallis and Futuna</option> <option value="xw">West Bank</option> <option value="eh">Western Sahara</option> <option value="ye">Yemen</option> <option value="zm">Zambia</option> <option value="zw">Zimbabwe</option> </select> </div> <div class="field field-language"> <label for="lang">Language</label> <select id="lang" name="lang" required="required"> <option value="id">Bahasa Indonesia</option> <option value="de">Deutsch</option> <option value="en" selected="selected">English</option> <option value="es">Español</option> <option value="fr">Français</option> <option value="pl">Polski</option> <option value="pt">Português</option> <option value="ru">Русский</option> <option value="zh-TW">正體中文</option> </select> </div> <div class="field field-format"> <label for="format-h"><input checked="checked" id="format-h" name="fmt" value="H" type="radio"> HTML</label> <label for="format-t"><input id="format-t" name="fmt" value="T" type="radio"> Text</label> </div> <div class="field field-privacy"> <label for="privacy"> <input type="checkbox" id="privacy" name="privacy" required> I’m okay with Mozilla handling my info as explained in this <a href="https://www.mozilla.org/privacy/">Privacy Policy</a>. </label> </div> </div> <div class="form-submit"> <button id="newsletter_submit" type="submit" class="form-button button-light">Sign up now</button> <p class="form-details promise"> <small>We will only send you Mozilla-related information.</small> </p> </div> </div> <div id="newsletter_thanks" class="thanks"> <h2>Thanks!</h2> <p> If you haven’t previously confirmed a subscription to a Mozilla-related newsletter you may have to do so. Please check your inbox or your spam filter for an e-mail from us. </p> </div> </form> </aside> <section id="comments" class="section"> <div class="content"> <header class="comments-head"> <h3> 5 comments on “Developer Spotlight: Port Authority” </h3> </header> <ol id="comment-list" class="comment-list hfeed"> <li id="comment-227826" class="comment even thread-even depth-1 hentry"> <h4 class="entry-title vcard"> <cite class="author fn">Michael Segers</cite> <span class="photo"><img alt='' src='https://secure.gravatar.com/avatar/f68ebb75f77ea0f3b73e650f2dc54bd3?s=60&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/f68ebb75f77ea0f3b73e650f2dc54bd3?s=120&#038;d=mm&#038;r=g 2x' class='avatar avatar-60 photo' height='60' width='60' loading='lazy' decoding='async'/></span> <span class="comment-meta"> wrote on <a href="https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/#comment-227826" rel="bookmark" title="Permanent link to this comment by Michael Segers"> <time class="published" datetime="2024-05-11" title="2024-05-11"> May 11, 2024 at 4:33 am: </time> </a> </span> </h4> <blockquote class="entry-content"> <p>Good stuff</p> </blockquote> <p class="comment-util"> </p> </li><!-- #comment-## --> <li id="comment-227830" class="comment odd alt thread-odd thread-alt depth-1 hentry"> <h4 class="entry-title vcard"> <cite class="author fn">Thomas Kuchenbecker</cite> <span class="photo"><img alt='' src='https://secure.gravatar.com/avatar/d2326975efeb64053a0bf42d903c2452?s=60&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/d2326975efeb64053a0bf42d903c2452?s=120&#038;d=mm&#038;r=g 2x' class='avatar avatar-60 photo' height='60' width='60' loading='lazy' decoding='async'/></span> <span class="comment-meta"> wrote on <a href="https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/#comment-227830" rel="bookmark" title="Permanent link to this comment by Thomas Kuchenbecker"> <time class="published" datetime="2024-05-16" title="2024-05-16"> May 16, 2024 at 8:50 am: </time> </a> </span> </h4> <blockquote class="entry-content"> <p>Hope it woks</p> </blockquote> <p class="comment-util"> </p> </li><!-- #comment-## --> <li id="comment-227831" class="comment even thread-even depth-1 hentry"> <h4 class="entry-title vcard"> <cite class="author fn">Tom kuchenbecker</cite> <span class="photo"><img alt='' src='https://secure.gravatar.com/avatar/d2326975efeb64053a0bf42d903c2452?s=60&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/d2326975efeb64053a0bf42d903c2452?s=120&#038;d=mm&#038;r=g 2x' class='avatar avatar-60 photo' height='60' width='60' loading='lazy' decoding='async'/></span> <span class="comment-meta"> wrote on <a href="https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/#comment-227831" rel="bookmark" title="Permanent link to this comment by Tom kuchenbecker"> <time class="published" datetime="2024-05-16" title="2024-05-16"> May 16, 2024 at 8:53 am: </time> </a> </span> </h4> <blockquote class="entry-content"> <p>Tom likes it</p> </blockquote> <p class="comment-util"> </p> </li><!-- #comment-## --> <li id="comment-227832" class="comment odd alt thread-odd thread-alt depth-1 hentry"> <h4 class="entry-title vcard"> <cite class="author fn">Kevan Rhead</cite> <span class="photo"><img alt='' src='https://secure.gravatar.com/avatar/8aeb1dcf95ef42d4e95820700db7c414?s=60&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/8aeb1dcf95ef42d4e95820700db7c414?s=120&#038;d=mm&#038;r=g 2x' class='avatar avatar-60 photo' height='60' width='60' loading='lazy' decoding='async'/></span> <span class="comment-meta"> wrote on <a href="https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/#comment-227832" rel="bookmark" title="Permanent link to this comment by Kevan Rhead"> <time class="published" datetime="2024-05-16" title="2024-05-16"> May 16, 2024 at 10:00 am: </time> </a> </span> </h4> <blockquote class="entry-content"> <p>curious</p> </blockquote> <p class="comment-util"> </p> </li><!-- #comment-## --> <li id="comment-227833" class="comment even thread-even depth-1 hentry"> <h4 class="entry-title vcard"> <cite class="author fn">Tran</cite> <span class="photo"><img alt='' src='https://secure.gravatar.com/avatar/fa6a77395d3ec884ee305988eec429ad?s=60&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/fa6a77395d3ec884ee305988eec429ad?s=120&#038;d=mm&#038;r=g 2x' class='avatar avatar-60 photo' height='60' width='60' loading='lazy' decoding='async'/></span> <span class="comment-meta"> wrote on <a href="https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/#comment-227833" rel="bookmark" title="Permanent link to this comment by Tran"> <time class="published" datetime="2024-05-17" title="2024-05-17"> May 17, 2024 at 2:31 am: </time> </a> </span> </h4> <blockquote class="entry-content"> <p>First Time I try.</p> </blockquote> <p class="comment-util"> </p> </li><!-- #comment-## --> </ol> </div> </section> </main> <aside id="sidebar" class="section widgets can-stick"> <div class="content"> <aside id="text-456878582" class="widget widget_text"><h3 class="widget-title">Looking for add-ons?</h3> <div class="textwidget"><p><strong><a href="https://addons.mozilla.org/?utm_source=blog.mozilla.org&amp;utm_medium=referral&amp;utm_content=sidebar-link">Search &amp; install add-ons</a></strong></p> </div> </aside><aside id="categories-254997392" class="widget widget_categories"><h3 class="widget-title">Tags</h3> <ul> <li class="cat-item cat-item-7117"><a href="https://blog.mozilla.org/addons/category/builder/">builder</a> (77) </li> <li class="cat-item cat-item-388"><a href="https://blog.mozilla.org/addons/category/compatibility/">compatibility</a> (277) </li> <li class="cat-item cat-item-6744"><a href="https://blog.mozilla.org/addons/category/competition/">contests</a> (26) </li> <li class="cat-item cat-item-176604"><a href="https://blog.mozilla.org/addons/category/contribute/">contribute</a> (11) </li> <li class="cat-item cat-item-44"><a href="https://blog.mozilla.org/addons/category/developers/">developers</a> (715) </li> <li class="cat-item cat-item-295"><a href="https://blog.mozilla.org/addons/category/documentation/">documentation</a> (240) </li> <li class="cat-item cat-item-581"><a href="https://blog.mozilla.org/addons/category/end-users/">end users</a> (214) </li> <li class="cat-item cat-item-39"><a href="https://blog.mozilla.org/addons/category/events/">events</a> (76) </li> <li class="cat-item cat-item-278884"><a href="https://blog.mozilla.org/addons/category/featured-addons/">featured addons</a> (115) </li> <li class="cat-item cat-item-278890"><a href="https://blog.mozilla.org/addons/category/featured-contributors/">featured contributors</a> (36) </li> <li class="cat-item cat-item-121"><a href="https://blog.mozilla.org/addons/tag/general/">general</a> (3) </li> <li class="cat-item cat-item-588"><a href="https://blog.mozilla.org/addons/category/jetpack/">jetpack</a> (150) </li> <li class="cat-item cat-item-322922"><a href="https://blog.mozilla.org/addons/tag/manifest-v3/">manifest v3</a> (6) </li> <li class="cat-item cat-item-124"><a href="https://blog.mozilla.org/addons/category/mobile/">mobile</a> (58) </li> <li class="cat-item cat-item-574"><a href="https://blog.mozilla.org/addons/category/policy/">policy</a> (49) </li> <li class="cat-item cat-item-227"><a href="https://blog.mozilla.org/addons/category/releases/">releases</a> (149) </li> <li class="cat-item cat-item-7119"><a href="https://blog.mozilla.org/addons/category/restartless/">restartless</a> (8) </li> <li class="cat-item cat-item-742"><a href="https://blog.mozilla.org/addons/category/sdk/">sdk</a> (133) </li> <li class="cat-item cat-item-551"><a href="https://blog.mozilla.org/addons/category/personas/">themes</a> (27) </li> <li class="cat-item cat-item-278886"><a href="https://blog.mozilla.org/addons/category/web-extensions/">webextensions</a> (121) </li> </ul> </aside> </div> </aside> </div><!-- /.site-wrap --> <footer id="site-info" class="section"> <div class="content"> <nav class="primary"> <div class="logo"> <a href="https://www.mozilla.org/?utm_source=blog.mozilla.org&amp;utm_campaign=footer&amp;utm_medium=referral" data-link-type="footer" data-link-name="Mozilla">Mozilla</a> </div> <section class="mozilla"> <h5><a href="https://www.mozilla.org/?utm_source=blog.mozilla.org&amp;utm_campaign=footer&amp;utm_medium=referral" data-link-type="footer" data-link-name="Mozilla">Mozilla</a></h5> <ul class="mozilla-links"> <li><a href="https://www.mozilla.org/about/?utm_source=blog.mozilla.org&amp;utm_campaign=footer&amp;utm_medium=referral" data-link-type="footer" data-link-name="About">About</a></li> <li><a href="https://www.mozilla.org/contact/?utm_source=blog.mozilla.org&amp;utm_campaign=footer&amp;utm_medium=referral" data-link-type="footer" data-link-name="Contact Us">Contact Us</a></li> <li><a href="https://donate.mozilla.org/?presets=50,30,20,10&amp;amount=30&amp;currency=usd&amp;utm_source=blog.mozilla.org&amp;utm_campaign=footer&amp;utm_medium=referral" class="donate" data-link-type="footer" data-link-name="Donate">Donate</a></li> <li> <ul class="social-links"> <li><a class="twitter" href="https://twitter.com/mozilla" data-link-type="footer" data-link-name="Twitter (@mozilla)">Twitter<span> (@mozilla)</span></a></li> <li><a class="instagram" href="https://www.instagram.com/mozillagram/" data-link-type="footer" data-link-name="Instagram (@mozillagram)">Instagram<span> (@mozillagram)</span></a></li> </ul> </li> </ul> </section> <section class="firefox"> <h5><a href="https://www.mozilla.org/firefox/?utm_source=blog.mozilla.org&amp;utm_campaign=footer&amp;utm_medium=referral" data-link-type="footer" data-link-name="Mozilla">Firefox</a></h5> <ul class="firefox-links"> <li><a href="https://www.mozilla.org/firefox/new/?utm_source=blog.mozilla.org&amp;utm_campaign=footer&amp;utm_medium=referral" data-link-type="footer" data-link-name="Download Firefox">Download Firefox</a></li> <li><a href="https://www.mozilla.org/firefox/?utm_source=blog.mozilla.org&amp;utm_campaign=footer&amp;utm_medium=referral" data-link-type="footer" data-link-name="Desktop">Desktop</a></li> <li><a href="https://www.mozilla.org/firefox/mobile/?utm_source=blog.mozilla.org&amp;utm_campaign=footer&amp;utm_medium=referral" data-link-type="footer" data-link-name="Mobile">Mobile</a></li> <li><a href="https://www.mozilla.org/firefox/features/?utm_source=blog.mozilla.org&amp;utm_campaign=footer&amp;utm_medium=referral" data-link-type="footer" data-link-name="Features">Features</a></li> <li><a href="https://www.mozilla.org/firefox/channel/desktop/?utm_source=blog.mozilla.org&amp;utm_campaign=footer&amp;utm_medium=referral" data-link-type="footer" data-link-name="Beta, Nightly, Developer Edition">Beta, Nightly, Developer Edition</a></li> <li> <ul class="social-links"> <li><a class="twitter" href="https://twitter.com/firefox" data-link-type="footer" data-link-name="Twitter (@firefox)">Twitter<span> (@firefox)</span></a></li> <li><a class="youtube" href="https://www.youtube.com/firefoxchannel" data-link-type="footer" data-link-name="YouTube (firefoxchannel)">YouTube<span> (firefoxchannel)</span></a></li> </ul> </li> </ul> </section> </nav> <nav class="secondary"> <div class="small-links"> <ul> <li><a rel="nofollow" href="https://www.mozilla.org/privacy/" data-link-type="footer" data-link-name="Privacy">Website Privacy Notice</a></li> <li><a rel="nofollow" href="https://www.mozilla.org/privacy/websites/#cookies" data-link-type="footer" data-link-name="Cookies">Cookies</a></li> <li><a rel="nofollow" href="https://www.mozilla.org/about/legal/" data-link-type="footer" data-link-name="Legal">Legal</a></li> </ul> <p class="license"> Visit Mozilla Corporation’s not-for-profit parent, the <a href="https://foundation.mozilla.org" data-link-type="footer" data-link-name="Mozilla Foundation">Mozilla Foundation</a>. </p> <p class="license"> Portions of this content are ©1998-2024 by individual contributors. Content available under a <a href="https://www.mozilla.org/foundation/licensing/website-content/" rel="external license">Creative Commons license</a>. </p> </div> </nav> </div> </footer> <!--[if IE 9]> <script type="text/javascript" src="https://blog.mozilla.org/addons/wp-content/themes/frontierline/js/matchMedia.js"></script> <script type="text/javascript" src="https://blog.mozilla.org/addons/wp-content/themes/frontierline/js/matchMedia.addListener.js"></scrip> <![endif]--> <script type='text/javascript' src='https://blog.mozilla.org/addons/wp-content/themes/frontierline/js/global.js?ver=2.2' id='global-js'></script> <script type='text/javascript' src='https://blog.mozilla.org/addons/wp-content/themes/frontierline/js/basket-client.js?ver=1.2' id='basket-client-js'></script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10