{"id":392968,"date":"2026-11-12T10:49:52","date_gmt":"2026-11-12T10:49:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/carbon-txt\/"},"modified":"2026-11-12T10:49:19","modified_gmt":"2026-11-12T10:49:19","slug":"carbon-txt","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/carbon-txt\/","author":15278769,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.5","stable_tag":"0.5","tested":"7.1.4","requires":"6.6","requires_php":"7.4","requires_plugins":null,"header_name":"Carbon.txt","header_author":"Nahuai Badiola","header_description":"Carbon.txt is a single recognisable location on any web domain for public sustainability data relating to that organisation. It helps others find the information you share more easily.","last_updated":"2026-11-12 10:49:19","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/thegreenwebfoundation\/wp-carbon-txt-plugin","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":47,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.5":{"tag":"0.5","author":"nahuai","date":"2026-11-12 10:49:19","revision":3798096}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.5"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[15834,280705,178960,260043,155990],"plugin_category":[],"plugin_contributors":[292224,292226,191561,292225],"plugin_business_model":[],"class_list":["post-392968","plugin","type-plugin","status-publish","hentry","plugin_tags-carbon","plugin_tags-carbon-txt","plugin_tags-emissions","plugin_tags-green-web","plugin_tags-sustainability","plugin_contributors-greenwebfoundation","plugin_contributors-hanopcan","plugin_contributors-nahuai","plugin_contributors-timcowlishaw","plugin_committers-nahuai"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/carbon-txt.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>carbon.txt is a single, recognisable place on your website, at\nhttps:\/\/your-site.com\/carbon.txt, where anyone can find out what your\norganisation publishes about its own environmental impact.<\/p>\n\n<p>This plugin builds that file for you. You describe your disclosures (the\npublic documents where you report your sustainability data) and the plugin\nturns them into a valid <code>carbon.txt<\/code>, served straight from your site.<\/p>\n\n<p><strong>What you can do with it:<\/strong><\/p>\n\n<ul>\n<li><strong>Add your disclosures.<\/strong> One or more links to the documents that back\nup your claims: your annual report, your sustainability page, a\ncertificate, and so on. Each one gets a document type, so readers know\nwhat they are looking at.<\/li>\n<li><strong>Point at any document.<\/strong> Paste a URL, pick one of your published pages,\nor choose a file from your media library.<\/li>\n<li><strong>Record your certifications.<\/strong> If your organisation holds a\ncertification (a B Corp, an ecolabel, an ISO standard), list it once and\nlink your disclosures to it.<\/li>\n<li><strong>Preview before you publish.<\/strong> The settings screen shows the exact file\nthat will be served, so you always know what visitors will get.<\/li>\n<li><strong>Start from what you already have.<\/strong> If a <code>carbon.txt<\/code> already exists on\nyour server, the plugin can read it and offer to import what it finds.<\/li>\n<li><strong>Keep a copy.<\/strong> Your disclosures stay saved when you deactivate the\nplugin, and you can copy or download them at any time.<\/li>\n<\/ul>\n\n<h3>How it works<\/h3>\n\n<p><strong>Document types.<\/strong> The picker offers the document types the <code>carbon.txt<\/code>\nsyntax defines. The Green Web Foundation has deprecated the \"web page\"\ntype in favour of \"sustainability page\", so it is no longer offered, and\nnew disclosures start at \"sustainability page\". Disclosures that already\nuse \"web page\" keep working. They are labelled as deprecated in the editor,\nso you can move them on when you get the chance.<\/p>\n\n<p><strong>Required fields.<\/strong> A disclosure needs a URL, and a certification needs a\ntitle and a URL. Anything still missing one of those is skipped when you\nsave. The editor marks every field as required or optional, and tells you\nwhat was left out.<\/p>\n\n<p><strong>Certifications.<\/strong> Each certification you list gets an id generated from\nits title, and your disclosures reference that id. Only complete\ncertifications appear in the list you can choose from, so a half-finished\none never shows up as a blank entry.<\/p>\n\n<p><strong>The file itself.<\/strong> It is generated on request from your settings and\ncached, so there is no physical file to manage and it survives deploys. It\nis served from your site root even with plain permalinks. Every save\nre-stamps the <code>last_updated<\/code> date.<\/p>\n\n<p><strong>An existing file on your server.<\/strong> If a <code>carbon.txt<\/code> already exists at\nyour domain root or at <code>\/.well-known\/carbon.txt<\/code>, the settings screen\nwarns you: your web server may keep serving that file instead of the one\nthis plugin generates. You can import the disclosures it finds, and the old\nfile is then permanently deleted once you save.<\/p>\n\n<p><strong>DNS delegation.<\/strong> If your domain has a <code>carbon-txt-location<\/code> TXT record\n(see https:\/\/carbontxt.org\/faq), that takes priority over any file this\nplugin generates. The settings screen warns you when it finds one, so you\nare not left wondering why your changes seem to have no effect.<\/p>\n\n<p><strong>Validation.<\/strong> After each save, the plugin asks the Green Web Foundation's\nhosted validator to check your domain. Their validator fetches your live\n    carbon.txt from the web, so this needs a publicly reachable site. Local\nand staging domains are skipped. No key or setup is required, and validation\ncan be switched off from the settings screen. See \"External services\"\nbelow for exactly what is sent, and where.<\/p>\n\n<p><strong>Removing the plugin.<\/strong> Deactivating keeps your disclosures and settings.\nDeleting the plugin removes them, so the plugin offers to copy or download\nyour file first.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the carbon.txt validator API operated by The Green\nWeb Foundation, to check that the carbon.txt file your site publishes can be\nread from the public web. That check is the only thing it is used for.<\/p>\n\n<p><strong>What is sent.<\/strong> Your site's fully-qualified domain name \u2014 for example\n    example.com \u2014 together with the shared API key that identifies this\nplugin. No file contents, no page content, no visitor or user data, and\nnothing that identifies you.<\/p>\n\n<p><strong>When.<\/strong> Once per save of this plugin's settings, and only while the\n\"Validate with the Green Web Foundation after saving\" option is ticked. It\nis skipped on domains that are not publicly reachable, such as local and\nstaging sites. Untick it in the settings and nothing is sent.<\/p>\n\n<p><strong>Where.<\/strong> From your WordPress server, over HTTPS, to\nhttps:\/\/carbon-txt-api.greenweb.org\/. The validator then fetches\n    https:\/\/your-domain\/carbon.txt itself, which is why a passing result tells\nyou the file is publicly readable rather than blocked by a firewall, CAPTCHA\nor CDN. The Green Web Foundation also uses the aggregate results to measure\nadoption of the carbon.txt standard.<\/p>\n\n<p>This service is provided by The Green Web Foundation:<\/p>\n\n<ul>\n<li>Terms of use and API usage conditions:\nhttps:\/\/developers.thegreenwebfoundation.org\/api\/carbon-txt\/overview\/<\/li>\n<li>Privacy policy: https:\/\/www.thegreenwebfoundation.org\/privacy-statement\/<\/li>\n<li>Service documentation: https:\/\/developers.thegreenwebfoundation.org\/api\/carbon-txt\/<\/li>\n<\/ul>\n\n<h3>Development<\/h3>\n\n<p>This plugin is developed in the open on\n<a href=\"https:\/\/github.com\/thegreenwebfoundation\/wp-carbon-txt-plugin\">GitHub<\/a>.\nBug reports, questions and pull requests are welcome there.<\/p>\n\n<p>The admin app's source lives in <code>src\/<\/code>. Build it with:<\/p>\n\n<pre><code>npm install &amp;&amp; npm run build\n<\/code><\/pre>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/carbon-txt\/<\/code>, or install the\nzip from <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong> in your dashboard.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to <strong>Settings &gt; Carbon.txt<\/strong> and add your first disclosure.<\/li>\n<li>Press <strong>Save and publish<\/strong>. Your <code>carbon.txt<\/code> is now live at\nhttps:\/\/your-site.com\/carbon.txt.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20create%20a%20file%20on%20my%20server%3F\"><h3>Does this plugin create a file on my server?<\/h3><\/dt>\n<dd><p>No. The file is generated when a visitor requests it, and served from your\nsite root. There is nothing to upload and nothing to clean up.<\/p><\/dd>\n<dt id=\"why%20is%20my%20carbon.txt%20not%20the%20one%20i%20just%20saved%3F\"><h3>Why is my carbon.txt not the one I just saved?<\/h3><\/dt>\n<dd><p>Usually one of three things. A <code>carbon.txt<\/code> file already sitting on your\nserver is being served directly, a <code>carbon-txt-location<\/code> DNS record is\ndelegating discovery elsewhere, or you are on a local or staging domain\nthat isn't publicly reachable. The settings screen warns you about the\nfirst two.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20disclosures%20if%20i%20delete%20the%20plugin%3F\"><h3>What happens to my disclosures if I delete the plugin?<\/h3><\/dt>\n<dd><p>They are removed with it. Deactivating keeps them, and you can copy or\ndownload your file from the settings screen at any time.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.5<\/h4>\n\n<ul>\n<li>Rename the plugin to \"Carbon.txt\" with the <code>carbon-txt<\/code> slug and text domain, as required for WordPress.org hosting.<\/li>\n<li>Remove the manual <code>load_plugin_textdomain()<\/code> call; WordPress loads translations automatically. Translations are served through translate.wordpress.org and are no longer shipped in the plugin package.<\/li>\n<li>Update the \"Tested up to\" version to 7.1.<\/li>\n<li>Validate your domain against the Green Web Foundation's hosted validator automatically after every save \u2014 no API key or setup required, with a settings-screen toggle to turn validation off.<\/li>\n<li>Remove the per-site Green Web Foundation API key field; the shared key used for validation now ships with the plugin.<\/li>\n<li>Expand the documentation of the external call to the Green Web Foundation validator, in the \"External services\" section: what is sent, when, where, and links to its terms, privacy policy and documentation.<\/li>\n<li>Look for an existing <code>carbon.txt<\/code> at the public document root instead of the WordPress install path, so the check also works on sites installed in a subdirectory. Other layouts can override the detected root with the <code>wp_carbon_txt_public_root<\/code> filter.<\/li>\n<li>Stop offering the deprecated \"web page\" document type in the picker; new disclosures start at \"sustainability page\", and existing \"web page\" disclosures keep working.<\/li>\n<li>Mark required and optional fields in the editor, and report the entries skipped when saving because a required field was missing.<\/li>\n<li>Refresh the wording across the settings screen and update the Spanish translation.<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>Add an optional Green Web Foundation API key field: after each save, the plugin asks the Green Web Foundation's hosted validator to validate your domain (publicly reachable domains only).<\/li>\n<li>Support additional carbon.txt spec versions via a per-version document-type table, and add an optional <code>domain<\/code> field to disclosures.<\/li>\n<li>Skip WordPress's canonical redirect for <code>\/carbon.txt<\/code> so the file isn't redirected away from its expected path.<\/li>\n<li>Offer to export your disclosures before deactivating the plugin, and collapse the settings-page backup section by default.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Check the well-known location (<code>\/.well-known\/carbon.txt<\/code>) for an existing file, with the same import and cleanup tools already offered for the domain root.<\/li>\n<li>Permanently delete an imported file once its disclosures have been saved, instead of renaming it aside.<\/li>\n<li>Add a \"Keep a copy\" section to copy your disclosures to the clipboard or download them as a file before deactivating or deleting the plugin.<\/li>\n<li>Detect a <code>carbon-txt-location<\/code> DNS TXT delegation record on your domain and warn that it takes priority over this plugin's output.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Add a media library file picker as a third way to point a disclosure at a URL, alongside pasting one or selecting a page.<\/li>\n<li>Remember the selected page or file by ID, so revisiting a disclosure shows the same selection instead of falling back to a plain URL.<\/li>\n<li>Detect a carbon.txt file already on the server, warn that the web server may keep serving it directly, and offer to import disclosures found in it.<\/li>\n<li>Offer to rename an existing file aside as a dated backup (never deleted) once settings have been saved.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Multiple organisational disclosures, each with a document type, a URL or page, and an optional title and valid-until date.<\/li>\n<li>Live preview and \/carbon.txt endpoint.<\/li>\n<li>Add a Settings link on the Plugins screen and redirect to the settings page after activating the plugin on its own.<\/li>\n<\/ul>","raw_excerpt":"Publish a carbon.txt file with your organisational sustainability disclosures.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/392968","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=392968"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/nahuai"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=392968"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=392968"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=392968"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=392968"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=392968"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=392968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}