{"id":183970,"date":"2024-02-18T18:03:37","date_gmt":"2024-02-18T18:03:37","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/xeet-wp\/"},"modified":"2026-03-27T17:31:18","modified_gmt":"2026-03-27T17:31:18","slug":"xeet-wp","status":"publish","type":"plugin","link":"https:\/\/lt.wordpress.org\/plugins\/xeet-wp\/","author":9133186,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.3","stable_tag":"1.0.3","tested":"7.0","requires":"5.8","requires_php":"7.0","requires_plugins":null,"header_name":"Static Xeets for Twitter","header_author":"Kevin Batdorf","header_description":"Embed a Tweet\/Xeet without an iframe","assets_banners_color":"","last_updated":"2026-03-27 17:31:18","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":5,"author_block_rating":4.8125,"active_installs":100,"downloads":1961,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":7,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"kbat82","date":"2024-02-19 16:38:23"},"1.0.1":{"tag":"1.0.1","author":"kbat82","date":"2024-04-17 19:58:36"},"1.0.2":{"tag":"1.0.2","author":"kbat82","date":"2026-03-27 17:11:19"},"1.0.3":{"tag":"1.0.3","author":"kbat82","date":"2026-03-27 17:31:18"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3037548,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3037548,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":[],"assets_blueprints":{},"all_blocks":{"kevinbatdorf\/xeet-wp":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":2,"name":"kevinbatdorf\/xeet-wp","version":"0.1.0","title":"Static Xeets for Twitter","category":"embed","description":"Embed x.com Tweets without an iframe","attributes":{"xeetId":{"type":"string"},"xeetData":{"type":"object"},"theme":{"type":"string"}},"supports":{"html":false},"textdomain":"xeet-wp","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScript":"file:.\/front\/front.js"}},"tagged_versions":["1.0.0","1.0.1","1.0.2","1.0.3"],"block_files":["\/tags\/1.0.3\/src\/index.js","\/tags\/1.0.3\/src\/index.css","\/tags\/1.0.3\/src\/style-index.css","\/tags\/1.0.3\/build\/index.js","\/tags\/1.0.3\/build\/index.css","\/tags\/1.0.3\/build\/style-index.css"],"assets_screenshots":{"screenshot-1.gif":{"filename":"screenshot-1.gif","revision":3037548,"resolution":"1","location":"assets","locale":""}},"screenshots":{"1":"Screenshot 1"},"jetpack_post_was_ever_published":false},"plugin_section":[172757],"plugin_tags":[1220,230,174,161,159],"plugin_category":[56],"plugin_contributors":[149290],"plugin_business_model":[],"class_list":["post-183970","plugin","type-plugin","status-publish","hentry","plugin_section-block","plugin_tags-block","plugin_tags-embed","plugin_tags-social","plugin_tags-tweet","plugin_tags-twitter","plugin_category-social-and-sharing","plugin_contributors-kbat82","plugin_committers-kbat82"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/xeet-wp\/assets\/icon-128x128.png?rev=3037548","icon_2x":"https:\/\/ps.w.org\/xeet-wp\/assets\/icon-256x256.png?rev=3037548","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/xeet-wp\/assets\/screenshot-1.gif?rev=3037548","caption":"Screenshot 1"}],"raw_content":"<!--section=description-->\n<p>The standard Tweet, or Post (or Xeet?), loads in 500kb of front end JavaScript, tracking cookies, and lots of noise. This plugin avoids all of that by pre-rendering the entire Tweet statically. Say goodbye to bulky Tweets!<\/p>\n\n<p><a href=\"https:\/\/github.com\/KevinBatdorf\/wp-xeet\">https:\/\/github.com\/KevinBatdorf\/wp-xeet<\/a><\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Embed a Tweet\/Post\/Xeet without an iframe<\/li>\n<li>Save 500kb of page load<\/li>\n<li>No Twitter\/X cookies, tracking, JavaScript, etc<\/li>\n<li>Static - Twitter\/X changes won't affect your site<\/li>\n<li>Dark\/light auto mode<\/li>\n<\/ul>\n\n<h4>Vercel<\/h4>\n\n<p>The Tweets are parsed on a server hosted on <a href=\"https:\/\/vercel.com\/\">Vercel<\/a>. Using this service, and thus connecting to their servers, you agree to their <a href=\"https:\/\/vercel.com\/legal\/privacy-policy\">privacy policy<\/a> and <a href=\"https:\/\/vercel.com\/legal\/terms\">terms<\/a>.<\/p>\n\n<p><em>NOTE:<\/em> Your frontend does not rely on any api calls, and if the Vercel api shuts down tomorrow, your site will not be affected in any way.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Activate the plugin through the 'Plugins' screen in WordPress<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"self%20host%20the%20api%3F\"><h3>Self host the API?<\/h3><\/dt>\n<dd><p>Coming soon, but you will be able to self host the backend API, which requires a basic Node.JS server. Open an issue on GitHub if you are interested in this.<\/p><\/dd>\n<dt id=\"persist%20dark%20mode%3F\"><h3>Persist Dark mode?<\/h3><\/dt>\n<dd><p>If you add <code>data-theme=\"light\"<\/code> (or 'dark') anywhere above the block (for example, on the body tag), the block will respect that theme. There is also an override \"per block\" if needed<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2 - 2026-03-27<\/h4>\n\n<ul>\n<li>Switch to Biome for linting\/formatting<\/li>\n<li>Switch to Playwright + WP Playground for testing<\/li>\n<li>Update packages<\/li>\n<li>Fix input clearing on invalid tweet URL\/ID<\/li>\n<\/ul>\n\n<h4>1.0.1 - 2024-02-19<\/h4>\n\n<ul>\n<li>Updates the block.json file with a better title<\/li>\n<\/ul>","raw_excerpt":"Embed x.com Tweets without an iframe. No more cookies and save 500kb from your page load!","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/183970","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=183970"}],"author":[{"embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kbat82"}],"wp:attachment":[{"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=183970"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=183970"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=183970"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=183970"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=183970"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=183970"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}