A faster drop in replacement for bin/magento cache:clean with file watcher

Overview

"You know, hope is a mistake. If you can't fix what's broken, you'll, uh... you'll go insane." - Max Rockatansky

Magento 2 Cache Clean

A faster drop in replacement for bin/magento cache:clean with a file watcher.

The file watcher automatically cleans affected cache types in the Magento 2 cache during development. For example, if you make a change to a template, it only cleans the block_html and full_page caches, not the config or layout caches.

The project is only tested on MacOS and Linux. Please report bugs by opening an issue on the GitHub issue tracker.

Features

  • Supports file, redis and varnish cache backends
  • Removes affected generated code classes when a source file is changed
  • Zero configuration, all required information is read from app/etc/env.php
  • Hotkeys for quick cache flushes while the watcher is running

Installation & Updating

Installation:

composer require --dev mage2tv/magento-cache-clean

Update:

composer remove --dev mage2tv/magento-cache-clean
composer require --dev mage2tv/magento-cache-clean

The tool is commonly installed globally using composer global require ....

Usage

In your Magento directory, run vendor/bin/cache-clean.js --watch

Press Ctrl-C to exit the watcher process.

The script can also be used as a faster drop in replacement of bin/magento cache:clean. For example:

vendor/bin/cache-clean.js config full_page

