diff --git a/packages/addons/service/mariadb/changelog.txt b/packages/addons/service/mariadb/changelog.txt
new file mode 100644
index 0000000000..af9f010a45
--- /dev/null
+++ b/packages/addons/service/mariadb/changelog.txt
@@ -0,0 +1,2 @@
+100
+- initial version
diff --git a/packages/addons/service/mariadb/icon/icon.png b/packages/addons/service/mariadb/icon/icon.png
new file mode 100644
index 0000000000..4337d6d064
Binary files /dev/null and b/packages/addons/service/mariadb/icon/icon.png differ
diff --git a/packages/addons/service/mariadb/package.mk b/packages/addons/service/mariadb/package.mk
new file mode 100644
index 0000000000..905d6e75ff
--- /dev/null
+++ b/packages/addons/service/mariadb/package.mk
@@ -0,0 +1,97 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
+
+PKG_NAME="mariadb"
+PKG_VERSION="10.3.11"
+PKG_REV="100"
+PKG_SHA256="211655b794c9d5397ba3be6c90737eac02e882f296268299239db47ba328f1b2"
+PKG_LICENSE="GPL2"
+PKG_SITE="https://mariadb.org"
+PKG_URL="https://downloads.mariadb.org/interstitial/${PKG_NAME}-${PKG_VERSION}/source/${PKG_NAME}-${PKG_VERSION}.tar.gz"
+PKG_DEPENDS_HOST="toolchain ncurses:host"
+PKG_DEPENDS_TARGET="toolchain binutils bzip2 libaio libxml2 lzo ncurses openssl systemd zlib mariadb:host"
+PKG_SHORTDESC="MariaDB is a community-developed fork of the MySQL."
+PKG_LONGDESC="MariaDB (${PKG_VERSION}) is a fast SQL database server and a drop-in replacement for MySQL."
+PKG_TOOLCHAIN="cmake"
+PKG_BUILD_FLAGS="-gold"
+
+PKG_IS_ADDON="yes"
+PKG_SECTION="service"
+PKG_ADDON_NAME="MariaDB SQL database server"
+PKG_ADDON_TYPE="xbmc.service"
+
+configure_package() {
+ PKG_CMAKE_OPTS_HOST=" \
+ -DCMAKE_INSTALL_MESSAGE=NEVER \
+ -DSTACK_DIRECTION=-1 \
+ -DHAVE_IB_GCC_ATOMIC_BUILTINS=1 \
+ -DCMAKE_CROSSCOMPILING=OFF \
+ import_executables"
+
+ PKG_CMAKE_OPTS_TARGET=" \
+ -DCMAKE_INSTALL_MESSAGE=NEVER \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DBUILD_CONFIG=mysql_release \
+ -DFEATURE_SET=classic \
+ -DSTACK_DIRECTION=1 \
+ -DDISABLE_LIBMYSQLCLIENT_SYMBOL_VERSIONING=ON \
+ -DCMAKE_CROSSCOMPILING=ON \
+ -DIMPORT_EXECUTABLES=${PKG_BUILD}/.${HOST_NAME}/import_executables.cmake \
+ -DWITHOUT_AWS_KEY_MANAGEMENT=ON \
+ -DWITH_EXTRA_CHARSETS=complex \
+ -DWITH_SSL=system \
+ -DWITH_SSL=${SYSROOT_PREFIX}/usr \
+ -DWITH_JEMALLOC=OFF \
+ -DWITH_PCRE=bundled \
+ -DWITH_ZLIB=bundled \
+ -DWITH_EDITLINE=bundled \
+ -DWITH_LIBEVENT=bundled \
+ -DCONNECT_WITH_LIBXML2=bundled \
+ -DSKIP_TESTS=ON \
+ -DWITH_DEBUG=OFF \
+ -DWITH_UNIT_TESTS=OFF \
+ -DENABLE_DTRACE=OFF \
+ -DSECURITY_HARDENED=OFF \
+ -DWITH_EMBEDDED_SERVER=OFF \
+ -DWITHOUT_SERVER=OFF \
+ -DPLUGIN_AUTH_SOCKET=STATIC \
+ -DDISABLE_SHARED=NO \
+ -DENABLED_PROFILING=OFF \
+ -DENABLE_STATIC_LIBS=OFF \
+ -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \
+ -DWITH_SAFEMALLOC=OFF \
+ -DWITHOUT_AUTH_EXAMPLES=ON"
+}
+
+make_host() {
+ ninja ${NINJA_OPTS} import_executables
+}
+
+makeinstall_host() {
+ :
+}
+
+makeinstall_target() {
+ # use only for addon
+ DESTDIR=${PKG_BUILD}/.install_addon ninja ${NINJA_OPTS} install
+ rm -rf "${PKG_BUILD}/.install_addon/usr/mysql-test"
+}
+
+addon() {
+ local ADDON="${ADDON_BUILD}/${PKG_ADDON_ID}"
+ local MARIADB="${PKG_BUILD}/.install_addon/usr"
+
+ mkdir -p ${ADDON}/bin
+ mkdir -p ${ADDON}/config
+
+ cp ${MARIADB}/bin/mysql \
+ ${MARIADB}/bin/mysqld \
+ ${MARIADB}/bin/mysqladmin \
+ ${MARIADB}/bin/mysql_secure_installation \
+ ${MARIADB}/bin/my_print_defaults \
+ ${MARIADB}/bin/resolveip \
+ ${MARIADB}/scripts/mysql_install_db \
+ ${ADDON}/bin
+
+ cp -PR ${MARIADB}/share ${ADDON}
+}
diff --git a/packages/addons/service/mariadb/source/bin/mariadb.start b/packages/addons/service/mariadb/source/bin/mariadb.start
new file mode 100755
index 0000000000..5a05c3a24a
--- /dev/null
+++ b/packages/addons/service/mariadb/source/bin/mariadb.start
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
+
+. /etc/profile
+oe_setup_addon service.mariadb
+
+# create dir for socket and pid
+mkdir -p /var/run/mysqld
+
+# exit if already running
+PID=$(ps aux | awk '/\/bin\/mysqld/ {print $1; exit 0}')
+if [ -n "$PID" ]; then
+ echo "MariaDB server is already running"
+ exit 0
+fi
+
+# check for first run and generate passwords
+DEF_XML="$ADDON_DIR/settings-default.xml"
+CUR_XML="$ADDON_HOME/settings.xml"
+
+if grep -q "@MYSQL_ROOT_PASS@" $DEF_XML; then
+ MYSQL_ROOT_PASS="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 8)"
+ MYSQL_KODI_PASS="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 8)"
+
+ sed -i "s|@MYSQL_ROOT_PASS@|$MYSQL_ROOT_PASS|g" $DEF_XML
+ sed -i "s|@MYSQL_KODI_PASS@|$MYSQL_KODI_PASS|g" $DEF_XML
+
+ cp $DEF_XML $CUR_XML
+fi
+
+# copy config file
+if [ ! -f $ADDON_HOME/my.cnf ]; then
+ cp $ADDON_DIR/config/my.cnf $ADDON_HOME
+fi
+
+# install database
+if [ ! -d "$ADDON_HOME/data/mysql" ]; then
+ echo "Installing database"
+ $ADDON_DIR/bin/mysql_install_db --basedir=$ADDON_DIR --datadir=$ADDON_HOME/data
+fi
+
+# init script to create user kodi and change passwords
+if [[ ! -f $ADDON_DIR/set_mysql_passwords.sql ]] || [[ $CUR_XML -nt $ADDON_DIR/set_mysql_passwords.sql ]]; then
+ cat << SQL_DATA > $ADDON_DIR/set_mysql_passwords.sql
+SET PASSWORD FOR 'root'@'localhost'=PASSWORD('$MYSQL_ROOT_PASS');
+CREATE USER IF NOT EXISTS 'kodi';
+SET PASSWORD FOR 'kodi'=PASSWORD('$MYSQL_KODI_PASS');
+GRANT ALL ON *.* TO 'kodi';
+flush privileges;
+
+SQL_DATA
+
+ init_file="--init-file=$ADDON_DIR/set_mysql_passwords.sql"
+fi
+
+echo "Starting mysqld"
+MYSQL_HOME="$ADDON_HOME" exec $ADDON_DIR/bin/mysqld $init_file &
diff --git a/packages/addons/service/mariadb/source/bin/mariadb.stop b/packages/addons/service/mariadb/source/bin/mariadb.stop
new file mode 100755
index 0000000000..049c577dec
--- /dev/null
+++ b/packages/addons/service/mariadb/source/bin/mariadb.stop
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
+
+kill $(cat /var/run/mysqld/mysqld.pid)
diff --git a/packages/addons/service/mariadb/source/config/my.cnf b/packages/addons/service/mariadb/source/config/my.cnf
new file mode 100644
index 0000000000..7f3fd3191e
--- /dev/null
+++ b/packages/addons/service/mariadb/source/config/my.cnf
@@ -0,0 +1,206 @@
+# MariaDB database server configuration file.
+#
+# You can copy this file to one of:
+# - "/etc/mysql/my.cnf" to set global options,
+# - "~/.my.cnf" to set user-specific options.
+#
+# One can use all long options that the program supports.
+# Run program with --help to get a list of available options and with
+# --print-defaults to see which it would actually understand and use.
+#
+# For explanations see
+# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
+
+# This will be passed to all mysql clients
+# It has been reported that passwords should be enclosed with ticks/quotes
+# escpecially if they contain "#" chars...
+# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
+[client]
+port = 3306
+socket = /var/run/mysqld/mysqld.sock
+
+# Here is entries for some specific programs
+# The following values assume you have at least 32M ram
+
+# This was formally known as [safe_mysqld]. Both versions are currently parsed.
+[mysqld_safe]
+socket = /var/run/mysqld/mysqld.sock
+nice = 0
+
+[mysqld]
+#
+# * Basic Settings
+#
+user = root
+pid-file = /var/run/mysqld/mysqld.pid
+socket = /var/run/mysqld/mysqld.sock
+port = 3306
+basedir = /storage/.kodi/addons/service.mariadb
+datadir = /storage/.kodi/userdata/addon_data/service.mariadb/data
+log-error = /storage/.kodi/userdata/addon_data/service.mariadb/mysqld.log
+tmpdir = /tmp
+#lc_messages_dir = /usr/share/mysql
+lc_messages = en_US
+skip-external-locking
+# Kodi needs more for library (256K should probably be enough)
+#thread_stack = 128K
+thread_stack = 384K
+#
+# Instead of skip-networking the default is now to listen only on
+# localhost which is more compatible and is not less secure.
+#bind-address = 127.0.0.1
+#
+# * Fine Tuning
+#
+max_connections = 100
+connect_timeout = 5
+wait_timeout = 600
+max_allowed_packet = 16M
+thread_cache_size = 128
+sort_buffer_size = 4M
+bulk_insert_buffer_size = 16M
+tmp_table_size = 32M
+max_heap_table_size = 32M
+#
+# * MyISAM
+#
+# This replaces the startup script and checks MyISAM tables if needed
+# the first time they are touched. On error, make copy and try a repair.
+myisam_recover_options = BACKUP
+key_buffer_size = 128M
+#open-files-limit = 2000
+#table_open_cache = 400
+table_open_cache = 1000
+myisam_sort_buffer_size = 512M
+concurrent_insert = 2
+read_buffer_size = 2M
+read_rnd_buffer_size = 1M
+#
+# * Query Cache Configuration
+#
+# Cache only tiny result sets, so we can fit more in the query cache.
+query_cache_limit = 128K
+query_cache_size = 64M
+# for more write intensive setups, set to DEMAND or OFF
+#query_cache_type = DEMAND
+#
+# * Logging and Replication
+#
+# Both location gets rotated by the cronjob.
+# Be aware that this log type is a performance killer.
+# As of 5.1 you can enable the log at runtime!
+#general_log_file = /var/log/mysql/mysql.log
+#general_log = 1
+#
+# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
+#
+# we do want to know about network errors and such
+log_warnings = 2
+#
+# Enable the slow query log to see queries with especially long duration
+#slow_query_log[={0|1}]
+slow_query_log_file = /var/log/mysql/mariadb-slow.log
+long_query_time = 10
+#log_slow_rate_limit = 1000
+log_slow_verbosity = query_plan
+
+#log-queries-not-using-indexes
+#log_slow_admin_statements
+#
+# The following can be used as easy to replay backup logs or for replication.
+# note: if you are setting up a replication slave, see README.Debian about
+# other settings you may need to change.
+#server-id = 1
+#report_host = master1
+#auto_increment_increment = 2
+#auto_increment_offset = 1
+# disable binary log
+#log_bin = /var/log/mysql/mariadb-bin
+#log_bin_index = /var/log/mysql/mariadb-bin.index
+# not fab for performance, but safer
+#sync_binlog = 1
+expire_logs_days = 10
+max_binlog_size = 100M
+# slaves
+#relay_log = /var/log/mysql/relay-bin
+#relay_log_index = /var/log/mysql/relay-bin.index
+#relay_log_info_file = /var/log/mysql/relay-bin.info
+#log_slave_updates
+#read_only
+#
+# If applications support it, this stricter sql_mode prevents some
+# mistakes like inserting invalid dates etc.
+#sql_mode = NO_ENGINE_SUBSTITUTION,TRADITIONAL
+#
+# * InnoDB
+#
+# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
+# Read the manual for more InnoDB related options. There are many!
+default_storage_engine = InnoDB
+# you can't just change log file size, requires special procedure
+#innodb_log_file_size = 50M
+
+# optimizations https://forum.kodi.tv/showthread.php?tid=329046&pid=2708799 #pid2708799
+# https://discourse.coreelec.org/t/kodi-and-mariadb-part-2/513
+# innodb_buffer_pool_size=2G # MariaDB recommends using 80% of your available memory but the default 1G might be enough. Always set to multiples of 1G.
+# innodb_buffer_pool_instances=2 # When innodb_buffer_pool_size is > 1G, MariaDB will split the pool in instances. They should be even dividers of 1G.
+# innodb_file_format=Barracuda # Gone in 10.3 / This is an optimized storage engine not available in MySQL
+# innodb_log_block_size=4096 # Gone in 10.3 / Default is 512, when using an SSD or 4k drives, block size should be 4096
+# innodb_adaptive_hash_index=OFF # For Kodi no benefit is gained from additional indexes. This should only be used with large databases.
+# character-set-server=utf8 # I really hope you all used this in MySQL already. This avoids potential pitfalls with text in exotic codepages.
+# key-buffer-size=64k # When not using MyISAM as storage engine, this buffer can be reduced to a minimum
+# skip-name-resolve # Avoids name resolving in the local network, thus reducing overhead. That also means that all connections are done by IP only.
+# optimizer_search_depth=1 # Here we are, this is winner of the year.
+
+innodb_buffer_pool_size = 256M
+innodb_log_buffer_size = 8M
+innodb_file_per_table = 1
+innodb_open_files = 400
+innodb_io_capacity = 400
+innodb_flush_method = O_DIRECT
+character-set-server=utf8 # This avoids potential pitfalls with text in exotic codepages.
+#skip-name-resolve # Avoids name resolving in the local network, thus reducing overhead. That also means that all connections are done by IP only.
+optimizer_search_depth=1 # Here we are, this is winner of the year.
+
+#
+# * Security Features
+#
+# Read the manual, too, if you want chroot!
+# chroot = /var/lib/mysql/
+#
+# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
+#
+# ssl-ca=/etc/mysql/cacert.pem
+# ssl-cert=/etc/mysql/server-cert.pem
+# ssl-key=/etc/mysql/server-key.pem
+
+#
+# * Galera-related settings
+#
+[galera]
+# Mandatory settings
+#wsrep_on=ON
+#wsrep_provider=
+#wsrep_cluster_address=
+#binlog_format=row
+#default_storage_engine=InnoDB
+#innodb_autoinc_lock_mode=2
+#
+# Allow server to accept connections on all interfaces.
+#
+#bind-address=0.0.0.0
+#
+# Optional setting
+#wsrep_slave_threads=1
+#innodb_flush_log_at_trx_commit=0
+
+[mysqldump]
+quick
+quote-names
+max_allowed_packet = 16M
+
+[mysql]
+#no-auto-rehash # faster start of mysql but no tab completion
+
+[isamchk]
+key_buffer = 16M
diff --git a/packages/addons/service/mariadb/source/default.py b/packages/addons/service/mariadb/source/default.py
new file mode 100644
index 0000000000..72eb7df141
--- /dev/null
+++ b/packages/addons/service/mariadb/source/default.py
@@ -0,0 +1,18 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
+
+import subprocess
+import xbmc
+import xbmcaddon
+
+class Monitor(xbmc.Monitor):
+ def __init__(self, *args, **kwargs):
+ xbmc.Monitor.__init__(self)
+ self.id = xbmcaddon.Addon().getAddonInfo('id')
+
+ def onSettingsChanged(self):
+ subprocess.call(['systemctl', 'restart', self.id])
+
+if __name__ == "__main__":
+ Monitor().waitForAbort()
+
diff --git a/packages/addons/service/mariadb/source/resources/language/English/strings.po b/packages/addons/service/mariadb/source/resources/language/English/strings.po
new file mode 100644
index 0000000000..e8458d0767
--- /dev/null
+++ b/packages/addons/service/mariadb/source/resources/language/English/strings.po
@@ -0,0 +1,22 @@
+# Kodi Media Center language file
+# Addon Name: mariadb
+# Addon id: service.mariadb
+# Addon Provider: Team LibreELEC
+msgid ""
+msgstr ""
+
+msgctxt "#30000"
+msgid "Accounts"
+msgstr ""
+
+msgctxt "#30001"
+msgid "Passwords"
+msgstr ""
+
+msgctxt "#30002"
+msgid "root"
+msgstr ""
+
+msgctxt "#30003"
+msgid "kodi"
+msgstr ""
diff --git a/packages/addons/service/mariadb/source/resources/settings.xml b/packages/addons/service/mariadb/source/resources/settings.xml
new file mode 100644
index 0000000000..f77e80cdbd
--- /dev/null
+++ b/packages/addons/service/mariadb/source/resources/settings.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/packages/addons/service/mariadb/source/settings-default.xml b/packages/addons/service/mariadb/source/settings-default.xml
new file mode 100644
index 0000000000..bd3557c81f
--- /dev/null
+++ b/packages/addons/service/mariadb/source/settings-default.xml
@@ -0,0 +1,4 @@
+
+ @MYSQL_ROOT_PASS@
+ @MYSQL_KODI_PASS@
+
diff --git a/packages/addons/service/mariadb/source/system.d/service.mariadb.service b/packages/addons/service/mariadb/source/system.d/service.mariadb.service
new file mode 100644
index 0000000000..b5cd63ff84
--- /dev/null
+++ b/packages/addons/service/mariadb/source/system.d/service.mariadb.service
@@ -0,0 +1,18 @@
+[Unit]
+Description=MariaDB server
+After=graphical.target network-online.service
+Before=kodi.service
+
+[Service]
+Type=forking
+PIDFile=/var/run/mysqld/mysqld.pid
+ExecStart=/bin/sh -c "exec sh /storage/.kodi/addons/service.mariadb/bin/mariadb.start"
+ExecStop=/bin/sh -c "exec sh /storage/.kodi/addons/service.mariadb/bin/mariadb.stop"
+TimeoutStartSec=60
+TimeoutStopSec=60
+Restart=always
+RestartSec=10
+StartLimitInterval=0
+
+[Install]
+WantedBy=kodi.service