diff --git a/blueprints/verdaccio/docker-compose.yml b/blueprints/verdaccio/docker-compose.yml
new file mode 100644
index 00000000..091f3d15
--- /dev/null
+++ b/blueprints/verdaccio/docker-compose.yml
@@ -0,0 +1,17 @@
+version: "3.8"
+
+services:
+ verdaccio:
+ image: verdaccio/verdaccio:6
+ environment:
+ - VERDACCIO_PORT=4873
+ ports:
+ - 4873
+ volumes:
+ - verdaccio_storage:/verdaccio/storage
+ - verdaccio_plugins:/verdaccio/plugins
+ - ../files/conf:/verdaccio/conf
+
+volumes:
+ verdaccio_storage:
+ verdaccio_plugins:
\ No newline at end of file
diff --git a/blueprints/verdaccio/template.toml b/blueprints/verdaccio/template.toml
new file mode 100644
index 00000000..996bbd54
--- /dev/null
+++ b/blueprints/verdaccio/template.toml
@@ -0,0 +1,259 @@
+[variables]
+main_domain = "${domain}"
+
+[config]
+[[config.domains]]
+serviceName = "verdaccio"
+port = 4873
+host = "${main_domain}"
+
+[[config.mounts]]
+filePath = "/conf/config.yaml"
+content = """
+#
+# This is the default configuration file. It allows all users to do anything,
+# please read carefully the documentation and best practices to
+# improve security.
+#
+# Look here for more config file examples:
+# https://github.com/verdaccio/verdaccio/blob/master/docker-examples/README.md
+#
+# Read about the best practices
+# https://verdaccio.org/docs/best
+
+# Path to a directory with all packages
+storage: /verdaccio/storage/data
+
+# Path to a directory with plugins to include, the plugins folder has the higher priority for loading plugins
+# Disable this folder to avoid warnings if is not used
+plugins: /verdaccio/plugins
+
+# Web UI settings
+# https://verdaccio.org/docs/webui
+web:
+ title: Verdaccio
+ # Disable complete web UI
+ # enabled: false
+ # Custom colors for header background and font
+ # primaryColor: "#4b5e40"
+ # Custom logos and favicon
+ # logo: ./path/to/logo.png
+ # logoDark: ./path/to/logoDark.png
+ # favicon: ./path/to/favicon.ico
+ # Disable gravatar support
+ # gravatar: false
+ # By default, packages are ordered ascending
+ # sort_packages: asc | desc
+ # Convert your UI to the dark side
+ # darkMode: true
+ # html_cache: true
+ # By default, all features are displayed
+ # login: true
+ # showInfo: true
+ # showSettings: true
+ # In combination with darkMode you can force specific theme
+ # showThemeSwitch: true
+ # showFooter: true
+ # showSearch: true
+ # showRaw: true
+ # showDownloadTarball: true
+ # showUplinks: true
+ #
+ # HTML tags injected before ends
+ # metaScripts:
+ # - ''
+ # - ''
+ # - ''
+ #
+ # HTML tags injected as first child in
+ # scriptsBodyBefore:
+ # - 'html before webpack scripts
'
+ #
+ # HTML tags injected as last child in
+ # scriptsBodyAfter:
+ # - ''
+ #
+ # Public path for template manifest scripts (only manifest)
+ # publicPath: http://somedomain.org/
+
+# Settings for authentication plugin
+# https://verdaccio.org/docs/configuration#authentication
+auth:
+ htpasswd:
+ file: /verdaccio/storage/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
+# https://verdaccio.org/docs/configuration#uplinks
+uplinks:
+ npmjs:
+ url: https://registry.npmjs.org/
+
+# Learn how to protect your packages
+# https://verdaccio.org/docs/protect-your-dependencies/
+# https://verdaccio.org/docs/configuration#packages
+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/unpublish packages
+ # (anyone can register by default, remember?)
+ publish: $authenticated
+ unpublish: $authenticated
+
+ # if package is not available locally, proxy requests to 'npmjs' registry
+ proxy: npmjs
+
+# To improve your security configuration and avoid dependency confusion
+# consider removing the proxy property for private packages
+# https://verdaccio.org/docs/best#remove-proxy-to-increase-security-at-private-packages
+
+# https://verdaccio.org/docs/configuration#server
+# 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
+ # The pluginPrefix replaces the default plugins prefix which is `verdaccio`. Please don't include `-`. If `something` is provided
+ # the resolved package will be `something-xxxx`.
+ # pluginPrefix: something
+ # A regex for the password validation /.{3}$/ (3 characters min)
+ # An example to limit to 10 characters minimum
+ # passwordValidationRegex: /.{10}$/
+ # Allow `req.ip` to resolve properly when Verdaccio is behind a proxy or load-balancer
+ # https://expressjs.com/en/guide/behind-proxies.html
+ # trustProxy: '127.0.0.1'
+
+# https://verdaccio.org/docs/configuration#offline-publish
+# publish:
+# allow_offline: false
+# check_owners: false
+# keep_readmes: 'latest' | 'tagged' | 'all'
+
+# Define public URL of registry in combination with VERDACCIO_PUBLIC_URL environment variable
+# https://verdaccio.org/docs/configuration#url-prefix
+# url_prefix: /verdaccio/
+#
+# Examples:
+# VERDACCIO_PUBLIC_URL='https://somedomain.org'
+# url_prefix: '/my_prefix'
+# // url -> https://somedomain.org/my_prefix/
+#
+# VERDACCIO_PUBLIC_URL='https://somedomain.org'
+# url_prefix: '/'
+# // url -> https://somedomain.org/
+#
+# VERDACCIO_PUBLIC_URL='https://somedomain.org/first_prefix'
+# url_prefix: '/second_prefix'
+# // url -> https://somedomain.org/second_prefix/
+
+# Security settings
+# https://verdaccio.org/docs/configuration#security
+# security:
+# api:
+# legacy: true
+# jwt:
+# sign:
+# expiresIn: 29d
+# verify:
+# someProp: [value]
+# web:
+# sign:
+# expiresIn: 1h # 1 hour by default
+# verify:
+# someProp: [value]
+
+# https://verdaccio.org/docs/configuration#user-rate-limit
+# userRateLimit:
+# windowMs: 50000
+# max: 1000
+
+# https://verdaccio.org/docs/configuration#max-body-size
+# max_body_size: 10mb
+
+# https://verdaccio.org/docs/configuration#listen-port
+# 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
+
+# The HTTPS configuration is useful if you do not consider use a HTTP Proxy
+# https://verdaccio.org/docs/configuration#https
+# https:
+# key: ./path/verdaccio-key.pem
+# cert: ./path/verdaccio-cert.pem
+# ca: ./path/verdaccio-csr.pem
+
+# https://verdaccio.org/docs/configuration#proxy
+# http_proxy: http://something.local/
+# https_proxy: https://something.local/
+# no_proxy: localhost,127.0.0.1,server.local
+
+# https://verdaccio.org/docs/configuration#notifications
+# notify:
+# method: 'POST'
+# headers: '[{ "Content-Type": "application/json" }]'
+# endpoint: 'https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken'
+# content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}'
+
+# Settings for middleware plugins
+# https://verdaccio.org/docs/plugins#middleware-configuration
+middlewares:
+ audit:
+ enabled: true
+ # timeout: 10000
+
+# Log settings
+# https://verdaccio.org/docs/logger
+# Redaction: https://getpino.io/#/docs/redaction
+# Synchronous logging: https://getpino.io/#/docs/asynchronous
+log:
+ type: stdout
+ format: pretty
+ level: http
+# redact:
+# paths: ['req.header.authorization','req.header.cookie','req.remoteAddress','req.remotePort','ip','remoteIP','user','msg']
+# censor: ''
+# sync: true
+
+# Feature flags (experimental settings that can be changed or removed in the future)
+# https://verdaccio.org/docs/configuration#experiments
+# experiments:
+# # Support for npm token command
+# token: false
+# # Enable tarball URL redirect for hosting tarball with a different server.
+# # The tarball_url_redirect can be a template string
+# tarball_url_redirect: 'https://mycdn.com/verdaccio/${packageName}/${filename}'
+# # The tarball_url_redirect can be a function, takes packageName and filename and returns the url,
+# # when working with a js configuration file
+# tarball_url_redirect(packageName, filename) {
+# const signedUrl = // generate a signed url
+# return signedUrl;
+# }
+# Renamed from "experiments" to "flags" in next major release
+# flags:
+# changePassword: true
+# searchRemote: true
+
+# Translate your registry, API and web UI
+# List of the available translations https://github.com/verdaccio/verdaccio/blob/master/packages/plugins/ui-theme/src/i18n/ABOUT_TRANSLATIONS.md
+i18n:
+ web: en-US
+"""
\ No newline at end of file
diff --git a/blueprints/verdaccio/verdaccio.svg b/blueprints/verdaccio/verdaccio.svg
new file mode 100644
index 00000000..a9e07b29
--- /dev/null
+++ b/blueprints/verdaccio/verdaccio.svg
@@ -0,0 +1,38 @@
+
diff --git a/meta.json b/meta.json
index b761f094..f3ec429e 100644
--- a/meta.json
+++ b/meta.json
@@ -6405,6 +6405,23 @@
"open-source"
]
},
+ {
+ "id": "verdaccio",
+ "name": "Verdaccio",
+ "version": "6",
+ "description": "A lightweight Node.js private proxy registry",
+ "logo": "verdaccio.svg",
+ "links": {
+ "github": "https://github.com/verdaccio/verdaccio",
+ "website": "https://www.verdaccio.org/",
+ "docs": "https://www.verdaccio.org/docs/what-is-verdaccio"
+ },
+ "tags": [
+ "node.js",
+ "package-repository",
+ "npm"
+ ]
+ },
{
"id": "vikunja",
"name": "Vikunja",