{"id":363362,"date":"2026-09-16T18:45:48","date_gmt":"2026-09-16T18:45:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/blicks\/"},"modified":"2026-09-22T19:51:41","modified_gmt":"2026-09-22T19:51:41","slug":"blicks","status":"publish","type":"plugin","link":"https:\/\/lug.wordpress.org\/plugins\/blicks\/","author":23558387,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.2","requires":"6.6","requires_php":"8.1","requires_plugins":null,"header_name":"Blicks","header_author":"Blicks","header_description":"Composable Gutenberg blocks with a theme-native design system.","assets_banners_color":"f9f9f8","last_updated":"2026-09-22 19:51:41","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/blicks.dev","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":102,"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":"blicks","date":"2026-09-16 18:45:22","revision":3699138},"1.0.1":{"tag":"1.0.1","author":"blicks","date":"2026-09-22 19:51:41","revision":3708027}},"upgrade_notice":{"1.0.1":"<p>Adds each block&#039;s icon to its metadata, and fixes a stale front-end stylesheet after CSS-only updates.<\/p>","1.0.0":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.gif":{"filename":"icon-128x128.gif","revision":3699138,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3699138,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3699138,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3699138,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"blicks\/icon":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"blicks\/icon","title":"Icon","category":"blicks","icon":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\"><path d=\"M12 2.679L14.733 8.268L20.825 9.138L16.364 13.476L17.483 19.569L12 16.703L6.517 19.569L7.636 13.476L3.175 9.138L9.267 8.268Z\" fill=\"#002bff\"\/><\/svg>","description":"An inline SVG icon that inherits current text color.","textdomain":"blicks","supports":{"html":false,"className":false,"blicks":{"controls":["gridChild.*","colors.text","spacing.*","effects.*","border.*","layout.*"],"states":["default","hover","focus","active"]}},"attributes":{"uniqueId":{"type":"string"},"blicks":{"type":"object","default":{}},"icon":{"type":"string","default":"star"},"size":{"type":"string","default":"1.5rem"},"strokeWidth":{"type":"number","default":2},"label":{"type":"string","default":""}},"editorScript":"blicks-editor","style":"file:.\/index.css"},"blicks\/stack":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"blicks\/stack","title":"Stack","category":"blicks","icon":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\"><path d=\"M4.2 4.2L19.8 4.2L19.8 9.6L4.2 9.6ZM5.8 8L18.2 8L18.2 5.8L5.8 5.8ZM4.2 14.4L19.8 14.4L19.8 19.8L4.2 19.8ZM5.8 18.2L18.2 18.2L18.2 16L5.8 16Z\" fill=\"currentColor\"\/><path d=\"M4.2 9.3L19.8 9.3L19.8 14.7L4.2 14.7Z\" fill=\"#002bff\"\/><\/svg>","description":"A one-dimensional flex layout for arranging child blocks vertically or horizontally.","textdomain":"blicks","supports":{"html":false,"className":false,"blicks":{"controls":["layout.flexDirection","layout.justifyContent","layout.alignItems","layout.flexWrap","layout.gapRow","layout.gapColumn","layout.width","layout.height","layout.overflow","layout.overflowX","layout.overflowY","layout.scrollSnapType","layout.containerType","layout.containerName","layout.aspectRatio","gridChild.*","spacing.*","border.*","position.*","colors.*","background.*","effects.*","animation.*","decoration.*"],"states":["default","hover","focus","active"]}},"attributes":{"uniqueId":{"type":"string"},"blicks":{"type":"object","default":{}},"orientation":{"type":"string","default":"vertical"},"tag":{"type":"string","default":"div"},"gap":{"type":"string","default":"md"},"align":{"type":"string","default":"stretch"},"justify":{"type":"string","default":"start"},"wrap":{"type":"boolean","default":false}},"editorScript":"blicks-editor","style":"file:.\/index.css"},"blicks\/image":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"blicks\/image","title":"Image","category":"blicks","icon":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\"><path d=\"M3.2 4.2L20.8 4.2L20.8 19.8L3.2 19.8ZM4.8 18.2L19.2 18.2L19.2 5.8L4.8 5.8ZM7.066 17.566L10.7 13.931L13.3 16.531L14.917 14.915L16.862 17.483L18.138 16.517L15.083 12.485L13.3 14.269L10.7 11.669L5.934 16.434Z\" fill=\"currentColor\"\/><path d=\"M6.8 10a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0 -4.4 0Z\" fill=\"#002bff\"\/><\/svg>","description":"A responsive media block with optional link and caption.","textdomain":"blicks","supports":{"html":false,"className":false,"blicks":{"controls":["gridChild.*","border.*","spacing.*","effects.*","layout.*","position.*"],"states":["default","hover","focus","active"]}},"attributes":{"uniqueId":{"type":"string"},"blicks":{"type":"object","default":{}},"id":{"type":"number"},"url":{"type":"string","default":""},"alt":{"type":"string","default":""},"aspectRatio":{"type":"string","default":"auto"},"objectFit":{"type":"string","default":"cover"},"sizeSlug":{"type":"string","default":"full"},"duotone":{"type":"object"},"linkTo":{"type":"string","default":"none"},"href":{"type":"string","default":""},"caption":{"type":"string","default":""}},"editorScript":"blicks-editor","style":"file:.\/index.css"},"blicks\/section":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"blicks\/section","title":"Section","category":"blicks","icon":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\"><path d=\"M2.7 4.2L21.3 4.2L21.3 19.8L2.7 19.8ZM4.3 18.2L19.7 18.2L19.7 5.8L4.3 5.8ZM7 9.3L17 9.3L17 7.7L7 7.7ZM7 12.8L17 12.8L17 11.2L7 11.2Z\" fill=\"currentColor\"\/><path d=\"M7 16.3L14 16.3L14 14.7L7 14.7Z\" fill=\"#002bff\"\/><\/svg>","description":"A full-bleed page band with outer section sizing and independent content sizing controls.","textdomain":"blicks","supports":{"html":false,"anchor":true,"align":["full"],"blicks":{"controls":["spacing.*","border.*","position.*","colors.*","background.*","typography.*","effects.*","animation.*","decoration.*"],"states":["default","hover","focus","active"]}},"attributes":{"uniqueId":{"type":"string"},"blicks":{"type":"object","default":{}},"align":{"type":"string","default":"full"},"sectionWidth":{"type":"string","default":"auto"},"sectionHeight":{"type":"string","default":"auto"},"contentWidth":{"type":"string","default":"100%"},"contentMinWidth":{"type":"string","default":"0"},"contentMaxWidth":{"type":"string","default":"var(--blicks-content-size, var(--wp--style--global--content-size, 1200px))"},"surface":{"type":"string","default":"plain"},"sectionSpace":{"type":"string","default":"md"}},"render":"file:.\/render.php","editorScript":"blicks-editor","style":"file:.\/index.css"},"blicks\/grid":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"blicks\/grid","title":"Grid","category":"blicks","icon":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\"><path d=\"M3.7 3.7L11.3 3.7L11.3 11.3L3.7 11.3ZM5.3 9.7L9.7 9.7L9.7 5.3L5.3 5.3ZM12.7 3.7L20.3 3.7L20.3 11.3L12.7 11.3ZM14.3 9.7L18.7 9.7L18.7 5.3L14.3 5.3ZM3.7 12.7L11.3 12.7L11.3 20.3L3.7 20.3ZM5.3 18.7L9.7 18.7L9.7 14.3L5.3 14.3Z\" fill=\"currentColor\"\/><path d=\"M12.7 12.7L20.3 12.7L20.3 20.3L12.7 20.3Z\" fill=\"#002bff\"\/><\/svg>","description":"A two-dimensional layout block for equal-width or auto-fit child columns.","textdomain":"blicks","supports":{"html":false,"className":false,"blicks":{"controls":["layout.gridColumns","layout.gridRows","layout.gapRow","layout.gapColumn","layout.justifyItems","layout.gridAreas","layout.gridAutoFlow","layout.width","layout.height","layout.overflow","layout.overflowX","layout.overflowY","layout.scrollSnapType","layout.containerType","layout.containerName","layout.aspectRatio","gridChild.*","spacing.*","border.*","position.*","colors.*","background.*","effects.*","animation.*","decoration.*"],"states":["default","hover","focus","active"]}},"attributes":{"uniqueId":{"type":"string"},"blicks":{"type":"object","default":{}},"columns":{"type":"number","default":3},"autoFit":{"type":"boolean","default":false},"minColumnWidth":{"type":"string","default":"16rem"},"gap":{"type":"string","default":"md"},"dense":{"type":"boolean","default":false},"tag":{"type":"string","default":"div"}},"editorScript":"blicks-editor","style":"file:.\/index.css"},"blicks\/spacer":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"blicks\/spacer","title":"Spacer","category":"blicks","icon":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\"><path d=\"M11.2 4L11.2 20L12.8 20L12.8 4Z\" fill=\"currentColor\"\/><path d=\"M9.066 8.066L12 5.131L14.934 8.066L16.066 6.934L12 2.869L7.934 6.934ZM7.934 17.066L12 21.131L16.066 17.066L14.934 15.934L12 18.869L9.066 15.934Z\" fill=\"#002bff\"\/><\/svg>","description":"A responsive empty space block for vertical or horizontal rhythm.","textdomain":"blicks","supports":{"html":false,"className":false,"blicks":{"controls":["gridChild.*"],"states":["default"]}},"attributes":{"uniqueId":{"type":"string"},"blicks":{"type":"object","default":{}},"size":{"type":"string","default":"64px"},"orientation":{"type":"string","default":"vertical"}},"editorScript":"blicks-editor","style":"file:.\/index.css"},"blicks\/text":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"blicks\/text","title":"Text","category":"blicks","icon":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\"><path d=\"M5 7.8L19 7.8L19 6.2L5 6.2ZM5 11.8L17 11.8L17 10.2L5 10.2ZM5 15.8L19 15.8L19 14.2L5 14.2Z\" fill=\"currentColor\"\/><path d=\"M5 19.8L13 19.8L13 18.2L5 18.2Z\" fill=\"#002bff\"\/><\/svg>","description":"A rich paragraph block for body copy.","textdomain":"blicks","supports":{"html":false,"className":false,"blicks":{"controls":["gridChild.*","typography.*","colors.text","colors.background","columns.*","spacing.*","border.*","effects.*"],"states":["default","hover","focus","active"]}},"attributes":{"uniqueId":{"type":"string"},"blicks":{"type":"object","default":{}},"content":{"type":"string","default":""},"tag":{"type":"string","default":"p"},"variant":{"type":"string","default":"default"},"dropCap":{"type":"boolean","default":false}},"editorScript":"blicks-editor","style":"file:.\/index.css"},"blicks\/box":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"blicks\/box","title":"Box","category":"blicks","icon":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\"><path d=\"M4.2 4.2L19.8 4.2L19.8 19.8L4.2 19.8ZM5.8 18.2L18.2 18.2L18.2 5.8L5.8 5.8Z\" fill=\"currentColor\"\/><path d=\"M8 9.8L16 9.8L16 8.2L8 8.2ZM8 13.8L13 13.8L13 12.2L8 12.2Z\" fill=\"#002bff\"\/><\/svg>","description":"A generic styled wrapper for cards, panels, and manual layouts.","textdomain":"blicks","supports":{"html":false,"className":false,"anchor":true,"blicks":{"controls":["layout.*","gridChild.*","columns.*","spacing.*","border.*","position.*","colors.*","background.*","typography.*","effects.*","animation.*","decoration.*"],"states":["default","hover","focus","active"]}},"attributes":{"uniqueId":{"type":"string"},"blicks":{"type":"object","default":{}},"tag":{"type":"string","default":"div"},"href":{"type":"string","default":""},"linkTarget":{"type":"string","default":""},"rel":{"type":"string","default":""},"linkLabel":{"type":"string","default":""}},"editorScript":"blicks-editor","style":"file:.\/index.css"},"blicks\/divider":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"blicks\/divider","title":"Divider","category":"blicks","icon":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\"><path d=\"M8 8.8L16 8.8L16 7.2L8 7.2ZM8 16.8L16 16.8L16 15.2L8 15.2Z\" fill=\"currentColor\"\/><path d=\"M5 12.8L19 12.8L19 11.2L5 11.2Z\" fill=\"#002bff\"\/><\/svg>","description":"A semantic divider for separating content groups.","textdomain":"blicks","supports":{"html":false,"className":false,"blicks":{"controls":["gridChild.*","spacing.*"],"states":["default"]}},"attributes":{"uniqueId":{"type":"string"},"blicks":{"type":"object","default":{}},"orientation":{"type":"string","default":"horizontal"},"thickness":{"type":"string","default":"1px"},"lineStyle":{"type":"string","default":"solid"},"color":{"type":"string","default":""},"length":{"type":"string","default":""},"align":{"type":"string","default":"start"}},"editorScript":"blicks-editor","style":"file:.\/index.css"},"blicks\/buttons":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"blicks\/buttons","title":"Buttons","category":"blicks","icon":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\"><path d=\"M2.2 8.2L11.8 8.2L11.8 15.8L2.2 15.8ZM3.8 14.2L10.2 14.2L10.2 9.8L3.8 9.8Z\" fill=\"currentColor\"\/><path d=\"M12.2 8.2L21.8 8.2L21.8 15.8L12.2 15.8Z\" fill=\"#002bff\"\/><\/svg>","description":"A row or column of Button blocks with shared alignment, spacing, and wrapping.","textdomain":"blicks","supports":{"html":false,"className":false,"blicks":{"controls":["layout.justifyContent","layout.alignItems","layout.flexWrap","layout.gapRow","layout.gapColumn","layout.width","layout.height","gridChild.*","spacing.*","border.*","position.*","colors.*","background.*","effects.*","animation.*","decoration.*"],"states":["default","hover","focus","active"]}},"attributes":{"uniqueId":{"type":"string"},"blicks":{"type":"object","default":{}},"orientation":{"type":"string","default":"horizontal"},"gap":{"type":"string","default":"sm"},"justify":{"type":"string","default":"flex-start"},"wrap":{"type":"boolean","default":true}},"editorScript":"blicks-editor","style":"file:.\/index.css"},"blicks\/heading":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"blicks\/heading","title":"Heading","category":"blicks","icon":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\"><path d=\"M4.2 6L4.2 18L5.8 18L5.8 6ZM14.2 6L14.2 18L15.8 18L15.8 6ZM18.2 8L18.2 18L19.8 18L19.8 8Z\" fill=\"currentColor\"\/><path d=\"M5 12.8L15 12.8L15 11.2L5 11.2Z\" fill=\"#002bff\"\/><\/svg>","description":"A semantic h1-h6 heading that inherits the active theme by default.","textdomain":"blicks","supports":{"html":false,"className":false,"anchor":true,"blicks":{"controls":["gridChild.*","typography.*","colors.text","colors.background","spacing.*","border.*","effects.*"],"states":["default","hover","focus","active"]}},"attributes":{"uniqueId":{"type":"string"},"blicks":{"type":"object","default":{}},"level":{"type":"number","default":2},"content":{"type":"string","default":""}},"editorScript":"blicks-editor","style":"file:.\/index.css"},"blicks\/button":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"blicks\/button","title":"Button","category":"blicks","icon":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\"><path d=\"M3.2 6.2L20.8 6.2L20.8 17.8L3.2 17.8ZM4.8 16.2L19.2 16.2L19.2 7.8L4.8 7.8ZM9 12.8L15 12.8L15 11.2L9 11.2Z\" fill=\"currentColor\"\/><path d=\"M12.434 10.566L13.869 12L12.434 13.434L13.566 14.566L16.131 12L13.566 9.434Z\" fill=\"#002bff\"\/><\/svg>","description":"A shadcn-style action button with variants, sizes, links, and optional icons.","textdomain":"blicks","parent":["blicks\/buttons"],"supports":{"html":false,"className":false,"blicks":{"controls":["gridChild.*","typography.*","colors.*","spacing.*","border.*","effects.*"],"states":["default","hover","focus","active"]}},"attributes":{"uniqueId":{"type":"string"},"blicks":{"type":"object","default":{}},"text":{"type":"string","default":""},"url":{"type":"string","default":""},"linkTarget":{"type":"string","default":""},"rel":{"type":"string","default":""},"variant":{"type":"string","default":"default"},"size":{"type":"string","default":"default"},"icon":{"type":"string","default":""},"iconPosition":{"type":"string","default":"leading"}},"editorScript":"blicks-editor","style":"file:.\/index.css"}},"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.gif":{"filename":"screenshot-1.gif","revision":3699138,"resolution":"1","location":"assets","locale":"","width":900,"height":632},"screenshot-2.gif":{"filename":"screenshot-2.gif","revision":3699138,"resolution":"2","location":"assets","locale":"","width":900,"height":632},"screenshot-3.gif":{"filename":"screenshot-3.gif","revision":3699138,"resolution":"3","location":"assets","locale":"","width":900,"height":632}},"screenshots":{"1":"<strong>The Blicks admin<\/strong> - An overview of what is registered, the design system screen where token values are edited, and the presets that repaint the whole set at once.","2":"<strong>Theme Settings in the editor<\/strong> - Colors, type scale and spacing resolved from the active theme's <code>theme.json<\/code>, so they are the same values the front end uses.","3":"<strong>Block controls<\/strong> - Split across three tabs: Settings for what the block is, Style for every property at each breakpoint and state, and Advanced for visibility and custom attributes."}},"plugin_section":[],"plugin_tags":[148857,4121,215460,148076,4036],"plugin_category":[],"plugin_contributors":[281120],"plugin_business_model":[],"class_list":["post-363362","plugin","type-plugin","status-publish","hentry","plugin_tags-block-editor","plugin_tags-blocks","plugin_tags-design-system","plugin_tags-gutenberg","plugin_tags-layout","plugin_contributors-blicks","plugin_committers-blicks"],"banners":{"banner":"https:\/\/ps.w.org\/blicks\/assets\/banner-772x250.png?rev=3699138","banner_2x":"https:\/\/ps.w.org\/blicks\/assets\/banner-1544x500.png?rev=3699138","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/blicks\/assets\/icon-128x128.gif?rev=3699138","icon_2x":"https:\/\/ps.w.org\/blicks\/assets\/icon-256x256.gif?rev=3699138","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/blicks\/assets\/screenshot-1.gif?rev=3699138","caption":"<strong>The Blicks admin<\/strong> - An overview of what is registered, the design system screen where token values are edited, and the presets that repaint the whole set at once."},{"src":"https:\/\/ps.w.org\/blicks\/assets\/screenshot-2.gif?rev=3699138","caption":"<strong>Theme Settings in the editor<\/strong> - Colors, type scale and spacing resolved from the active theme's <code>theme.json<\/code>, so they are the same values the front end uses."},{"src":"https:\/\/ps.w.org\/blicks\/assets\/screenshot-3.gif?rev=3699138","caption":"<strong>Block controls<\/strong> - Split across three tabs: Settings for what the block is, Style for every property at each breakpoint and state, and Advanced for visibility and custom attributes."}],"raw_content":"<!--section=description-->\n<h4>ATOMIC LAYOUT AND CONTENT BLOCKS FOR THE WORDPRESS BLOCK EDITOR, ON ONE DESIGN SYSTEM THAT SYNCS WITH YOUR THEME.JSON<\/h4>\n\n<p>Blicks adds composable layout and content blocks to the native block editor \u2014 Section, Box, Stack, Grid, Heading, Text, Buttons, Button, Image, Icon, Spacer and Divider.<\/p>\n\n<p>Every block draws from one design system. Instead of a color or a font size baked into each block, Blicks keeps a token catalogue whose values resolve through your active theme's <code>theme.json<\/code> presets. Set a value once and it applies everywhere, and where your theme defines no scale of its own, Blicks falls back to its own.<\/p>\n\n<p>Blicks is free and GPL-2.0-or-later. It contacts no external server, ships no license key, and adds no telemetry.<\/p>\n\n<h3>\ud83e\uddf1 The blocks<\/h3>\n\n<ul>\n<li><strong>Section<\/strong>: A full-bleed page band with outer section sizing and independent content sizing controls.<\/li>\n<li><strong>Box<\/strong>: A generic styled wrapper for cards, panels, and manual layouts.<\/li>\n<li><strong>Stack<\/strong>: A one-dimensional flex layout for arranging child blocks vertically or horizontally.<\/li>\n<li><strong>Grid<\/strong>: A two-dimensional layout block for equal-width or auto-fit child columns.<\/li>\n<li><strong>Heading<\/strong>: A semantic h1\u2013h6 heading that inherits the active theme by default.<\/li>\n<li><strong>Text<\/strong>: A rich paragraph block for body copy.<\/li>\n<li><strong>Buttons<\/strong> and <strong>Button<\/strong>: A row or column of buttons with shared alignment, spacing and wrapping, each with variants, sizes, links and optional icons.<\/li>\n<li><strong>Image<\/strong>: A responsive media block with optional link and caption.<\/li>\n<li><strong>Icon<\/strong>: An inline SVG icon that inherits the current text color.<\/li>\n<li><strong>Spacer<\/strong>: A responsive empty space block for vertical or horizontal rhythm.<\/li>\n<li><strong>Divider<\/strong>: A semantic divider for separating content groups.<\/li>\n<\/ul>\n\n<p>All of them live in one Blicks category in the inserter.<\/p>\n\n<h4>\ud83c\udfa8 Key features<\/h4>\n\n<ul>\n<li><strong>Theme-native tokens<\/strong>: Blicks tokens (<code>--blicks-*<\/code>) alias WordPress preset variables (<code>--wp--preset--*<\/code>, <code>--wp--custom--*<\/code>), so color, type and spacing values resolve through whatever theme is active.<\/li>\n<li><strong>Type roles<\/strong>: Semantic typography roles \u2014 display, h1\u2013h6, body, lead, small, caption, code, mono \u2014 layered on top of the font-size scale, so a heading is styled by the role it plays.<\/li>\n<li><strong>Named design themes<\/strong>: Snapshot a set of token values, switch between them, or reset back to your theme's defaults.<\/li>\n<li><strong>Responsive design<\/strong>: Every style value can be set per device \u2014 desktop, tablet and mobile \u2014 with tablet and mobile breakpoints you control.<\/li>\n<li><strong>States<\/strong>: Every style value can also be set per state \u2014 default, hover, focus and active.<\/li>\n<li><strong>Pseudo-elements<\/strong>: Style <code>::before<\/code> and <code>::after<\/code> as boxes in their own right, from the same controls.<\/li>\n<li><strong>Custom keyframe animations<\/strong>: Build animations step by step in the admin, then apply them from the block's Animation controls. Animated rules are wrapped in <code>prefers-reduced-motion: no-preference<\/code>.<\/li>\n<li><strong>Container queries<\/strong>: Set a container type and name on a block, and size its children against the container rather than the viewport.<\/li>\n<li><strong>Visibility and attributes<\/strong>: Hide a block at chosen screen sizes, and add <code>data-*<\/code>, <code>aria-*<\/code>, <code>role<\/code>, <code>title<\/code>, <code>id<\/code>, <code>lang<\/code> or <code>dir<\/code> attributes to its wrapper.<\/li>\n<li><strong>HTML importer<\/strong>: Paste markup and Blicks maps each element to the closest block, turning the inline styles it recognizes into ordinary block attributes.<\/li>\n<\/ul>\n\n<h4>\ud83c\udf9b\ufe0f Style controls on every block<\/h4>\n\n<p>Block controls are split across three tabs \u2014 Settings for what the block is, Style for how it looks, Advanced for visibility and attributes. The Style tab covers:<\/p>\n\n<ul>\n<li><strong>Layout<\/strong>: display, flex direction and alignment, grid tracks and areas, gap, width and height bounds, overflow, scroll snap, container queries, aspect ratio, object fit.<\/li>\n<li><strong>Spacing<\/strong>: padding and margin, per side.<\/li>\n<li><strong>Typography<\/strong>: type role, family, size, line height, weight, style, letter and word spacing, transform, decoration, alignment, writing mode, text color.<\/li>\n<li><strong>Background<\/strong>: color, gradient, image, size, position, repeat, attachment, blend mode, background-clip text.<\/li>\n<li><strong>Border<\/strong>: width, style, color and radius.<\/li>\n<li><strong>Position<\/strong>, <strong>Multi-column<\/strong>, <strong>Grid child<\/strong>, <strong>Flex child<\/strong>, <strong>Effects<\/strong>, <strong>Animation<\/strong>, <strong>Pseudo-elements<\/strong> and <strong>States<\/strong>.<\/li>\n<\/ul>\n\n<h4>\u26a1 Output<\/h4>\n\n<ul>\n<li><strong>One stylesheet, 13 KB gzipped<\/strong>: The runtime stylesheet is 13,301 bytes gzipped, and it is the only stylesheet Blicks enqueues.<\/li>\n<li><strong>No per-block style tags<\/strong>: Token values become utility classes; custom values become CSS custom properties on the element.<\/li>\n<li><strong>Per-instance rules collected once<\/strong>: Pseudo-elements, container queries and keyframes are accumulated, deduplicated and attached once per request rather than repeated on every block.<\/li>\n<li><strong>Plain HTML and CSS<\/strong>: No jQuery, no bundled front-end framework, no shortcodes.<\/li>\n<\/ul>\n\n<h4>\ud83e\uddf0 The Blicks admin<\/h4>\n\n<p>Three screens under the <strong>Blicks<\/strong> menu:<\/p>\n\n<ul>\n<li><strong>Overview<\/strong>: What is registered, and links to the docs and the issue forms.<\/li>\n<li><strong>Design System<\/strong>: Token values by category \u2014 color, typography, spacing, radius, shadow, gradient, motion, animation, z-index, opacity, border, focus ring, sizing, line height \u2014 plus breakpoints, type roles, named themes and the custom animation editor.<\/li>\n<li><strong>Settings<\/strong>: Plugin behavior, including whether Blicks removes its data on uninstall.<\/li>\n<\/ul>\n\n<h4>\ud83d\udd12 No external services<\/h4>\n\n<p>Blicks contacts no third-party server. It loads no remote fonts, scripts or styles, and sends no data anywhere. Everything it renders is served from the plugin itself and from your own theme's settings.<\/p>\n\n<h4>\ud83c\udf10 Translation<\/h4>\n\n<p>Blicks is fully internationalized and ships a <code>.pot<\/code> file. To contribute a translation, add a language via <a href=\"https:\/\/translate.wordpress.org\/projects\/wp-plugins\/blicks\">translate.wordpress.org<\/a>.<\/p>\n\n<h4>\ud83e\uddd1\u200d\ud83d\udcbb Open source<\/h4>\n\n<p>The full source \u2014 TypeScript, SCSS, block definitions and build configuration \u2014 is public at <a href=\"https:\/\/github.com\/blicks-dev\/blicks\">github.com\/blicks-dev\/blicks<\/a>, and the documentation is generated from it at <a href=\"https:\/\/docs.blicks.dev\">docs.blicks.dev<\/a>.<\/p>\n\n<h4>\ud83d\udcac Support, feedback and security<\/h4>\n\n<p>Bug reports and feature requests are handled in public, on the GitHub issue tracker:<\/p>\n\n<ul>\n<li><a href=\"https:\/\/github.com\/blicks-dev\/blicks\/issues\/new?template=bug_report.yml\">Report a bug<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/blicks-dev\/blicks\/issues\/new?template=feature_request.yml\">Request a feature<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/blicks-dev\/blicks\/discussions\">Questions and how-do-I<\/a><\/li>\n<\/ul>\n\n<p>Both forms are linked from the plugin itself \u2014 under the Blicks row on the Plugins screen, and at the foot of the Blicks Overview screen. A bug report is most useful with the WordPress and PHP versions, the active theme, and the block markup copied from the editor (select the block, then Options \u2192 Copy). The form asks for each of these.<\/p>\n\n<p>Security issues should never be filed as a public issue. Report them privately at <a href=\"https:\/\/github.com\/blicks-dev\/blicks\/security\/advisories\/new\">github.com\/blicks-dev\/blicks\/security\/advisories\/new<\/a>.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>Blicks uses no external services. It contacts no third-party server, loads no remote fonts, scripts or styles, and sends no data anywhere. Everything it renders is served from the plugin itself and from your own theme's settings.<\/p>\n\n<p>The only exception is one you control: if you set a background image to an address on another site, the visitor's browser loads that image from wherever you pointed it. Blicks itself makes no such request.<\/p>\n\n<h3>Source Code<\/h3>\n\n<p>The JavaScript and CSS in the <code>build\/<\/code> directory are compiled. The full, human-readable source they are built from \u2014 TypeScript, SCSS, the block definitions and the build configuration \u2014 is public at:<\/p>\n\n<p>https:\/\/github.com\/blicks-dev\/blicks<\/p>\n\n<p>To rebuild the plugin from source you need Node.js 20+ and pnpm:<\/p>\n\n<ol>\n<li><code>git clone https:\/\/github.com\/blicks-dev\/blicks.git &amp;&amp; cd blicks<\/code><\/li>\n<li><code>pnpm install<\/code><\/li>\n<li><code>pnpm build<\/code> \u2014 writes the compiled assets to <code>build\/<\/code>.<\/li>\n<\/ol>\n\n<p>The PHP in <code>src\/<\/code> is shipped as source and is not compiled. Blicks has no production PHP dependencies and bundles no third-party PHP library \u2014 the <code>vendor\/<\/code> directory in the release holds only Composer's own class autoloader. Composer is otherwise used just for the development tools (PHPUnit, PHP_CodeSniffer), which are never shipped.<\/p>\n\n<h3>Third-Party Licenses<\/h3>\n\n<p>Blicks includes a curated icon registry generated from Lucide icons. Lucide is licensed under ISC; some Lucide icons derive from Feather icons, licensed under MIT. Full notices are in <code>licenses.txt<\/code> and in the generated icon registry metadata.<\/p>\n\n<!--section=installation-->\n<h4>Minimum Requirements<\/h4>\n\n<ul>\n<li>WordPress 6.6 or greater<\/li>\n<li>PHP version 8.1 or greater<\/li>\n<li>A block theme with a <code>theme.json<\/code>, to get token values from your theme<\/li>\n<\/ul>\n\n<h4>Recommended Requirements<\/h4>\n\n<ul>\n<li>WordPress 7.0 or greater<\/li>\n<li>PHP version 8.3 or greater<\/li>\n<\/ul>\n\n<p><strong>Note:<\/strong> Blicks runs on classic themes too, but falls back to its own default token values, since there is no <code>theme.json<\/code> to sync with.<\/p>\n\n<h4>Installation<\/h4>\n\n<ol>\n<li>Install using the WordPress built-in plugin installer, or extract the zip file and drop the contents in the <code>wp-content\/plugins\/<\/code> directory of your WordPress installation.<\/li>\n<li>Activate Blicks through the 'Plugins' menu in WordPress.<\/li>\n<li>Go to Pages \u2192 Add New.<\/li>\n<li>Open the inserter and pick a block from the <strong>Blicks<\/strong> category.<\/li>\n<li>Optional: visit <strong>Blicks \u2192 Design System<\/strong> to adjust tokens, type roles and breakpoints.<\/li>\n<\/ol>\n\n<p>For guides and the generated block reference, visit <a href=\"https:\/\/docs.blicks.dev\">docs.blicks.dev<\/a>.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20a%20page%20builder%3F\"><h3>Is this a page builder?<\/h3><\/dt>\n<dd><p>No. Blicks lives inside the native block editor and adds layout primitives \u2014 Stack, Grid, Box, Section \u2014 that you compose the same way you compose any other block. Nothing replaces your editor.<\/p><\/dd>\n<dt id=\"does%20blicks%20work%20with%20my%20theme%3F\"><h3>Does Blicks work with my theme?<\/h3><\/dt>\n<dd><p>It is built for block themes and full site editing, where it reads the presets your <code>theme.json<\/code> defines and resolves its own tokens through them. It also runs on classic themes, but falls back to its own default token values, since there is no <code>theme.json<\/code> to sync with.<\/p><\/dd>\n<dt id=\"does%20blicks%20replace%20my%20theme%27s%20design%20system%3F\"><h3>Does Blicks replace my theme's design system?<\/h3><\/dt>\n<dd><p>No. Blicks keeps its own catalogue of token slugs, and their values alias your theme's preset variables where the theme defines them. Where it defines none \u2014 a shadow scale, say \u2014 Blicks supplies its own, so a control is never empty.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%3F\"><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>Blicks enqueues one stylesheet, 13,301 bytes gzipped, on requests that render a block. There is no per-block <code>&lt;style&gt;<\/code> tag and no per-request CSS generation for token and utility values. Per-instance rules \u2014 pseudo-elements, container queries, keyframes \u2014 are collected and deduplicated into a single block in the footer.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20content%20if%20i%20deactivate%20blicks%3F\"><h3>What happens to my content if I deactivate Blicks?<\/h3><\/dt>\n<dd><p>Blocks save static HTML, so the markup stays in the post. The runtime stylesheet stops loading, so the styling it carries goes with it.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20delete%20the%20plugin%3F\"><h3>What happens to my data if I delete the plugin?<\/h3><\/dt>\n<dd><p>By default, nothing is removed \u2014 your tokens, themes, animations and settings survive a delete and reinstall. If you want Blicks to clean up after itself, set <strong>On uninstall<\/strong> to \"Delete all Blicks data\" in <strong>Blicks \u2192 Settings<\/strong> before deleting the plugin.<\/p><\/dd>\n<dt id=\"can%20i%20add%20my%20own%20css%2C%20javascript%20or%20php%20through%20blicks%3F\"><h3>Can I add my own CSS, JavaScript or PHP through Blicks?<\/h3><\/dt>\n<dd><p>No. There is no stylesheet field, no script field and no snippet runner. Blicks never evaluates anything you type, and you cannot write a CSS rule, a selector or an at-rule anywhere in it.<\/p>\n\n<p>Two places do accept typed input. Some controls take a typed value rather than offering a picker \u2014 a length like <code>800px<\/code>, a transform like <code>translateX(10px)<\/code>, a shape like <code>polygon(0 0, 100% 0, 100% 100%)<\/code>. Each of those is the value of one named property that the control itself chooses; you cannot write the property, a selector or a rule. Every value is validated whole against a closed list of permitted characters and CSS functions before it is used, so a value cannot end its own declaration or start another one. Anything that does not validate is dropped.<\/p>\n\n<p>The custom animation editor (<strong>Blicks \u2192 Design System \u2192 Animations<\/strong>, administrators only) works the same way. Each keyframe step is a form row: you pick a property from a fixed list of animatable properties (opacity, transform, color and similar), and type its value, which is validated exactly as above. You cannot name any other property, write a selector or add an at-rule; Blicks generates the <code>@keyframes<\/code> rule and its name itself.<\/p><\/dd>\n<dt id=\"can%20i%20paste%20in%20html%20from%20somewhere%20else%3F\"><h3>Can I paste in HTML from somewhere else?<\/h3><\/dt>\n<dd><p>Yes. <strong>Import HTML<\/strong> in the editor's options (\u22ee) menu opens a one-way importer: you paste a block of markup, Blicks maps each element to the closest Blicks block, and inserts the result into the post.<\/p>\n\n<p>It reads each element's inline <code>style<\/code> attribute only \u2014 not <code>&lt;style&gt;<\/code> blocks, not stylesheets, not <code>&lt;script&gt;<\/code>. A declaration is kept only where its property matches an existing Blicks control that takes a plain value; it then becomes an ordinary block attribute, validated exactly like any value you would have typed into that control yourself. Everything else \u2014 every property with no matching control, and every structured control that would need reshaping \u2014 is dropped, and the import report names each one so nothing is silently discarded.<\/p>\n\n<p>The pasted text itself is never stored and never rendered. No pasted CSS reaches the front end unvalidated, and pasted <code>&lt;script&gt;<\/code> is parsed as text, never executed.<\/p><\/dd>\n<dt id=\"can%20i%20use%20my%20own%20images%20as%20backgrounds%3F\"><h3>Can I use my own images as backgrounds?<\/h3><\/dt>\n<dd><p>Yes, via the media library. Background image URLs are restricted to your own site's uploads or an ordinary <code>http(s)<\/code> address; <code>javascript:<\/code> and <code>data:<\/code> URLs are rejected.<\/p><\/dd>\n<dt id=\"does%20blicks%20respect%20reduced%20motion%3F\"><h3>Does Blicks respect reduced motion?<\/h3><\/dt>\n<dd><p>Yes. Rules that carry a keyframe animation are emitted inside <code>@media (prefers-reduced-motion: no-preference)<\/code>, so a visitor who has asked for reduced motion never gets them.<\/p><\/dd>\n<dt id=\"how%20can%20i%20contribute%3F\"><h3>How can I contribute?<\/h3><\/dt>\n<dd><p>The source is at <a href=\"https:\/\/github.com\/blicks-dev\/blicks\">github.com\/blicks-dev\/blicks<\/a>. Issues, pull requests and translations are all welcome; translations go through <a href=\"https:\/\/translate.wordpress.org\/projects\/wp-plugins\/blicks\">translate.wordpress.org<\/a>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1 - 2026-09-23<\/h4>\n\n<ul>\n<li>Tweak: Each block now carries its own icon in the block metadata, so the blocks show their marks on the plugin page and under Plugins \u2192 Add New \u2192 Blocks.<\/li>\n<li>Tweak: Added Documentation, Report a bug and Request a feature links to the plugin's row on the Plugins screen and to the Blicks Overview screen.<\/li>\n<li>Fix: Overview screen cards stopped short of the space available to them, and the panels sat flush against each other instead of being evenly spaced.<\/li>\n<li>Fix: The front-end stylesheet was served from the browser cache after an update that changed only CSS.<\/li>\n<\/ul>\n\n<h4>1.0.0 - 2026-09-17<\/h4>\n\n<ul>\n<li>New: Initial release \u2014 Section, Box, Stack, Grid, Heading, Text, Buttons, Button, Image, Icon, Spacer and Divider blocks.<\/li>\n<li>New: A design system whose tokens resolve through the active theme's <code>theme.json<\/code> presets, with semantic type roles, named design themes and custom keyframe animations.<\/li>\n<li>New: Style controls that store a value per state (default, hover, focus, active) and per device (desktop, tablet, mobile).<\/li>\n<li>New: An admin area with Overview, Design System and Settings screens.<\/li>\n<li>New: An HTML importer that maps pasted markup onto Blicks blocks.<\/li>\n<\/ul>","raw_excerpt":"Layout and content blocks for the block editor, with hover, breakpoint and pseudo-element controls on a design system that syncs with theme.json.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/lug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/363362","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/lug.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/lug.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=363362"}],"author":[{"embeddable":true,"href":"https:\/\/lug.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/blicks"}],"wp:attachment":[{"href":"https:\/\/lug.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=363362"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/lug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=363362"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/lug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=363362"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/lug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=363362"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/lug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=363362"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/lug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=363362"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}