{"id":370034,"date":"2026-09-22T10:16:48","date_gmt":"2026-09-22T10:16:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/unbounded-by-lantern\/"},"modified":"2026-09-22T16:10:50","modified_gmt":"2026-09-22T16:10:50","slug":"unbounded-by-lantern","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/unbounded-by-lantern\/","author":23564986,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.1","stable_tag":"1.2.1","tested":"7.1.2","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"Unbounded by Lantern","header_author":"Lantern","header_description":"Let visitors volunteer a slice of their connection to help people reach the open internet. Enable the widget per page, on all posts, or on the homepage.","assets_banners_color":"","last_updated":"2026-09-22 16:10:50","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/unbounded.lantern.io","header_author_uri":"https:\/\/lantern.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":53,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.0":{"tag":"1.2.0","author":"getlantern","date":"2026-09-22 10:16:37","revision":3707038},"1.2.1":{"tag":"1.2.1","author":"getlantern","date":"2026-09-22 16:10:50","revision":3707736}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3707736,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3707736,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3707736,"resolution":false,"location":"assets","locale":false}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.0","1.2.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2502,396,7686,19139,8025],"plugin_category":[54],"plugin_contributors":[282005],"plugin_business_model":[],"class_list":["post-370034","plugin","type-plugin","status-publish","hentry","plugin_tags-censorship","plugin_tags-privacy","plugin_tags-proxy","plugin_tags-volunteer","plugin_tags-webrtc","plugin_category-security-and-spam-protection","plugin_contributors-getlantern","plugin_committers-getlantern"],"banners":[],"icons":{"svg":"https:\/\/ps.w.org\/unbounded-by-lantern\/assets\/icon.svg?rev=3707736","icon":"https:\/\/ps.w.org\/unbounded-by-lantern\/assets\/icon.svg?rev=3707736","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Roughly a third of the world's internet users live behind some form of national\ncensorship. Unbounded lets the people who visit your site help, without\ninstalling anything: the widget adds a switch to your page, and a visitor who\nturns it on lends a small amount of their bandwidth to relay traffic for someone\nwhose government blocks the open internet.<\/p>\n\n<p>Nothing happens until a visitor chooses it. The switch is off when the page\nloads, and the proxy engine is not even downloaded until it is turned on.\nVisitors can turn it off at any time, and closing the tab stops it.<\/p>\n\n<p>This plugin is the WordPress front end for that widget. It adds a settings\nscreen for the widget's appearance and placement, and a checkbox in the page\neditor to turn it on for a given page.<\/p>\n\n<h4>What you can configure<\/h4>\n\n<ul>\n<li><strong>Layout<\/strong> \u2014 banner, panel, floating, or simple<\/li>\n<li><strong>Theme<\/strong> \u2014 light, dark, or follow the visitor's system preference<\/li>\n<li><strong>Location<\/strong> \u2014 top or bottom of the page<\/li>\n<li><strong>Where it appears<\/strong> \u2014 per page via the editor sidebar, on all posts, or on the homepage<\/li>\n<\/ul>\n\n<h4>Open source<\/h4>\n\n<p>Unbounded is developed in the open at\n<a href=\"https:\/\/github.com\/getlantern\/unbounded\">github.com\/getlantern\/unbounded<\/a>.\nThe plugin source lives in <code>ui\/wp-plugin<\/code>, and the widget it loads is in <code>ui\/<\/code>.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin is a client for the Unbounded network, run by Lantern. The widget\ncannot work locally: relaying traffic for someone in another country requires\npeers, signaling, and exit infrastructure, all of which live in the service.<\/p>\n\n<p>When the widget renders on a page -- before the visitor has done anything --\ntheir browser contacts:<\/p>\n\n<ul>\n<li><strong>embed.lantern.io<\/strong> -- serves the widget bundle and its images, and hosts a\nsmall invisible frame the widget uses to remember volunteering statistics.<\/li>\n<li><strong>fonts.googleapis.com \/ fonts.gstatic.com<\/strong> -- the widget's typeface,\nUrbanist, from Google Fonts.<\/li>\n<li><strong>plausible.io<\/strong> -- usage analytics, loaded inside the embed.lantern.io frame.\nOn load the widget sends it two events: that it rendered, tagged with the\nembed type (web page or browser extension), and the state of the switch,\nwhich is off. The switch event is sent again whenever a visitor changes it.\nThe load event carries the hostname of the page the widget is embedded on. While\nthe switch is on, one further event is sent each time the widget starts\nhelping a new person, tagged with the same hostname. Every site that embeds\nthe widget is listed automatically on unbounded.lantern.io\/leaderboard and\nranked by these counts. A site that should not appear there can ask to be\nremoved at github.com\/getlantern\/unbounded\/issues.\nPlausible's own script adds its usual page metadata, including the frame's\nreferrer -- the site the widget is embedded on, usually just the origin, as\ntrimmed by that site's referrer policy. Plausible is cookieless and keeps no\npersistent identifier for the visitor; Lantern uses the counts to report how\nmany sites run the widget and how many visitors volunteer.<\/li>\n<\/ul>\n\n<p>Nothing else is contacted until a visitor turns the switch on. After that:<\/p>\n\n<ul>\n<li><strong>embed.lantern.io<\/strong> -- the WebAssembly proxy engine, around 12 MB, which is\nwhy it is fetched on demand from the service rather than bundled into this\nplugin.<\/li>\n<li><strong>geo.getiantem.org<\/strong> -- a country lookup, used to draw the map and to warn\nvisitors who appear to be in a censored region that volunteering may not be\nappropriate for them.<\/li>\n<li><strong>freddie.iantem.io<\/strong> -- peer discovery and connection signaling.<\/li>\n<li><strong>unbounded.iantem.io<\/strong> -- the exit servers that relayed traffic egresses\nthrough. If the widget's page freezes or crashes, a diagnostic report is also\nsent here: timing measurements, the page's address, the browser's user-agent\nstring, and the widget build. It carries no identifier for the visitor.<\/li>\n<li><strong>netstated-d7bbec1ed55b.herokuapp.com<\/strong> -- anonymous network-state updates\nthat power the live map of active connections.<\/li>\n<\/ul>\n\n<h4>What is kept in the visitor's browser<\/h4>\n\n<p>The widget stores a few values in browser storage: the interface language, a\ncrash-recovery marker, and -- inside the embed.lantern.io frame, so it follows\nthe visitor across sites that run the widget -- running totals of people\nhelped. None of it identifies the visitor.<\/p>\n\n<p>Unbounded does not track visitors, set advertising identifiers, or collect\npersonal data. Relayed traffic is end-to-end encrypted between the person being\nhelped and their destination; a volunteering browser cannot read it.<\/p>\n\n<ul>\n<li>Privacy policy: https:\/\/lantern.io\/privacy<\/li>\n<li>Terms of service: https:\/\/lantern.io\/terms<\/li>\n<\/ul>\n\n<p>By installing and enabling this plugin you are choosing to load the widget from\nthese services on the pages you enable it for. Please tell your visitors, and\nadd it to your own privacy policy if you have one.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Open <strong>Unbounded<\/strong> in the admin sidebar and pick a layout, theme, and location.<\/li>\n<li>Decide where the widget appears. Either tick <strong>Display on Homepage<\/strong> or\n<strong>Display on Posts<\/strong> on that settings screen, or enable it for individual\npages: edit a page and tick <strong>Enable Unbounded on this page<\/strong> in the editor\nsidebar.<\/li>\n<li>View the page. The widget renders with its switch off, waiting for a visitor\nto opt in.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20slow%20down%20my%20site%3F\"><h3>Does this slow down my site?<\/h3><\/dt>\n<dd><p>The widget bundle is deferred, so it does not block rendering. The proxy engine\nis only downloaded for visitors who turn the switch on.<\/p><\/dd>\n<dt id=\"does%20it%20use%20my%20visitors%27%20bandwidth%20without%20asking%3F\"><h3>Does it use my visitors' bandwidth without asking?<\/h3><\/dt>\n<dd><p>No. The switch is off on page load and the proxy engine is not downloaded until\na visitor turns it on. Turning it off, navigating away, or closing the tab stops\nit.<\/p><\/dd>\n<dt id=\"can%20my%20visitors%20get%20in%20trouble%20for%20volunteering%3F\"><h3>Can my visitors get in trouble for volunteering?<\/h3><\/dt>\n<dd><p>Volunteers relay encrypted traffic; they are not the exit point, so traffic does\nnot appear to originate from their connection. The widget also detects when a\nvisitor appears to be in a censored region and warns them before they opt in.\nSee the privacy policy for details.<\/p><\/dd>\n<dt id=\"can%20i%20host%20the%20widget%20bundle%20myself%3F\"><h3>Can I host the widget bundle myself?<\/h3><\/dt>\n<dd><p>Yes, with the <code>browsers_unbounded_script_url<\/code> filter. Be aware that a\nself-hosted copy is pinned to whatever build you copied and will eventually fall\nout of step with the network, so the hosted URL is the default.<\/p><\/dd>\n<dt id=\"why%20is%20the%20html%20element%20called%20%22browsers-unbounded%22%3F\"><h3>Why is the HTML element called \"browsers-unbounded\"?<\/h3><\/dt>\n<dd><p>The product used to be called Browsers Unbounded. The element name is the\nwidget's public API and renaming it would break every existing embed, so it\nstayed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Added a plugin icon for the directory listing.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Prepared for the WordPress Plugin Directory: license and plugin headers, translatable strings, uninstall cleanup.<\/li>\n<li>Settings are now validated against an allowlist before being saved.<\/li>\n<li>The widget bundle is registered with <code>wp_enqueue_script<\/code> and can be redirected with the <code>browsers_unbounded_script_url<\/code> filter.<\/li>\n<li>Added the \"simple\" layout, which the widget supported but the settings screen did not offer.<\/li>\n<\/ul>\n\n<h4>1.1<\/h4>\n\n<ul>\n<li>Renamed from Browsers Unbounded to Unbounded.<\/li>\n<li>Fixed a PHP warning and empty widget attributes on a fresh install, before any settings had been saved.<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>First version.<\/li>\n<\/ul>","raw_excerpt":"Let visitors volunteer a slice of their connection to help people in censored regions reach the open internet.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/370034","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=370034"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/getlantern"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=370034"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=370034"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=370034"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=370034"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=370034"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=370034"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}