# path to a directory with all packages storage: ./storage # a list of users # # This is deprecated, use auth plugins instead (see htpasswd below). # users: # admin: # crypto.createHash('sha1').update(pass).digest('hex') # password: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 web: # WebUI is enabled as default, if you want disable it, just uncomment this line #enable: false title: Verdaccio # logo: logo.png auth: htpasswd: file: ./htpasswd # Maximum amount of users allowed to register, defaults to "+infinity". # 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/ # amount of time to wait for repository to respond # before giving up and use the local cached copy #timeout: 30s # maximum time in which data is considered up to date # # default is 2 minutes, so server won't request the same data from # uplink if a similar request was made less than 2 minutes ago #maxage: 2m # if two subsequent requests fail, no further requests will be sent to # this uplink for five minutes #max_fails: 2 #fail_timeout: 5m # timeouts are defined in the same way as nginx, see: # http://wiki.nginx.org/ConfigNotation # add/override HTTP headers sent to the uplink server # this allows for HTTP Basic auth for example: #headers: # authorization: "Basic YourBase64EncodedCredentials==" # set this to false to prevent tarballs from this upstream # to be stored in the local storage (defaults to true) #cache: false packages: '@*/*': # scoped packages access: $all publish: $authenticated proxy: npmjs # uncomment this for packages with "local-" prefix to be available # for admin only, it's a recommended way of handling private packages #'local-*': # access: admin # publish: admin # # you can override storage directory for a group of packages this way: # storage: 'local_storage' '**': # allow all users to read packages (including non-authenticated users) # # you can specify usernames/groupnames (depending on your auth plugin) # and three keywords: "$all", "$anonymous", "$authenticated" access: $all # allow 'admin' to publish packages publish: $authenticated # if package is not available locally, proxy requests to 'npmjs' registry proxy: npmjs ##################################################################### # Advanced settings ##################################################################### ## Special packages publish configurations #publish: ## This will allow the publisher to publish packages even if any uplink is down. # allow_offline: true # if you use nginx with custom path, use this to override links #url_prefix: https://dev.company.local/verdaccio/ # You can specify listen address (or simply a port). # If you add multiple values, verdaccio will listen on all of them. # # Examples: # #listen: # - localhost:4873 # default value # - http://localhost:4873 # same thing # - 0.0.0.0:4873 # listen on all addresses (INADDR_ANY) # - https://example.org:4873 # if you want to use https # - [::1]:4873 # ipv6 # - unix:/tmp/verdaccio.sock # unix socket # Configure HTTPS, it is required if you use "https" protocol above. #https: # key: path/to/server.key # cert: path/to/server.crt # ca: path/to/server.pem # type: file | stdout | stderr # level: trace | debug | info | http (default) | warn | error | fatal # # parameters for file: name is filename # {type: 'file', path: 'verdaccio.log', level: 'debug'}, # # parameters for stdout and stderr: format: json | pretty | pretty-timestamped # {type: 'stdout', format: 'pretty', level: 'debug'}, logs: - {type: stdout, format: pretty, level: http} #- {type: file, path: verdaccio.log, level: info} # you can specify proxy used with all requests in wget-like manner here # (or set up ENV variables with the same name) #http_proxy: http://something.local/ #https_proxy: https://something.local/ #no_proxy: localhost,127.0.0.1 # maximum size of uploaded json document # increase it if you have "request entity too large" errors #max_body_size: 1mb # Notify Settings # Notify was built primarily to use with Slack's Incoming # webhooks, but will also deliver a simple payload to # any endpoint. Currently only active for publish / create # commands. notify: # Choose a method. Technically this will accept any HTTP # request method, but probably stick to GET or POST method: POST # Only run this notification if the package name matches the regular # expression packagePattern: ^example-package$ # Any flags to be used with the regular expression packagePatternFlags: i # If this endpoint requires specific headers, set them here # as an array of key: value objects. headers: [{'Content-type': 'application/x-www-form-urlencoded'}] # set the URL endpoint for this call endpoint: https://hooks.slack.com/... # Finally, the content you will be sending in the body. # This data will first be run through Handlebars to parse # any Handlebar expressions. All data housed in the metadata object # is available for use within the expressions. content: ' {{ handlebar-expression }}' # For Slack, follow the following format: # content: '{ "text": "Package *{{ name }}* published to version *{{ dist-tags.latest }}*", "username": "Verdaccio", "icon_emoji": ":package:" }' # Multiple notification endpoints can be created by specifying a collection 'example-package-1': method: POST # Only run this notification if the package name matches the regular # expression packagePattern: ^example-package-regex$ # Any flags to be used with the regular expression # since verdaccio 2.2.2 this property has been disabled read #108 # it will be re-enabled after 2.5.0 # packagePatternFlags: i # If this endpoint requires specific headers, set them here # as an array of key: value objects. # headers supports as well a literal object headers: {'Content-type': 'application/x-www-form-urlencoded'} # set the URL endpoint for this call endpoint: https://hooks.slack.com/... # Finally, the content you will be sending in the body. # This data will first be run through Handlebars to parse # any Handlebar expressions. All data housed in the metadata object # is available for use within the expressions. content: ' {{ handlebar-expression }}' # For Slack, follow the following format: # content: '{ "text": "Package *{{ name }}* published to version *{{ dist-tags.latest }}*", "username": "Verdaccio", "icon_emoji": ":package:" }' # Configure plugins that can register custom middlewares #middlewares: # plugin-name: # setting: true