๐Ÿ“ฆ๐Ÿ”A lightweight private proxy registry build in Node.js

Overview

verdaccio logo

verdaccio gif

Version 6 (Development branch)

Looking for Verdaccio 5? Check branch 5.x.

Verdaccio is a simple, zero-config-required local private npm registry. No need for an entire database just to get started! Verdaccio comes out of the box with its own tiny database, and the ability to proxy other registries (eg. npmjs.org), caching the downloaded modules along the way. For those looking to extend their storage capabilities, Verdaccio supports various community-made plugins to hook into services such as Amazon's s3, Google Cloud Storage or create your own plugin.

verdaccio (latest) verdaccio (downloads) docker pulls backers stackshare

discord MIT Crowdin

Twitter followers Github

Install

Install with npm:

npm install --global verdaccio@6-next --https://registry.verdaccio.org/

Published on a temporary registry while setup is ready to publish on npmjs

Donations

Verdaccio is run by volunteers; nobody is working full-time on it. If you find this project to be useful and would like to support its development, consider making a donation - your logo might end up in this readme. ๐Ÿ˜‰

Donate ๐Ÿ’ต ๐Ÿ‘๐Ÿป starting from $1/month or just one single contribution.

What does Verdaccio do for me?

Use private packages

If you want to use all benefits of npm package system in your company without sending all code to the public, and use your private packages just as easy as public ones.

Cache npmjs.org registry

If you have more than one server you want to install packages on, you might want to use this to decrease latency (presumably "slow" npmjs.org will be connected to only once per package/version) and provide limited failover (if npmjs.org is down, we might still find something useful in the cache) or avoid issues like How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript, Many packages suddenly disappeared or Registry returns 404 for a package I have installed before.

Link multiple registries

If you use multiples registries in your organization and need to fetch packages from multiple sources in one single project you might take advance of the uplinks feature with Verdaccio, chaining multiple registries and fetching from one single endpoint.

Override public packages

If you want to use a modified version of some 3rd-party package (for example, you found a bug, but maintainer didn't accept pull request yet), you can publish your version locally under the same name. See in detail here.

E2E Testing

Verdaccio has proved to be a lightweight registry that can be booted in a couple of seconds, fast enough for any CI. Many open source projects use verdaccio for end to end testing, to mention some examples, create-react-app, mozilla neutrino, pnpm, storybook, alfresco or eclipse theia. You can read more in dedicated article to E2E in our blog.

Talks

Node.js Dependency Confusion Attacks & Vulnerabilities in Go Binaries.

RSVP to join the talk.

verdaccio openjsworld

You might want to check out as well our previous talks:

Get Started

Run in your terminal

verdaccio

You would need set some npm configuration, this is optional.

$ npm set registry http://localhost:4873/

For one-off commands or to avoid setting the registry globally:

NPM_CONFIG_REGISTRY=http://localhost:4873 npm i

Now you can navigate to http://localhost:4873/ where your local packages will be listed and can be searched.

Warning: Verdaccio does not currently support PM2's cluster mode, running it with cluster mode may cause unknown behavior.

Publishing

1. create a user and log in

npm adduser --registry http://localhost:4873

if you use HTTPS, add an appropriate CA information ("null" means get CA list from OS)

$ npm set ca null

2. publish your package

npm publish --registry http://localhost:4873

This will prompt you for user credentials which will be saved on the verdaccio server.

Docker

Below are the most commonly needed information, every aspect of Docker and verdaccio is documented separately

docker pull verdaccio/verdaccio:nightly-master

Available as tags.

Running verdaccio using Docker

To run the docker container:

docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio

Docker examples are available in this repository.

Compatibility

Verdaccio aims to support all features of a standard npm client that make sense to support in private repository. Unfortunately, it isn't always possible.

Basic features

  • Installing packages (npm install, npm upgrade, etc.) - supported
  • Publishing packages (npm publish) - supported

Advanced package control

  • Unpublishing packages (npm unpublish) - supported
  • Tagging (npm tag) - supported
  • Deprecation (npm deprecate) - supported

User management

  • Registering new users (npm adduser {newuser}) - supported
  • Change password (npm profile set password) - supported
  • Transferring ownership (npm owner add {user} {pkg}) - not supported, PR-welcome
  • Token (npm token) - supported

Miscellany

  • Searching (npm search) - supported (cli / browser)
  • Ping (npm ping) - supported
  • Starring (npm star, npm unstar, npm stars) - supported

Security

  • npm/yarn audit - supported

Report a vulnerability

If you want to report a security vulnerability, please follow the steps which we have defined for you in our security policy.

Core Team

Juan Picado Ayush Sharma Sergio Hg
jotadeveloper ayusharma sergiohgz
@jotadeveloper @ayusharma_ @sergiohgz
Priscila Oliveria Daniel Ruf
priscilawebdev DanielRuf
@priscilawebdev @DanielRufde

You can find and chat with then over Discord, click here or follow them at Twitter.

Who is using Verdaccio?

๐Ÿค“ Don't be shy, you also can be in the list.

Open Collective Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

sponsor sponsor sponsor sponsor sponsor sponsor sponsor sponsor sponsor sponsor

Open Collective Backers

Thank you to all our backers! ๐Ÿ™ [Become a backer]

backers

Special Thanks

Thanks to the following companies to help us to achieve our goals providing free open source licenses.

jetbrain crowdin browserstack

Verdaccio also is part of to the Docker Open Source Program.

Contributors

This project exists thanks to all the people who contribute. [Contribute].

contributors

FAQ / Contact / Troubleshoot

If you have any issue you can try the following options, do no desist to ask or check our issues database, perhaps someone has asked already what you are looking for.

License

Verdaccio is MIT licensed

The Verdaccio documentation and logos (excluding /thanks, e.g., .md, .png, .sketch) files within the /assets folder) is Creative Commons licensed.

