Skip to content

Extremely ⚑ Fast and Smart HTML 🟠 JS 🟑 CSS πŸ”΅ SVG 🟣 Minification

License

Notifications You must be signed in to change notification settings

advanced-astro/min

Repository files navigation

✳ AstroMin

Extremely fast and smartπŸ”Ή Minification of 🟠 HTML 🟑 JS πŸ”΅ CSS 🟣 SVG
Meticulously optimized for Speed πŸ₯‡ and Effectiveness πŸ… based on Rust πŸ¦€

Built with Astro GitHub Repo Stars NPM Package Version License: MIT Types Socket Badge

Feature Highlights ✨

  • ⚑ Performant parallel processing (+1k files/s)
  • πŸͺΆ Lighter build output (~25% smaller)
  • πŸ“¦ small packaged size (~30KB)

Feature Roadmap 🌱

  • HTML, CSS, JS, SVG
  • Files and inline Code
  • Static Site Minification

Note

astro-min focuses on compressing statically generated content and pre-rendered routes

  • Support SSR / Hybrid Rendering
  • Remove Comments from external CSS/JS

Getting started 🎯

Use your package manager of your choice

# NPM
npm run astro add astro-min

# Bun (known bug πŸ›)
#bun astro add astro-min

# PNPM
pnpm astro add astro-min

# Yarn
yarn astro add astro-min

Manual Installation πŸ§‘β€πŸ’»

  1. Install package astro-min

  2. Import and add to integrations list

//astro.config.mjs
import { defineConfig } from 'astro/config'
import min from 'astro-min'

export default defineConfig({
  integrations: [min()]
})

Options πŸ”§

//astro.config.mjs
import { defineConfig } from 'astro/config'
import minify from 'astro-min'

export default defineConfig({
  integrations: [
    minify({
      do_not_minify_doctype: false,
      ensure_spec_compliant_unquoted_attribute_values: false,
      keep_closing_tags: false,
      keep_comments: false,
      keep_html_and_head_opening_tags: false,
      keep_input_type_text_attr: false,
      keep_spaces_between_attributes: false,
      keep_ssi_comments: false,
      minify_css: false,
      minify_js: false,
      preserve_brace_template_syntax: false,
      preserve_chevron_percent_template_syntax: false,
      remove_bangs: false,
      remove_processing_instructions: false,
    })
  ]
})

Important

Use astro-min last in your integration list for the best optimization
Optional: but before astro-compressor and astro-compress for images only

//astro.config.mjs
import { defineConfig } from 'astro/config'
import compressor from 'astro-compressor'
import minify from 'astro-min'

export default defineConfig({
  integrations: [
    minify({
      // do_not_minify_doctype: false,
      // ensure_spec_compliant_unquoted_attribute_values: false,
      // keep_closing_tags: false,
      // keep_comments: false,
      // keep_html_and_head_opening_tags: false,
      // keep_input_type_text_attr: false,
      // keep_spaces_between_attributes: false,
      // keep_ssi_comments: false,
      // minify_css: false,
      // minify_js: false,
      // preserve_brace_template_syntax: false,
      // preserve_chevron_percent_template_syntax: false,
      // remove_bangs: false,
      // remove_processing_instructions: false,
    }),
    compress({
      CSS: false,
      HTML: false,
      Image: true,
      JavaScript: false,
      SVG: false
    }),
    compressor()
  ]
})

Development πŸ’»

Open in StackBlitz Open with CodeSandbox Open in GitHub Codespaces Open in Gitpod

Learn more πŸ”–

Versus πŸ…

  • astro-compress

    • 🐌 uses terser based on javascript
    • πŸ’€ lightningcss not yet implemented
  • astro-html-minify

    • 🐌 uses terser based on javascript

Colophon πŸ“ƒ

Build with modern FOSS πŸ’š and AI assistance πŸ€–

Next generation ✨ web development based on Rust πŸ¦€

Changelog πŸ“–

1.2.0 - πŸ›  Feat: Parallel processing
- ✨ Feat: Skip *.min.*
1.1.0 - πŸ› Fix: Auto install bug

Advanced Astro