๐Ÿ—œ๏ธ AstroJS compression utilities. Compress CSS, HTML, JavaScript and more.

Overview

astro-compress ๐Ÿ—œ๏ธ

This Astro integration brings compression utilities to your Astro project.

csso html-minifier-terser terser

Installation

There are two ways to add integrations to your project. Let's try the most convenient option first!

(experimental) astro add command

Astro includes a CLI tool for adding first party integrations: astro add. This command will:

  1. (Optionally) Install all necessary dependencies and peer dependencies
  2. (Also optionally) Update your astro.config.* file to apply this integration

To install astro-compress, run the following from your project directory and follow the prompts:

# Using NPM
npx astro add astro-compress
# Using Yarn
yarn astro add astro-compress
# Using PNPM
pnpx astro add astro-compress

Install dependencies manually

First, install the astro-compress integration like so:

npm install astro-compress

Then, apply this integration to your astro.config.* file using the integrations property:

astro.config.mjs

import { defineConfig } from "astro/config";
import compress from "astro-compress";

export default defineConfig({
	// ...
	integrations: [compress()],
});

Getting started

The utility should now automatically compress all your CSS, HTML and JavaScript files in the dist folder.

You can override any of the default options from the configurations of:

or disable them entirely:

import { defineConfig } from "astro/config";
import compress from "astro-compress";

