diff --git a/doc/sonic-application-extention/img/docker-infra-concepts.svg b/doc/sonic-application-extention/img/docker-infra-concepts.svg
new file mode 100644
index 00000000000..2f6c3af628a
--- /dev/null
+++ b/doc/sonic-application-extention/img/docker-infra-concepts.svg
@@ -0,0 +1,268 @@
+
+
+
+
diff --git a/doc/sonic-application-extention/img/feature-start.svg b/doc/sonic-application-extention/img/feature-start.svg
new file mode 100644
index 00000000000..e049f245e84
--- /dev/null
+++ b/doc/sonic-application-extention/img/feature-start.svg
@@ -0,0 +1,494 @@
+
+
+
+
diff --git a/doc/sonic-application-extention/img/feature-stop.svg b/doc/sonic-application-extention/img/feature-stop.svg
new file mode 100644
index 00000000000..d14439ec11e
--- /dev/null
+++ b/doc/sonic-application-extention/img/feature-stop.svg
@@ -0,0 +1,469 @@
+
+
+
+
diff --git a/doc/sonic-application-extention/img/install-flow.svg b/doc/sonic-application-extention/img/install-flow.svg
new file mode 100755
index 00000000000..bab72c398f5
--- /dev/null
+++ b/doc/sonic-application-extention/img/install-flow.svg
@@ -0,0 +1,652 @@
+
+
+
+
diff --git a/doc/sonic-application-extention/img/packages-json.svg b/doc/sonic-application-extention/img/packages-json.svg
new file mode 100644
index 00000000000..73fdbd3a5ae
--- /dev/null
+++ b/doc/sonic-application-extention/img/packages-json.svg
@@ -0,0 +1,390 @@
+
+
+
+
diff --git a/doc/sonic-application-extention/img/sonic-package-integration.svg b/doc/sonic-application-extention/img/sonic-package-integration.svg
new file mode 100644
index 00000000000..23c96ba575a
--- /dev/null
+++ b/doc/sonic-application-extention/img/sonic-package-integration.svg
@@ -0,0 +1,319 @@
+
+
+
+
diff --git a/doc/sonic-application-extention/img/sonic-pkg-basic-concepts.svg b/doc/sonic-application-extention/img/sonic-pkg-basic-concepts.svg
new file mode 100644
index 00000000000..f02e0a2afcb
--- /dev/null
+++ b/doc/sonic-application-extention/img/sonic-pkg-basic-concepts.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/doc/sonic-application-extention/img/uninstall-flow.svg b/doc/sonic-application-extention/img/uninstall-flow.svg
new file mode 100644
index 00000000000..e97589fc013
--- /dev/null
+++ b/doc/sonic-application-extention/img/uninstall-flow.svg
@@ -0,0 +1,576 @@
+
+
+
+
diff --git a/doc/sonic-application-extention/img/upgrade-flow.svg b/doc/sonic-application-extention/img/upgrade-flow.svg
new file mode 100755
index 00000000000..8d22f4f4fc1
--- /dev/null
+++ b/doc/sonic-application-extention/img/upgrade-flow.svg
@@ -0,0 +1,677 @@
+
+
+
+
diff --git a/doc/sonic-application-extention/sonic-application-extention-hld.md b/doc/sonic-application-extention/sonic-application-extention-hld.md
new file mode 100644
index 00000000000..50dbfb10eb9
--- /dev/null
+++ b/doc/sonic-application-extention/sonic-application-extention-hld.md
@@ -0,0 +1,1510 @@
+
+# SONiC Application Extension Infrastructure
+
+
+#### Rev 0.1
+
+
+## Table of Content
+- [Revision](#revision)
+- [Scope](#scope)
+- [Definitions/Abbreviations](#definitionsabbreviations)
+- [Overview](#overview)
+- [Requirements](#requirements)
+- [Architecture Design](#architecture-design)
+- [High-Level Design](#high-level-design)
+- [SONiC Package](#sonic-package)
+- [Built-In SONiC Packages](#built-in-sonic-packages)
+- [SONiC Package Management](#sonic-package-management)
+- [SONiC Package Database](#sonic-package-database)
+- [SONiC Build System](#sonic-build-system)
+- [SONiC Base Image and Packages Versioning](#sonic-base-image-and-packages-versioning)
+- [SONiC Application Extension Security Considerations](#sonic-application-extension-security-considerations)
+- [Configuration and management](#configuration-and-management)
+- [SONiC Package Upgrade Flow](#sonic-package-upgrade-flow)
+- [Manifest](#manifest)
+- [SONiC Package Installation](#sonic-package-installation)
+- [SONiC Package Changelog](#sonic-package-changelog)
+- [SONiC Docker Container Resource Restrictions](#sonic-docker-container-resource-restrictions)
+- [SONiC Package Docker Container Lifetime](#sonic-package-docker-container-lifetime)
+- [Initial Extension Configuration](#initial-extension-configuration)
+- [CLI extension](#cli-extension)
+- [SONiC Processes and Docker Statistics Telemetry Support](#sonic-processes-and-docker-statistics-telemetry-support)
+- [Feature Concept Integration](#feature-concept-integration)
+- [Multi-DB support](#multi-db-support)
+- [Configuration Reload](#configuration-reload)
+- [System Dump](#system-dump)
+- [Multi-ASIC](#multi-asic)
+- [Warmboot and Fastboot Design Impact](#warmboot-and-fastboot-design-impact)
+- [SONiC-2-SONiC upgrade](#sonic-2-sonic-upgrade)
+- [Kubernetes & SONiC Application Extension](#kubernetes--sonic-application-extension)
+- [3rd party Docker images](#3rd-party-docker-images)
+- [Installing 3rd party image as is.](#installing-3rd-party-image-as-is)
+- [Prepare 3rd party image as to be SONiC compliant](#prepare-3rd-party-image-as-to-be-sonic-compliant)
+- [SONiC Build System](#sonic-build-system-1)
+ - [SONiC SDK Docker Images](#sonic-sdk-docker-images)
+- [SAI API](#sai-api)
+- [Restrictions/Limitations](#restrictionslimitations)
+- [Testing Requirements/Design](#testing-requirementsdesign)
+- [Open/Action items](#openaction-items)
+
+
+## List of Figures
+- [Figure 1. Basic Concepts](#figure-1-basic-concepts)
+- [Figure 2. High Level Overview of SONiC Package integration](#figure-2-high-level-overview-of-sonic-package-integration)
+- [Figure 3. SONiC Package Installation Flow](#figure-3-sonic-package-installation-flow)
+- [Figure 4. SONiC Package Uninstallation Flow](#figure-4-sonic-package-uninstallation-flow)
+- [Figure 5. SONiC Package Upgrade Flow](#figure-5-sonic-package-upgrade-flow)
+- [Figure 6. Feature Start Sequence Diagram](#figure-6-feature-start-sequence-diagram)
+- [Figure 7. Feature Stop Sequence Diagram](#figure-7-feature-stop-sequence-diagram)
+
+### Revision
+
+| Rev | Date | Author | Change Description |
+| :---: | :-----: | :--------------: | ------------------ |
+| 0.1 | 09/2020 | Stepan Blyshchak | Phase 1 Design |
+
+### Scope
+
+This document describes the high level design of SONiC Application Extension Infrastructure.
+
+### Definitions/Abbreviations
+
+| **Abbreviation** | **Definition** |
+| ---------------- | ------------------------------------- |
+| SONiC | Software for Open Networking in Cloud |
+| DB | Database |
+| API | Application Programming Interface |
+| SAI | Switch Abstraction Interface |
+| YANG | Yet Another Next Generation |
+| JSON | Java Script Object Notation |
+| XML | eXtensible Markup Language |
+| gNMI | gRPC Network Management Interface |
+
+### Overview
+
+
+#### Feature Overview
+
+SONiC Application Extension Infrastructure is a SONiC infrastructure and framework for managing SONiC Application Packages which in this scope are
+SONiC compatible Docker images distributed individually from one another and from the base SONiC image.
+
+
+#### Motivation
+
+SONiC NOS was built with extendability in mind. The key role here play the fact that the main building block of SONiC is Docker.
+Every SONiC functionality piece is packaged inside a Docker image which then is run on a SONiC box. As of today, SONiC comes with a set
+of Docker containers that are built-in into SONiC image, limiting users to a predefined functionality that is supported by SONiC.
+The end goal of this proposal is to achieve building a system which makes it possible to extend SONiC base set of features at runtime
+without a need to upgrade the whole SONiC OS.
+
+We are going to leverage the existing Docker and Docker registry infrastructure and build SONiC Application Extension framework on top of it.
+While Docker provides a tool for packaging an application and Docker registry for hosting it, it is not enough to just execute "docker pull"
+to make an application "look and feel" like a native SONiC application.
+
+SONiC Application Extension framework aims at making the process of development and integration of 3-rd party applications with a native
+integration into SONiC. For that we need to provide SONiC Application Extension Infrastructure with the API to connect every 3rd party application
+with SONiC native infrastructure, like access to the database, SAI ASIC programming interface, sonic utility CLI, Klish based CLI, REST API,
+gNMI, logging infrastructure, warm and fast restarts, etc.
+
+When SONiC Application Extension infrastructure will become a part of SONiC, application developer will not have to integrate every application
+into SONiC codebase but maintain them separately. This follows all the popular Linux distributions that allow for installation of external applications.
+
+### Requirements
+
+
+#### Functional requirements
+
+This section describes a list of requirements for both SONiC Application Extension Infrastructure.
+
+The following list of requirements has to be met for SONiC Application Extension Infrastructure:
+- SONiC OS must provide a CLI to manage SONiC repositories and packages.
+ This includes package installation, un-installation,
+ both cold and warm upgrades as well as adding and removing repositories.
+- Definition for a SONiC compatible Docker image and metadata a this Docker image must provide.
+- Versioning schema and a mechanism to control package dependencies and conflicts.
+- All SONiC packages are registered as an optional *feature* in SONiC, thus "feature"
+ CLI commands are applicable to SONiC Packages.
+- Application upgrades: container level upgrade and system level upgrade - SONiC-2-SONiC upgrade.
+- SONiC utilities CLI extension mechanism.
+- Resource sharing with SONiC Package container: redis database, syslog, Linux resources etc.
+- Build infrastructure and tools for easier package development.
+
+### Architecture Design
+
+This section covers the changes that are required in the SONiC architecture. In general, it is expected that the current architecture is not changed.
+This section should explain how the new feature/enhancement (module/sub-module) fits in the existing architecture.
+
+### High-Level Design
+
+
+### Basic concepts
+
+Basic definitions:
+
+*SONiC Package* - SONiC compatible Docker image providing its functionality as a service
+*SONiC Package Repository* - store of SONiC compatible Docker images that can be referenced by a tag
+*Docker Registry* - a storage and content delivery system, holding named Docker images, available in different tagged versions
+
+
+###### Figure 1. Basic Concepts
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The option maps to systemd's unit "Requires=". | +| /service/requisite | list of strings | no | List of SONiC services that are requisite for this package.
The option maps to systemd's unit "Requisite=". | +| /service/wanted-by | list of strings | no | List of SONiC services that wants for this package.
The option maps to systemd's unit "WantedBy=". |
+| /service/after | list of strings | no | Boot order dependency. List of SONiC services the application is set to start after on system boot. |
+| /service/before | list of strings | no | Boot order dependency. List of SONiC services the application is set to start before on system boot. |
+| /service/wanted-by | list of strings | no | Services list that "wants" this service. Maps to systemd's WantedBy |
+| /service/delayed | boolean | no | Wether to generate a timer to delay the service on boot. Defaults to false. |
+
+
+
+##### /usr/local/bin/*feature*.sh
+
+The script under */usr/local/bin/* has two feature specific use cases.
+
+* In case when the feature requires to execute specific container lifecycle actions the code to be executed after the container
+has started and before the container is going down is executed within this script. SONiC package manifest includes two data
+nodes - */service/post-start-action* and */service/pre-shutdown-action*. This node is of type string and the value is the path
+to an executable to execute within Docker container. Note, *post-start-action* does not guaranty that the action will be executed
+before or after a the container ENTRYPOINT is started.
+
+Example of container lifecycle hook can apply to a database package. A database systemd service should not reach started state
+before redis process is ready otherwise other services will start but fail to connect to the database. Since, there is no control
+when the redis process starts a *post-start-action* script may execute "sonic-db-cli ping" till the ping is succeessful.
+This will ensure that service start is blocked till the redis service is up and running.
+
+The *pre-shutdown-action* might be usefull to execute a specific action to prepare for warm reboot. For example, teamd script that sends
+SIGUSR1 to teamd to initiate warm shutdown. Note, the usage of the pre-shutdown action is not limited to warm restart and is invoked every
+time the container is about to be stopped or killed.
+
+* Another use cases is to manage coldboot-only dependent services by conditionally starting and stopping dependent services based on the
+warm reboot configuration flag. For example, a DHCP relay service is a coldboot-only dependent service of swss service, thus a warm restart
+of swss should not restart DHCP relay, on the other hand a cold restart of swss must restart DHCP relay service. This is controlled by
+a node in manifest */service/dependent-of*. The DHCP relay package will have "swss" listed on the *dependent-of* list which will instruct
+auto-generation process to include the DHCP relay service in the list of dependent services in *swss*. This means *swss.sh* script has to
+be auto-generated as well. To avoid re-generating *swss.sh* script we will put dependent services in a separate file what *swss.sh* can read.
+The file path is chosen to be */etc/sonic/\ Specifying in this option a service X, will regenerate the /usr/local/bin/X.sh script and upgrade the "DEPENDENT" list with this package service. This option is warm-restart related, a warm-restart of service X will not trigger this package service restart. On the other hand, this service package will be started, stopped, restarted togather with service X. Example: For "dhcp-relay", "radv", "teamd" this field will have "swss" service in the list. |
+| /service/post-start-action | string | no | Path to an executable inside Docker image filesystem to be executed after container start. A package may use this field in case a systemd service should not reach started state before some condition. E.g.: A database service should not reach started state before redis process is not ready. Since, there is no control, when the redis process will start a "post-start-action" script may execute "redis-cli ping" till the ping is succeessful. |
+| /service/pre-shutdown-action | string | no | Path to an executable inside Docker image filesystem to be executed before container stops. A uses case is to execute a warm-shutdown preparation script. A script that sends SIGUSR1 to teamd to initiate warm shutdown is one of such examples. |
+
+
+##### /usr/bin/*feature*.sh
+
+The script under /usr/bin/ starts, stops or waits for container exit. This script is auto-generated during build time from
+[docker_image_ctl.j2](https://github.com/Azure/sonic-buildimage/blob/4006ce711fa6545b0870186ffa05d4df24edb8b7/files/build_templates/docker_image_ctl.j2).
+To allow a runtime package installation, it is required to have this file as part of SONiC image and put it in
+*/usr/share/sonic/templates/docker_image_ctl.j2*. The Jinja2 template will accept three arguments, *docker_container_name*,
+*docker_image_name* and *docker_run_options*, which derive from the */container/* node from manifest. Besides of options
+defined in the manifest, the following default are used to start container to allow container to access base SONiC resources,
+like database and syslog:
+
+```
+docker create {{ docker_run_options }}
+ --net=$NET \
+ --uts=host \
+ --log-opt max-size=2M --log-opt max-file=5 \
+ -v /var/run/redis$DEV:/var/run/redis:rw \
+ $REDIS_MNT \
+ -v /usr/share/sonic/device/$PLATFORM:/usr/share/sonic/platform:ro \
+ -v /usr/share/sonic/device/$PLATFORM/$HWSKU/$DEV:/usr/share/sonic/hwsku:ro \
+ --env "NAMESPACE_ID"="$DEV" \
+ --env "NAMESPACE_PREFIX"="$NAMESPACE_PREFIX" \
+ --env "NAMESPACE_COUNT"=$NUM_ASIC \
+ --name={{docker_container_name}}$DEV {{docker_image_name}}
+```
+
+
+###### manifest path
+
+| Path | Type | Mandatory | Description |
+| ----------------------------- | --------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| /container/privileged | string | no | Start the container in privileged mode. Later versions of manifest might extend container properties to include docker capabilities instead of privileged mode. Defaults to False. |
+| /container/volumes | list of strings | no | List of mounts for a container. The same syntax used for '-v' parameter for "docker run". Example: "\ Example: a "bgp" may specify "radv" in this field in order to avoid radv to announce departure and cause hosts to lose default gateway. *NOTE*: Putting "radv" here, does not mean the "radv" should be installed as there is no such dependency for the "bgp" package. |
+| /service/warm-shutdown/before | lits of strings | no | Warm shutdown order dependency. List of SONiC services the application is set to stop before on warm shutdown. Example: a "teamd" service has to stop before "syncd", but after "swss" to be able to send the last LACP PDU though CPU port right before CPU port becomes unavailable. |
+| /service/fast-shutdown/ | object | no | Fast reboot related properties. Used to generate the fast-reboot script. |
+| /service/fast-shutdown/after | lits of strings | no | Same as for warm-shutdown. |
+| /service/fast-shutdown/before | lits of strings | no | Same as for warm-shutdown. |
+| /processes | object | no | Processes infromation |
+| /processes/[name]/reconciles | boolean | no | Wether process performs warm-boot reconciliation, the warmboot-finalizer service has to wait for. Defaults to False. |
+
+
+
+### SONiC-2-SONiC upgrade
+
+SONiC-2-SONiC upgrade shall work for SONiC packages as well. An upgrade will take the new system *packages.json* and version requirements
+and do a comparison between currently running and new SONiC image.
+
+
+###### Package migration scenarios
+
+| Package | Version | Action |
+| -------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------- |
+| Non built-in package | Default version defined in *packages.json* in new SONiC image is greater then in current running SONiC image | Perform a package installation/upgrade in new SONiC image |
+| Non built-in package | Default version defined in *packages.json* in new SONiC image is less then in current running SONiC image | Perform a package installation/upgrade in new SONiC image of currently running package version. |
+
+The old *packages.json* and new *packages.json* are merged together and updated in new SONiC image.
+
+Since the installation or upgrade of packages are required to be done on SONiC image installation time a new SONiC image filesystem
+needs to be mounted and *dockerd* has to be started in the chroot environment of new image as it is a requisite of *sonic-package-manager*.
+
+CONFIG DB shall not updated with initial config of the package and a new feature in the FEATURE table in this scenario. A package should
+keep it's configuration backward compatible with old version. After installation succeeded and reboot into new image is performed all
+previously installed extensions should be available.
+
+An option to skip migrating packages will be added for users that want to have a clean SONiC installation:
+
+```
+admin@sonic:~$ sudo sonic-installer install -y sonic.bin --no-package-migration
+```
+
+
+### Kubernetes & SONiC Application Extension
+
+[Kubernetes HLD](https://github.com/Azure/SONiC/blob/be12cc665c316348352b868f515714f202861f63/doc/kubernetes/Kubernetes-support.md)
+
+This section is WIP and describes the approach in very high level and needs more deep investigation.
+
+The first thing to note here is that a Kubernetes manifest file can be auto-generated from SONiC Package manifest as it cat provide all the info about
+how to run the container. This manifest auto-generation is related to Kubernetes master changes while we will be focusing on SONiC OS side, so it is out of
+the scope here.
+
+Besides of the manifest on the master, the SONiC switch has to have service files, configs, scripts installed for the feature.
+
+1. Package installed through SONiC package manager.
+
+During package installation these necessary components will be auto-generated and installed on the switch. The auto-generation must honor new requirements
+to support "local" and "kube" modes when in "local" mode the container gets started on systemctl start, while in "kube" mode the appropriate feature label
+is set.
+
+2. Docker container upgrades through Kubernetes.
+
+During that processes a new Docker container gets deployed and run on the switch. Kubernetes managed features introduces a state machine for a running
+container that is reflected in the STATE DB. When container starts it sets its state as "pending" and waits till there is a "ready" flag set.
+
+A state-db-watcherd is listening to those changes. If there is a need to regenerate service file and scripts it initiates sonic-package-manager
+upgrade re-generation processes. Since the image is already downloaded and running but pending, the package manifest can be read and based on manifest
+it can generate the required files. Then, the state-db-watcherd can proceed to systemctl stop old container, systemctl start new container
+where the container_action script set the container state to "ready" and the container resumes to run the applications.
+
+3. Docker container deploy through Kubernetes.
+
+The case describe the scenario when the user is setting a label via "config kube label add