Comments
  • Unexpected EOF while installing/downloading large packages

    Unexpected EOF while installing/downloading large packages

    My reason:

    Installing larger packages (this one in this scenario) fails consistently from verdaccio with an unexpected EOF. The package is published to the local verdaccio server, not a redirection to the public registry. It installs fine from the public registry at https://registry.npmjs.org.

    Even a simple wget ends abruptly

    HTTP request sent, awaiting response... 
      HTTP/1.1 200 OK
      X-Powered-By: verdaccio/2.3.4
      Access-Control-Allow-Origin: *
      Content-Type: application/octet-stream
      Content-Length: 137211454
      X-Status-Cat: http://flic.kr/p/aVuVsF
      Date: Mon, 21 Aug 2017 11:43:35 GMT
      Connection: keep-alive
    Length: 137211454 (131M) [application/octet-stream]
    Saving to: โ€˜react-native-awesome-card-io-0.6.6.tgz.2โ€™
    
    react-native-awesome-card-io-0.6.6.tgz.2        65%[======================================================================>                                      ]  85.73M  13.6MB/s    in 6.1s    
    
    2017-08-21 17:15:23 (14.1 MB/s) - Connection closed at byte 89897191. Retrying.
    

    Steps to reproduce:

    • Publish the package to Verdaccio
    • Try installing it with yarn or npm

    Issue is occurring when running the latest docker image, or on the host system with verdaccio installed through npm. Issue has persisted on both a Linux host and a macOS host.

    It seems to occur on an erratic timeout basis (~7-10 seconds) because the download completes successfully if the download speed is high enough. The byte at which the connection closes is also not constant.

    App Version:

    2.3.4

    Config file:

    Default config file with only max_body_size increased to 300mb allow publishing packages of this size.

    issue: bug Docker topic: proxy bug: fixed outdated 
    opened by yogeshwar-20 53
  • feat!: replace deprecated request dependency by got

    feat!: replace deprecated request dependency by got

    This is a big refactoring of the core, fetching dependencies, improve code, more tests and better stability. This is essential for the next release, will take some time but would allow modularize more the core.

    Notes

    • Remove deprecated request by other got, retry improved, custom Agent ( got does not include it built-in)
    • Remove async dependency from storage (used by core) it was linked with proxy somehow safe to remove now
    • Refactor with promises instead callback wherever is possible
    • ~Document the API~
    • Improve testing, integration tests
    • Bugfix
    • Clean up old validations
    • Improve performance
    • Several left overts, naming, skipped test will be addressed in following PRs

    ๐Ÿ’ฅ Breaking changes

    • Plugin API methods were callbacks based are returning promises, this will break current storage plugins, check documentation for upgrade.
    • Write Tarball, Read Tarball methods parameters change, a new set of options like AbortController signals are being provided to the addAbortSignal can be internally used with Streams when a request is aborted. eg: addAbortSignal(signal, fs.createReadStream(pathName));
    • @verdaccio/streams stream abort support is legacy is being deprecated and soon will be removed
    • Remove AWS and Google Cloud packages for future refactoring future https://github.com/verdaccio/verdaccio/pull/2574

    Fix #1807 and #1225

    I could not fix all possible regresions on this PR, I'll continue with small ones :-) otherwise this get for ever.

    feat: breaking-change dev: refactor fastify migration 
    opened by juanpicado 46
  • Verdaccio keeps only package.json and not package tarball

    Verdaccio keeps only package.json and not package tarball

    Describe the bug Verdaccio keeps only package.json in local storage and not package tarballs. Verdaccio is run on Windows Server 2019.

    To Reproduce

    1. Install verdaccio on Windows Server 2019
    2. Apply provided configuration file
    3. Run verdaccio
    4. Use client to download any npm package passing verdaccio as registry
    5. Package tarballs are not being cached

    Expected behavior Verdaccio should cache package tarballs on local storage.

    Configuration File (cat ~/.config/verdaccio/config.yaml)

    config.yaml:

    # This is the default config file. It allows all users to do anything,
    # so don't use it on production systems.
    #
    # Look here for more config file examples:
    # https://github.com/verdaccio/verdaccio/tree/master/conf
    #
    
    # path to a directory with all packages
    storage: C:\node_packages
    # path to a directory with plugins to include
    plugins: ./plugins
    
    web:
      title: Verdaccio
      # comment out to disable gravatar support
      # gravatar: false
      # by default packages are ordercer ascendant (asc|desc)
      # sort_packages: asc
    
    auth:
      htpasswd:
        file: ./htpasswd
        # Maximum amount of users allowed to register, defaults to "+inf".
        # You can set this to -1 to disable registration.
        # max_users: 1000
    
    # a list of other known repositories we can talk to
    uplinks:
      npmjs:
        url: https://registry.npmjs.org/
        cache: true
    
    packages:
      '@*/*':
        # scoped packages
        access: $all
        publish: $authenticated
        unpublish: $authenticated
        proxy: npmjs
    
      '**':
        # allow all users (including non-authenticated users) to read and
        # publish all packages
        #
        # you can specify usernames/groupnames (depending on your auth plugin)
        # and three keywords: "$all", "$anonymous", "$authenticated"
        access: $all
    
        # allow all known users to publish/publish packages
        # (anyone can register by default, remember?)
        publish: $all
    
        # if package is not available locally, proxy requests to 'npmjs' registry
        proxy: npmjs
    
    # You can specify HTTP/1.1 server keep alive timeout in seconds for incoming connections.
    # A value of 0 makes the http server behave similarly to Node.js versions prior to 8.0.0, which did not have a keep-alive timeout.
    # WORKAROUND: Through given configuration you can workaround following issue https://github.com/verdaccio/verdaccio/issues/301. Set to 0 in case 60 is not enough.
    server:
      keepAliveTimeout: 60
    
    middlewares:
      audit:
        enabled: true
    
    # log settings
    logs:
      - { type: stdout, format: pretty, level: debug }
      #- {type: file, path: verdaccio.log, level: info}
    #experiments:
    #  # support for npm token command
    #  token: false
    
    listen: 0.0.0.0:4873
    

    Environment information

    C:\node_packages>verdaccio --info
    
    Environment Info:
    
      System:
        OS: Windows 10 10.0.17763
        CPU: (4) x64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
      Binaries:
        Node: 12.14.0 - C:\Program Files\nodejs\node.EXE
        npm: 6.13.4 - C:\Program Files\nodejs\npm.CMD`
    
    C:\node_packages>verdaccio --version
    4.4.0
    

    Debugging output Local storage listing:

    C:\node_packages>dir /s /b
    C:\node_packages\.verdaccio-db.json
    C:\node_packages\npm
    C:\node_packages\underscore
    C:\node_packages\npm\package.json
    C:\node_packages\underscore\package.json
    

    Verdaccio output:

     warn --- config file  - C:\Users\szymon.wilczek\AppData\Roaming\verdaccio\config.yaml
     warn --- Verdaccio started
     debug--- [local-storage/_sync]: init sync database
     debug--- [local-storage/_sync]: folder C:\node_packages created succeed
     debug--- [local-storage/_sync/writeFileSync]: sync write succeed
     debug--- [local-storage/_sync]: init sync database
     debug--- [local-storage/_sync]: folder C:\node_packages created succeed
     debug--- [local-storage/_sync/writeFileSync]: sync write succeed
     warn --- Plugin successfully loaded: verdaccio-htpasswd
     warn --- Plugin successfully loaded: verdaccio-audit
     warn --- http address - http://0.0.0.0:4873/ - verdaccio/4.4.0
     info <-- 10.80.57.156 requested 'GET /underscore'
     debug--- [local-storage/readPackage] read a package: underscore
     info --> making request: 'GET https://registry.npmjs.org/underscore'
     http --> 304, req: 'GET https://registry.npmjs.org/underscore' (streaming)
     http --> 304, req: 'GET https://registry.npmjs.org/underscore', bytes: 0/0
     debug--- [local-storage/readPackage] read a package: underscore
     debug-=- updating package underscore info
     debug--- [local-storage/savePackage] save a package: underscore
     http <-- 200, user: null(10.80.57.156), req: 'GET /underscore', bytes: 0/6705
     http <-- 200, user: null(10.80.57.156), req: 'GET /underscore', bytes: 0/6705
     info <-- 10.80.57.156 requested 'POST /-/npm/v1/security/audits/quick'
     http <-- 200, user: null(10.80.57.156), req: 'POST /-/npm/v1/security/audits/quick', bytes: 11747/151
     http <-- 200, user: null(10.80.57.156), req: 'POST /-/npm/v1/security/audits/quick', bytes: 11747/151
    

    npm -ddd prints: (please note I removed the verdaccio server address from the logs and changed it to '*')

    npm -ddd install underscore
    npm info it worked if it ends with ok
    npm verb cli [ 'C:\\Program Files (x86)\\Nodist\\v\\11.13.0\\node.exe',
    npm verb cli   'C:\\Program Files (x86)\\Nodist\\npmv\\6.9.0\\bin\\npm-cli.js',
    npm verb cli   '-ddd',
    npm verb cli   'install',
    npm verb cli   'underscore' ]
    npm info using [email protected]
    npm info using [email protected]
    npm verb npm-session 185704a84643ebeb
    npm sill install loadCurrentTree
    npm sill install readLocalPackageData
    npm http fetch GET 304 http://*:4873/underscore 233ms (from cache)
    npm sill pacote tag manifest for underscore@latest fetched in 240ms
    npm timing stage:loadCurrentTree Completed in 445ms
    npm sill install loadIdealTree
    npm sill install cloneCurrentTreeToIdealTree
    npm timing stage:loadIdealTree:cloneCurrentTree Completed in 1ms
    npm sill install loadShrinkwrap
    npm timing stage:loadIdealTree:loadShrinkwrap Completed in 110ms
    npm sill install loadAllDepsIntoIdealTree
    npm sill resolveWithNewModule [email protected] checking installable status
    npm sill removeObsoleteDep removing [email protected] from the tree as its been replaced by a newer version or is no longer required
    npm timing stage:loadIdealTree:loadAllDepsIntoIdealTree Completed in 90ms
    npm timing stage:loadIdealTree Completed in 244ms
    npm sill currentTree temp
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree | +-- [email protected]
    npm sill currentTree | `-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree | `-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree | `-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree | +-- [email protected]
    npm sill currentTree | `-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree | `-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree | `-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree | `-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree +-- [email protected]
    npm sill currentTree `-- [email protected]
    npm sill idealTree temp
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree | +-- [email protected]
    npm sill idealTree | `-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree | `-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree | `-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree | +-- [email protected]
    npm sill idealTree | `-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree | `-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree | `-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree | `-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree +-- [email protected]
    npm sill idealTree `-- [email protected]
    npm sill install generateActionsToTake
    npm timing stage:generateActionsToTake Completed in 13ms
    npm sill diffTrees action count 1
    npm sill diffTrees update [email protected]
    npm sill decomposeActions action count 10
    npm sill decomposeActions unbuild [email protected]
    npm sill decomposeActions remove [email protected]
    npm sill decomposeActions fetch [email protected]
    npm sill decomposeActions extract [email protected]
    npm sill decomposeActions preinstall [email protected]
    npm sill decomposeActions build [email protected]
    npm sill decomposeActions install [email protected]
    npm sill decomposeActions postinstall [email protected]
    npm sill decomposeActions finalize [email protected]
    npm sill decomposeActions refresh-package-json [email protected]
    npm sill install executeActions
    npm sill doSerial global-install 10
    npm verb correctMkdir C:\Users\szymon.wilczek\AppData\Roaming\npm-cache\_locks correctMkdir not in flight; initializing
    npm verb lock using C:\Users\szymon.wilczek\AppData\Roaming\npm-cache\_locks\staging-7d368c8e4ed0da7d.lock for C:\temp\node_modules\.staging
    npm sill doParallel extract 1
    npm sill extract [email protected]
    npm sill tarball trying underscore@latest by hash: sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==
    npm sill extract underscore@latest extracted to C:\temp\node_modules\.staging\underscore-f5db5b84 (14ms)
    npm timing action:extract Completed in 17ms
    npm sill doReverseSerial unbuild 10
    npm sill unbuild [email protected]
    npm info lifecycle [email protected]~preuninstall: [email protected]
    npm info lifecycle [email protected]~uninstall: [email protected]
    npm verb unbuild rmStuff [email protected] from C:\temp\node_modules
    npm info lifecycle [email protected]~postuninstall: [email protected]
    npm timing action:unbuild Completed in 2ms
    npm sill doSerial remove 10
    npm sill remove C:\temp\node_modules\underscore
    npm timing action:remove Completed in 3ms
    npm sill doSerial move 10
    npm sill doSerial finalize 10
    npm sill finalize C:\temp\node_modules\underscore
    npm timing action:finalize Completed in 1ms
    npm sill doParallel refresh-package-json 1
    npm sill refresh-package-json C:\temp\node_modules\underscore
    npm timing action:refresh-package-json Completed in 6ms
    npm sill doParallel preinstall 1
    npm sill preinstall [email protected]
    npm info lifecycle [email protected]~preinstall: [email protected]
    npm timing action:preinstall Completed in 0ms
    npm sill doSerial build 10
    npm sill build [email protected]
    npm info linkStuff [email protected]
    npm sill linkStuff [email protected] has C:\temp\node_modules as its parent node_modules
    npm timing action:build Completed in 0ms
    npm sill doSerial global-link 10
    npm sill doParallel update-linked 0
    npm sill doSerial install 10
    npm sill install [email protected]
    npm info lifecycle [email protected]~install: [email protected]
    npm timing action:install Completed in 0ms
    npm sill doSerial postinstall 10
    npm sill postinstall [email protected]
    npm info lifecycle [email protected]~postinstall: [email protected]
    npm timing action:postinstall Completed in 0ms
    npm verb unlock done using C:\Users\szymon.wilczek\AppData\Roaming\npm-cache\_locks\staging-7d368c8e4ed0da7d.lock for C:\temp\node_modules\.staging
    npm timing stage:executeActions Completed in 44ms
    npm timing stage:rollbackFailedOptional Completed in 1ms
    npm timing stage:runTopLevelLifecycles Completed in 790ms
    npm sill saveTree temp
    npm sill saveTree +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | `-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree | `-- [email protected]
    npm sill saveTree |   `-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | `-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | `-- [email protected]
    npm sill saveTree |   `-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree | `-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | | `-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | |   +-- [email protected]
    npm sill saveTree | |   +-- [email protected]
    npm sill saveTree | |   +-- [email protected]
    npm sill saveTree | |   +-- [email protected]
    npm sill saveTree | |   +-- [email protected]
    npm sill saveTree | |   `-- [email protected]
    npm sill saveTree | `-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree | `-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | | `-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | `-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree | `-- [email protected]
    npm sill saveTree |   `-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree | `-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | | `-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | `-- [email protected]
    npm sill saveTree |   `-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree | `-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | | `-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | | `-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | |   `-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | | +-- [email protected]
    npm sill saveTree | | | | `-- [email protected]
    npm sill saveTree | | | `-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | |   +-- [email protected]
    npm sill saveTree | |   +-- [email protected]
    npm sill saveTree | |   `-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | | `-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | | `-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | |   `-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | |   `-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | +-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | | `-- [email protected]
    npm sill saveTree | `-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree | +-- [email protected]
    npm sill saveTree | `-- [email protected]
    npm sill saveTree |   `-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree | `-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree +-- [email protected]
    npm sill saveTree `-- [email protected]
    npm sill install saveToDependencies
    npm WARN saveError ENOENT: no such file or directory, open 'C:\temp\package.json'
    npm info lifecycle undefined~preshrinkwrap: undefined
    npm info lifecycle undefined~shrinkwrap: undefined
    npm verb shrinkwrap skipping write for package-lock.json because there were no changes.
    npm info lifecycle undefined~postshrinkwrap: undefined
    npm WARN enoent ENOENT: no such file or directory, open 'C:\temp\package.json'
    npm verb enoent This is related to npm not being able to find a file.
    npm verb enoent 
    npm WARN temp No description
    npm WARN temp No repository field.
    npm WARN temp No README data
    npm WARN temp No license field.
    
    npm sill install printInstalled
    npm timing audit submit Completed in 565ms
    npm http fetch POST 200 http://*:4873/-/npm/v1/security/audits/quick 639ms
    npm timing audit body Completed in 75ms
    + [email protected]
    updated 1 package and audited 2748 packages in 1.389s
    found 0 vulnerabilities
    
    npm verb exit [ 0, true ]
    npm timing npm Completed in 1696ms
    npm info ok 
    
    issue: bug issue: invalid issue: wontfix outdated topic: offline-mode 
    opened by swilczek 37
  • Verdaccio 2.4 returns wrong package.json

    Verdaccio 2.4 returns wrong package.json

    My reason:

    I setup a verdaccio 2.4 server yesterday and found many projects failed to build after reinstall dependencies.After several hours digging,i found verdaccio returns wrong package.json file which remove some info from original package.json, e.g, "main" field. So it cause nodejs to throw many "can not find module' errors. Finally i revert to verdaccio 2.2, and all works fine.

    Steps to reproduce:

    App Version: 2.4

    issue: bug bug: fixed outdated 
    opened by jackjoy 36
  • Config path of docker container can't be mapped

    Config path of docker container can't be mapped

    If I want to run verdaccio on my unraid server, I can't map the folders /config/ to a host folder. If I want to map them, the container won't start. There are no logs.

    The same occurs when I want to start the start the container on my Windows 10 system with WSL2 by following command:

    docker run -it --rm --name verdaccio -p 4873:4873 -v C:\temp\verdaccio\conf:/verdaccio/conf -v C:\temp\verdaccio\storage:/verdaccio/storage -v C:\temp\verdaccio\plugins:/verdaccio/plugins  verdaccio/verdaccio
    

    If I run the container without the port mapping, it starts flawlessly by this command:

    docker run -it --rm --name verdaccio -p 4873:4873  verdaccio/verdaccio
    

    The container should start with mapped /config/ folder. Unfortunatly there is currently nothing more I could share with you.

    I guess there is something strange with the permissions itself. IMHO there are missing permission mappings for the /config at this line:

    https://github.com/verdaccio/verdaccio/blob/b02dab1c2f8fc9c2e7cafe6510535ff491a7b1aa/Dockerfile#L44

    Unfortunatly I'm not that docker expert to debug this.

    issue: invalid Docker 
    opened by Disane87 35
  • Registered user can't login

    Registered user can't login

    Log-in Bug Hi Guys,

    Maybe you can assist me regarding the following issue. I tried to find the solution but found nothing. Please review.

    Verdaccio - 3.5.1.

    1. When the existing user is trying to log in via npm, it gets an error "username is already registered".

    2. If I disable registration with option "max_users: -1" in config.yaml, then I get an error "maximum amount of users reached".

    Terminal output

    $ npm login --registry=https://registry-npm.example.com
    Username: test.user
    Password:
    Email: (this IS public) [email protected]
    npm ERR! code E409
    npm ERR! Registry returned 409 for PUT on https://registry-npm.example.com/-/user/org.couchdb.user:test.user: username is already registered
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /Users/test.user/.npm/_logs/2018-08-23T12_45_12_403Z-debug.log
    
    $ npm login --registry=https://registry-npm.example.com
    Username: test.user
    Password:
    Email: (this IS public)
    Email: (this IS public) [email protected]
    npm ERR! code E403
    npm ERR! Registry returned 403 for PUT on https://registry-npm.example.com/-/user/org.couchdb.user:test.user: maximum amount of users reached
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /Users/test.user/.npm/_logs/2018-08-23T12_43_19_284Z-debug.log
    

    Expected behavior

    Log-in to Verdaccio server with a registered user.

    Configuration File

    web:
      # WebUI is enabled as default, if you want to disable it, just uncomment this line
      enable: true
      title: Verdaccio NPM
      logo: logo.png
    
    auth:
      htpasswd:
        file: ./htpasswd
        # Maximum amount of users allowed to register, defaults to "+inf".
        # You can set this to -1 to disable registration.
        max_users: -1
    
    # a list of other known repositories we can talk to
    uplinks:
      npmjs:
        url: https://registry.npmjs.org/
    
    packages:
      '@*/*':
        # scoped packages
        access: $authenticated
        publish: $authenticated
        proxy: npmjs
    
      '**':
        # allow all users (including non-authenticated users) to read and
        # publish all packages
        #
        # you can specify usernames/groupnames (depending on your auth plugin)
        # and three keywords: "$all", "$anonymous", "$authenticated"
        access: $authenticated
    
        # allow all known users to publish packages
        # (anyone can register by default, remember?)
        publish: $authenticated
    
        # if package is not available locally, proxy requests to 'npmjs' registry
        proxy: npmjs
    
    # To use `npm audit` uncomment the following section
    middlewares:
      audit:
        enabled: true
    
    # log settings
    logs:
      - {type: stdout, format: pretty, level: http}
      #- {type: file, path: verdaccio.log, level: info}
    

    Debugging output

    $ npm login --registry=https://registry-npm.example.com -ddd
    npm info it worked if it ends with ok
    npm verb cli [ '/usr/local/Cellar/node/10.9.0/bin/node',
    npm verb cli   '/usr/local/bin/npm',
    npm verb cli   'login',
    npm verb cli   '--registry=https://registry-npm.example.com',
    npm verb cli   '-ddd' ]
    npm info using [email protected]
    npm info using [email protected]
    npm verb config Skipping project config: /Users/test.user/.npmrc. (matches userconfig)
    npm verb npm-session 821b0c437be02ea2
    npm verb web login before first POST
    npm http request โ†’ POST https://registry-npm.example.com/-/v1/login
    npm http 404 โ† Not Found (https://registry-npm.example.com/-/v1/login)
    npm verb web login not supported, trying couch
    Username: test.user
    Password:
    Email: (this IS public) [email protected]
    npm verb login before first PUT { _id: 'org.couchdb.user:test.user',
    npm verb login   name: 'test.user',
    npm verb login   password: 'XXXXX',
    npm verb login   type: 'user',
    npm verb login   roles: [],
    npm verb login   date: '2018-08-23T13:02:26.562Z' }
    npm http request โ†’ PUT https://registry-npm.example.com/-/user/org.couchdb.user:test.user
    npm http 409 โ† Conflict (https://registry-npm.example.com/-/user/org.couchdb.user:test.user)
    npm http request โ†’ GET https://registry-npm.example.com/-/user/org.couchdb.user:test.user?write=true
    npm http 200 โ† OK (https://registry-npm.example.com/-/user/org.couchdb.user:test.user?write=true)
    npm http request โ†’ PUT https://registry-npm.example.com/-/user/org.couchdb.user:test.user/-rev/undefined
    npm http 409 โ† Conflict (https://registry-npm.example.com/-/user/org.couchdb.user:test.user/-rev/undefined)
    npm verb adduser before first PUT { _id: 'org.couchdb.user:test.user',
    npm verb adduser   name: 'test.user',
    npm verb adduser   password: 'XXXXX',
    npm verb adduser   email: '',
    npm verb adduser   type: 'user',
    npm verb adduser   roles: [],
    npm verb adduser   date: '2018-08-23T13:02:26.622Z' }
    npm http request โ†’ PUT https://registry-npm.example.com/-/user/org.couchdb.user:test.user
    npm http 409 โ† Conflict (https://registry-npm.example.com/-/user/org.couchdb.user:test.user)
    npm verb stack Error: Registry returned 409 for PUT on https://registry-npm.example.com/-/user/org.couchdb.user:test.user: username is already registered
    npm verb stack     at fetch.defaults.catch.then.then.result (/usr/local/lib/node_modules/npm/node_modules/npm-profile/index.js:376:13)
    npm verb stack     at process._tickCallback (internal/process/next_tick.js:68:7)
    npm verb statusCode 409
    npm verb cwd /Users/test.user
    npm verb Darwin 17.6.0
    npm verb argv "/usr/local/Cellar/node/10.9.0/bin/node" "/usr/local/bin/npm" "login" "--registry=https://registry-npm.example.com" "-ddd"
    npm verb node v10.9.0
    npm verb npm  v6.2.0
    npm ERR! code E409
    npm ERR! Registry returned 409 for PUT on https://registry-npm.example.com/-/user/org.couchdb.user:test.user: username is already registered
    npm verb exit [ 1, true ]
    npm timing npm Completed in 17112ms
    

    Temporary solution

    Only possible to log-in with the registered user is allowed in config.yaml access and publish to all, anonymous.

    access: $all, $anonymous
    publish: $all
    

    But it's not secure.

    feat: auth 
    opened by bodz1lla 32
  • 5.x tests on windows

    5.x tests on windows

    1. The PR adds windows to the CI matrix
    2. The PR fixes some tests that were failing on windows by using a pattern instead of hardcoded strings.
    3. Some tiny snapshots got converted to inline snapshots (imho makes it easier to understand tests)
    4. The lint job didn't run on GitHub's windows image due to line ending issues. I fixed this by adding a .gitattributes with lf as the default line ending for text
    5. The PR sets one test on skip because it doesn't exit normally on windows, apparently due to a node.js streaming issue or something
    6. Fixes website/gatsby-node.js on windows and simplifies it
    issue: bug topic: windows dev: ci-build 
    opened by n4bb12 31
  • "publish --force" and "unpublish VERSION" seem to be broken

    Describe the bug

    I tried to look at #1359 and #1405 but couldn't find a solution. I'm using ~~https://github.com/Remitly/verdaccio-s3-storage~~ https://registry.verdaccio.org/-/web/detail/verdaccio-aws-s3-storage as a storage plugin, but you can comment the whole storage key in configuration and it will be the same (except for one thing that is pointed out below).

    npm publish --force

    If I try to overwrite an existing package version with a new one:

    npm publish --force --registry MY_REPO
    

    The result is:

    • old package is removed from the remote storage and the web UI doesn't show it
    • the npm command fails with:
    npm ERR! code EPUBLISHCONFLICT
    npm ERR! publish fail Cannot publish over existing version.
    npm ERR! publish fail Update the 'version' field in package.json and try again.
    npm ERR! publish fail 
    npm ERR! publish fail To automatically increment version numbers, see:
    npm ERR! publish fail     npm help version
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /Users/marco/.npm/_logs/2019-08-10T13_46_04_312Z-debug.log
    
    • running the same exact command again publishes successfully

    npm unpublish --force SPECIFIC_VERSION

    If I try to unpublish the package first to avoid errors:

    npm unpublish "@test/[email protected]" --force --registry MY_REPO
    

    The result is:

    • npm exits with no errors and says that the package has been removed
    • the package still shows up on the AWS S3 storage and on the web UI
    • trying to publish the same package from now on will result in failures (this doesn't happen when using local storage: publishing again works as with the command above)

    The only way I found to recover from this situation was:

    • removing the .tgz archive manually from the storage
    • restart the verdaccio server

    These commands don't work as expected.

    To Reproduce

    I'm using the following Dockerfile to speed up testing:

    FROM verdaccio/verdaccio:latest
    
    USER root
    
    ENV NODE_ENV=production
    
    # Install "envsubst" to replace ENV_VARS in config
    RUN apk add gettext libintl
    
    # Install AWS S3 Plugin
    RUN yarn add verdaccio-aws-s3-storage --production=true --no-lockfile --registry https://registry.verdaccio.org
    
    # Copy configuration and .htpasswd
    COPY ./config.yml  $VERDACCIO_APPDIR/conf/config.yaml
    
    # Fix permissions
    RUN chown -R $VERDACCIO_USER_UID:root $VERDACCIO_APPDIR/conf/config.yaml \
        && chmod -R g=u $VERDACCIO_APPDIR/conf/config.yaml
    
    USER $VERDACCIO_USER_UID
    
    # Set user credentials, replace ENV_VARS in config and finally run Verdaccio
    CMD echo "$HTPASSWD" > /verdaccio/storage/htpasswd \
        && envsubst \$AWS_S3_BUCKET,\$AWS_S3_PATH_PREFIX,\$AWS_DEFAULT_REGION,\$AWS_S3_ENDPOINT,\$AWS_S3_PATH_STYLE,\$AWS_ACCESS_KEY_ID,\$AWS_SECRET_ACCESS_KEY < $VERDACCIO_APPDIR/conf/config.yaml > $VERDACCIO_APPDIR/conf/config.yaml \
        && $VERDACCIO_APPDIR/bin/verdaccio --config $VERDACCIO_APPDIR/conf/config.yaml --listen $VERDACCIO_PROTOCOL://0.0.0.0:$VERDACCIO_PORT
    

    This docker-compose.yml should run your registry:

    version: '2.1'
    
    services:
      verdaccio:
        image: testing/private-verdaccio-s3:latest
        environment:
          AWS_S3_BUCKET: 
          AWS_S3_PATH_PREFIX: 
          AWS_ACCESS_KEY_ID: 
          AWS_SECRET_ACCESS_KEY: 
          AWS_DEFAULT_REGION:
          AWS_S3_ENDPOINT: 
          AWS_S3_PATH_STYLE: "true"
          # User is demo:demo
          HTPASSWD: |
            demo:$apr1$uq2Uw53i$dS7GoGvNuupumWvXjOJ.R1
        ports:
          - "4874:4873"
    

    Configuration file config.yml:

    #
    # This is the config file used for the docker images.
    # It allows all users to do anything, so don't use it on production systems.
    #
    # Do not configure host and port under `listen` in this file
    # as it will be ignored when using docker.
    # see https://verdaccio.org/docs/en/docker#docker-and-custom-port-configuration
    #
    # Look here for more config file examples:
    # https://github.com/verdaccio/verdaccio/tree/master/conf
    #
    
    # path to a directory with all packages
    storage: /verdaccio/storage/data
    
    # comment this section entirely to disable AWS S3
    store:
      aws-s3-storage:
        bucket: $AWS_S3_BUCKET
        keyPrefix: $AWS_S3_PATH_PREFIX
        region: $AWS_DEFAULT_REGION
        endpoint: $AWS_S3_ENDPOINT
        s3ForcePathStyle: $AWS_S3_PATH_STYLE
        accessKeyId: $AWS_ACCESS_KEY_ID
        secretAccessKey: $AWS_SECRET_ACCESS_KEY
    
    web:
      title: Verdaccio
    
    auth:
      htpasswd:
        file: /verdaccio/storage/htpasswd
        max_users: -1
    
    security:
      api:
        jwt:
          sign:
            expiresIn: 60d
            notBefore: 1
      web:
        sign:
          expiresIn: 7d
          notBefore: 1
    
    # a list of other known repositories we can talk to
    uplinks:
      npmjs:
        url: https://registry.npmjs.org/
    
    packages:
      '**':
        access: $all
        publish: $all
        unpublish: $all
    
        # if package is not available locally, proxy requests to 'npmjs' registry
        proxy: npmjs
    
    middlewares:
      audit:
        enabled: true
    
    # log settings
    logs:
      - { type: stdout, format: pretty, level: http }
    
    listen:
      - 0.0.0.0:4873
    

    Put these 3 files in a folder called verdaccio-test, then build and run everything:

    cd /path/to/verdaccio-test
    docker build -t testing/private-verdaccio-s3:latest .
    docker-compose up -d
    
    # Attach to logs
    docker logs -f verdaccio-test_verdaccio_1
    
    # use http://127.0.0.1:4874
    

    Expected behavior

    Packages should be deleted correctly.

    Conclusion

    I hope that everything is clear enough, please feel free to ask for further information.

    Thank you for your time.

    issue_needs_triage outdated 
    opened by liarco 31
  • verdaccio/sinopia is not yet cluster ready

    verdaccio/sinopia is not yet cluster ready

    Currently verdaccio/sinopia has an internal cache of which packages exists. It does not reparse the .sinopia-db, therefore if you run sinopia in a cluster, there will be nodes that are out of sync and even more problematic, you may overwrite the .sinopia-db with different states.

    Therefore we need to add the capability to either: Create a communication channel (EventBus, MQ, whatsoever) or just a central configuration, like a database.

    topic: feature request feat: storage dev_discuss dev: scale outdated 
    opened by wzrdtales 31
  • Improve docker image

    Improve docker image

    We have to review the Dockerfile and improve the size of each layers. Some examples of things to improve are:

    • Remove dumb-init
    • Remove the addition and elimination of openssl package
    • Remove test on Dockerfile
    help wanted Docker dev_discuss issue: suggestions topic: devops performance outdated 
    opened by sergiohgz 29
  • Migrate to CircleCI 2.0

    Migrate to CircleCI 2.0

    My reason:

    https://circleci.com/blog/sunsetting-1-0/

    Additional information:

    I'll explain step by step what we are doing in a nutshell on circleci.ylm

    • YARN_VERSION: 1.6.0
    • verdacciobot user will perform all task
    • Testing with node 6, 8, 9 and 10
    • Default node should be 9
    • yarn run pre:ci first step before running anything else
    • - yarn run test:e2e should be run once using default Node
    • Publish docusaurus after (master branch) is being successful (right now it publish even from branches and that is wrong)
    • Deployment: This is really important
      • After a new tag is being detected we should deploy on npmjs /(v)?[0-9]+(\.[0-9]+)*/
      • l10n_master master branch should be ignored for builds (used by crowdin and it is nog being ignored currently).
      • gh-pages is being used by docusaurus and also should be ignored.

    Upgrade

    • We should keep the same configuration
    • Fix what is not working properly
    • Deployment is essential
    • Wish list:
      • Use of artifacts ( to measure the size of the tarball in each PR)
    • Any another improvement that improves the workflow and maintainability

    Testing

    • We should test in a separated repository (we cannot publish it accidentally on npmjs)
    dev: code-review dev: ci-build outdated 
    opened by juanpicado 28
  • v1 search does not work with pagination

    v1 search does not work with pagination

    Hi! ๐Ÿ‘‹

    Firstly, thanks for your work on this project! ๐Ÿ™‚

    Today I used patch-package to patch [email protected] for the project I'm working on.

    The problem is in 5.x/src/api/endpoint/api/v1/search.ts (I checked and the same logical issue exists also in master 6.x branch master/packages/api/src/v1/search.ts).

    Basically, search returns always total equal or less than size query param.

    For example, direct search of @babel packages on npmjs (https://registry.npmjs.org/-/v1/search?text=@babel&size=20&from=0) returns total of 192 and I can do pagination by using size and from params. Same call via verdaccio returns always total of 20 (equal to size) and pagination is not possible at all.

    Here is the diff that solved my problem:

    diff --git a/node_modules/verdaccio/build/api/endpoint/api/v1/search.js b/node_modules/verdaccio/build/api/endpoint/api/v1/search.js
    index 27b03a0..8b1939e 100644
    --- a/node_modules/verdaccio/build/api/endpoint/api/v1/search.js
    +++ b/node_modules/verdaccio/build/api/endpoint/api/v1/search.js
    @@ -106,11 +106,12 @@ async function sendResponse(resultBuf, resultStream, auth, req, from, size) {
       const checkAccessPromises = await Promise.all(removeDuplicates(resultsCollection).map(pkgItem => {
         return checkAccess(pkgItem, auth, req.remote_user);
       }));
    -  const final = checkAccessPromises.filter(i => !_lodash.default.isNull(i)).slice(from, size);
    +  const totalAllowed = checkAccessPromises.filter(i => !_lodash.default.isNull(i));
    +  const final = totalAllowed.slice(from, from + size);
       _logger.logger.debug(`search results ${final === null || final === void 0 ? void 0 : final.length}`);
       const response = {
         objects: final,
    -    total: final.length,
    +    total: totalAllowed.length,
         time: new Date().toUTCString()
       };
       _logger.logger.debug(`total response ${final.length}`);
    

    This issue body was partially generated by patch-package.

    status: reviewing proposal 
    opened by dre2901 0
  • include systemd service unit file missing in package

    include systemd service unit file missing in package

    Discussed in https://github.com/verdaccio/verdaccio/discussions/3536

    Originally posted by CleyFaye December 21, 2022 Hi,

    We're running verdaccio on our servers using systemd, as described in the documentation (https://verdaccio.org/docs/server-configuration/#using-systemd)

    We recently updated, and the verdaccio.systemd file is now missing from the package we get from npm (the whole systemd directory is missing).

    We saw nothing about this in the changelog, so the question is, is this an intended change? I think it is fine to grab the file by hand from the repository instead of bundling it with the npm package, but it was also convenient having it there. Also if it is expected to not be bundled in the future, the documentation may need an upgrade in that regard.

    good first issue 5.x branch 
    opened by juanpicado 0
  • error An unexpected error occurred: Request failed 404 Not Found.

    error An unexpected error occurred: Request failed 404 Not Found.

    Version: 5.15.4

    This happened when we are trying to change the version of a specific package. Our older package is already cached, and when verdaccio tries to get the tarball from the cache it gets 404 because of the version change.

    The solution is to manually delete the folder of the package from the cache and try again. That means that Verdaccio can't support multiple versions in the cache. This is a big blocker.

    Config:

    storage: /verdaccio/storage/data
    plugins: /verdaccio/plugins
    web:
      enable: true
      title: Verdaccio
    url_prefix: '/'
    uplinks:
      npmjs:
        url: https://registry.npmjs.org/
        cache: true
        maxage: 259200m
      yarnpkg:
        url: https://registry.yarnpkg.com/
        cache: true
        maxage: 259200m
    packages:
      '@*/*':
        access: $all
        publish: $authenticated
        proxy: yarnpkg npmjs
      '**':
        access: $all
        publish: $authenticated
        proxy: yarnpkg npmjs
    middlewares:
      audit:
        enabled: true
    logs:
      - {type: stdout, format: pretty, level: debug}
    

    To support multiple version, do we have to enable this somehow in the configuration?

    issue: bug issue_needs_triage 5.x branch 
    opened by droslean 4
  • Cannot list packages on main screen with verdaccio-aws-s3-storage configured

    Cannot list packages on main screen with verdaccio-aws-s3-storage configured

    Your Environment

    • verdaccio version: 5.18.0
    • node version: from official docker image verdaccio/verdaccio:5.18.0
    • package manager: npm, from official docker image verdaccio/verdaccio:5.18.0
    • os: docker image verdaccio/verdaccio:5.18.0
    • platform: kubernetes (helm)

    Describe the bug

    After installing chart into kubernetes cluster with preprovisioned aws-s3-storage plugin, application cannot list packages, but can reach them via direct URL.

    To Reproduce

    1. Configuration block from mostly base helm values.
    2. Install into cluster with following values,
    3. Upload packages into S3 Verdaccio/storage/ (backup from working old version 4.x.x). Couple GBs.
    4. Proceed into UI.

    Expected behavior Everything ok on old 4.x.x set up, but...

    Screenshots, server logs, package manager log UI reachable, but 0 packages (changed host due security reasons): image

    Can reach a package (changed host and package name due security reasons): image

    Configuration files Part of very basic values:

     configMap: |
      # necessary (see https://github.com/verdaccio/verdaccio/issues/673)
      storage: /verdaccio/storage/data
      
      store:
        aws-s3-storage:
          keyPrefix: Verdaccio/storage/
          bucket: ${bucket}
          region: ${region}
          accessKeyId: ${access_key_id}
          secretAccessKey: ${secret_access_key}
    
      auth:
        htpasswd:
          file: /verdaccio/storage/htpasswd
          max_users: 4
          algorithm: bcrypt
          rounds: 10
    
      uplinks:
        npmjs:
          url: https://registry.npmjs.org/
          max_fails: 100
    
      packages:
        '@*/*':
          access: $all
          publish: $authenticated
          proxy: npmjs
    
        '**':
          access: $all
          publish: $authenticated
          proxy: npmjs
    
      middlewares:
        audit:
          enabled: true
    
      max_body_size: 100m
    
      server: 
        keepAliveTimeout: 60
    
      logs: {type: stdout, format: pretty, level: debug}
    

    Dockerfile

    FROM verdaccio/verdaccio:5.18.0
    
    ENV NODE_ENV=production
    USER root
    RUN npm i -g [email protected]
    
    

    Environment information EKS 1.22, Helm 3.8.2, Chart 4.10.3, [email protected], [email protected]

    Debugging output

    • $ NODE_DEBUG=request verdaccio display request calls (verdaccio <--> uplinks)
    • [x] $ DEBUG=verdaccio* verdaccio enable extreme verdaccio debug mode (verdaccio api)
    • $ npm -ddd prints:
    • $ npm config get registry prints:

    Plugin init starts (changed bucket name due security reasons):

    verdaccio:plugin:loader loading plugin /usr/local/lib/node_modules/verdaccio/build/plugins/aws-s3-storage
    verdaccio:plugin:loader plugin /usr/local/lib/node_modules/verdaccio/build/plugins/aws-s3-storage not found
    verdaccio:plugin:loader loading plugin verdaccio-aws-s3-storage
    verdaccio:plugin:loader plugin aws-s3-storage is an npm package
    erdaccio:plugin:loader plugin is ES6
    {"level":30,"time":1670257501552,"pid":8,"hostname":"verdaccio-64b7b6bf68-txp4f","content":"aws-s3-storage","prefix":"verdaccio","msg":"plugin successfully loaded: @{prefix}-@{content}"}
    {"level":20,"time":1670257501552,"pid":8,"hostname":"verdaccio-64b7b6bf68-txp4f","keyPrefix":"Verdaccio/storage/","bucket":"MY_BUCKET","msg":"s3: [_getData] bucket: @{bucket} prefix: @{keyPrefix}"}
    {"level":20,"time":1670257502155,"pid":8,"hostname":"verdaccio-64b7b6bf68-txp4f","keyPrefix":"Verdaccio/storage/","bucket":"MY_BUCKET","msg":"s3: [_sync] bucket: @{bucket} prefix: @{keyPrefix}"}
    {"level":20,"time":1670257502285,"pid":8,"hostname":"verdaccio-64b7b6bf68-txp4f","msg":"s3: [_sync] sucess"}
    

    Also found empty response from /-/verdaccio/data/packages: image

    plugin: aws-storage 
    opened by sromaniuk-s 8
  • Since v5.16.0 cannot get tarball file: 404

    Since v5.16.0 cannot get tarball file: 404 "file not found"

    verdaccio version: 5.16.0 and upper node version: v16.14.0 package manager: [[email protected], [email protected]] os: linux platform: docker

    We had Verdaccio 5.15.4 with Minio storage (RELEASE.2022-10-24T18-35-07Z). config.yml contains the lines:

    store:
      minio:
        port: 9000
        region: us-east-1
        endPoint: 10.10.10.10
        accessKey: minioadmin
        secretKey: minioadmin
        useSSL: false
    

    It worked fine.

    After upgrading to 5.18.0 we get errors on "yarn add @our/package":

    yarn add v1.22.19
    [1/4] Resolving packages...
    [2/4] Fetching packages...
    error An unexpected error occurred: "https://our-verdaccio-site.com/commander/-/commander-9.4.1.tgz: Request failed \"404 Not Found\""
    

    If you try to get tarball file with the direct link - https://our-verdaccio-site.com/commander/-/commander-9.4.1.tgz - the same error appears: 404 "file not found". The file commander-9.4.1.tgz exists in Minio though.

    The error appears only since v5.16.0 (I tried 5.16.0, 5.16.1, 5.16.2, 5.16.3, 5.17.0, 5.18.0)

    Debug logs:

    01.12.2022, 21:09:59 debug--- [Minio] ReadStream<commander/commander-9.4.1.tgz> is opened
    01.12.2022, 21:09:59 debug--- [Minio] ReadStream<commander/commander-9.4.1.tgz> received 28174 bytes
    01.12.2022, 21:09:59 debug--- [Minio] ReadStream<commander/commander-9.4.1.tgz> is finishing
    
    issue_needs_triage issue: need-more-info docker-examples 
    opened by vsile 5
Releases(v5.19.0)
  • v5.19.0(Dec 29, 2022)

  • v5.18.0(Nov 23, 2022)

    5.18.0 (2022-11-23)

    Features

    โ„น๏ธ There were no types before, not expecting breaking changes but if you are using TS with verdaccio programatically might have some impact here.

    Bug Fixes

    • add hasInstallScript calculation (#3509) (0b49566) solves https://github.com/verdaccio/verdaccio/issues/3366
    Source code(tar.gz)
    Source code(zip)
  • v5.17.0(Nov 19, 2022)

  • v5.16.3(Nov 8, 2022)

    Same as v5.16.0 https://github.com/verdaccio/verdaccio/releases/tag/v5.16.0

    โš ๏ธ I broke the release ^_^ so I had to release 5.16.1, 5.16.2 and 5.16.3. The 5.16.1, 5.16.2 are broken, don't use please. Consequences I moved E2E to https://github.com/verdaccio/e2e-5.x for 5.x release to simplify the maintenance (but it came with a cost).

    Source code(tar.gz)
    Source code(zip)
  • v5.16.0(Nov 8, 2022)

    ๐Ÿ˜Š due some package manager migration I broke the release, so the latest [email protected] is literally same version as v5.16.0, sorry

    Features

    Docker refactoring

    • docker image refactor a new internal binary run (#3475) (ebaaf3f)
    • Big changes on the docker image, while until version v5.15.4 has been using yarn as a runner, since this minor should not use yarn at all, it is just used at the builder phase and then it is just run verdaccio natively as a Node.js module installed globally at the image.
    • Improved documentation for using plugins here with the image 5.x

    If the new docker image causes any troubles, please report it ! or just use verdaccio/verdaccio:5.15.4 as a workaround to stick the old one. The new Docker 6.x image will follow same approach very soon.

    Docker base moves from TLS v14 -> v18

    • update to docker base image to node v18.12.0 (#3469) (644938c)

    Bug Fixes

    Source code(tar.gz)
    Source code(zip)
  • v5.15.4(Sep 29, 2022)

  • v5.15.3(Sep 7, 2022)

  • v5.15.2(Sep 5, 2022)

  • v5.15.1(Sep 4, 2022)

  • v5.15.0(Sep 4, 2022)

    5.15.0 (2022-09-03)

    Features

    • implement abbreviated manifest (#3343) (966139f) by @juanpicado

    Enable abbreviated manifest data by adding the header:

    curl -H "Accept: application/vnd.npm.install-v1+json" https://registry.npmjs.org/verdaccio
    

    It returns a filtered manifest, additionally includes the time field by request. You can read more here or start using with [email protected].

    Current support for packages managers:

    • npm: yes
    • pnpm: yes
    • yarn classic: yes
    • yarn modern (+2.x): no

    https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md#abbreviated-metadata-format

    Source code(tar.gz)
    Source code(zip)
  • v5.14.0(Jul 29, 2022)

  • v5.13.3(Jul 13, 2022)

  • v5.13.2(Jul 12, 2022)

  • v5.13.1(Jun 23, 2022)

    5.13.1 (2022-06-23)

    Bug Fixes

    There was a regression on initial release https://github.com/verdaccio/verdaccio/issues/2141 where the location of the storage was not taken in account, hopefully does not break anything. Fixed here and here.

    • deps: update dependency @verdaccio/local-storage to v10.3.1 (#3245) (991cf10) by @juanpicado
    • deps: update dependency verdaccio-htpasswd to v10.5.0 (#3242) (884e05b) by @greshilov
    Source code(tar.gz)
    Source code(zip)
  • v5.13.0(Jun 17, 2022)

    5.13.0 (2022-06-17)

    Features

    Enable more algorithms for hasing password only for htpasswd plugin, crypt by default to avoid breaking changes for next major release bcrypt is highly recommended.

    auth:
      htpasswd:
        file: ./htpasswd
        # Maximum amount of users allowed to register, defaults to "+inf".
        # You can set this to -1 to disable registration.
        # max_users: 1000
        # Hash algorithm, possible options are: "bcrypt", "md5", "sha1", "crypt".
        algorithm: bcrypt # by default is crypt, but is recommended use bcrypt for new installations
        # Rounds number for "bcrypt", will be ignored for other algorithms.
        rounds: 10
    

    ref https://github.com/verdaccio/monorepo/pull/580

    Source code(tar.gz)
    Source code(zip)
  • v5.12.0(Jun 14, 2022)

    5.12.0 (2022-06-14)

    Features

    Example

    middlewares:
      audit:
        enabled: true
      '@xlts.dev/verdaccio-prometheus-middleware':
          metricsPath: /custom/path/metrics    
    

    Bug Fixes

    • deps: update dependency @verdaccio/local-storage to v10.3.0 (#3223) (2b8ac7a)
    • deps: update dependency async to v3.2.4 (#3224) (c486af2)
    • deps: update dependency dayjs to v1.11.3 (#3225) (325e536)
    • deps: update dependency lru-cache to v7.10.1 (#3182) (7bc60ff)
    • deps: update dependency marked to v4.0.17 (#3226) (9d9c086)
    • deps: update dependency minimatch to v5.1.0 (#3183) (e5dbd9b)
    • deps: update dependency verdaccio-htpasswd to v10.3.1 (#3220) (25a2825)
    Source code(tar.gz)
    Source code(zip)
  • v5.11.0(Jun 2, 2022)

    5.11.0 (2022-06-02)

    The way to use verdaccio programatically is not very friendly if you are using

    const startVerdaccio = require('verdaccio'); 
    

    as this example.

    โš ๏ธ Deprecations

    • Using verdaccio with multiples listeners display a deprecation warning
      • (runServer) forbid this and only allows the first one listener listed
    • On verdaccio 6 will be removed and will throw an error

    โŒ Bad

    listen:
     - localhost:4873            # default value
     - http://localhost:4873     # same thing
    

    โœ… Good (on v6.0.0 won't be a list anymore)

    listen: localhost:4873
    

    ๐Ÿš€ Feature

    runServer method to run verdaccio programatically as a promise

    I am looking for a better name, feel free to drop your ideas.

    On v6 https://github.com/verdaccio/verdaccio/pull/2165 this was improved and I am moving the same API to v5 so is much easier to migrate in the future.

    It's a bit experimental, it does not replace the old way, so won't break anything, but allows smooth migration

    There are three ways to use it:

    • No input, it will find the config.yaml as is you would run verdaccio in the console
    • With a absolute path
    • With an object (there is a catch here, see below)
        const {runServer} = require('verdaccio');
        const app = await runServer(); // default configuration
        const app = await runServer('./config/config.yaml');
        const app = await runServer({ configuration });
        app.listen(4000, (event) => {
          // do something
        });
    

    With an object you need to add self_path, manually (it's not nice but would be a breaking change changing it now) on v6 this is not longer need it.

          const configPath = join(__dirname, './config.yaml');
          const c = parseConfigFile(configPath);
          // workaround
          // on v5 the `self_path` still exists and will be removed in v6
          c.self_path = 'foo';
          runServer(c).then(() => {});
    

    Read more here https://verdaccio.org/docs/verdaccio-programmatically

    parseConfigFile method

    Exposed for easy use parse a yaml file as an object

    Source code(tar.gz)
    Source code(zip)
  • v5.10.3(May 30, 2022)

  • v5.10.2(May 7, 2022)

  • v5.10.1(May 5, 2022)

  • v5.10.0(Apr 26, 2022)

    5.10.0 (2022-04-26)

    Features

    • deps(ui): update dependency @verdaccio/ui-theme to v6.0.0-6-next.24 (5.x) (#3130) (da01a14)

    ๐ŸŒž Initial new set of variables to hide features (more to come)

    Add set of new variables that allow hide different parts of the UI, buttons, footer or download tarballs. โ„น๏ธ All are enabled by default.

    # web:
    #  login: true <-- already exist but worth the reminder
    #  showInfo: true
    #  showSettings: true
    # In combination with darkMode you can force specific theme
    #  showThemeSwitch: true
    #  showFooter: true
    #  showSearch: true
    #  showDownloadTarball: true
    

    If you disable showThemeSwitch and force darkMode: true the local storage settings would be ignored and force all themes to the one in the configuration file.

    Future could be extended to other parts.

    ๐Ÿš€ Raw button to display manifest package

    A new experimental feature (enabled by default), button named RAW to be able navigate on the package manifest directly on the ui, kudos to react-json-view that allows an easy integration, not configurable yet until get more feedback.

    # web:
     showRaw: true <-- false to disable it
    

    | image | image |

    ๐Ÿง‘โ€๐Ÿญ Rework header buttons

    • The header has been rework, the mobile was looking broken. Now only displays login and logo (for screens smaller than 400px)
    • Removed info button in the header and moved to a dialog
    • Info dialog now contains more information about the project, license and the aid content for Ukrania ๐Ÿ‡บ๐Ÿ‡ฆ now is inside of the info modal.
    • Separate settings and info to avoid collapse too much info (for mobile still need some work)

    ๐Ÿ”ข Others

    • Updated translations for several languages

    ๐Ÿช„ What's next?

    • Next updates will be focused on improving the mobile/tablet layouts (does not look so great yet)
    • More updates on v6 (alpha release)

    ๐Ÿž Bug Fixes

    • deps: update dependency @verdaccio/local-storage to v10.2.1 (#3118) (0f9d6ec)
    • deps: update dependency @verdaccio/readme to v10.3.3 (#3119) (78b9c8b)
    • deps: update dependency body-parser to v1.20.0 (#3123) (954886d)
    • deps: update dependency dayjs to v1.11.1 (#3131) (27035f9)
    • deps: update dependency lru-cache to v7 (#3124) (7ceaa17)
    • deps: update dependency marked to v4.0.14 (#3120) (8a60050)
    • deps: update dependency semver to v7.3.7 (#3121) (157d5c5)
    • deps: update dependency verdaccio-audit to v10.2.1 (#3122) (decd7f1)
    Source code(tar.gz)
    Source code(zip)
  • v4.13.2(Apr 16, 2022)

    @@ -0,0 +1,1959 @@

    Changelog

    All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

    4.13.2 (2022-04-16)

    Bug Fixes

    • update async and lodash to latest patches ([df541c4] (https://github.com/verdaccio/verdaccio/commit/df541c43c1fac7af064ef6cbf25007d78a812666)) ๐Ÿ›ก๏ธ security update ๐Ÿ™๐Ÿผ upgrade to v5 still so many downloads

    [4.13.1] ๐Ÿคท๐Ÿผโ€โ™‚๏ธ This version seem was skipped, ignore it, the release for v4 is just old.

    Source code(tar.gz)
    Source code(zip)
  • v5.9.0(Apr 12, 2022)

    5.9.0 (2022-04-12)

    Features

    • web: add a config item to web๏ผŒlet the developer can select whether enable the html cache (#3110) (b30ba81)

    Verdaccio cache the initial HTML render to improve performance, this might be not a required in some cases, the new property web.html_cache disable this optimization. by @Tiny-Fendy

    web:
      html_cache: false
    

    Bug Fixes

    • deps: update dependency @verdaccio/ui-theme to v6.0.0-6-next.23 (#3106) (b963f7d) by @juanpicado @s-h-a-d-o-w

    The UI is being shared between V5 and V6 (for easy maintenance) but some features are partially enabled for V5.

    The search component has been improved for V6, but for V5 is does not show all the potential but is able to display the description of the package and the latest published version on search private packages. V6 will increase ammount of information could be displayed on this component. For v6 more detail info read https://github.com/verdaccio/verdaccio/pull/3057 or install npm i -g verdaccio@6-next โš ๏ธ v6 is not producction ready, but have some fun.

    image

    • deps: update dependency body-parser to v1.19.2 (#3087) (8cee85f)
    • deps: update dependency dayjs to v1.11.0 (#3094) (4cc1877)
    Source code(tar.gz)
    Source code(zip)
  • v5.8.0(Mar 12, 2022)

    5.8.0 (2022-03-12)

    UI is customizable, read docs, https://verdaccio.org/docs/webui

    If you want to hide the flag for Help Provide Humanitarian Aid to Ukraine, there it is the easy solution. On the config.yaml file.

    web:
      logo: https://cdn.verdaccio.dev/logos/verdaccio-tiny.png <- or any url that you prefer
      scriptsbodyBefore:
        - '<script>document.addEventListener("DOMContentLoaded", function(){ document.querySelector("[aria-label=\"Support people affected by the war in Ukraine\"]").innerHTML= ""});</script>'    
    

    I'd prefer if you keep it.

    Features

    Source code(tar.gz)
    Source code(zip)
  • v4.13.0(Mar 10, 2022)

  • v5.7.1(Mar 9, 2022)

  • v5.7.0(Mar 4, 2022)

    5.7.0 (2022-03-04)

    Bug Fixes

    • deps: update dependency @verdaccio/ui-theme to v6.0.0-6-next.20 (#3028) (87e5e74) by @juanpicado

    Display CJS icon for commonJS packages, TS for those packages that have types

    2022-03-04_19-46

    Feature

    • feat: config control for colors in logs (https://github.com/verdaccio/verdaccio/pull/3011) by @osher

    Disable colors from logging, also could use EXPERIMENTAL_VERDACCIO_LOGGER_COLORS environment variable

    logs:
      { type: stdout, format: pretty, level: http, colors: false }
    
    Source code(tar.gz)
    Source code(zip)
  • v5.6.2(Feb 26, 2022)

    5.6.2 (2022-02-26)

    New Feature

    It display bagets if the package provides types, ES6 modules or strictly common.js

    // package.json
    "types: "some string"
    "module": "commonjs" or "module"
    

    2022-02-26_20-54

    Bug Fixes

    • deps: update dependency @verdaccio/ui-theme to v6.0.0-6-next.18 (#3019) (7cff3f7)
    • deps: update dependency pino to v6.14.0 (#3018) (08b72b4)
    Source code(tar.gz)
    Source code(zip)
  • v5.6.1(Feb 26, 2022)

  • v5.6.0(Feb 15, 2022)

    5.6.0 (2022-02-15)

    Features

    • new environment variable (storage path) (#2993) (681dc82), closes PR#2199 by @osher and ref https://github.com/verdaccio/verdaccio/pull/2199

    Add option to set storage from environment variable VERDACCIO_STORAGE_PATH to replace the config.yaml storage property.

    ## config.yaml
     storage: ./storage <--- replace this
    

    Bug Fixes

    • deps: update dependency @verdaccio/commons-api to v10.2.0 (#2986) (63fc4d1)
    • deps: update dependency @verdaccio/local-storage to v10.2.0 (#2987) (1db0a2e)
    • deps: update dependency @verdaccio/readme to v10.3.2 (#2984) (fee3ac6)
    • deps: update dependency @verdaccio/streams to v10.2.0 (#2995) (60fea02)
    • deps: update dependency marked to v4.0.12 (#2976) (2cd4a3b)
    • deps: update dependency verdaccio-audit to v10.2.0 (#2998) (57c4ce5)
    • deps: update dependency verdaccio-htpasswd to v10.2.0 (#2999) (25b2212)
    Source code(tar.gz)
    Source code(zip)
Owner
Verdaccio
Node.js proxy and private ๐Ÿ”’ registry ๐Ÿ“ฆ
Verdaccio
๐Ÿ” A Node.js Serverless Framework for front-end/full-stack developers. Build the application for next decade. Works on AWS, Alibaba Cloud, Tencent Cloud and traditional VM/Container. Super easy integrate with React and Vue. ๐ŸŒˆ

Midway - ไธ€ไธช้ขๅ‘ๆœชๆฅ็š„ไบ‘็ซฏไธ€ไฝ“ Node.js ๆก†ๆžถ English | ็ฎ€ไฝ“ไธญๆ–‡ ?? ๆฌข่ฟŽ่ง‚็œ‹ Midway Serverless 2.0 ๅ‘ๅธƒไผšๅ›žๆ”พ๏ผš https://www.bilibili.com/video/BV17A411T7Md ใ€ŠMidway Serverless ๅ‘ๅธƒ

Midway.js 6.3k Jan 8, 2023
LoopBack makes it easy to build modern API applications that require complex integrations.

LoopBack makes it easy to build modern applications that require complex integrations. Fast, small, powerful, extensible core Generate real APIs with

StrongLoop and IBM API Connect 4.4k Jan 4, 2023
Build Amazon Simple Queue Service (SQS) based applications without the boilerplate

sqs-consumer Build SQS-based applications without the boilerplate. Just define an async function that handles the SQS message processing. Installation

BBC 1.4k Dec 26, 2022
Fast, unopinionated, minimalist web framework for node.

Fast, unopinionated, minimalist web framework for node. const express = require('express') const app = express() app.get('/', function (req, res) {

null 59.5k Jan 5, 2023
A progressive Node.js framework for building efficient, scalable, and enterprise-grade server-side applications on top of TypeScript & JavaScript (ES6, ES7, ES8) ๐Ÿš€

A progressive Node.js framework for building efficient and scalable server-side applications. Description Nest is a framework for building efficient,

nestjs 53.2k Dec 31, 2022
Expressive middleware for node.js using ES2017 async functions

Expressive HTTP middleware framework for node.js to make web applications and APIs more enjoyable to write. Koa's middleware stack flows in a stack-li

Koa.js 33.5k Jan 4, 2023
Realtime MVC Framework for Node.js

Website Get Started Docs News Submit Issue Sails.js is a web framework that makes it easy to build custom, enterprise-grade Node.js apps. It is design

Balderdash 22.4k Dec 31, 2022
Fast and low overhead web framework, for Node.js

An efficient server implies a lower cost of the infrastructure, a better responsiveness under load and happy users. How can you efficiently handle the

Fastify 26k Jan 2, 2023
The future of Node.js REST development

restify is a framework, utilizing connect style middleware for building REST APIs. For full details, see http://restify.com Follow restify on Usage Se

restify 10.6k Jan 2, 2023
๐Ÿš€ The Node.js Framework highly focused on developer ergonomics, stability and confidence

Sponsored by FOSS United is a non-profit foundation that aims at promoting and strengthening the Free and Open Source Software (FOSS) ecosystem in Ind

AdonisJS Framework 13.4k Dec 31, 2022
Use full ES2015+ features to develop Node.js applications, Support TypeScript.

ThinkJS Use full ES2015+ features to develop Node.js applications, Support TypeScript. ็ฎ€ไฝ“ไธญๆ–‡ๆ–‡ๆกฃ Installation npm install -g think-cli Create Application

ThinkJS 5.3k Dec 30, 2022
:rocket: Progressive microservices framework for Node.js

Moleculer Moleculer is a fast, modern and powerful microservices framework for Node.js. It helps you to build efficient, reliable & scalable services.

MoleculerJS 5.5k Jan 4, 2023
MVC framework making it easy to write realtime, collaborative applications that run in both Node.js and browsers

Derby The Derby MVC framework makes it easy to write realtime, collaborative applications that run in both Node.js and browsers. Derby includes a powe

DerbyJS 4.7k Dec 23, 2022
Node.js framework

Node.js framework Total.js framework is a framework for Node.js platfrom written in pure JavaScript similar to PHP's Laravel or Python's Django or ASP

Total.js 4.2k Jan 2, 2023
API Services Made Easy With Node.js

Nodal API Services Made Easy with Node.js View the website at nodaljs.com. Nodal is a web server and opinionated framework for building data manipulat

Keith Horwood 4.5k Dec 26, 2022
A microservices toolkit for Node.js.

A Node.js toolkit for Microservice architectures This open source module is sponsored and supported by Voxgig. seneca Lead Maintainer: Richard Rodger

Seneca Microservices Framework 3.9k Dec 19, 2022
:evergreen_tree: Modern Web Application Framework for Node.js.

Trails is a modern, community-driven web application framework for Node.js. It builds on the pedigree of Rails and Grails to accelerate development by

Trails 1.7k Dec 19, 2022
Marble.js - functional reactive Node.js framework for building server-side applications, based on TypeScript and RxJS.

Functional reactive Node.js framework for building server-side applications, based on TypeScript and RxJS. Ecosystem Name Description @marblejs/core F

Marble.js 2.1k Dec 16, 2022
๐Ÿ”ฌ Writing reliable & fault-tolerant microservices in Node.js

A Node.js microservices toolkit for the NATS messaging system Run on repl.it Node: v6+ Documentation: https://hemerajs.github.io/hemera/ Lead Maintain

HemeraJs 800 Dec 14, 2022