CINXE.COM
Private Packagist for Vendors
<!DOCTYPE html> <html class="no-js" lang="en" data-turbo="false"> <head> <meta charset="utf-8" /> <meta http-equiv="x-ua-compatible" content="ie=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Private Packagist for Vendors</title> <link rel="stylesheet" href="/fonts/fallback/fonts-v1.css"> <link rel="stylesheet" href="/build/fontawesome.127c1b29.css"> <link rel="canonical" href="https://packagist.com/vendors" /> <link rel="stylesheet" href="/build/app.6734150c.css"> <link rel="shortcut icon" href="/favicon.ico" /> <meta property="og:title" content="Private Packagist for Vendors" /> <meta property="og:description" content="Composer package archive as a service for PHP" /> <meta property="og:image" content="https://packagist.com/img/logo-raster.png" /> <meta property="og:site_name" content="Private Packagist" /> <meta property="og:url" content="https://packagist.com/vendors" /> <script src="/build/runtime.9f73ca32.js" defer></script><script src="/build/537.c4a61d21.js" defer></script><script src="/build/196.61c42165.js" defer></script><script src="/build/308.93176a50.js" defer></script><script src="/build/358.5fe2d5e7.js" defer></script><script src="/build/app.662f0355.js" defer></script> </head> <body class="page" > <header class="landingpage-header"> <div class="top-bar"> <div class="row column"> <div class="row"> <div class="top-bar__title columns shrink"> <span class="hide-for-large mobile-main-menu"> <button class="menu-icon light js-menu-toggle" type="button"></button> </span> <a href="/" class="logo-wrap mr1"> <img src="/img/logo-right.svg" class="logo-img-nav" /> <div class="logo-text">Private Packagist </div> </a> </div> <div id="responsive-menu" class="columns"> <div class="row"> <div class="top-bar__left columns"> <ul class="dropdown menu align-right" data-dropdown-menu> <li class="show-for-large"> <div class="dropdown-button"> <a class="dropdown"> <div class="top-bar__link ">Features <i class="fa-solid fa-caret-down"></i></div> </a> <div class="dropdown-menu left-aligned"> <div class="dropdown-menu-item"> <a class="dropdown-link" href="/features/private-vcs-packages">Private Packages</a> </div> <div class="dropdown-menu-item"> <a class="dropdown-link" href="/features/mirroring-composer-packages">Package Mirroring</a> </div> <div class="dropdown-menu-item"> <a class="dropdown-link" href="/features/security-monitoring">Security Monitoring</a> </div> <div class="dropdown-menu-item"> <a class="dropdown-link" href="/features/update-review">Update Review</a> </div> <div class="dropdown-menu-item"> <a class="dropdown-link" href="/features/license-review">License Review</a> </div> <div class="dropdown-menu-item"> <a class="dropdown-link" href="/features/conductor">Conductor</a> </div> </div> </div> </li> <li class="hide-for-large"> <button data-toggle="mobile-features features-nav-toggle" class="top-bar__link toggle-button">Features <i id="features-nav-toggle" class="fa-solid fa-caret-down dib" data-toggler=".rotate-180"></i></button> <ul id="mobile-features" class="hide" data-toggler=".hide"> <li> <a class="dropdown-link" href="/features/private-vcs-packages">Private Packages</a> </li> <li> <a class="dropdown-link" href="/features/mirroring-composer-packages">Package Mirroring</a> </li> <li> <a class="dropdown-link" href="/features/security-monitoring">Security Monitoring</a> </li> <li> <a class="dropdown-link" href="/features/update-review">Update Review</a> </li> <li> <a class="dropdown-link" href="/features/license-review">License Review</a> </li> <li> <a class="dropdown-link" href="/features/conductor">Conductor</a> </li> </ul> </li> <li class="show-for-large"> <div class="dropdown-button"> <a class="dropdown"> <div class="top-bar__link active">Solutions <i class="fa-solid fa-caret-down"></i></div> </a> <div class="dropdown-menu left-aligned"> <div class="dropdown-menu-item"> <a class="dropdown-link" href="/agencies">For Agencies</a> </div> <div class="dropdown-menu-item"> <a class="dropdown-link active" href="/vendors">For Vendors</a> </div> </div> </div> </li> <li class="hide-for-large"> <button data-toggle="mobile-products products-nav-toggle" class="top-bar__link toggle-button active">Solutions <i id="products-nav-toggle" class="fa-solid fa-caret-down dib" data-toggler=".rotate-180"></i></button> <ul id="mobile-products" class="hide" data-toggler=".hide"> <li> <a class="dropdown-link" href="/agencies">For Agencies</a> </li> <li> <a class="dropdown-link active" href="/vendors">For Vendors</a> </li> </ul> </li> <li><a href="/pricing" class="top-bar__link">Pricing</a></li> <li><a href="/docs" class="top-bar__link">Docs</a></li> </ul> </div> <div class="top-bar-right columns shrink"> <ul class="dropdown menu" data-dropdown-menu> <li><a data-open="loginModal" class="top-bar__link">Login</a></li> </ul> </div> </div> </div> </div> </div> </div> </header> <section class="main-content"> <div > <div class="row column job-progress hide" data-progress-url="/jobs/poll"> <p class="callout"> <i class="fa-solid fa-spinner fa-spin-pulse" aria-hidden="true"></i> <span class="sr-only">Loading...</span> <span class="js-running-generic-msg">Background job is running.</span> <span class="js-running-update-message hide" data-job-id=""></span> </p> </div> <div class="landingpage-container"> <div class="section-hero"> <div class="row"> <div class="small-12 medium-6 columns"> <img src="/img/vendors/header-image.png" srcset="/img/vendors/header-image.png 1x, /img/vendors/header-image@2x.png 2x, /img/vendors/header-image@3x.png 3x" /> </div> <div class="small-12 medium-6 columns"> <h1>Private Packagist for Vendors</h1> <p>Let your customers install their packages with Composer using a unique URL and an authentication token.</p> <p>Manage package access, versions and license expiration through our API or use our web interface including detailed installation analytics.</p> <div class="section-hero--cta"> <h1> <a class="button success large" data-open="loginModal">Start Free Trial</a> </h1> <p class="mb0"> <small>Get in touch with us: send an e-mail to <a href="mailto:contact@packagist.com">contact@packagist.com</a> or <a class="intercom-open">chat</a> with us.</small> </p> </div> </div> </div> </div> <div class="page__section"> <div class="row"> <div class="small-12 medium-6 columns"> <div class="text-icon__block"> <img class="section-icon" src="/img/vendors/icon-section-setup.svg" /> <h3>Integrate Private Packagist</h3> <p>Synchronize your packages with GitHub, GitLab or Bitbucket, or add packages from any other Git, SVN or Mercurial repository. You can use JSON to make any ZIP file available through Composer.</p> <p>Use our API to integrate Private Packagist for Vendors with your existing PHP package shop. You can manage customers, packages and version constraints, and then retrieve credentials to provide them to your customers.</p> <p>View our <a href="https://packagist.com/docs/setup-vendor">Setup Documentation</a> and our <a href="https://packagist.com/docs/api">API Documentation</a>.</p> </div> </div> <div class="small-12 medium-6 columns vendors-img--pathline"> <img class="marketing__img" src="/img/vendors/section-1.svg" /> </div> </div> <div class="row"> <div class="small-12 medium-6 columns"> <div class="sample__tabs js-tabs" data-tabs-for="api-samples"> <div class="sample__tabs--item"> <i class="fa-solid fa-user sample__tabs--icon"></i> <span>Create a customer</span> </div> <div class="sample__tabs--item active"> <i class="fa-solid fa-unlock sample__tabs--icon"></i> <span>Grant package access</span> </div> <div class="sample__tabs--item"> <i class="fa-solid fa-address-card sample__tabs--icon"></i> <span>Get customer info</span> </div> </div> </div> <div class="small-12 medium-6 columns vendors-img--pathline" id="api-samples"> <pre class="marketing-tab code-sample"> $customer = $client ->customers() ->create('Acme Web Inc.');</pre> <pre class="marketing-tab code-sample active"> $client->customers()->addOrUpdatePackages( $customer['id'], [[ 'name' => 'my-vendor/cool-package', 'versionConstraint' => '^1.0', 'expirationDate' => (new \DateTime('+1 year'))->format('c'), 'minimumAccessibleStability' => 'beta', ]] );</pre> <pre class="marketing-tab code-sample"> $client->customers()->show($customer['id']); ... 'composerRepository' => [ 'url' => 'https://my-vendor.repo.packagist.com', 'user' => 'token', 'token' => 'a6addb89a67b2822d352d113', ...</pre> </div> </div> </div> <hr class="marketing__separator"> <div class="page__section"> <div class="row"> <div class="small-12 medium-6 columns"> <div class="text-icon__block"> <img class="section-icon" src="/img/vendors/icon-section-updates.svg" /> <h3>Limit Updates by Time, Version, or Stability</h3> <p>Grant customers access to specific packages, limit which versions they can access and define expiration times for updates depending on your contracts.</p> <p>Group packages in <a href="/docs/setup-vendor#using-vendor-bundles-to-manage-customer-access-to-packages">vendor bundles</a> to assign the same packages to many customers with ease.</p> </div> </div> <div class="small-12 medium-6 columns vendors-img--pathline"> <img class="marketing__img" src="/img/vendors/section-2.svg" /> </div> </div> </div> <hr class="marketing__separator"> <div class="page__section"> <div class="row"> <div class="small-12 medium-6 columns"> <div class="text-icon__block"> <img class="section-icon" src="/img/vendors/icon-section-customer.svg" /> <h3>Customer Installation</h3> <p>Integrate Private Packagist for Vendors with your existing PHP package shop using our API. Manage customers, packages and version constraints, then retrieve credentials to provide them to your customers.</p> </div> </div> <div class="small-12 medium-6 columns vendors-img--pathline"> <img class="marketing__img" src="/img/vendors/section-3.svg" /> </div> </div> <div class="row"> <div class="small-12 medium-6 columns"> <div class="sample__tabs js-tabs" data-tabs-for="install-samples"> <div class="sample__tabs--item active"> <i class="fa-solid fa-fingerprint sample__tabs--icon"></i> <span>Customer authenticates</span> </div> <div class="sample__tabs--item"> <i class="fa-solid fa-file-lines sample__tabs--icon"></i> <span>Customer composer.json</span> </div> <div class="sample__tabs--item"> <i class="fa-solid fa-desktop-arrow-down sample__tabs--icon"></i> <span>Customer installs package</span> </div> </div> </div> <div class="small-12 medium-6 columns" id="install-samples"> <pre class="marketing-tab code-sample active"> composer config --global --auth http-basic.my-vendor.repo.packagist.com token a6addb89a67b2822d352d113</pre> <pre class="marketing-tab code-sample"> "repositories": [ { "type": "composer", "url": "https://my-vendor.repo.packagist.com/acme/" } ]</pre> <pre class="marketing-tab code-sample"> composer require my-vendor/cool-package</pre> </div> </div> </div> <hr class="marketing__separator"> <div class="page__section"> <div class="row"> <div class="small-12 medium-6 columns"> <div class="text-icon__block"> <img class="section-icon" src="/img/vendors/icon-section-details.svg" /> <h3>Detailed Installation Statistics</h3> <p>Analyze and report customer usage of your packages and specific versions with our installation statistics to decide when to discontinue support for old versions or who to contact about upgrades.</p> </div> </div> <div class="small-12 medium-6 columns"> <img class="marketing__img marketing__screenshot" src="/img/vendors/browser-stats.png" srcset="/img/vendors/browser-stats.png 1x, /img/vendors/browser-stats@2x.png 2x, /img/vendors/browser-stats@3x.png 3x" /> </div> </div> </div> <div class="page__section--impact"> <div class="row align-middle"> <div class="small-12 medium-6 column"> <div class="pricing-slider-box js-pricing-slider"> <div class="pricing-slider-wrap"> <form> <input type="range" name="pricing-slider" class="pricing-slider js-pricing-slider-customers" value="59" min="1" max="100"> <output name="pricing-slider" id="pricing-slider-customers" class="js-pricing-slider-customers-out">59</output> <span>Customers</span> </form> </div> <div class="pricing-slider-content"> <p class="pricing-slider-price">€<span class="js-pricing-slider-total" data-base-price="59">59</span></p> <p>Total cost per month</p> </div> <a class="button primary success large" data-open="loginModal">Start Free trial</a> </div> </div> <div class="small-12 medium-6 column"> <h1> Pricing <img src="/img/vendors/package.png" srcset="/img/vendors/package.png 1x, /img/vendors/package@2x.png 2x, /img/vendors/package@3x.png 3x" /> </h1> <p>You pay <strong>€1 per customer</strong> per month.</p> <p>The base price is €59/month which includes the first 59 customers. Annual subscriptions available.</p> <p>Working by yourself? <a href="mailto:contact@packagist.com?subject=Single-user+Discount">Contact us for a single-user discount</a>.</p> <p>More than 100 customers? <a href="mailto:contact@packagist.com?subject=Volume+Discount">Get in touch for volume discounts</a>.</p> <p> <span class="hide js-startup-info">Just getting started? <a href="mailto:contact@packagist.com?subject=Startup+Discount">Ask us for information about a startup discount</a>.</span> </p> </div> </div> </div> <div class="page__section"> <div class="row"> <div class="small-12 columns"> <h1 class="section-title text-center">We value our customers’ feedback</h1> </div> <div class="testimonial-wrap small-12 medium-6 large-4 columns"> <div class="testimonial"> <div class="testimonial-text"> <p>After evaluating different options, we have found Private Packagist to be the most efficient and customer-friendly way to distribute paid packages.</p> </div> <div class="testimonial-credits"> <div class="testimonial-avatar"> <img class="avatar-img" src="/img/vendors/testimonials/pawel-jedrzejewski.jpg" /> </div> <div class="testimonial-details"> <div class="testimonial-name"> Paweł Jędrzejewski </div> <div class="testimonial-company"> Founder of Sylius </div> </div> </div> </div> </div> <div class="testimonial-wrap small-12 medium-6 large-4 columns"> <div class="testimonial"> <div class="testimonial-text"> <p>Private Packagist makes our lives a lot easier. It's a reliable, fast and flexible system to distribute our continuously growing amount of (100+) packages. They even built in a custom feature we needed within a day! Service doesn't get better than that.</p> </div> <div class="testimonial-credits"> <div class="testimonial-avatar"> <img class="avatar-img" src="/img/vendors/testimonials/willem-wigman.jpg" /> </div> <div class="testimonial-details"> <div class="testimonial-name"> Willem Wigman </div> <div class="testimonial-company"> Creator of Hyvä </div> </div> </div> </div> </div> <div class="testimonial-wrap small-12 medium-6 large-4 columns"> <div class="testimonial"> <div class="testimonial-text"> <p>Private Packagist for Vendors with its API and Composer allowed us to provide our WHMCS customers with an innovative update solution while significantly optimizing our development workflows. The Packagist team has been amazing in supporting us with integrating their service into our system.</p> </div> <div class="testimonial-credits"> <div class="testimonial-avatar"> <img class="avatar-img" src="/img/vendors/testimonials/bjoern-strausmann.jpg" /> </div> <div class="testimonial-details"> <div class="testimonial-name"> Björn Strausmann </div> <div class="testimonial-company"> Director at Strausmann Services, ISP-Serverfarm.de </div> </div> </div> </div> </div> </div> </div> <div class="section-gray"> <div class="row columns"> <p class="text-center"> Do you have any questions or are you missing anything? Contact us at <a href="mailto:contact@packagist.com">contact@packagist.com</a> or <a class="intercom-open">chat with us</a>. </p> <div class="text-center"> <a class="button primary success large" data-open="loginModal">Start Free Trial</a> </div> </div> </div> </div> </div> </section> <footer> <div class="row"> <div class="footer-container"> <div class="footer-links"> <div class="footer-links-column"> <a href="/" class="footer-link footer-link-logo logo-wrap"> <img src="/img/logo-right.svg" class="logo-img-tiny" /> <div class="logo-text">Private Packagist</div> </a> <a href="/about/" class="footer-link">About</a> <a href="/about/careers" class="footer-link">Careers</a> <a href="https://blog.packagist.com" class="footer-link">Blog</a> </div> <div class="footer-links-column"> <a href="/about/terms" class="footer-link">Terms</a> <a href="/about/privacy" class="footer-link">Privacy</a> <a href="/about/imprint" class="footer-link">Imprint</a> <a href="https://status.packagist.com/" class="footer-link">Status</a> </div> </div> <div class="footer-links-social"> <a href="mailto:contact@packagist.com" class="footer-icon"><i class="fa-solid fa-envelope"></i></a> <a href="https://twitter.com/packagist" class="footer-icon"><i class="fa-brands fa-x-twitter"></i></a> <a href="https://www.linkedin.com/company/packagist" class="footer-icon"><i class="fa-brands fa-linkedin"></i></a> </div> </div> </div> </footer> <div class="reveal modal tiny" id="loginModal" data-reveal> <div class="row"> <div class="modal-header columns small-12 medium-12 large-12"> <div class="logo-wrap"> <img src="/img/logo-right.svg" class="logo-img-small" /> <div class="logo-text"> Private Packagist </div> </div> <button class="close-button" data-close aria-label="Close modal" type="button"> <span aria-hidden="true">×</span> </button> </div> <div class="columns small-12 medium-12 large-12"> <h3>Login to proceed</h3> <p> <a class="button expanded" href="https://packagist.com/oauth/login/bitbucket" > <img src="/img/service-bitbucket.svg" class="service-icon" /> Bitbucket </a> </p> <p> <a class="button expanded" href="https://packagist.com/oauth/login/github" > <img src="/img/service-github.svg" class="service-icon" /> GitHub </a> </p> <p> <a class="button expanded" href="https://packagist.com/oauth/login/gitlab" > <img src="/img/service-gitlab.svg" class="service-icon" /> GitLab </a> </p> <p> <a class="button expanded" href="/login"> <img src="/img/service-email.svg" class="service-icon" /> Log in or register with email/password </a> </p> <p><a href="/resetting/request">Can't log in via OAuth or forgot your password?</a></p> </div> </div> </div> <script>var authed = false;</script> <script> function initPage() { $(function() { }); } </script> <script> window.intercomSettings = { app_id: "v4u8x5hp" }; (function(){var w=window;var ic=w.Intercom;if(typeof ic==="function"){ic('reattach_activator');ic('update',intercomSettings);}else{var d=document;var i=function(){i.c(arguments)};i.q=[];i.c=function(args){i.q.push(args)};w.Intercom=i;function l(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='https://widget.intercom.io/widget/v4u8x5hp';var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);}if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}}})() </script> </body> </html>