Composer install helper outsourcing sensitive keys from the package URL into environment variables

Overview

private-composer-installer

Packagist version MIT license Build Status Coverage Status Packagist downloads

This is a Composer plugin offering a way to reference private package URLs within composer.json and composer.lock. It outsources sensitive dist URL parts (license keys, tokens) into environment variables or a .env file typically ignored by version control. This is especially useful when you can't use Private Packagist or Basic HTTP Auth because the source of a package is not in your control. This repository is inspired by acf-pro-installer.

Quick overview

  • This plugin is compatible with both Composer 2.x (latest) and 1.x.
  • When installing or updating a package, the dist URL {%VERSION} placeholder gets replaced by the version set in the package. In Composer 1 the dist URL version gets fulfilled before it is added to composer.lock.
  • Before downloading the package, {%VARIABLE} formatted placeholders get replaced by their corresponding environment variables in the dist URL. Env vars will never be stored inside composer.lock.
  • If an environment variable is not available for the given placeholder the plugin trys to read it from the .env file in the working directory or in one of the parent directories. The .env file gets parsed by vlucas/phpdotenv.
  • If an environment variable can't be resolved a MissingEnvException gets thrown.
  • Package dist URLs with no {%VARIABLE} formatted placeholders get ignored by this plugin.

Examples

Arbitrary private packages

Add the desired private package to the repositories field inside composer.json. Find more about Composer repositories in the Composer documentation. Specify the exact version to install, and use {%VARIABLE} placeholders to specify any sensitive tokens in your .env file.

{
  "type": "package",
  "package": {
    "name": "package-name/package-name",
    "version": "REPLACE_WITH_LATEST_PACKAGE_VERSION",
    "dist": {
      "type": "zip",
      "url": "https://example.com/package-name.zip?key={%PACKAGE_KEY}&version={%VERSION}"
    },
    "require": {
      "ffraenz/private-composer-installer": "^5.0"
    }
  }
}

Provide the private package dist URL inside the .env file:

PACKAGE_KEY=pleasedontusethiskey

Let Composer require the private package:

composer require "package-name/package-name:*"

WordPress plugins

WordPress plugins can be installed using the package type wordpress-plugin in conjunction with the composer/installers installer. In this example we are installing the ACF Pro plugin. Add following entry to the repositories field inside composer.json and set the desired ACF Pro version.

{
  "type": "package",
  "package": {
    "name": "advanced-custom-fields/advanced-custom-fields-pro",
    "version": "REPLACE_WITH_LATEST_ACF_VERSION",
    "type": "wordpress-plugin",
    "dist": {
      "type": "zip",
      "url": "https://connect.advancedcustomfields.com/index.php?a=download&p=pro&k={%PLUGIN_ACF_KEY}&t={%VERSION}"
    },
    "require": {
      "composer/installers": "^1.4",
      "ffraenz/private-composer-installer": "^5.0"
    }
  }
}

Provide the ACF Pro key inside the .env file. To get this key, login to your ACF account and scroll down to 'Licenses & Downloads'.

PLUGIN_ACF_KEY=pleasedontusethiskey

Let Composer require ACF Pro:

composer require "advanced-custom-fields/advanced-custom-fields-pro:*"

Configuration

The configuration options listed below may be added to the root configuration in composer.json like so:

{
  "name": "...",
  "description": "...",
  "require": {
  },
  "extra": {
    "private-composer-installer": {
      "dotenv-path": ".",
      "dotenv-name": ".env"
    }
  }
}

dotenv-path

Dotenv file directory relative to the root package (where composer.json is located). By default dotenv files are expected to be in the root package folder or in any of the parent folders.

dotenv-name

Dotenv file name. Defaults to .env.

Dependencies

This package heavily depends on vlucas/phpdotenv to load environment variables "automagically". This may cause version conflicts if your project already depends on it. Refer to this table to set the version of private-composer-installer accordingly or consider upgrading.

vlucas/phpdotenv private-composer-installer
^4.1, ^5.2 ^5.0
^4.0 ^4.0
^3.0 ^3.0, ^2.0
^2.2 ^1.0

Development

Install Composer dependencies:

docker-compose run --rm composer composer install

Before pushing changes to the repository run tests and check coding standards using following command:

docker-compose run --rm composer composer test

