diff --git a/packages/font-source-sans-pro/CHANGELOG.md b/packages/font-source-sans-pro/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..642f4671d3b41d23555d7d8dab840a0b673dfe7b
--- /dev/null
+++ b/packages/font-source-sans-pro/CHANGELOG.md
@@ -0,0 +1 @@
+* Add a subsetted "Source Sans Variable" variant
\ No newline at end of file
diff --git a/packages/font-source-sans-pro/build.sh b/packages/font-source-sans-pro/build.sh
index 27b3afb980840d4761d63e7109abce21b12e5137..aad7aba258701c69616d82aa4df33144a24390d1 100755
--- a/packages/font-source-sans-pro/build.sh
+++ b/packages/font-source-sans-pro/build.sh
@@ -79,6 +79,74 @@ function build() {
 
 }
 
+function build_variable() {
+    INPUT_NAME=$1
+    INPUT_FORMAT='otf'
+    STYLE=$2
+    CSS_FILE="files/variable.css"
+    FLAVOR=woff2
+
+    echo "variable-$STYLE"
+
+    SUBSET="rest"
+    pyftsubset \
+    "$BASE_DIR/VAR/SourceSansVariable-$INPUT_NAME.${INPUT_FORMAT,,}" \
+    --output-file="files/source-sans-variable-$SUBSET-$STYLE.$FLAVOR" \
+    --flavor=$FLAVOR \
+    --layout-features='*' \
+    --unicodes="$EXT"
+
+    echo "
+@font-face {
+    font-family: 'Source Sans Variable';
+    font-style: $STYLE;
+    font-weight: 200 900;
+    font-stretch: normal;
+    font-display: swap;
+    src: url(source-sans-variable-$SUBSET-$STYLE.$FLAVOR) format('$FLAVOR');
+    unicode-range: $EXT;
+}" >> "$CSS_FILE"
+
+    SUBSET="base-ext"
+    pyftsubset \
+    "$BASE_DIR/VAR/SourceSansVariable-$INPUT_NAME.${INPUT_FORMAT,,}" \
+    --output-file="files/source-sans-variable-$SUBSET-$STYLE.$FLAVOR" \
+    --flavor=$FLAVOR \
+    --layout-features='*' \
+    --unicodes="$LATIN_EXT"
+
+    echo "
+@font-face {
+    font-family: 'Source Sans Variable';
+    font-style: $STYLE;
+    font-weight: 200 900;
+    font-stretch: normal;
+    font-display: swap;
+    src: url(source-sans-variable-$SUBSET-$STYLE.$FLAVOR) format('$FLAVOR');
+    unicode-range: $LATIN_EXT;
+}" >> "$CSS_FILE"
+
+    SUBSET="base"
+    pyftsubset \
+    "$BASE_DIR/VAR/SourceSansVariable-$INPUT_NAME.${INPUT_FORMAT,,}" \
+    --output-file="files/source-sans-variable-$SUBSET-$STYLE.$FLAVOR" \
+    --flavor=$FLAVOR \
+    --layout-features='*' \
+    --unicodes="$LATIN"
+
+    echo "
+@font-face {
+    font-family: 'Source Sans Variable';
+    font-style: $STYLE;
+    font-weight: 200 900;
+    font-stretch: normal;
+    font-display: swap;
+    src: url(source-sans-variable-$SUBSET-$STYLE.woff2) format('$FLAVOR');
+    unicode-range: $LATIN;
+}" >> "$CSS_FILE"
+}
+
+
 function main() {
     # Extract upstream release
     RELEASE="source-sans-pro-2.045R-ro-1.095R-it"
@@ -93,6 +161,9 @@ function main() {
     rm -rf files
     mkdir -p "files"
 
+    build_variable "Roman" "normal"
+    build_variable "Italic" "italic"
+
     build "ExtraLight" "normal" "200"
     build "ExtraLightIt" "italic" "200"
 
@@ -111,6 +182,8 @@ function main() {
     build "Black" "normal" "900"
     build "BlackIt" "italic" "900"
 
+    cat files/200.css files/300.css files/400.css files/600.css files/700.css files/900.css > files/static.css
+
     rm -rf "$RELEASE"
 }
 
diff --git a/packages/font-source-sans-pro/files/source-sans-variable-base-ext-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-variable-base-ext-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..b555aef8c1a77b2e81233bea4da5d4b9053face1
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-variable-base-ext-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-variable-base-ext-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-variable-base-ext-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..97f209ea0d2a25912e1f64bce4c1a0884fd9b2b1
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-variable-base-ext-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-variable-base-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-variable-base-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..59bf6797e93f3c7b935e2f5ffd3bd34c4afde4d4
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-variable-base-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-variable-base-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-variable-base-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..ffaf59182ed449b35effdb9ffbcb6ab91a173f97
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-variable-base-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-variable-rest-italic.woff2 b/packages/font-source-sans-pro/files/source-sans-variable-rest-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..d08fc68ca46f429cf74b9938964fec23fea8d5af
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-variable-rest-italic.woff2 differ
diff --git a/packages/font-source-sans-pro/files/source-sans-variable-rest-normal.woff2 b/packages/font-source-sans-pro/files/source-sans-variable-rest-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..19bfa0d7bf752ad40f548aead6f796a5dee65e9d
Binary files /dev/null and b/packages/font-source-sans-pro/files/source-sans-variable-rest-normal.woff2 differ
diff --git a/packages/font-source-sans-pro/files/static.css b/packages/font-source-sans-pro/files/static.css
new file mode 100644
index 0000000000000000000000000000000000000000..0ca9836a19d671004054540c08a9064f100de8ed
--- /dev/null
+++ b/packages/font-source-sans-pro/files/static.css
@@ -0,0 +1,324 @@
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 200;
+    font-display: swap;
+    src: url(source-sans-pro-rest-200-normal.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 200;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-200-normal.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 200;
+    font-display: swap;
+    src: url(source-sans-pro-base-200-normal.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 200;
+    font-display: swap;
+    src: url(source-sans-pro-rest-200-italic.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 200;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-200-italic.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 200;
+    font-display: swap;
+    src: url(source-sans-pro-base-200-italic.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 300;
+    font-display: swap;
+    src: url(source-sans-pro-rest-300-normal.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 300;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-300-normal.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 300;
+    font-display: swap;
+    src: url(source-sans-pro-base-300-normal.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 300;
+    font-display: swap;
+    src: url(source-sans-pro-rest-300-italic.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 300;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-300-italic.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 300;
+    font-display: swap;
+    src: url(source-sans-pro-base-300-italic.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 400;
+    font-display: swap;
+    src: url(source-sans-pro-rest-400-normal.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 400;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-400-normal.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 400;
+    font-display: swap;
+    src: url(source-sans-pro-base-400-normal.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 400;
+    font-display: swap;
+    src: url(source-sans-pro-rest-400-italic.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 400;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-400-italic.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 400;
+    font-display: swap;
+    src: url(source-sans-pro-base-400-italic.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 600;
+    font-display: swap;
+    src: url(source-sans-pro-rest-600-normal.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 600;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-600-normal.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 600;
+    font-display: swap;
+    src: url(source-sans-pro-base-600-normal.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 600;
+    font-display: swap;
+    src: url(source-sans-pro-rest-600-italic.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 600;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-600-italic.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 600;
+    font-display: swap;
+    src: url(source-sans-pro-base-600-italic.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 700;
+    font-display: swap;
+    src: url(source-sans-pro-rest-700-normal.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 700;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-700-normal.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 700;
+    font-display: swap;
+    src: url(source-sans-pro-base-700-normal.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 700;
+    font-display: swap;
+    src: url(source-sans-pro-rest-700-italic.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 700;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-700-italic.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 700;
+    font-display: swap;
+    src: url(source-sans-pro-base-700-italic.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 900;
+    font-display: swap;
+    src: url(source-sans-pro-rest-900-normal.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 900;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-900-normal.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: normal;
+    font-weight: 900;
+    font-display: swap;
+    src: url(source-sans-pro-base-900-normal.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 900;
+    font-display: swap;
+    src: url(source-sans-pro-rest-900-italic.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 900;
+    font-display: swap;
+    src: url(source-sans-pro-base-ext-900-italic.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Pro';
+    font-style: italic;
+    font-weight: 900;
+    font-display: swap;
+    src: url(source-sans-pro-base-900-italic.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
diff --git a/packages/font-source-sans-pro/files/variable.css b/packages/font-source-sans-pro/files/variable.css
new file mode 100644
index 0000000000000000000000000000000000000000..e5ae3fba0ee770a6a876edc128dba343e868ca60
--- /dev/null
+++ b/packages/font-source-sans-pro/files/variable.css
@@ -0,0 +1,60 @@
+
+@font-face {
+    font-family: 'Source Sans Variable';
+    font-style: normal;
+    font-weight: 200 900;
+    font-stretch: normal;
+    font-display: swap;
+    src: url(source-sans-variable-rest-normal.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Variable';
+    font-style: normal;
+    font-weight: 200 900;
+    font-stretch: normal;
+    font-display: swap;
+    src: url(source-sans-variable-base-ext-normal.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Variable';
+    font-style: normal;
+    font-weight: 200 900;
+    font-stretch: normal;
+    font-display: swap;
+    src: url(source-sans-variable-base-normal.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
+
+@font-face {
+    font-family: 'Source Sans Variable';
+    font-style: italic;
+    font-weight: 200 900;
+    font-stretch: normal;
+    font-display: swap;
+    src: url(source-sans-variable-rest-italic.woff2) format('woff2');
+    unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB,U+0370-03FF,U+1F00-1FFF,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116,U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
+}
+
+@font-face {
+    font-family: 'Source Sans Variable';
+    font-style: italic;
+    font-weight: 200 900;
+    font-stretch: normal;
+    font-display: swap;
+    src: url(source-sans-variable-base-ext-italic.woff2) format('woff2');
+    unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
+}
+
+@font-face {
+    font-family: 'Source Sans Variable';
+    font-style: italic;
+    font-weight: 200 900;
+    font-stretch: normal;
+    font-display: swap;
+    src: url(source-sans-variable-base-italic.woff2) format('woff2');
+    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
+}
diff --git a/packages/font-source-sans-pro/index.html b/packages/font-source-sans-pro/index.html
index 75cdc2c59d6f80b126c564bafefc3d606321cd55..4954730f6d93f169626d1242dfa3b7b32f78bfa9 100644
--- a/packages/font-source-sans-pro/index.html
+++ b/packages/font-source-sans-pro/index.html
@@ -2,38 +2,48 @@
     <head>
         <meta charset="UTF-8">
         <style>
-            @import "files/200.css";
-            @import "files/300.css";
-            @import "files/400.css";
-            @import "files/600.css";
-            @import "files/700.css";
-            @import "files/900.css";
+            @import "files/static.css";
+            @import "files/variable.css";
 
-            body {
+            .pro {
                 font-family: "Source Sans Pro";
             }
 
+            .variable {
+                font-family: "Source Sans Variable";
+            }
+
             p {
                 margin: 2em;
             }
         </style>
 
         <script type="module">
-            for (let weight of ['200', '300', '400', '600', '700', '900']) {
+            for (let weight of ['inherit', 'lighter', 'bolder', '200', '300', '400', '600', '700', '900']) {
                 for (let style of ['normal', 'italic']) {
                     let par = document.createElement("p");
                     let text = document.createTextNode(`(${weight}, ${style})
-                        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
-                        eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
-                        ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
-                        aliquip ex ea commodo consequat.`);
+                        The quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.`);
                     par.setAttribute('style', `font-weight: ${weight};font-style: ${style}`);
                     par.appendChild(text);
                     document.body.appendChild(par);
                 }
             }
+
+            function updateWeight() {
+                let value = document.getElementById('range').value;
+                document.body.setAttribute('style', 'font-weight: ' + value);
+                document.getElementById('weight').innerHTML = value;
+            }
+            window.updateWeight = updateWeight;
+            updateWeight();
+
         </script>
     </head>
-    <body>
+    <body class="pro">
+        <button onclick="document.body.setAttribute('class', 'pro');">source-sans-pro</button>
+        <button onclick="document.body.setAttribute('class', 'variable');">source-sans-variable</button>
+        <input id="range" type="range" value="200" min="200" max="900" oninput="updateWeight();">
+        <span id="weight"></span>
     </body>
 </html>
\ No newline at end of file
diff --git a/packages/font-source-sans-pro/poetry.lock b/packages/font-source-sans-pro/poetry.lock
index 395ff671e7e6864578dee68bd4d5b1ffa9efd960..913fbf18ef334b66309844ac7a44f8edf33a2c24 100644
--- a/packages/font-source-sans-pro/poetry.lock
+++ b/packages/font-source-sans-pro/poetry.lock
@@ -8,14 +8,14 @@ python-versions = "*"
 
 [[package]]
 name = "fonttools"
-version = "4.17.1"
+version = "4.18.2"
 description = "Tools to manipulate font files"
 category = "main"
 optional = false
 python-versions = ">=3.6"
 
 [package.extras]
-all = ["fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "brotli (>=1.0.1)", "scipy", "brotlipy (>=0.7.0)", "munkres", "unicodedata2 (>=13.0.0)", "xattr"]
+all = ["fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "brotlicffi (>=0.8.0)", "scipy", "brotli (>=1.0.1)", "munkres", "unicodedata2 (>=13.0.0)", "xattr"]
 graphite = ["lz4 (>=1.7.4.2)"]
 interpolatable = ["scipy", "munkres"]
 lxml = ["lxml (>=4.0,<5)"]
@@ -25,7 +25,7 @@ symfont = ["sympy"]
 type1 = ["xattr"]
 ufo = ["fs (>=2.2.0,<3)"]
 unicode = ["unicodedata2 (>=13.0.0)"]
-woff = ["zopfli (>=0.1.4)", "brotli (>=1.0.1)", "brotlipy (>=0.7.0)"]
+woff = ["zopfli (>=0.1.4)", "brotlicffi (>=0.8.0)", "brotli (>=1.0.1)"]
 
 [metadata]
 lock-version = "1.1"
@@ -66,6 +66,6 @@ brotli = [
     {file = "Brotli-1.0.9.zip", hash = "sha256:4d1b810aa0ed773f81dceda2cc7b403d01057458730e309856356d4ef4188438"},
 ]
 fonttools = [
-    {file = "fonttools-4.17.1-py3-none-any.whl", hash = "sha256:b3f8132c13fa51c7d1a2b3006e2885d91f12674dd2d463f5357a97babdf37574"},
-    {file = "fonttools-4.17.1.zip", hash = "sha256:7097b194babc05c8decfff6cbc81b184221fdcfbda568630fe441c63dadb3ab4"},
+    {file = "fonttools-4.18.2-py3-none-any.whl", hash = "sha256:645f22e8abd6e2c85d167df98333f5d2f33f9853e59210c93e2dd1574a44e6cf"},
+    {file = "fonttools-4.18.2.zip", hash = "sha256:5c50af6fb9b4de4609c0e5558f3444c20f8632aa319319a7ef14fd5ba677c9f8"},
 ]