diff --git a/.gitignore b/.gitignore
index 10c273c2bc..2093b0809b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,6 +39,7 @@ edit-git-bash.exe
/msi/obj/
/msi/package-versions.txt
/msi/wix40-binaries.zip
+/msix/root/
/nuget/GitForWindows.nuspec
/nuget/Git-Windows-Minimal.nuspec
/nuget/Git-Windows-Minimal.nuspec.unmoved
diff --git a/msix/Assets/LockScreenLogo.png b/msix/Assets/LockScreenLogo.png
new file mode 100644
index 0000000000..fa651cf598
Binary files /dev/null and b/msix/Assets/LockScreenLogo.png differ
diff --git a/msix/Assets/LockScreenLogo.scale-200.png b/msix/Assets/LockScreenLogo.scale-200.png
new file mode 100644
index 0000000000..b5c5143899
Binary files /dev/null and b/msix/Assets/LockScreenLogo.scale-200.png differ
diff --git a/msix/Assets/Square150x150Logo.png b/msix/Assets/Square150x150Logo.png
new file mode 100644
index 0000000000..40836ed942
Binary files /dev/null and b/msix/Assets/Square150x150Logo.png differ
diff --git a/msix/Assets/Square150x150Logo.scale-200.png b/msix/Assets/Square150x150Logo.scale-200.png
new file mode 100644
index 0000000000..defdd4ac14
Binary files /dev/null and b/msix/Assets/Square150x150Logo.scale-200.png differ
diff --git a/msix/Assets/Square44x44Logo.png b/msix/Assets/Square44x44Logo.png
new file mode 100644
index 0000000000..b5c5143899
Binary files /dev/null and b/msix/Assets/Square44x44Logo.png differ
diff --git a/msix/Assets/Square44x44Logo.scale-200.png b/msix/Assets/Square44x44Logo.scale-200.png
new file mode 100644
index 0000000000..1632fc6333
Binary files /dev/null and b/msix/Assets/Square44x44Logo.scale-200.png differ
diff --git a/msix/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/msix/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
new file mode 100644
index 0000000000..fa651cf598
Binary files /dev/null and b/msix/Assets/Square44x44Logo.targetsize-24_altform-unplated.png differ
diff --git a/msix/Assets/StoreLogo.png b/msix/Assets/StoreLogo.png
new file mode 100644
index 0000000000..b5c5143899
Binary files /dev/null and b/msix/Assets/StoreLogo.png differ
diff --git a/msix/appxmanifest.xml.in b/msix/appxmanifest.xml.in
new file mode 100644
index 0000000000..c86012ed28
--- /dev/null
+++ b/msix/appxmanifest.xml.in
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+ Git for Windows
+ The Git Development Community
+ Assets\StoreLogo.png
+ Git for Windows focuses on offering a lightweight, native set of tools that bring the full feature set of the Git to Windows while providing appropriate user interfaces for experienced users.
+ disabled
+ disabled
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/msix/release.sh b/msix/release.sh
new file mode 100644
index 0000000000..ac501b6c95
--- /dev/null
+++ b/msix/release.sh
@@ -0,0 +1,187 @@
+#!/bin/sh
+
+# Build the portable Git for Windows.
+
+die () {
+ echo "$*" >&1
+ exit 1
+}
+
+output_directory="$HOME"
+include_pdbs=
+while test $# -gt 0
+do
+ case "$1" in
+ --output)
+ shift
+ output_directory="$1"
+ ;;
+ --output=*)
+ output_directory="${1#*=}"
+ ;;
+ --include-pdbs)
+ include_pdbs=t
+ ;;
+ -*)
+ die "Unknown option: $1"
+ ;;
+ *)
+ break
+ esac
+ shift
+done
+
+test $# -gt 0 ||
+die "Usage: $0 [--output=] [optional components]"
+
+test -d "$output_directory" ||
+die "Directory inaccessible: '$output_directory'"
+
+case "$MSYSTEM" in
+MINGW32)
+ BITNESS=32
+ ARCH=i686
+ ARTIFACT_SUFFIX="x86"
+ MD_ARG=128M
+ MINGW_PREFIX=mingw-w64-i686-
+ ;;
+MINGW64)
+ BITNESS=64
+ ARCH=x86_64
+ ARTIFACT_SUFFIX="x64"
+ MD_ARG=256M
+ MINGW_PREFIX=mingw-w64-x86_64-
+ ;;
+CLANGARM64)
+ BITNESS=64
+ ARCH=aarch64
+ ARTIFACT_SUFFIX=arm64
+ MD_ARG=256M
+ MINGW_PREFIX=mingw-w64-clang-aarch64-
+ ;;
+*)
+ die "Unhandled MSYSTEM: $MSYSTEM"
+ ;;
+esac
+MSYSTEM_LOWER=${MSYSTEM,,}
+VERSION=$1
+shift
+TARGET="$output_directory"/Git.GitforWindows_"$VERSION"_"$ARTIFACT_SUFFIX".msix
+SCRIPT_PATH="$(cd "$(dirname "$0")" && pwd)"
+
+case "$SCRIPT_PATH" in
+*" "*)
+ die "This script cannot handle spaces in $SCRIPT_PATH"
+ ;;
+esac
+
+
+# Generate a couple of files dynamically
+
+mkdir -p "$SCRIPT_PATH/root/" ||
+die "Could not make root"
+
+cp "$SCRIPT_PATH/../LICENSE.txt" "$SCRIPT_PATH/root/" ||
+die "Could not copy license file"
+
+mkdir -p "$SCRIPT_PATH/root/dev/mqueue" ||
+die "Could not make /dev/mqueue directory"
+
+mkdir -p "$SCRIPT_PATH/root/dev/shm" ||
+die "Could not make /dev/shm/ directory"
+
+mkdir -p "$SCRIPT_PATH/root/etc" ||
+die "Could not make etc/ directory"
+
+mkdir -p "$SCRIPT_PATH/root/tmp" ||
+die "Could not make tmp/ directory"
+
+mkdir -p "$SCRIPT_PATH/root/bin" ||
+die "Could not make bin/ directory"
+
+cp /cmd/git.exe "$SCRIPT_PATH/root/bin/git.exe" &&
+cp /$MSYSTEM_LOWER/share/git/compat-bash.exe "$SCRIPT_PATH/root/bin/bash.exe" &&
+cp /$MSYSTEM_LOWER/share/git/compat-bash.exe "$SCRIPT_PATH/root/bin/sh.exe" ||
+die "Could not install bin/ redirectors"
+
+etc_gitconfig="$(git -c core.editor=echo config --system -e 2>/dev/null)" &&
+etc_gitconfig="$(cygpath -au "$etc_gitconfig")" &&
+etc_gitconfig="${etc_gitconfig#/}" ||
+die "Could not determine the path of the system config"
+
+# Make a list of files to include
+LIST="$(ARCH=$ARCH ETC_GITCONFIG="$etc_gitconfig" \
+ PACKAGE_VERSIONS_FILE="$SCRIPT_PATH"/root/etc/package-versions.txt \
+ sh "$SCRIPT_PATH"/../make-file-list.sh "$@" |
+ grep -v "^$etc_gitconfig$")" ||
+die "Could not generate file list"
+
+mkdir -p "$SCRIPT_PATH/root/${etc_gitconfig%/*}" &&
+cp /"$etc_gitconfig" "$SCRIPT_PATH/root/$etc_gitconfig" &&
+git config -f "$SCRIPT_PATH/root/$etc_gitconfig" \
+ credential.helper manager ||
+die "Could not configure Git-Credential-Manager as default"
+test 64 != $BITNESS ||
+git config -f "$SCRIPT_PATH/root/$etc_gitconfig" --unset pack.packSizeLimit
+git config -f "$SCRIPT_PATH/root/$etc_gitconfig" core.fscache true
+
+case "$LIST" in
+*/git-credential-helper-selector.exe*)
+ git config -f "$SCRIPT_PATH/root/$etc_gitconfig" \
+ credential.helper helper-selector
+ ;;
+esac
+
+git_core="$SCRIPT_PATH/root/$MSYSTEM_LOWER/libexec/git-core" &&
+rm -rf "$git_core" &&
+mkdir -p "$git_core" &&
+if test "$(stat -c %D /$MSYSTEM_LOWER/bin)" = "$(stat -c %D "$git_core")"
+then
+ ln_or_cp=ln
+else
+ ln_or_cp=cp
+fi &&
+$ln_or_cp $(echo "$LIST" | sed -n "s|^$MSYSTEM_LOWER/bin/[^/]*\.dll$|/&|p") "$git_core" ||
+die "Could not copy .dll files into libexec/git-core/"
+
+test -z "$include_pdbs" || {
+ find "$SCRIPT_PATH/root" -name \*.pdb -exec rm {} \; &&
+ "$SCRIPT_PATH"/../please.sh bundle-pdbs \
+ --arch=$ARCH --unpack="$SCRIPT_PATH"/root
+} ||
+die "Could not unpack .pdb files"
+
+# Install Tooling
+echo "Install WinApp CLI"
+winget install Microsoft.WinAppCLI --accept-source-agreements --accept-package-agreements --disable-interactivity ||
+die "Failed to install WinApp CLI"
+
+# Create MSIX
+
+MAPFILE=$SCRIPT_PATH/root/files.map
+MANIFESTIN=$SCRIPT_PATH/appxmanifest.xml.in
+MANIFESTOUT=$SCRIPT_PATH/root/appxmanifest.xml
+
+echo "Create MSIX"
+
+sed -e "s/@@VERSION@@/$VERSION/g" <"$MANIFESTIN" >"$MANIFESTOUT"
+
+echo "[Files]" >"$MAPFILE" &&
+echo "\"$(cygpath -aw "$SCRIPT_PATH")/root/appxmanifest.xml\" \"AppxManifest.xml\"" >>"$MAPFILE" &&
+echo "\"$(cygpath -aw "$SCRIPT_PATH")/root/bin/git.exe\" \"bin/git.exe\"" >>"$MAPFILE" &&
+echo "\"$(cygpath -aw "$SCRIPT_PATH")/root/bin/sh.exe\" \"bin/sh.exe\"" >>"$MAPFILE" &&
+echo "\"$(cygpath -aw "$SCRIPT_PATH")/root/bin/bash.exe\" \"bin/bash.exe\"" >>"$MAPFILE" &&
+echo "\"$(cygpath -aw "$SCRIPT_PATH")/Assets/LockScreenLogo.png\" \"Assets/LockScreenLogo.png\"" >>"$MAPFILE" &&
+echo "\"$(cygpath -aw "$SCRIPT_PATH")/Assets/LockScreenLogo.scale-200.png\" \"Assets/LockScreenLogo.scale-200.png\"" >>"$MAPFILE" &&
+echo "\"$(cygpath -aw "$SCRIPT_PATH")/Assets/Square150x150Logo.png\" \"Assets/Square150x150Logo.png\"" >>"$MAPFILE" &&
+echo "\"$(cygpath -aw "$SCRIPT_PATH")/Assets/Square150x150Logo.scale-200.png\" \"Assets/Square150x150Logo.scale-200.png\"" >>"$MAPFILE" &&
+echo "\"$(cygpath -aw "$SCRIPT_PATH")/Assets/Square44x44Logo.png\" \"Assets/Square44x44Logo.png\"" >>"$MAPFILE" &&
+echo "\"$(cygpath -aw "$SCRIPT_PATH")/Assets/Square44x44Logo.scale-200.png\" \"Assets/Square44x44Logo.scale-200.png\"" >>"$MAPFILE" &&
+echo "\"$(cygpath -aw "$SCRIPT_PATH")/Assets/Square44x44Logo.targetsize-24_altform-unplated.png\" \"Assets/Square44x44Logo.targetsize-24_altform-unplated.png\"" >>"$MAPFILE" &&
+echo "\"$(cygpath -aw "$SCRIPT_PATH")/Assets/StoreLogo.png\" \"Assets/StoreLogo.png\"" >>"$MAPFILE" &&
+echo "$LIST" |
+sed -e 'y/\//\\/' -e 's/.*/"&" "&"/' >>"$MAPFILE"
+
+PWSH_COMMAND="winapp tool makeappx.exe pack /v /o /f $(cygpath -aw "$MAPFILE") /p $(cygpath -aw "$TARGET")"
+powershell -WorkingDirectory "$(cygpath -aw "/")" -NonInteractive -NoProfile -NoLogo -Command "iex '$PWSH_COMMAND'" &&
+echo "Package created at $TARGET"
\ No newline at end of file