(It's quicker because the start up time of bin/magento is so slow.)

There are several options to customize the behavior:

vendor/bin/cache-clean.js --help
Sponsored by https://www.mage2.tv

Usage: cache-clean.js [options and flags] [cache-types...]
Clean the given cache types. If none are given, clean all cache types.

--directory|-d <dir>    Magento base directory
--watch|-w              Watch for file changes
--verbose|-v            Display more information
--debug|-vv             Display too much information
--silent|-s             Display less information
--version               Display the version
--help|-h               This help message

Usually I run the command once with the --watch switch when I start development, and when I make a change that isn't automatically detected (yet), I run vendor/bin/cache-clean.js with the given cache types as a drop in replacement for bin/magento cache:clean.

Hotkeys

When the watcher is running, segments of the cache can be cleaned with individual keystrokes:

Key Cache Segment(s)
c config
b block_html
l layout
f full_page
a (a for all)
v (v for view) block_html, layout, full_page, translate
t translate

There also are hotkeys to clean the static assets in the Adminhtml or the Frontend area or clean the Generated code directory.

Prerequisites:

  • node.js (built on 10.8, but should work with older 8.x versions, too).
  • It probably is a good idea to turn on all Magento caches bin/magento cache:enable to get the full benefit.

Known issues

  • Currently the watcher has to be restarted after a new theme is added so it is added to the watchlist.

  • Changes to files on NFS mounts (e.g. in vagrant) do not trigger the watches. Depending on a given setup, it might be possible to run the watcher on the host system instead.

  • If you run the task in PHPStorm and the hotkeys are not working, search for actions by pressing STRG+SHIFT+A, then search for "registry...", then enable nodejs.console.use.terminal and restart the watcher process.

  • Not tested a lot on Windows, please open an issue if you want to contribute.

  • If you run into the error Error NOSPC or ENOSPC: System limit for number of file watchers reached on Linux, run the command:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
  • Since Magento 2.1 there is a bug that causes the full page cache records to be written to the var/cache directory instead of var/page_cache. This issue causes the cache cleaner behavior to be erratic. There is an easy workaround, namely removing all cache configuration from the default app/etc/env.php. The bug only affects the default config with the file system cache backend. Redis or Varnish are not affected. The bug will be fixed in the (currently upcoming) Magento 2.3.4 release.

More information

Thanks

Thanks to Mage2 TV for sponsoring the development of this tool.

This script was inspired by Timon de Groot's blog post where he describes the idea to use a file watcher in PHPStorm to call redis-cli to clear the complete cache whenever a XML file is modified. The only downside of that solution is that it always flushes the full cache and only works with redis.

Thank you also to everybody who gave feedback, shared ideas and helped test new features! This tool would be impossible without you!

Copyright & License

Copyright 2019 by Vinai Kopp, distributed under the BSD-3-Clause license (see the LICENSE file).

Comments
  • Docker friendly changes

    Docker friendly changes

    Hi, and thanks for the wonderful module. I've spent some time making the module work on Docker, and I can confirm it's working fine. But I've stumbled upon some issues. The module makes two php calls, which obviously can't work inside a node container, and I don't find it a good idea to use mixed purpose containers (php+node). Fortunately, the calls are really simple so I've just run them and saved the output:
    php -r "require 'app/vendor/autoload.php'; foreach ((new \Magento\Framework\Component\ComponentRegistrar)->getPaths('module') as \$m) echo \$m.PHP_EOL;" > modules.cfg
    php -r "echo json_encode( require 'app/etc/env.php' ?? []);" > settings.cfg This can be easily run inside the php container and stored in a location of your choice. After that, I've just rewritten the cache-clean.js to use the two saved files. I am not fluent enough with closurescript to do a PR, but it will be a nice option to check first for a static file with configuration, and if not present then proceed with php calls. This will allow some further customizations like having a more fine-grained filter for watch locations. I don't think I need to watch for files inside vendor, or at least not for all of them.

    enhancement docker 
    opened by di-repo 25
  • More Issues When Switching Branches / Stashing

    More Issues When Switching Branches / Stashing

    This is kind of a follow-up of #54.

    When I switch branches / git stash / git stash pop, I got the following error:

    PHP Warning:  require(/var/www/shop/vendor/composer/../namespace/module/registration.php): failed to open stream: No such file or directory in /var/www/shop/vendor/composer/autoload_real.php on line 70
    PHP Fatal error:  require(): Failed opening required '/var/www/shop/vendor/composer/../namespace/module/registration.php' (include_path='/var/www/shop/vendor/magento/zendframework1/library:.:/usr/share/php:/var/www/shop/vendor/deployer/recipes:/var/www/shop/vendor/jalogut/magento2-deployer-plus') in /var/www/shop/vendor/composer/autoload_real.php on line 70
    11:18:58 ERROR: failed shelling out to php for reading the module list.
    11:18:58 ERROR Details: Command failed: php -r "require '/var/www/shop/vendor/autoload.php'; \$bp = strlen(dirname(dirname(realpath('/var/www/shop/vendor/autoload.php')))) + 1; foreach ((new \Magento\Framework\Component\ComponentRegistrar)->getPaths('module') as \$m) echo substr(\$m, \$bp).PHP_EOL;"
    PHP Warning:  require(/var/www/shop/vendor/composer/../namespace/module/registration.php): failed to open stream: No such file or directory in /var/www/shop/vendor/composer/autoload_real.php on line 70
    PHP Fatal error:  require(): Failed opening required '/var/www/shop/vendor/composer/../namespace/module/registration.php' (include_path='/var/www/shop/vendor/magento/zendframework1/library:.:/usr/share/php:/var/www/shop/vendor/deployer/recipes:/var/www/shop/vendor/jalogut/magento2-deployer-plus') in /var/www/shop/vendor/composer/autoload_real.php on line 70
    
    PHP Warning:  require(/var/www/shop/vendor/composer/../namespace/module/registration.php): failed to open stream: No such file or directory in /var/www/shop/vendor/composer/autoload_real.php on line 70
    PHP Fatal error:  require(): Failed opening required '/var/www/shop/vendor/composer/../namespace/module/registration.php' (include_path='/var/www/shop/vendor/magento/zendframework1/library:.:/usr/share/php:/var/www/shop/vendor/deployer/recipes:/var/www/shop/vendor/jalogut/magento2-deployer-plus') in /var/www/shop/vendor/composer/autoload_real.php on line 70
    11:18:58 ERROR: failed shelling out to php for reading the theme list.
    11:18:58 ERROR Details: Command failed: php -r "require '/var/www/shop/vendor/autoload.php'; \$bp = strlen(dirname(dirname(realpath('/var/www/shop/vendor/autoload.php')))) + 1; foreach ((new \Magento\Framework\Component\ComponentRegistrar)->getPaths('theme') as \$m) echo substr(\$m, \$bp).PHP_EOL;"
    PHP Warning:  require(/var/www/shop/vendor/composer/../namespace/module/registration.php): failed to open stream: No such file or directory in /var/www/shop/vendor/composer/autoload_real.php on line 70
    PHP Fatal error:  require(): Failed opening required '/var/www/shop/vendor/composer/../namespace/module/registration.php' (include_path='/var/www/shop/vendor/magento/zendframework1/library:.:/usr/share/php:/var/www/shop/vendor/deployer/recipes:/var/www/shop/vendor/jalogut/magento2-deployer-plus') in /var/www/shop/vendor/composer/autoload_real.php on line 70
    
    [ERROR] ENOENT: no such file or directory, watch '/var/www/shop/pub/static/frontend'
    
    Process finished with exit code 1
    

    I see two isses here:

    1. The error when switching branches seems to be not fully fixed.
    2. There is an error when pub/static/frontend is no directory.
      1. The process should not crash if the directory is missing.
      2. Not sure why this directory is missing. I do not delete it myself. So maybe in some situations the cache clean tool deletes the whole directory?
    enhancement confirmation-requested 
    opened by sprankhub 21
  • Not working with Ui component changes

    Not working with Ui component changes

    I m running this in windowns environment and Magento2.2.7 instance so the issue is when try to change in Ui component listing xml file it trigger to remove specific id cache but when i refresh browser it doesn't actually remove cache i have to remove cache using magento command every time. Here is how it run. http://prntscr.com/n4hd3r

    bug more-info-required windows 
    opened by zaheerbadi 19
  • 0.0.16 - [ERROR] b.setRawMode is not a function

    0.0.16 - [ERROR] b.setRawMode is not a function

    Hey,

    the watcher crashes right after the start. Maybe my node version is too old? node --version .. v8.11.4

    [ERROR] b.setRawMode is not a function npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! [email protected] cache:watch: ./magento/vendor/bin/cache-clean.js -w -d ./magento/ npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the [email protected] cache:watch script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

    Regards Marcus

    opened by mvenghaus 15
  • Not Working With Redis Over Socket

    Not Working With Redis Over Socket

    Expected Behavior

    The cache should be cleared.

    Actual Behavior

    The following error is thrown:

    $ vendor/bin/cache-clean.js
    Sponsored by https://www.mage2.tv
    
    Flushing all caches
    events.js:167
          throw er; // Unhandled 'error' event
          ^
    
    Error: Redis connection to /tmp/redis.sock:6379 failed - getaddrinfo ENOTFOUND /tmp/redis.sock /tmp/redis.sock:6379
        at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:57:26)
    Emitted 'error' event at:
        at RedisClient.on_error (/Volumes/Development/Sites/mage22/vendor/mage2tv/magento-cache-clean/node_modules/redis/index.js:406:14)
        at Socket.<anonymous> (/Volumes/Development/Sites/mage22/vendor/mage2tv/magento-cache-clean/node_modules/redis/index.js:279:14)
        at Socket.emit (events.js:182:13)
        at emitErrorNT (internal/streams/destroy.js:82:8)
        at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
        at process._tickCallback (internal/process/next_tick.js:63:19)
    

    Steps to Reproduce the Problem

    1. Set up Redis to a use a socket
    2. Configure Magento to connect to Redis over that socket for Cache, FPC and sessions
    3. Run the CLI tool

    Specifications

    • Magento Version: 2.2.5 (Vanilla, no third-party extensions or themes)
    • PHP Version: 7.1.20
    • Node.js Version: 10.9.0
    • Platform: MacOS 10.13.6

    Additional Details

    Here is my Redis configuration, which works fine with Magento:

        'session' => [
            'save' => 'redis',
            'redis' => [
                'host' => '/tmp/redis.sock',
                'port' => '6379',
                'password' => '',
                'timeout' => '2.5',
                'persistent_identifier' => '',
                'database' => '3',
                'compression_threshold' => '2048',
                'compression_library' => 'gzip',
                'log_level' => '1',
                'max_concurrency' => '6',
                'break_after_frontend' => '5',
                'break_after_adminhtml' => '30',
                'first_lifetime' => '600',
                'bot_first_lifetime' => '60',
                'bot_lifetime' => '7200',
                'disable_locking' => '0',
                'min_lifetime' => '60',
                'max_lifetime' => '2592000'
            ]
        ],
        'cache' => [
            'frontend' => [
                'default' => [
                    'backend' => 'Cm_Cache_Backend_Redis',
                    'backend_options' => [
                        'server' => '/tmp/redis.sock',
                        'port' => '6379',
                        'database' => '5'
                    ]
                ],
                'page_cache' => [
                    'backend' => 'Cm_Cache_Backend_Redis',
                    'backend_options' => [
                        'server' => '/tmp/redis.sock',
                        'port' => '6379',
                        'database' => '4',
                        'compress_data' => '0'
                    ]
                ]
            ]
        ],
    
    opened by JosephLeedy 15
  • etc/adminhtml/menu.xml - block_html

    etc/adminhtml/menu.xml - block_html

    Hey,

    when I make changes in the menu.xml only the "config" cache is cleaned. To see my change I need to clean the "block_html" cache as well.

    Regards Marcus

    bug 
    opened by inkl-modules 14
  • Cache is not cleaned as it should

    Cache is not cleaned as it should

    Hey Vinai,

    I've a problem with your module. The cache is not cleaned as it should. The output of your module is correct. The cache to be cleaned should be "config". After your module finds the change the message "Cleaning cache type(s) config" appears but the cache is not clean. When i run "./bin/magento cache:clean config" .. it works. Any ideas?

    Command & Output

    ./magento/vendor/bin/cache-clean.js -v -w -d ./magento/
    
    Sponsored by https://www.mage2.tv
    
    Magento dir ./magento/
    Watcher initialized (Ctrl-C to quit)
    Processing /srv/http/xxx/magento/vendor/xxx/xxx/view/adminhtml/ui_component/xxx_order_grid.xml
    Cleaning cache type(s) config
    

    Change in file

    <column name="filename">
    	<settings>
    		<label translate="true">Filename</label>
    		<filter>text</filter>
    	</settings>
    </column>
    

    ->

    <column name="filename">
    	<settings>
    		<label translate="true">Filename</label>
    		<filter>text</filter>
    		<bodyTmpl>ui/grid/cells/html</bodyTmpl>
    	</settings>
    </column>
    

    Config

    'cache' => [
            'frontend' => [
                'default' => [
                    'backend' => 'Cm_Cache_Backend_Redis',
                    'backend_options' => [
                        'server' => '127.0.0.1',
                        'database' => '0',
                        'port' => '6379'
                    ]
                ],
                'page_cache' => [
                    'backend' => 'Cm_Cache_Backend_Redis',
                    'backend_options' => [
                        'server' => '127.0.0.1',
                        'database' => '1',
                        'port' => '6379',
                        'compress_data' => '0'
                    ]
                ]
            ]
        ]
    

    Thx Marcus

    opened by mvenghaus 13
  • Watch is not working on Docker

    Watch is not working on Docker

    Description

    When developing using docker for mac, the watcher doesn't not notice changes from host. However, if we change a file inside the container, the watcher notices it right away.

    Specifications

    1. Docker for mac version 18.06.0-ce-mac70
    2. Magento community edition 2.2.5

    Steps to reproduce

    1. Enable watcher docker-compose exec phpfpm vendor/bin/cache-clean.js --watch
    2. Modify any .phtml file

    NOTE: If you need, I can provide the docker-compose.yml file or help you to reproduce it.

    Expected result

    Watcher notices the change and clears caches

    Actual result

    Nothing happens. Even using verbose output, nothing is happening. The watcher does not notice the changes.

    NOTE: It works if we edit the file directly inside the container

    help wanted docker 
    opened by jalogut 12
  • UI Component layout file change is not processed

    UI Component layout file change is not processed

    When making a change to a UI Components layout file, the watcher see's that the file has changed, but the frontend does not reflect the updated config. See attached screenshot where I change the label of the ID field in the layout file.

    I have to use the option (a) to clear all cache to get it to reflect the change.

    uicomponent

    more-info-required 
    opened by gwharton 10
  • Cache clean watch crashes more often than not

    Cache clean watch crashes more often than not

    Not yet fully reproducible...

    Do you know anything about that?

    For example it seems to happen when deleting lots of files, moving stuff around and/or composer reinstalling ...

    bug 
    opened by amenk 10
  • Error: Vector's key for assoc must be a number.

    Error: Vector's key for assoc must be a number.

    When I press v button or make a change in a layout xml file I'm getting the error below. No clue as to what it means so I'm posting it here.

    > cache-clean.js --watch
    Release 1.0.39 sponsored by https://www.mage2.tv
    
    Hot-keys for manual cache cleaning:
    [c]onfig [b]lock_html [l]ayout [t]ranslate [f]ull_page [v]iew [a]ll
    
    Clean generated code: [G]
    Clean integration test sandboxes: [I]
    Clean static content areas: [F]rontend [A]dminhtml
    
    Watcher initialized (Ctrl-C to quit)
    10:12:41 Cleaning cache type(s) layout full_page
    /Users/rikwillems/.composer/vendor/mage2tv/magento-cache-clean/bin/cache-clean.js:209
    g.ea=function(a,b,c){a=0;for(var d=c;;)if(a<this.j){var e=of(this,a);c=e.length;a:for(var f=0;;)if(f<c){var h=e[f];d=b.b?b.b(d,h):b.call(null,d,h);if(hd(d)){e=d;break a}f+=1}else{e=d;break a}if(hd(e))return Xb(e);a+=c;d=e}else return d};g.ma=function(a,b,c){if("number"===typeof b)return this.Vb(b,c);throw Error("Vector's key for assoc must be a number.");};
                                                                                                                                                                                                                                                                                                                 ^
    
    Error: Vector's key for assoc must be a number.
        at V.g.ma (/Users/rikwillems/.composer/vendor/mage2tv/magento-cache-clean/bin/cache-clean.js:209:308)
        at Function.Bd.f (/Users/rikwillems/.composer/vendor/mage2tv/magento-cache-clean/bin/cache-clean.js:81:60)
        at hk (/Users/rikwillems/.composer/vendor/mage2tv/magento-cache-clean/bin/cache-clean.js:374:52)
        at $l (/Users/rikwillems/.composer/vendor/mage2tv/magento-cache-clean/bin/cache-clean.js:446:116)
        at /Users/rikwillems/.composer/vendor/mage2tv/magento-cache-clean/bin/cache-clean.js:446:430
        at /Users/rikwillems/.composer/vendor/mage2tv/magento-cache-clean/bin/cache-clean.js:321:275
        at V.g.ea (/Users/rikwillems/.composer/vendor/mage2tv/magento-cache-clean/bin/cache-clean.js:209:133)
        at tb (/Users/rikwillems/.composer/vendor/mage2tv/magento-cache-clean/bin/cache-clean.js:102:350)
        at Rg (/Users/rikwillems/.composer/vendor/mage2tv/magento-cache-clean/bin/cache-clean.js:321:238)
        at am (/Users/rikwillems/.composer/vendor/mage2tv/magento-cache-clean/bin/cache-clean.js:446:408)
    
    opened by rikwillems 9
  • Behavior when a new plugin is configured

    Behavior when a new plugin is configured

    Hi,

    Thank you so much for this module! Indeed, one of the great paints of the Magento dev experience is all this cache / files cleaning. And the module is a great help.

    Not 100% sure, but I'm experiencing that installing a new plugin (before, after, around) doesn't work. I have to manually do all the cleaning with the usual bin/magento commands.

    Any ideas, please? Thanks!

    opened by jcostasilva 1
  • Handling custom configuration files

    Handling custom configuration files

    Hey Vinai,

    I have some custom configuration files and I want your tool to handle them without rebuilding the source.

    A rules config file would be nice .. maybe something simple like that: vendor/bin/cache-clean.js -w --custom-rules=rules.json

    {
      "/etc/custom\\.xml$": ["config", "block_html"]
    }
    

    Or is it already possible?

    Regards Marcus

    opened by mvenghaus 2
  • Watcher keeps going after composer install or branch switch

    Watcher keeps going after composer install or branch switch

    During development I often have the cache-clean watcher running. When I switch branch and do a composer install the watcher registers the file changes, but then keeps cleaning and cleaning. It looks like it registers all file changes and cleans related caches one by one. The only way to stop it is to close the terminal window running the watcher.

    If this is the case maybe it is possible to implement a limiter of some sort?

    enhancement 
    opened by rikwillems 18
  • Clean Cache On Theme Directory Rename

    Clean Cache On Theme Directory Rename

    I have a theme under src/Namespace/Themename. ./src/*/* is defined as a local composer repository. When I rename the directory src/Namespace/Themename/Magento_Catalog to src/Namespace/Themename/Magento_Catalog2 (to quickly check if my customisations broke something), the cache is not cleared. I guess it makes sense to clear it in this case as well?

    enhancement 
    opened by sprankhub 2
Owner
mage2tv
Magento 2 Developer Screencasts
mage2tv
YCOM Impersonate. Login as selected YCOM user 🧙‍♂️in frontend.

YCOM Impersonate Login as selected YCOM user in frontend. Features: Backend users with admin rights or YCOM[] rights, can be automatically logged in v

Friends Of REDAXO 17 Sep 12, 2022
A drop-in replacement for the Magento 2 checkout.

Clean Checkout for Magento 2 A drop-in replacement for the Magento 2 checkout. Features Modules The project is divided into several modules: Overall c

Daniel Sloof 275 Sep 14, 2022
Igbinary is a drop in replacement for the standard php serializer.

igbinary Igbinary is a drop in replacement for the standard php serializer. Instead of the time and space consuming textual representation used by PHP

Igbinary development 727 Dec 21, 2022
A Symfony2 bundle that integrates Select2 as a drop-in replacement for a standard entity field on a Symfony form.

select2entity-bundle Introduction This is a Symfony bundle which enables the popular Select2 component to be used as a drop-in replacement for a stand

Ross Keatinge 214 Nov 21, 2022
File Upload widget with multiple file selection, drag&drop support, progress bar, validation and preview images, audio and video for jQuery

File Upload widget with multiple file selection, drag&drop support, progress bar, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (Google App Engine, PHP, Python, Ruby on Rails, Java, etc.) that supports standard HTML form file uploads.

Sebastian Tschan 31.1k Dec 30, 2022
Documentation on clean coding and demonstration of studied clean coding principals with PHP.

practice-php-clean-code Documentation on clean coding and demonstration of studied clean coding principals with PHP. The document contained in this re

Ferdous Islam 1 Feb 21, 2022
Search faster into Magento DevDocs and Magento StackExchange! 🔍⚡️

VS Code - Magento DevSearch Search faster into Magento DevDocs and Magento StackExchange! ?? ⚡️ Magento DevSearch is a VS Code extension that allows y

Rafael Corrêa Gomes 12 Oct 18, 2022
Set a customer password with bin/magento.

Set a customer password Since Magento 2 no longer provides facilities to set a customers password, this command can come in handy during development w

Vinai Kopp 25 Mar 8, 2022
bin/magento command to display configured preferences for classes or interfaces

bin/magento command to display configured preferences for classes or interfaces A bin/magento command that will show you the configured preferences fo

David Manners 14 Jul 18, 2022
Much improved replacement for Zend_Cache_Backend_File - works great with Magento!

Cm_Cache_Backend_File The stock Zend_Cache_Backend_File backend has extremely poor performance for cleaning by tags making it become unusable as the n

Colin Mollenhour 146 Aug 22, 2022
Rah cache minify - HTML compressor module for rah cache Textpattern CMS plugin

Minify module for rah_cache This is a minify module for rah_cache, a full-page caching solution for Textpattern CMS. Rah_cache_minify will minify HTML

Jukka Svahn 1 Feb 13, 2014
Rah cache - Cache Textpattern's dynamic pages as flat files

rah_cache Packagist | Issues Rah_cache is a simple, experimental full-page caching plugin for Textpattern CMS. It caches Texpattern’s dynamic pages as

Jukka Svahn 2 Apr 24, 2022
Etc cache - Cache plugin for Textpattern CMS

etc_cache Download | Packagist This Textpattern plugin provides an events-driven cache solution for Textpattern CMS. Textpattern is fast, but when you

null 3 Aug 30, 2020
The Cache component provides an extended PSR-6 implementation for adding cache to your applications.

Symfony PSR-6 implementation for caching The Cache component provides an extended PSR-6 implementation for adding cache to your applications. It is de

Symfony 3.8k Jan 3, 2023
Makes indexing of your Magento store around x times faster! ‼️ Maintainers wanted!

FastIndexer This module has never been used in production. No more empty results in the frontend due to a long taking reindex process! Integrates seam

Cyrill Schumacher 79 Jul 10, 2022
This package contains a PHP implementation to solve 3D bin packing problems.

3D Bin Packager This package contains a PHP implementation to solve 3d bin packing problems based on gedex implementation on Go and enzoruiz implement

Farista Latuconsina 7 Nov 21, 2022
A Composer Package which installs the PhantomJS binary (Linux, Windows, Mac) into /bin of your project.

phantomjs-installer A Composer package which installs the PhantomJS binary (Linux, Windows, Mac) into /bin of your project. Table of Contents Installa

Jens A. Koch 149 Nov 8, 2022