{"id":403577,"date":"2026-11-13T07:58:53","date_gmt":"2026-11-13T07:58:53","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/fyrins-retype\/"},"modified":"2026-11-13T07:58:18","modified_gmt":"2026-11-13T07:58:18","slug":"fyrins-retype","status":"publish","type":"plugin","link":"https:\/\/gu.wordpress.org\/plugins\/fyrins-retype\/","author":15037065,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.4","requires":"6.6","requires_php":"7.4","requires_plugins":null,"header_name":"Fyrins Retype","header_author":"Alexandre Revire","header_description":"A rich text format for the block editor. Select a word, list a few alternatives, and on the front end the word is erased and typed again, letter by letter, cycling through the list.","last_updated":"2026-11-13 07:58:18","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/Fyrins\/retype","header_author_uri":"https:\/\/alexandre-revire.fr","rating":0,"author_block_rating":0,"active_installs":0,"downloads":68,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"fyrins","date":"2026-11-13 07:58:18","revision":3799904}},"upgrade_notice":{"1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3799904,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3799904,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3799904,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3799904,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3799904,"resolution":"1","location":"assets","locale":"","width":1280,"height":960},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3799904,"resolution":"2","location":"assets","locale":"","width":1280,"height":720}},"screenshots":{"1":"Select a word, choose Retype in the formatting toolbar, type the words to cycle through, and set the speed, the pause and the caret color for that word if you like.","2":"On the site, the word is erased and retyped letter by letter, with a blinking caret in the chosen color, and the rest of the sentence follows it."}},"plugin_section":[],"plugin_tags":[148857,12737,157671,30049,32626],"plugin_category":[],"plugin_contributors":[289531],"plugin_business_model":[],"class_list":["post-403577","plugin","type-plugin","status-publish","hentry","plugin_tags-block-editor","plugin_tags-rich-text","plugin_tags-text-animation","plugin_tags-typewriter","plugin_tags-typing-effect","plugin_contributors-fyrins","plugin_committers-fyrins"],"banners":{"banner":"https:\/\/ps.w.org\/fyrins-retype\/assets\/banner-772x250.png?rev=3799904","banner_2x":"https:\/\/ps.w.org\/fyrins-retype\/assets\/banner-1544x500.png?rev=3799904","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/fyrins-retype\/assets\/icon-128x128.png?rev=3799904","icon_2x":"https:\/\/ps.w.org\/fyrins-retype\/assets\/icon-256x256.png?rev=3799904","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/fyrins-retype\/assets\/screenshot-1.png?rev=3799904","caption":"Select a word, choose Retype in the formatting toolbar, type the words to cycle through, and set the speed, the pause and the caret color for that word if you like."},{"src":"https:\/\/ps.w.org\/fyrins-retype\/assets\/screenshot-2.png?rev=3799904","caption":"On the site, the word is erased and retyped letter by letter, with a blinking caret in the chosen color, and the rest of the sentence follows it."}],"raw_content":"<!--section=description-->\n<p>https:\/\/www.youtube.com\/watch?v=909NcozD1TU<\/p>\n\n<p>Retype adds one entry to the formatting toolbar of the block editor, in the \"More\" dropdown next to Highlight and Inline code. Select a word in a heading or a paragraph, choose Retype, type a few words separated by commas, and apply. The same popover can set, for that word only, the typing speed, the pause on each word and the color of the caret.<\/p>\n\n<p>On the front end the selected word is shown first. After a pause it is erased letter by letter, the next word of the list is typed in its place, and the cycle goes on. A thin caret blinks at the end of the word while it types.<\/p>\n\n<pre><code>We help every &lt;baker, potter, beekeeper&gt; find their customers.\n<\/code><\/pre>\n\n<p>There is no settings page, no option in your database, no account and no outgoing request.<\/p>\n\n<p><strong>How it behaves<\/strong><\/p>\n\n<ul>\n<li>The word takes its real width as it is typed, so the text that follows it moves along with the writing.<\/li>\n<li>A word that is entirely bold, italic or a link keeps that formatting while it is retyped. A word formatted only in part is left still.<\/li>\n<li>Words added to the page after it loads, by a \"load more\" button for instance, are animated too.<\/li>\n<li>The animation pauses when the browser tab is hidden or the word is scrolled out of view, and resumes when it comes back.<\/li>\n<li>Nothing loads on pages that do not use the format. Where it is used, the front end gets a script of about 5 KB, loaded with <code>defer<\/code> in the footer, and a stylesheet under 1 KB.<\/li>\n<li>The words are inserted as text, never as HTML.<\/li>\n<li>The saved markup is a plain <code>&lt;span&gt;<\/code> with a class and a data attribute. If you deactivate the plugin, the selected word simply stays in the sentence, and no block is invalidated.<\/li>\n<\/ul>\n\n<p><strong>Accessibility<\/strong><\/p>\n\n<p>No plugin can make a site accessible on its own, and this one does not claim to. What it does, within its scope:<\/p>\n\n<ul>\n<li>Screen readers are given the original word, once. The letters being typed are hidden from them, so a screen reader user hears a normal sentence rather than a stream of changes.<\/li>\n<li>Visitors who ask their system to reduce motion see the original word, with no animation and no blinking caret. If they turn the setting on while reading, the animation stops and the original word comes back.<\/li>\n<li>Without JavaScript, the original word is shown as plain text.<\/li>\n<\/ul>\n\n<p>The animation loops for as long as the word is on screen, and the plugin offers no pause button. Moving content that starts on its own is something to use sparingly: one animated word per page, short words, and not in the middle of text people need to read. Whether it fits your site and its obligations is your call.<\/p>\n\n<p><strong>Timing and caret color<\/strong><\/p>\n\n<p>Each word can have its own typing speed, pause and caret color, set in the popover. Words without settings follow the site defaults, which a developer can change with the <code>retype_delays<\/code> filter. See the FAQ.<\/p>\n\n<p><strong>Source code and build<\/strong><\/p>\n\n<p>The scripts and stylesheets shipped in <code>build\/<\/code> are compiled from the <code>src\/<\/code> directory of the public repository, with <a href=\"https:\/\/www.npmjs.com\/package\/@wordpress\/scripts\">@wordpress\/scripts<\/a>, the build tool maintained by the WordPress project:<\/p>\n\n<p>https:\/\/github.com\/Fyrins\/retype<\/p>\n\n<p>To reproduce the shipped files:<\/p>\n\n<pre><code>git clone https:\/\/github.com\/Fyrins\/retype.git\ncd retype\nnpm install\nnpm run build\n<\/code><\/pre>\n\n<!--section=installation-->\n<ol>\n<li>In your admin, go to Plugins, then Add New Plugin, and search for Retype.<\/li>\n<li>Install and activate it.<\/li>\n<li>Edit a post, select a word in a heading or a paragraph, open the \"More\" dropdown of the formatting toolbar, and choose Retype.<\/li>\n<\/ol>\n\n<p>There is nothing to configure afterwards.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20edit%20the%20list%20of%20words%3F\"><h3>How do I edit the list of words?<\/h3><\/dt>\n<dd><p>Click inside the word and choose Retype again. The popover opens with the current list. Remove format turns the word back into ordinary text. An empty list does the same.<\/p><\/dd>\n<dt id=\"which%20word%20is%20shown%20first%3F\"><h3>Which word is shown first?<\/h3><\/dt>\n<dd><p>The one you selected in the editor. It is also the word screen readers read and the word shown to visitors who prefer reduced motion, so pick the one that makes the sentence work on its own.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20speed%3F\"><h3>Can I change the speed?<\/h3><\/dt>\n<dd><p>For one word, in the popover: \"Typing delay per letter\" is in milliseconds, lower is faster, and erasing speeds up or slows down in proportion. \"Pause on each word\" is in seconds. Reset brings a setting back to the site default.<\/p>\n\n<p>For the whole site, use the <code>retype_delays<\/code> filter, in your theme's <code>functions.php<\/code> or a small plugin of your own. Values are in milliseconds:<\/p>\n\n<pre><code>add_filter( 'retype_delays', function ( $delays ) {\n    $delays['type']  = 90;   \/\/ per letter while typing, default 40\n    $delays['erase'] = 30;   \/\/ per letter while erasing, default 20\n    $delays['hold']  = 2500; \/\/ pause on each word, default 1200\n    return $delays;\n} );\n<\/code><\/pre>\n\n<p>Missing keys keep their default. <code>type<\/code> and <code>erase<\/code> are kept between 10 and 2000, <code>hold<\/code> between 200 and 60000, and anything that is not a number falls back to the default.<\/p>\n\n<p>A script of your own can also set <code>window.retypeDelays<\/code> before the plugin's script runs, with the same keys and the same limits. The settings of a word in the popover take precedence over both.<\/p><\/dd>\n<dt id=\"can%20the%20caret%20have%20its%20own%20color%3F\"><h3>Can the caret have its own color?<\/h3><\/dt>\n<dd><p>Yes. The popover offers the colors of your theme's palette. A palette color is saved as a reference to the theme color, so the caret follows it if the theme changes it. Clear the color and the caret takes the color of the text.<\/p><\/dd>\n<dt id=\"where%20are%20the%20settings%20of%20a%20word%20stored%3F\"><h3>Where are the settings of a word stored?<\/h3><\/dt>\n<dd><p>In the post content, as data attributes of the word's <code>&lt;span&gt;<\/code>: <code>data-retype-type<\/code> and <code>data-retype-hold<\/code> in milliseconds, <code>data-retype-caret<\/code> for the color. Nothing goes to the database besides your post. Values out of range are confined to the same limits as the filter, and a color that is not a hex, <code>rgb()<\/code>, <code>hsl()<\/code> or theme palette color is ignored.<\/p><\/dd>\n<dt id=\"can%20a%20retyped%20word%20be%20bold%20or%20a%20link%3F\"><h3>Can a retyped word be bold or a link?<\/h3><\/dt>\n<dd><p>Yes, if the whole word is: the formatting stays and only the letters change. If only part of the word is formatted, the word is shown as it is, without animation, because it could not be retyped letter by letter without rebuilding your markup.<\/p><\/dd>\n<dt id=\"does%20it%20work%20in%20the%20site%20editor%20and%20in%20templates%3F\"><h3>Does it work in the site editor and in templates?<\/h3><\/dt>\n<dd><p>The format is registered for every rich text field of the block editor, so the site editor offers it too, in headings and paragraphs of templates and patterns. On the front end, any rendered block that contains it loads the script.<\/p><\/dd>\n<dt id=\"the%20word%20is%20cut%20off%20on%20small%20screens.\"><h3>The word is cut off on small screens.<\/h3><\/dt>\n<dd><p>The animated word does not wrap, so a word wider than the screen is clipped. Keep the words short, especially in large headings.<\/p><\/dd>\n<dt id=\"does%20it%20phone%20home%3F\"><h3>Does it phone home?<\/h3><\/dt>\n<dd><p>No. There is no telemetry, no external asset, no outgoing request, and nothing is written to your database.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<li>Retype format for the block editor, with a popover to type the list of words and, for each word, its typing speed, pause and caret color.<\/li>\n<li>Front-end animation that pauses when the tab is hidden or the word is off screen, and stays still under reduced motion.<\/li>\n<li>Script and stylesheet loaded only on pages that use the format.<\/li>\n<li><code>retype_delays<\/code> filter for the default typing, erasing and pause delays.<\/li>\n<li>Words added to the page after load are animated, and a word removed from the page stops.<\/li>\n<\/ul>","raw_excerpt":"Select a word in the block editor, list a few others, and on your site the word erases and retypes itself, letter by letter, in a loop.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/403577","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=403577"}],"author":[{"embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/fyrins"}],"wp:attachment":[{"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=403577"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=403577"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=403577"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=403577"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=403577"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=403577"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}