This is a project by Fränz Friederes and contributors

Comments
  • Major update v5.0

    Major update v5.0

    Checklist:

    opened by ffraenz 67
  • Class 'FFraenz\PrivateComposerInstaller\Environment\LoaderFactory' not found

    Class 'FFraenz\PrivateComposerInstaller\Environment\LoaderFactory' not found

    For some reason i'm getting this error when deploying my site after I ran composer update.

    PHP
    Fatal error: Uncaught Error: Class
    'FFraenz\PrivateComposerInstaller\Environment\LoaderFactory' not found in
    /www/{site_name}/public/releases/129232182/vendor/ffraenz/private-
    composer-installer/src/PrivateComposerInstaller/Plugin.php:102
    

    The error happens at this stage in the deployment Installing advanced-custom-fields/advanced-custom-fields-pro (5.9.1). It's been working fine for months now, so I'm not sure what's going on. Everything works on my local also.

    Here's my ACF declaration in my composer.json file.

    {
          "type": "package",
          "package": {
            "name": "advanced-custom-fields/advanced-custom-fields-pro",
            "version": "5.9.1",
            "type": "wordpress-muplugin",
            "dist": {
              "type": "zip",
              "url": "https://connect.advancedcustomfields.com/index.php?a=download&p=pro&k={%ACF_PRO_KEY}&t=5.9.1"
            },
            "require": {
              "ffraenz/private-composer-installer": "^5.0",
              "composer/installers": "^1.4"
            }
          }
        },
    

    Has anyone had this issue before?

    This site is hosted on Kinsta and is built using trellis/bedrock/sage.

    opened by p-mceldowney 17
  • update ACF example

    update ACF example

    As currently documented with version 1.2.3, the command composer require "advanced-custom-fields/advanced-custom-fields-pro:*" fails.

    This brings the version up to something close to current so it doesn’t immediately fail and discourage use of this package.

    An alternative might be to use a placeholder instead of 1.2.3 so it’s a bit more obvious that the user needs to set it to a current version.

    hacktoberfest-accepted 
    opened by macbookandrew 15
  • WPML installation stopped working?

    WPML installation stopped working?

    Hi there,

    As of today, we're no longer able to update WPML plugins through the installer? Locally everything works fine, but on remote servers composer install fails with these errors:

    [Composer\\Downloader\\TransportException]
    The 'https://wpml.org/?download=8882&user_id={my_user_id}&subscription_key={my_subscription_key}&version=1.6.1' URL could not be accessed: HTTP/2 403
    

    When I try to access the url in the browser, it downloads the zip package without any problems, when I try to cURL it on my remote server I get a 403 forbidden response?

    Anyone else seeing the same? This happens on multiple projects at the moment.

    Thanks!

    opened by Twansparant 9
  • Empty ACF package folder in vendor/

    Empty ACF package folder in vendor/

    I'm trying to install ACF - everything seems to be running fine but the /vendor/advanced-custom-fields folder is empty.

    Here is my package.json:

    {
    
        "repositories": [
            
            {
                "type": "package",
                "package": {
                  "name": "advanced-custom-fields/advanced-custom-fields-pro",
                  "version": "5.9.1",
                  "type": "wordpress-plugin",
                  "dist": {
                    "type": "zip",
                    "url": "https://connect.advancedcustomfields.com/index.php?a=download&p=pro&k={%PLUGIN_ACF_KEY}&t={%VERSION}"
                  },
                  "require": {
                    "composer/installers": "^1.4",
                    "ffraenz/private-composer-installer": "^5.0"
                  }
                }
            }
        ],
        "require": {
            "advanced-custom-fields/advanced-custom-fields-pro": "*"
        },
        "extra": {
            "private-composer-installer": {
              "dotenv-path": ".",
              "dotenv-name": ".env"
            }
        }
    }
    
    

    This is what composer update returns:

    Loading composer repositories with package information
    Updating dependencies
    Dependency resolution completed in 0.002 seconds
    Analyzed 141 packages to resolve dependencies
    Analyzed 179 rules to resolve dependencies
    Lock file operations: 9 installs, 0 updates, 0 removals
    Installs: symfony/polyfill-php80:v1.20.0, symfony/polyfill-mbstring:v1.20.0, symfony/polyfill-ctype:v1.20.0, phpoption/phpoption:1.7.5, graham-campbell/result-type:v1.0.1, vlucas/phpdotenv:v5.2.0, ffraenz/private-composer-installer:v5.0.1, composer/installers:v1.9.0, advanced-custom-fields/advanced-custom-fields-pro:5.9.1
      - Locking advanced-custom-fields/advanced-custom-fields-pro (5.9.1)
      - Locking composer/installers (v1.9.0)
      - Locking ffraenz/private-composer-installer (v5.0.1)
      - Locking graham-campbell/result-type (v1.0.1)
      - Locking phpoption/phpoption (1.7.5)
      - Locking symfony/polyfill-ctype (v1.20.0)
      - Locking symfony/polyfill-mbstring (v1.20.0)
      - Locking symfony/polyfill-php80 (v1.20.0)
      - Locking vlucas/phpdotenv (v5.2.0)
    Writing lock file
    Installing dependencies from lock file (including require-dev)
    Package operations: 9 installs, 0 updates, 0 removals
    Installs: symfony/polyfill-php80:v1.20.0, symfony/polyfill-mbstring:v1.20.0, symfony/polyfill-ctype:v1.20.0, phpoption/phpoption:1.7.5, graham-campbell/result-type:v1.0.1, vlucas/phpdotenv:v5.2.0, ffraenz/private-composer-installer:v5.0.1, composer/installers:v1.9.0, advanced-custom-fields/advanced-custom-fields-pro:5.9.1
      - Installing symfony/polyfill-php80 (v1.20.0): Extracting archive
      - Installing symfony/polyfill-mbstring (v1.20.0): Extracting archive
      - Installing symfony/polyfill-ctype (v1.20.0): Extracting archive
      - Installing phpoption/phpoption (1.7.5): Extracting archive
      - Installing graham-campbell/result-type (v1.0.1): Extracting archive
      - Installing vlucas/phpdotenv (v5.2.0): Extracting archive
      - Installing ffraenz/private-composer-installer (v5.0.1): Extracting archive
    > pre-file-download: FFraenz\PrivateComposerInstaller\Plugin->handlePreDownloadEvent
    > pre-file-download: FFraenz\PrivateComposerInstaller\Plugin->handlePreDownloadEvent
      - Installing composer/installers (v1.9.0): Extracting archive
      - Installing advanced-custom-fields/advanced-custom-fields-pro (5.9.1): Extracting archive
    Generating autoload files
    8 packages you are using are looking for funding.
    Use the `composer fund` command to find out more!
    

    Any thoughts?

    opened by blairwigley 8
  • Incompatile with prestissimo plugin

    Incompatile with prestissimo plugin

    I think it tries to download from the stored URL.

        62/67:      https://codeload.github.com/symfony/polyfill-ctype/legacy.zip/550ebaac289296ce228a706d0867afc34687e3f4
        0: :        https://connect.advancedcustomfields.com/index.php
        63/67:      https://codeload.github.com/squizlabs/PHP_CodeSniffer/legacy.zip/65b12cdeaaa6cd276d4c3033a95b9b88b12701e7
    

    https://github.com/hirak/prestissimo

    May be related to https://github.com/hirak/prestissimo/issues/219

    Please advise.

    opened by szepeviktor 8
  • Update ACF PRO white screen of death

    Update ACF PRO white screen of death

    Thanks @ffraenz for this installer. Works on all my new install site.

    Problem arise when I'm trying to upgrade ACP PRO on an existing site moving from philippbaschke/acf-pro-installer to yours. Did a composer update by changing the value of "vlucas/phpdotenv": "^2.0.1", to "vlucas/phpdotenv": "^3.0.0", and got a white screen of death.

    "require": { 
       "php": ">=5.6", "composer/installers": "^1.4",
       "vlucas/phpdotenv": "^3.0.0",
       "johnpbloch/wordpress": "4.9.8",
       "oscarotero/env": "^1.1.0", 
       "roots/wp-password-bcrypt": "1.0.0", 
       "advanced-custom-fields/advanced-custom-fields-pro": "*" 
    }
    

    Any idea why is it so? Thanks

    opened by imstanleyyeo 8
  • Composer Install Issue

    Composer Install Issue

    I just switched over to using this instead of @PhilippBaschke's version but I'm running into the same strange issue. I need to run composer install twice for ACF to install inside of the plugins directory as required. Here's an edited sample of my composer.json file:

    {
      "repositories": [
          {
              "type": "composer",
              "url": "https://wpackagist.org"
          },
          {
            "type": "package",
            "package": {
              "name": "advanced-custom-fields/advanced-custom-fields-pro",
              "version": "5.7.13",
              "type": "wordpress-plugin",
              "dist": {
                "type": "zip",
                "url": "https://connect.advancedcustomfields.com/index.php?a=download&p=pro&k={%PLUGIN_ACF_KEY}&t={%version}"
              },
              "require": {
                "composer/installers": "^1.0",
                "ffraenz/private-composer-installer": "^2.0"
              }
            }
          }
      ],
      "config": {
          "vendor-dir": "vendor",
          "secure-http": false
      },
      "require": {
          "johnpbloch/wordpress": ">=5.0",
          "advanced-custom-fields/advanced-custom-fields-pro": "*"
      },
      "extra": {
          "installer-paths": {
              "build/wp-content/plugins/{$name}/": [
                  "type:wordpress-plugin"
              ],
              "build/wp-content/themes/{$name}/": [
                  "type:wordpress-theme"
              ]
          },
          "wordpress-install-dir": "build"
      }
    }
    

    Am I doing something wrong which is triggering the need to composer install twice?

    opened by davemcnally 8
  • "Could not find package" (Packagist conflict?)

    Using Composer 2.0 & Bedrock (and composer-merge-plugin):

    # ~/.config/composer/config.json
    {
        "config": {},
        "repositories": {
            "composer-merge-plugin": {
                "type": "github",
                "url": "https://github.com/mcaskill/composer-merge-plugin"
            },
            "advanced-custom-fields/advanced-custom-fields-pro": {
                "name": "advanced-custom-fields/advanced-custom-fields-pro",
                "package": {
                    "dist": {
                        "type": "zip",
                        "url": "https://connect.advancedcustomfields.com/index.php?a=download&p=pro&k=foobar&t={%VERSION}"
                    },
                    "name": "advanced-custom-fields/advanced-custom-fields-pro",
                    "require": {
                        "composer/installers": "^1.8",
                        "ffraenz/private-composer-installer": "^5.0"
                    },
                    "type": "wordpress-plugin",
                    "version": "1.2.3"
                },
                "type": "package"
            },
            "wpackagist": {
                "type": "composer",
                "url": "https://wpackagist.org"
            }
        }
    }
    

    $ composer -vvv require "advanced-custom-fields/advanced-custom-fields-pro:5.9.1"

    [...]
    > pre-file-download: FFraenz\PrivateComposerInstaller\Plugin->handlePreDownloadEvent
    Downloading https://wpackagist.org/packages.json
    [200] https://wpackagist.org/packages.json
    Writing /home/foo/.cache/composer/repo/https---wpackagist.org/packages.json into cache
    Reading /home/foo/.cache/composer/repo/https---wpackagist.org/p-providers-2019.json from cache
    Reading /home/foo/.cache/composer/repo/https---wpackagist.org/p-providers-2013.json from cache
    Reading /home/foo/.cache/composer/repo/https---wpackagist.org/p-providers-2012.json from cache
    Reading /home/foo/.cache/composer/repo/https---wpackagist.org/p-providers-old.json from cache
    Reading /home/foo/.cache/composer/repo/https---wpackagist.org/p-providers-2018.json from cache
    Reading /home/foo/.cache/composer/repo/https---wpackagist.org/p-providers-2015.json from cache
    Reading /home/foo/.cache/composer/repo/https---wpackagist.org/p-providers-2011.json from cache
    Reading /home/foo/.cache/composer/repo/https---wpackagist.org/p-providers-2017.json from cache
    Reading /home/foo/.cache/composer/repo/https---wpackagist.org/p-providers-this-week.json from cache
    Reading /home/foo/.cache/composer/repo/https---wpackagist.org/p-providers-2020-12.json from cache
    Reading /home/foo/.cache/composer/repo/https---wpackagist.org/p-providers-2014.json from cache
    Reading /home/foo/.cache/composer/repo/https---wpackagist.org/p-providers-2020-06.json from cache
    Reading /home/foo/.cache/composer/repo/https---wpackagist.org/p-providers-2020-09.json from cache
    Reading /home/foo/.cache/composer/repo/https---wpackagist.org/p-providers-2016.json from cache
    Reading /home/foo/.cache/composer/repo/https---wpackagist.org/p-providers-2020-03.json from cache
    > pre-file-download: FFraenz\PrivateComposerInstaller\Plugin->handlePreDownloadEvent
    Downloading https://repo.packagist.org/packages.json
    [200] https://repo.packagist.org/packages.json
    Writing /home/foo/.cache/composer/repo/https---repo.packagist.org/packages.json into cache
    > pre-file-download: FFraenz\PrivateComposerInstaller\Plugin->handlePreDownloadEvent
    Downloading https://repo.packagist.org/p2/advanced-custom-fields/advanced-custom-fields-pro.json
    > pre-file-download: FFraenz\PrivateComposerInstaller\Plugin->handlePreDownloadEvent
    Downloading https://repo.packagist.org/p2/advanced-custom-fields/advanced-custom-fields-pro~dev.json
    [404] https://repo.packagist.org/p2/advanced-custom-fields/advanced-custom-fields-pro.json
    [404] https://repo.packagist.org/p2/advanced-custom-fields/advanced-custom-fields-pro~dev.json
    
                                                                                                            
      [InvalidArgumentException]                                                                            
      Could not find package advanced-custom-fields/advanced-custom-fields-pro in a version matching 5.9.1  
                                                                                                            
    
    Exception trace:
     () at phar:///usr/local/bin/composer/src/Composer/Command/InitCommand.php:779
     Composer\Command\InitCommand->findBestVersionAndNameForPackage() at phar:///usr/local/bin/composer/src/Composer/Command/InitCommand.php:443
     Composer\Command\InitCommand->determineRequirements() at phar:///usr/local/bin/composer/src/Composer/Command/RequireCommand.php:189
     Composer\Command\RequireCommand->execute() at phar:///usr/local/bin/composer/vendor/symfony/console/Command/Command.php:245
     Symfony\Component\Console\Command\Command->run() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:835
     Symfony\Component\Console\Application->doRunCommand() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:185
     Symfony\Component\Console\Application->doRun() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:310
     Composer\Console\Application->doRun() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:117
     Symfony\Component\Console\Application->run() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:122
     Composer\Console\Application->run() at phar:///usr/local/bin/composer/bin/composer:63
     require() at /usr/local/bin/composer:24
    
    opened by drzraf 7
  • Re-work .env file loading

    Re-work .env file loading

    This PR implements robust support for phpdotenv v4 and v5, and also support for searching for .env files in multiple directories (by default, recursing upwards).

    opened by GrahamCampbell 7
  • Support for Yith plugins

    Support for Yith plugins

    Hi,

    I am trying to install some Yith theme plugins and running in to an issue with auth. I can see from logging in to their site that a cookie is required for the auth and so I have tried setting that as per the composer manual but I still keep getting asked for auth details. I have confirmed the cookie works by using Postman to make a test request so I can only assume the custom header isn't getting set?

    {
        "type": "package",
        "options":  {
            "http": {
                "header": [
                "Cookie: login_header_here"
                ]
            }
        },
        "package": {
            "name": "yith/yith-woocommerce-ajax-product-filter",
            "version": "4.4.0",
            "type": "wordpress-plugin",
            "dist": {
                "type": "zip",
                "url": "https://yithemes.com/?wc-api=download-api&request=get_file&licence_key=licence_key&product_id=52749"
            },
            "require": {
                "ffraenz/private-composer-installer": "^5.0"
            }
        }
    }
    

    I have tried moving that options block in to various places in case I had it in the wrong one but that hasn't made any difference. Any ideas how to get that Cookie to send with the request?

    opened by Evaske 6
  • Support EDD

    Support EDD

    Fix #22 by allowing a package URL indirection to take place.

    PR supports:

    • Any URL (not restricted to EDD)
    • Custom HTTP method
    • Custom HTTP request content-type (form-urlencoded, ...)
    • Response content-type=JSON
      • Custom key
      • Custom nested keys

    May support out of the box (or with further tweaks):

    • Arbitrary headers (including User-Agent, not tested, see $event->HttpDownloader)
    • authentication (Basic auth) Depends upon $event->HttpDownloader. Standard mechanism apply. May be possible out of the box

    Not supported (but could be implemented)

    • Other response content-type (XML, plain/text, text/html / regex...)
    • Content encodings (gzip, base64, ...)

    Not supported:

    Configuration:

    This is the extra property (at the package-level):

    		"extra": {
    		    "private-composer-installer": {
    			"indirection": {
    			    "http": { "method": "POST"},
    			    "parse": {"format": "json", "key": "download_link"}
    			}
    		    }
    

    For nested keys, it could be "key": {"foo": {"bar": "download_link"}}

    A workflow is like:

    • Call activate_license for a given website (only once) /?edd_action=activate_license&license=0123456789abcdf&name=package-slug&url=https%3A//my.domain.tld
    • Set dist.url to https://package-provider.tld/edd_url?edd_action=get_version&license=0123456789abcdf&name=foobar&url=https%3A//my.domain.tld

    (@junaidbhura? In case you think this PR, if generic enough, could make composer-wp-pro-plugins somehow redundant?)

    opened by drzraf 5
  • Support plugins served by EDD

    Support plugins served by EDD

    @ffraenz What do you think about supporting EDD?

    Basically you POST once and receive the temporary download URL.

    This is the documentation of plugin licensing https://docs.easydigitaldownloads.com/article/384-software-licensing-api the Getting version information section

    opened by szepeviktor 7
Releases(v5.0.1)
  • v5.0.1(Oct 30, 2020)

    Fixed

    • Fixed an issue where a missing .env file would result in an endless loop in Windows environments (#34).
    • Fixed an issue where an exception gets thrown dealing with all numeric version numbers (#35).
    Source code(tar.gz)
    Source code(zip)
  • v5.0.0(Oct 26, 2020)

    I announce the immediate availability of v5.0.0.

    If you use vlucas/phpdotenv in your project, make sure you upgrade to ^4.1 or ^5.2 beforehand to avoid conflicts.

    Composer 2 just got real 🎉

    Added

    • Support for Composer 2.x has been added while maintaining support for Composer 1.x (#25).

    Changed

    • Support for vlucas/phpdotenv versions ^4.1 and ^5.2 has been added (#29).
    • .env files can now be placed in directories above the project folder, at custom locations and with custom names (#26).
    • The plugin code has been refactored to increase extensibility by dependent packages.

    Thank you so much, @mcaskill, @szepeviktor, @GrahamCampbell and @Seldaek. You rock!

    Source code(tar.gz)
    Source code(zip)
  • v4.0.0(Feb 20, 2020)

  • v3.0.1(Nov 7, 2019)

    Fixed

    Fixed an exception being raised when a package dist URL is set to NULL. Packages with absent dist URLs now get treated like packages without placeholders – they get ignored. Versions ^2.0 are not affected by this issue.

    Source code(tar.gz)
    Source code(zip)
  • v3.0.0(Oct 22, 2019)

    Upgrading from previous versions should only introduce breaking changes for undesired edge cases.

    Changed

    • .env files are now loaded without actually setting environment variables (#12).
    • If the exact version number is already part of the dist URL the version hash is no longer being added (#9).
    • The {%version} placeholder is now case insensitive (e.g. {%VERSION}).
    • PHP < 7.1 is no longer supported.
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Jan 30, 2019)

  • v1.0.2(Sep 15, 2018)

  • v1.0.1(Jul 23, 2018)

Owner
Fränz Friederes
Founder of @wierkstudio, Web Engineer, Computer Science student at Humboldt University of Berlin, Interaction Design graduate, He/Him/His 🏳️‍🌈
Fränz Friederes
Integrates Composer into monolithic repositories with many packages.

Composer Monorepo Plugin Note: this project is still experimental. Please provide feedback! This plugin adds support for Monorepos when using Compose

Benjamin Eberlei 303 Nov 28, 2022
WPCloudDeploy is a WordPress plugin that allows you to easily deploy servers at major cloud-server providers and then install apps

WPCloudDeploy is a WordPress plugin that allows you to easily deploy servers at major cloud-server providers and then install apps

WPCloudDeploy 41 Dec 24, 2022
This Plugin is used to install and activate multiple plugins in one go. I was facing problem uploading plugins one by one so I developed this to solve my problem. Hope you will enjoy using this plugin.

=== Bulk Plugin Installer === Contributors: jawadarshad Donate link: https://jawadarshad.io/ Tags: bulk plugin installer, import multiple plugins, up

Muhammad Jawad Arshad 2 Sep 20, 2022
🚀WordPress Plugin Boilerplate using modern web techs like TypeScript, SASS, and so on... on top of a local development environment with Docker and predefined GitLab CI for continous integration and deployment!

WP React Starter: WordPress React Boilerplate DEPRECATED: WP React Starter was a "research project" of devowl.io for the development of our WordPress

devowl.io GmbH 344 Jan 1, 2023
❓ A WordPress plugin to display your site's environment type in the admin bar

Where A WordPress plugin to display your site's environment type in the admin bar. Available Filters where_env_should_add_env_type - Defaults to true

Brad Parbs 7 Mar 29, 2022
Automattic 10.7k Jan 2, 2023
Integrating Laravel into WordPress

WordPress Laravel Bootstrap A WordPress plugin helps you use functions, methods, libraries of Laravel in any WordPress projects Requiments Laravel >=

Duc Le 54 Feb 15, 2022
A tool box of integrations for Cardano & WordPress all packaged into a neat plugin.

CardanoPress A tool box of integrations for Cardano & WordPress all packaged into a neat plugin. This plugin allows you to integrate various Cardano b

Peter Bui 38 Oct 4, 2022
Wordpress integrated with Laravel via Composer. Together, but independents.

Wordpress integrated with Laravel via Composer. Atention! The branch master is no longer manteined. Now I'm working on branch light. Not booting Larav

Bruno Barros 20 Nov 29, 2022
A simple scaffold used for what's needed to spin up a Composer-based WordPress plugin.

A simple scaffold used for what's needed to spin up a Composer-based WordPress plugin.

Tom McFarlin 29 Dec 29, 2022
Laravel Blog Package. Easiest way to add a blog to your Laravel website. A package which adds wordpress functionality to your website and is compatible with laravel 8.

Laravel Blog Have you worked with Wordpress? Developers call this package wordpress-like laravel blog. Contact us for any customization: [email protected]

Binshops 279 Dec 28, 2022
A package that makes creating WordPress settings pages a breeze.

WP Settings This package aims to make it easier to create settings pages for WordPress plugins. Typically, you would use the Settings API or write som

Jeffrey van Rossum 43 Nov 24, 2022
A WordPress package for updating custom plugins and themes based on an API response from a custom update server.

WordPress Update Handler A WordPress package for updating custom plugins and themes based on an JSON REST API response from a custom update server. Ch

WP Forge 7 Oct 5, 2022
Python package to easily work with selenium and manage tabs effectively.

Simple Selenium The aim of this package is to quickly get started with working with selenium for simple browser automation tasks. Installation Install

Vishal Kumar Mishra 1 Oct 27, 2021
A Laravel URL Shortener package that provides URL redirects with optionally protected URL password, URL expiration, open limits before expiration

A Laravel URL Shortener package that provides URL redirects with optionally protected URL password, URL expiration, open limits before expiration, ability to set feature activation dates, and click tracking out of the box for your Laravel applications.

YorCreative 53 Jan 4, 2023
Preferences are configuration variables that are user-managed for which we cannot rely upon container parameters or environment variables.

Preferences Preferences are configuration variables that are meant to be user managed for which we cannot rely upon container parameters or environmen

Makina Corpus 1 Feb 7, 2022
A composer plugin, to install differenty types of composer packages in custom directories outside the default composer default installation path which is in the vendor folder.

composer-custom-directory-installer A composer plugin, to install differenty types of composer packages in custom directories outside the default comp

Mina Nabil Sami 136 Dec 30, 2022
A easy way to install your basic yii projetc, we have encrypt database password in phpfile, my class with alot funtions to help you encrypt and decrypt and our swoole server install just run ./yii swoole/start and be happy!

Yii 2 Basic Project Template with swoole and Modules Yii 2 Basic Project Template is a skeleton Yii 2 application best for rapidly creating small proj

null 3 Apr 11, 2022
Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.

PHP dotenv Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically. Why .env? You should never store sensitive credentials

Vance Lucas 12.3k Jan 7, 2023