export default defineConfig({
	integrations: [
		compress({
			css: false,
			html: false,
			js: false,
		}),
	],
});
Comments
  • Hydration completed but contains mismatches.

    Hydration completed but contains mismatches.

    Hey,

    When I use this plugin I'm getting this error in my console: Screenshot 2022-11-11 at 10 15 36

    Through a little bit of Googling I came across this same error here https://github.com/vuejs/vitepress/issues/1143 and so I'm lead to believe that it is something to do with minifying the HTML when used with Vite and Vue.

    opened by hayhaydz 13
  • Passing `true` to options object doesn't compress

    Passing `true` to options object doesn't compress

    Passing true to a key for the configuration object doesn't actually perform compression for that item, and is considered the same as false. Either change the type description to reflect that only a configuration object or false can be passed, or accept true as argument to use the defaults.

    Example:

    import { defineConfig } from 'astro/config'
    import compress from 'astro-compress'
    
    // https://astro.build/config
    export default defineConfig({
    	integrations: [
    		compress({
    			css: false,
    			html: true, // note `true` is passed here
    			js: false,
    			img: false,
    			svg: false
    		})
    	]
    })
    

    This doesn't result in the HTML being compressed, and it not flagged as invalid by typescript, because the type definition goes:

    export interface Options {
        [key: string]: any;
        /**
         * Astro build path.
         * @default "./dist/"
         */
        path?: string;
       // abbreviated
        /**
         * [html-minifier-terser] options.
         */
        html?: boolean | HTML; // should be `false | HTML` if this is the inteded behavior
       // abbreviated
    }
    
    enhancement 
    opened by vbersier 11
  • Error: Cannot compress file ./dist/index.html!

    Error: Cannot compress file ./dist/index.html!

    Is there a setting that can show me a bit more debug info on why it can not compress the file? working on Astro rc 7 / Windows

    Error: Cannot compress file ./dist/index.html!
    Error: Cannot compress file ./dist/admin/index.html!
    Error: Cannot compress file ./dist/contact/index.html!
    Error: Cannot compress file ./dist/about/index.html!
    Error: Cannot compress file ./dist/es/index.html!
    Error: Cannot compress file ./dist/events/index.html!
    Error: Cannot compress file ./dist/menu/index.html!
    Error: Cannot compress file ./dist/es/about/index.html!
    ....
    Successfully compressed a total of 0 HTML files for 0 Bytes.
    
    opened by preetamslot 11
  • HTML comments not being removed. NaN undefined for file count.

    HTML comments not being removed. NaN undefined for file count.

    Since I upgraded from 1.1.7 to 1.1.12 the comments from the HTML are not being removed.

    I get NaN undefined and comments from the html are not removed. Spacing is removed but not comments.

    Astro version: "astro": "^1.6.11"

    07:18:03 AM [build] Waiting for the astro-compress integration...
    Successfully compressed a total of 7968 HTML files for NaN undefined.
    Successfully compressed a total of 8 JS files for NaN undefined.
    Successfully compressed a total of 20 SVG files for NaN undefined.
    

    Here my astro.config:

    import { defineConfig } from "astro/config";
    import sitemap from "@astrojs/sitemap";
    import compress from "astro-compress";
    import prefetch from '@astrojs/prefetch';
    
    import { SITE_URL, SERVER_PORT } from "./src/config";
    
    export default defineConfig({
      site: SITE_URL,
      vite: {
        server: {
          watch: {
            ignored: ["/dist/**", "/db/**", "/src/pages/days/*.md"],
          },
        },
        logLevel: 'silent'
      },
      publicDir: "./assets",
      server: {
        port: SERVER_PORT,
        // host: true
      },
      integrations: [
        prefetch(),
        sitemap(),
        compress({
          css: false,
          html: {
            removeComments: true,
            maxLineLength: 1000,
            quoteCharacter: '"',
            removeAttributeQuotes: true
          },
          img: false,
          js: true,
          svg: true,
          logger: 1,
        }),
      ],
    });
    

    Here a gist of the html I am trying to compress: https://gist.github.com/fabriziogiordano/83f68463ad32c9f9361cb642041a9cbb

    I tried different versions and it seems it is starting from astro version 1.1.8

    bug 
    opened by fabriziogiordano 8
  • [Solved] Install error on Android (termux)

    [Solved] Install error on Android (termux)

    I'd typed npm install -D -E astro-compress but got error like this : Screenshot_20221121-183719394

    [##################] - reify:css-tree: timing reifyNode:node_modules/
    > [email protected] install
    > (node install/libvips && node install/dll-copy && prebuild-install) || (node install/can-compile && node-gyp rebuild && node install/dll-copy)
    
    sharp: Downloading https://github.com/lovell/sharp-libvips/releases/download/v8.13.3/libvips-8.13.3-android-arm64v8.tar.br
    sharp: Installation error: Prebuilt libvips 8.13.3 binaries are not yet available for android-arm64v8
    sharp: Please see https://sharp.pixelplumbing.com/install for required dependencies
    npm ERR! code 1
    npm ERR! path /data/data/com.termux/files/home/samxuling.github.io/node_modules/sharp
    npm ERR! command failed
    npm ERR! command sh -c -- (node install/libvips && node install/dll-copy && prebuild-install) || (node install/can-compile && node-gyp rebuild && node install/dll-copy)
    

    It say Prebuilt libvips 8.13.3 binaries are not yet available for android-arm64v8 Is the download address incorrect? ๐Ÿค” When I navigated to https://github.com/lovell/sharp-libvips/releases/download/v8.13.3/libvips-8.13.3-android-arm64v8.tar.br GitHub say 404

    opened by ooling 8
  • HTML not getting minified when using parameterless arrow functions

    HTML not getting minified when using parameterless arrow functions

    Hey! :) Maybe this is an error with the html minimizer, but I dont get any errors / logs, that's why im posting this here.

    Im using a minimal project with "astro": "^1.6.5" and "astro-compress": "^1.1.1"

    I noticed that html files are ignored while compressing if any script contains arrow functions used like this:

    <script>
        const sayHello = () => {
            console.log("Hello World");
        }
        sayHello();
    </script>
    

    However it's getting compressed with this script, which I thought was kinda weird:

    <script>
        (() => {
            console.log("Hello World");
        })()
    
        function initializeTheme() {
            console.log("Hello World");
        }
    
        initializeTheme();
    </script>
    

    Whats even funnier is, that the following script (arrow function with parameters) is working too:

    <script>
        const sayHello = (name) => {
            console.log(`Hello ${name}`);
        }
        sayHello("World");
    </script>
    

    To be more clear, the compressor doesn't work if any script contains arrow functions without parameters :D

    opened by DevTobias 5
  • Fatal error on build (Deno Adapter)

    Fatal error on build (Deno Adapter)

    CleanShot 2022-10-24 at 23 05 28

    Hi Guys, I've an issue using this plugin on build. It's might be compatibility issue with Deno Adapter. Here is the evidences:

    Details:

    โฏ pnpm run build
    
    > @apps/[email protected] build /Users/rio/Projects/JS/web/apps/astro-blog
    > astro build
    
    11:02:51 PM [build] output target: server
    11:02:51 PM [build] deploy adapter: @astrojs/deno
    11:02:51 PM [build] Collecting build info...
    11:02:51 PM [build] Completed in 280ms.
    11:02:51 PM [build] Building server entrypoints...
    
    ๐ŸŒผ daisyUI components 2.33.0  https://github.com/saadeghi/daisyui
      โœ”๏ธŽ Including:  base, components, themes[1], utilities
      
    11:02:54 PM [build] Completed in 2.23s.
    
     building client 
    Completed in 295ms.
    
    
     finalizing server assets 
    
    11:02:54 PM [build] Rearranging server assets...
    @astrojs/sitemap: Skipped!
    No pages found! We can only detect sitemap routes for "static" builds. Since you are using an SSR adapter, we recommend manually listing your sitemap routes using the "customPages" integration option.
    
    Example: `sitemap({ customPages: ['https://example.com/route'] })`
    
    Compressed about.39dc5942.css for 1 Bytes (1.61% reduction).
    Compressed about.d36aaeb4.css for 2.36 KB (5.69% reduction).
    Compressed blog.0b6c13c9.css for 1 Bytes (0.28% reduction).
    Successfully compressed a total of 3 CSS files for 2.37 KB.
    Compressed client.8e9befd7.js for 1.1 KB (0.79% reduction).
    Compressed entry.mjs for 495.85 KB (50.75% reduction).
    Successfully compressed a total of 2 JS files for 496.95 KB.
    Compressed favicon.svg for 84 Bytes (9.62% reduction).
    Successfully compressed a total of 1 SVG file for 84 Bytes.
    โœ˜ [ERROR] Could not resolve "stream"
    
        dist/server/entry.mjs:73:87825:
          73 โ”‚ ...ct.createElement("div")}),t,n,{}),r)throw r;return a}async function getNodeWritable(){let{Writable:e}=await import("stream");return e}async function renderToStaticMarkup$1(e,t,{default:n,...r},a){delete t.class;const o={};for(const[e,t]o...
             โ•ต                                                                                                                       ~~~~~~~~
    
      The package "stream" wasn't found on the file system but is built into node. Are you trying to
      bundle for node? You can use "platform: 'node'" to do that, which will remove this error.
    
     error   Build failed with 1 error:
      dist/server/entry.mjs:73:87825: ERROR: Could not resolve "stream"
      File:
        dist/server/entry.mjs
      Code:
          1623 |   }).join("");
        > 1624 |   let error = new Error(`${text}${summary}`);
               |               ^
          1625 |   error.errors = errors;
          1626 |   error.warnings = warnings;
          1627 |   return error;
        
      Stacktrace:
    Error: Build failed with 1 error:
    dist/server/entry.mjs:73:87825: ERROR: Could not resolve "stream"
        at failureErrorWithLog (/Users/rio/Projects/JS/web/node_modules/.pnpm/[email protected]/node_modules/esbuild/lib/main.js:1624:15)
        at /Users/rio/Projects/JS/web/node_modules/.pnpm/[email protected]/node_modules/esbuild/lib/main.js:1266:28
        at runOnEndCallbacks (/Users/rio/Projects/JS/web/node_modules/.pnpm/[email protected]/node_modules/esbuild/lib/main.js:1179:65)
        at buildResponseToResult (/Users/rio/Projects/JS/web/node_modules/.pnpm/[email protected]/node_modules/esbuild/lib/main.js:1264:7)
        at /Users/rio/Projects/JS/web/node_modules/.pnpm/[email protected]/node_modules/esbuild/lib/main.js:1377:14
        at /Users/rio/Projects/JS/web/node_modules/.pnpm/[email protected]/node_modules/esbuild/lib/main.js:678:9
        at handleIncomingPacket (/Users/rio/Projects/JS/web/node_modules/.pnpm/[email protected]/node_modules/esbuild/lib/main.js:775:9)
        at Socket.readFromStdout (/Users/rio/Projects/JS/web/node_modules/.pnpm/[email protected]/node_modules/esbuild/lib/main.js:644:7)
        at Socket.emit (node:events:527:28)
        at Socket.emit (node:domain:475:12)
        at addChunk (node:internal/streams/readable:315:12)
        at readableAddChunk (node:internal/streams/readable:289:9)
        at Socket.Readable.push (node:internal/streams/readable:228:10)
        at Pipe.onStreamRead (node:internal/stream_base_commons:190:23)
    
    โ€‰ELIFECYCLEโ€‰ Command failed with exit code 1.
    

    Thank you, :)

    question 
    opened by riobahtiar 4
  • Removes a space which should not be removed

    Removes a space which should not be removed

    https://github.com/one-suedwest/onesw-website/blob/main/src/pages/index.astro

    If you look at that file at line 73, astro-compress will remove the space between the "<HiddenField />" and "an"

    You can just clone that project and run "npm run build" and then open the generated index.html and you will see the issue.

    I did not investigate this further, so i am sorry for the bad bug description.

    I made sure that the problem does not exist when removing compress() from the vite config, so i am pretty sure that the issue is with astro-compress.

    opened by Anoian 4
  • Unexpected behaviour.

    Unexpected behaviour.

    For some reason it insists on removing type="text" on inputs.

    Now while I understand why it may do this as if your not specifying it as anything specific the generic fallback is text, but in my case it leads to this pretty annoying css bug for my contact page.


    With Compress Active:

    Screenshot 2022-08-28 at 9 14 22 PM
        <div class="col-12">
            <label class="js-input-group">Name <input data-required="" name="name" placeholder="Fill in your name" /> <span class="form__error"></span></label>
        </div>
        <div class="col-12">
            <label class="js-input-group">Email <input data-required="" name="email" placeholder="Fill in your email" /> <span class="form__error"></span></label>
        </div>
    

    Without Compress:

    Screenshot 2022-08-28 at 9 15 35 PM
        <div class="col-12">
            <label class="js-input-group">
                Name
                <input type="text" name="name" data-required="" placeholder="Fill in your name" />
                <span class="form__error"></span>
            </label>
        </div>
    
        <div class="col-12">
            <label class="js-input-group">
                Email
                <input type="text" name="email" data-required="" placeholder="Fill in your email" />
                <span class="form__error"></span>
            </label>
        </div>
    

    I'm not really sure why it does this as I don't really see it doing much to reduce size.

    Would it be possible to make this opt-out or opt-in in the config ?

    opened by The-Real-Thisas 4
  • Remove html comments on default

    Remove html comments on default

    from https://github.com/astro-community/astro-compress/issues/11

    I'll take a closer look at the comments one another time. But it is set to false for now in v0.0.17

    enhancement 
    opened by redwerkz 2
  • Exclude a file or pattern

    Exclude a file or pattern

    Hey, really neat plugin! Is there any way to exclude a single file or directory or pattern?

    For example I want to exclude my favicon.png file from being compressed, but all other images should be compressed.

    Is there any way to do so currently? Couldn't find anything in the docs, hence raising an issue.

    Thanks

    enhancement 
    opened by anurag-roy 2
  • CSS Class Reorder Issue

    CSS Class Reorder Issue

    Hi,

    We're having an issue on a build where astro-compress is reordering the CSS class declarations for a few DIVs where the order is critical to the responsive nature of the element. The site is using Bootstrap where class ordering for showing/hiding an DOM element on mobile matters. Compress is reordering all classes to be alphabetical (from what we're noticing which breaks our logic). Is there a way to disable this type of cleanup process?

    Thanks!

    opened by nicklanehq 1
  • Compress animated webp

    Compress animated webp

    Currently compressing animated webp result in a still image instead of the animation.

    Any way to supply an regexp to match animated webp files would be brilliant.

    bug 
    opened by ColinFrick 1
  • [performance] Compress in parallel

    [performance] Compress in parallel

    Love this package!

    But not the performance, especially when using it with lots of image files :(

    It doesn't seem to be compressing in parallel.

    A "make parallel" improvement to Astro's build command was made here. Perhaps something similar could be done here to improve the performance.

    From a quick look at the code, perhaps the current bottleneck somewhere here?

    Happy to take a stab at making some improvements on this once I can free-up some time.

    enhancement 
    opened by jaymakes11 4
  • Cache

    Cache

    It would be nice if there would a cache folder where the already compressed images are in so they won't need a new compression. It takes long to do the images on my website currently so deployment is slower.

    enhancement 
    opened by RichardLindhout 3
Releases(v1.1.24)
  • v1.1.24(Dec 19, 2022)

  • v1.1.23(Dec 17, 2022)

  • v1.1.22(Dec 14, 2022)

    What's Changed

    • Bump actions/checkout from 3.1.0 to 3.2.0 by @dependabot in https://github.com/astro-community/astro-compress/pull/65

    Full Changelog: https://github.com/astro-community/astro-compress/compare/v1.1.21...v1.1.22

    Source code(tar.gz)
    Source code(zip)
  • v1.1.21(Dec 12, 2022)

  • v1.1.20(Dec 12, 2022)

  • v1.1.19(Dec 9, 2022)

  • v1.1.18(Dec 6, 2022)

  • v1.1.17(Dec 4, 2022)

  • v1.1.16(Dec 4, 2022)

  • v1.1.15(Nov 30, 2022)

  • v1.1.14(Nov 29, 2022)

  • v1.1.13(Nov 29, 2022)

  • v1.1.12(Nov 28, 2022)

  • v1.1.11(Nov 25, 2022)

    What's Changed

    • Bump @nikolarhristov/pipeline from 0.0.4 to 0.0.5 by @dependabot in https://github.com/astro-community/astro-compress/pull/59

    Full Changelog: https://github.com/astro-community/astro-compress/compare/v1.1.10...v1.1.11

    Source code(tar.gz)
    Source code(zip)
  • v1.1.10(Nov 23, 2022)

  • v1.1.9(Nov 22, 2022)

  • v1.1.8(Nov 21, 2022)

    What's Changed

    • Bump astro from 1.6.9 to 1.6.10 by @dependabot in https://github.com/astro-community/astro-compress/pull/55

    Full Changelog: https://github.com/astro-community/astro-compress/compare/v1.1.7...v1.1.8

    Source code(tar.gz)
    Source code(zip)
  • v1.1.7(Nov 21, 2022)

    What's Changed

    • Bump @lightrix/scripts from 0.0.15 to 0.0.16 by @dependabot in https://github.com/astro-community/astro-compress/pull/53

    Full Changelog: https://github.com/astro-community/astro-compress/compare/v1.1.6...v1.1.7

    Source code(tar.gz)
    Source code(zip)
  • v1.1.6(Nov 14, 2022)

  • v1.1.5(Nov 14, 2022)

  • v1.1.4(Nov 14, 2022)

  • v1.1.3(Nov 14, 2022)

  • v1.1.2(Nov 10, 2022)

    What's Changed

    • Bump dependabot/fetch-metadata from 1.3.4 to 1.3.5 by @dependabot in https://github.com/astro-community/astro-compress/pull/48
    • Bump astro from 1.6.3 to 1.6.4 by @dependabot in https://github.com/astro-community/astro-compress/pull/50

    Full Changelog: https://github.com/astro-community/astro-compress/compare/v1.1.1...v1.1.2

    Source code(tar.gz)
    Source code(zip)
  • v1.1.1(Oct 29, 2022)

  • v1.1.0(Oct 27, 2022)

    What's Changed

    • Bump pnpm/action-setup from 2.2.3 to 2.2.4 by @dependabot in https://github.com/astro-community/astro-compress/pull/44

    Full Changelog: https://github.com/astro-community/astro-compress/compare/v1.0.12...v1.1.0

    Source code(tar.gz)
    Source code(zip)
  • v1.0.12(Oct 13, 2022)

  • v1.0.11(Oct 6, 2022)

  • v1.0.10(Oct 6, 2022)

  • v0.0.1(Oct 6, 2022)

  • v1.0.9(Sep 30, 2022)

    What's Changed

    • Bump astro from 1.2.3 to 1.2.4 by @dependabot in https://github.com/astro-community/astro-compress/pull/31
    • Bump astro from 1.2.4 to 1.2.5 by @dependabot in https://github.com/astro-community/astro-compress/pull/32
    • Bump deepmerge-ts from 4.2.1 to 4.2.2 by @dependabot in https://github.com/astro-community/astro-compress/pull/33
    • Bump astro from 1.2.6 to 1.2.7 by @dependabot in https://github.com/astro-community/astro-compress/pull/34
    • Bump astro from 1.2.8 to 1.3.0 by @dependabot in https://github.com/astro-community/astro-compress/pull/35

    Full Changelog: https://github.com/astro-community/astro-compress/compare/v1.0.8...v1.0.9

    Source code(tar.gz)
    Source code(zip)
Owner
Nikola Hristov
Nikola Hristov
Astrospeed is a performance monitor for your AstroJS codebase.

astroSpeed astroSpeed Performance monitor for Astro & Next.js web applications. Explore astrospeed.io ยป View Demo ยท Report Bug ยท Request Feature Table

OSLabs Beta 38 Dec 15, 2022
When pasting screenshots into obsidian notes, convert the images to jpeg and compress them

obsidian-paste-png-to-jpeg This plugin is inspired by obsidian-paste-image-rename, obsidian-paste-image-rename can be used when inserting images renam

null 19 Nov 15, 2022
A free and open source file compression tool, Compressor makes your files smaller!

Compressor A free and open source file compression tool, Compressor makes your files smaller! Languages: ???? ไธญๆ–‡ | ???? English Feature Internationali

ไบ”ๆœˆๅ› 100 Dec 24, 2022
๐Ÿ•‹Assets Compression module for Nuxt 3

@nuxt-modules/compression Assets Compression module for Nuxt 3 โœจ Release Notes ?? Read the documentation Features Nuxt 3 ready Assets Compression usin

Nuxt Modules 26 Nov 21, 2022
High performance (de)compression in an 8kB package

fflate High performance (de)compression in an 8kB package Why fflate? fflate (short for fast flate) is the fastest, smallest, and most versatile pure

null 1.4k Dec 28, 2022
An online .txt file compressor, de-compressor tool which uses Huffman Coding for Lossless data compression.

Text File Compressor De-compressor Web App This webapp uses Huffman Coding for Text Compression and De-compression. Made with JavaScript, HTML5 and CS

Samir Paul 10 Dec 25, 2022
๐Ÿผ A cli can automatically compress images with tinypng.com

easy-tinypng-cli A cli can automatically compress images with tinypng.com. Why When delevoping a website, we often need to compress images to reduce t

Frozen FIsh 58 Dec 14, 2022
A suite of utilities to add more features to the details element

A suite of utilities to add more features to the details element

Zach Leatherman 206 Dec 22, 2022
A suite of utilities to add more features to the details element.

A suite of utilities to add more features to the details element.

Zach Leatherman 206 Dec 22, 2022
This project, is about restructuring our Awesome books app code and make it more organized using modules and ES6 sintax. Built with HTML, CSS, JavaScript.

Awesome Books with ES6 This project, is about restructuring our Awesome books app code and make it more organized using modules and ES6 sintax. Built

Dino Ronald Quispe Arias 7 Jul 21, 2022
logseq custom.js and custom.css utilities : resize query table columns, hide namespaces...

logseq-custom-files custom.js and custom.css utilities for Logseq. current version v20220331 query table view : add handles on the query table headers

null 44 Dec 7, 2022
Group together Tailwind CSS modifiers like focus, peer-checked, dark:hover and more with HTML attributes ๐Ÿ‘ฉโ€๐Ÿš€

Tailwind CSS Group Classes Group together Tailwind CSS modifiers like focus, peer-checked, dark:hover and more with HTML attributes ??โ€?? Using with a

Mark Mead 5 Sep 15, 2022
This is my to-do list website built with html, css and JavaScript. In this project I used Webpack to bundle JavaScript and ES6 modules to write modular JavaScript.

To-Do-List App This is my to-do list website built with html, css and JavaScript. In this project I used Webpack to bundle JavaScript and ES6 modules

Samuel Mwape 18 Sep 20, 2022
The world of cryptocurrencies is diverse and becoming more and more popular

We are providing an user with a simple learning resource for an intro into the CryptoCurrency World. Along with a community grown message board to assist with further learning.

null 3 Jun 20, 2022
A Leaderboard app that pulls from a LeaderboardGameAPI and allows users to view recent scores and add more scores to the score board. Built with HTML5, CSS, JavaScript, and Webpack.

Leaderboard A Leaderboard app that pulls from a LeaderboardGameAPI and allows users to view recent scores and add more scores to the score board. Buil

Steven Ntakirutimana 5 Dec 21, 2022
High performance and SEO friendly lazy loader for images (responsive and normal), iframes and more, that detects any visibility changes triggered through user interaction, CSS or JavaScript without configuration.

lazysizes lazysizes is a fast (jank-free), SEO-friendly and self-initializing lazyloader for images (including responsive images picture/srcset), ifra

Alexander Farkas 16.6k Jan 1, 2023
A Tailwind plugin that allows to create multiple groups utilities such as group-card or group-1 and works with Tailwind 3 features and all variations.

Tailwind Labeled Groups A plugin that allows to create multiple groups utilities such as group-card or group-1 and works with Tailwind 3 features and

Max 18 Nov 21, 2022