diff --git a/python/gui/auto_generated/qgisinterface.sip.in b/python/gui/auto_generated/qgisinterface.sip.in
index cbd7c0bd52d..3d5fd2bf69f 100644
--- a/python/gui/auto_generated/qgisinterface.sip.in
+++ b/python/gui/auto_generated/qgisinterface.sip.in
@@ -542,7 +542,14 @@ Returns the native draw action.
virtual QAction *actionAddXyzLayer() = 0;
%Docstring
-Returns the native Add XYZ layer action.
+Returns the native Add XYZ Layer action.
+
+.. versionadded:: 3.14
+%End
+
+ virtual QAction *actionAddVectorTileLayer() = 0;
+%Docstring
+Returns the native Add Vector Tile Layer action.
.. versionadded:: 3.14
%End
diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp
index e56a223b4d9..24082eac423 100644
--- a/src/app/qgisapp.cpp
+++ b/src/app/qgisapp.cpp
@@ -2663,6 +2663,7 @@ void QgisApp::createActions()
connect( mActionAddOracleLayer, &QAction::triggered, this, [ = ] { dataSourceManager( QStringLiteral( "oracle" ) ); } );
connect( mActionAddWmsLayer, &QAction::triggered, this, [ = ] { dataSourceManager( QStringLiteral( "wms" ) ); } );
connect( mActionAddXyzLayer, &QAction::triggered, this, [ = ] { dataSourceManager( QStringLiteral( "xyz" ) ); } );
+ connect( mActionAddVectorTileLayer, &QAction::triggered, this, [ = ] { dataSourceManager( QStringLiteral( "vectortile" ) ); } );
connect( mActionAddWcsLayer, &QAction::triggered, this, [ = ] { dataSourceManager( QStringLiteral( "wcs" ) ); } );
connect( mActionAddWfsLayer, &QAction::triggered, this, [ = ] { dataSourceManager( QStringLiteral( "WFS" ) ); } );
connect( mActionAddAfsLayer, &QAction::triggered, this, [ = ] { dataSourceManager( QStringLiteral( "arcgisfeatureserver" ) ); } );
@@ -3972,6 +3973,7 @@ void QgisApp::setTheme( const QString &themeName )
mActionCustomProjection->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionCustomProjection.svg" ) ) );
mActionAddWmsLayer->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddWmsLayer.svg" ) ) );
mActionAddXyzLayer->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddXyzLayer.svg" ) ) );
+ mActionAddVectorTileLayer->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddVectorTileLayer.svg" ) ) );
mActionAddWcsLayer->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddWcsLayer.svg" ) ) );
mActionAddWfsLayer->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddWfsLayer.svg" ) ) );
mActionAddAfsLayer->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddAfsLayer.svg" ) ) );
diff --git a/src/app/qgisapp.h b/src/app/qgisapp.h
index 1b963c3b6f8..b975abce044 100644
--- a/src/app/qgisapp.h
+++ b/src/app/qgisapp.h
@@ -519,6 +519,7 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
QAction *actionAddSpatiaLiteLayer() { return mActionAddSpatiaLiteLayer; }
QAction *actionAddWmsLayer() { return mActionAddWmsLayer; }
QAction *actionAddXyzLayer() { return mActionAddXyzLayer; }
+ QAction *actionAddVectorTileLayer() { return mActionAddVectorTileLayer; }
QAction *actionAddWcsLayer() { return mActionAddWcsLayer; }
QAction *actionAddWfsLayer() { return mActionAddWfsLayer; }
QAction *actionAddAfsLayer() { return mActionAddAfsLayer; }
diff --git a/src/app/qgisappinterface.cpp b/src/app/qgisappinterface.cpp
index bbeb95f52f1..92750c9906e 100644
--- a/src/app/qgisappinterface.cpp
+++ b/src/app/qgisappinterface.cpp
@@ -685,6 +685,7 @@ QAction *QgisAppInterface::actionAddRasterLayer() { return qgis->actionAddRaster
QAction *QgisAppInterface::actionAddPgLayer() { return qgis->actionAddPgLayer(); }
QAction *QgisAppInterface::actionAddWmsLayer() { return qgis->actionAddWmsLayer(); }
QAction *QgisAppInterface::actionAddXyzLayer() { return qgis->actionAddXyzLayer(); }
+QAction *QgisAppInterface::actionAddVectorTileLayer() { return qgis->actionAddVectorTileLayer(); }
QAction *QgisAppInterface::actionAddAfsLayer() { return qgis->actionAddAfsLayer(); }
QAction *QgisAppInterface::actionAddAmsLayer() { return qgis->actionAddAmsLayer(); }
QAction *QgisAppInterface::actionCopyLayerStyle() { return qgis->actionCopyLayerStyle(); }
diff --git a/src/app/qgisappinterface.h b/src/app/qgisappinterface.h
index eac237227ad..52ab18f8625 100644
--- a/src/app/qgisappinterface.h
+++ b/src/app/qgisappinterface.h
@@ -235,6 +235,7 @@ class APP_EXPORT QgisAppInterface : public QgisInterface
QAction *actionAddPgLayer() override;
QAction *actionAddWmsLayer() override;
QAction *actionAddXyzLayer() override;
+ QAction *actionAddVectorTileLayer() override;
QAction *actionAddAfsLayer() override;
QAction *actionAddAmsLayer() override;
QAction *actionCopyLayerStyle() override;
diff --git a/src/gui/qgisinterface.h b/src/gui/qgisinterface.h
index 2b305b25bca..06b24ff9309 100644
--- a/src/gui/qgisinterface.h
+++ b/src/gui/qgisinterface.h
@@ -482,10 +482,16 @@ class GUI_EXPORT QgisInterface : public QObject
virtual QAction *actionAddWmsLayer() = 0;
/**
- * Returns the native Add XYZ layer action.
+ * Returns the native Add XYZ Layer action.
* \since QGIS 3.14
*/
virtual QAction *actionAddXyzLayer() = 0;
+
+ /**
+ * Returns the native Add Vector Tile Layer action.
+ * \since QGIS 3.14
+ */
+ virtual QAction *actionAddVectorTileLayer() = 0;
//! Returns the native Add ArcGIS FeatureServer action.
virtual QAction *actionAddAfsLayer() = 0;
//! Returns the native Add ArcGIS MapServer action.
diff --git a/src/ui/qgisapp.ui b/src/ui/qgisapp.ui
index d4d1aa46487..ae0ce24236f 100644
--- a/src/ui/qgisapp.ui
+++ b/src/ui/qgisapp.ui
@@ -192,6 +192,7 @@
+
@@ -3311,6 +3312,18 @@ Shows placeholders for labels which could not be placed, e.g. due to overlaps wi
Add XYZ Layer…
+
+
+
+ :/images/themes/default/mActionAddVectorTileLayer.svg:/images/themes/default/mActionAddVectorTileLayer.svg
+
+
+ Add Vector TIle Layer…
+
+
+ Add Vector Tile Layer…
+
+