You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by gi...@apache.org on 2021/10/11 20:03:28 UTC

[airflow-site] branch gh-pages updated: Deploying to gh-pages from @ 0a0d8733c14cd3e08c523afa7da8501becc5e54f 🚀

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/airflow-site.git


The following commit(s) were added to refs/heads/gh-pages by this push:
     new 1ea0c1d  Deploying to gh-pages from  @ 0a0d8733c14cd3e08c523afa7da8501becc5e54f 🚀
1ea0c1d is described below

commit 1ea0c1da21e7fab44e24d17874fd389dddfab775
Author: jedcunningham <66...@users.noreply.github.com>
AuthorDate: Mon Oct 11 20:03:21 2021 +0000

    Deploying to gh-pages from  @ 0a0d8733c14cd3e08c523afa7da8501becc5e54f 🚀
---
 _gen/indexes/en/blog-index.json                    |   2 +-
 _gen/indexes/en/blog-posts.json                    |   2 +-
 blog/airflow-1.10.10/index.html                    |   4 +-
 blog/airflow-1.10.12/index.html                    |   4 +-
 blog/airflow-1.10.8-1.10.9/index.html              |   4 +-
 .../index.html                                     | 154 ++++++++++++++-------
 blog/airflow-survey-2020/index.html                |   4 +-
 blog/airflow-survey/index.html                     |   4 +-
 blog/airflow-two-point-oh-is-here/index.html       |  48 ++++++-
 blog/airflow_summit_2021/index.html                |   8 +-
 blog/announcing-new-website/index.html             |   4 +-
 blog/apache-airflow-for-newcomers/index.html       |   4 +-
 .../index.html                                     |   4 +-
 .../index.html                                     |   4 +-
 .../index.html                                     |   4 +-
 .../index.html                                     |   4 +-
 .../index.html                                     |   4 +-
 blog/index.html                                    |  35 +++++
 blog/index.xml                                     |  87 ++++++++++++
 .../index.html                                     |   4 +-
 blog/tags/release/index.html                       |  37 ++++-
 blog/tags/release/index.xml                        |  89 +++++++++++-
 index.html                                         |  32 ++---
 index.xml                                          |  87 ++++++++++++
 search/index.html                                  |   4 +-
 sitemap.xml                                        | 111 ++++++++-------
 tags/index.html                                    |   2 +-
 tags/index.xml                                     |   2 +-
 use-cases/adobe/index.html                         |   4 +-
 use-cases/adyen/index.html                         |   4 +-
 use-cases/big-fish-games/index.html                |   4 +-
 use-cases/dish/index.html                          |   4 +-
 use-cases/experity/index.html                      |   4 +-
 use-cases/onefootball/index.html                   |   4 +-
 use-cases/plarium-krasnodar/index.html             |   4 +-
 use-cases/seniorlink/index.html                    |   4 +-
 use-cases/sift/index.html                          |   4 +-
 37 files changed, 609 insertions(+), 179 deletions(-)

diff --git a/_gen/indexes/en/blog-index.json b/_gen/indexes/en/blog-index.json
index 9e3638d..a0e142b 100644
--- a/_gen/indexes/en/blog-index.json
+++ b/_gen/indexes/en/blog-index.json
@@ -1 +1 @@
-{"version":"2.3.8","fields":["title","description","author","content","tags","url"],"fieldVectors":[["title/It's a \"Breeze\" to develop Apache Airflow",[0,1.444,1,0.878,2,0.027,3,0.346,4,0.469]],["description/It's a \"Breeze\" to develop Apache Airflow",[2,0.029,4,0.326,5,1.544,6,0.718,7,1.544,8,0.845,9,0.845,10,0.611,11,0.845,12,0.611,13,1.544,14,0.52,15,1.544,16,0.019]],["author/It's a \"Breeze\" to develop Apache Airflow",[11,1.312,17,1.56]],["content/It's a \"Breeze\" to develop Apa [...]
\ No newline at end of file
+{"version":"2.3.8","fields":["title","description","author","content","tags","url"],"fieldVectors":[["title/It's a \"Breeze\" to develop Apache Airflow",[0,1.506,1,0.936,2,0.08,3,0.359,4,0.475]],["description/It's a \"Breeze\" to develop Apache Airflow",[2,0.086,4,0.33,5,1.587,6,0.757,7,1.587,8,0.885,9,0.885,10,0.65,11,0.885,12,0.65,13,1.587,14,0.559,15,1.587,16,0.056]],["author/It's a \"Breeze\" to develop Apache Airflow",[11,1.369,17,1.618]],["content/It's a \"Breeze\" to develop Apach [...]
\ No newline at end of file
diff --git a/_gen/indexes/en/blog-posts.json b/_gen/indexes/en/blog-posts.json
index b442831..81bc6d9 100644
--- a/_gen/indexes/en/blog-posts.json
+++ b/_gen/indexes/en/blog-posts.json
@@ -1 +1 @@
-[{"content":"## The story behind the Airflow Breeze tool\nInitially, we started contributing to this fantastic open-source project [Apache Airflow] with a team of three which then grew to five. When we kicked it off a year ago, I realized pretty soon where the biggest bottlenecks and areas for improvement in terms of productivity were. Even with the help of our client, who provided us with a “homegrown” development environment it took us literally days to set it up and learn some basics. [...]
\ No newline at end of file
+[{"content":"## The story behind the Airflow Breeze tool\nInitially, we started contributing to this fantastic open-source project [Apache Airflow] with a team of three which then grew to five. When we kicked it off a year ago, I realized pretty soon where the biggest bottlenecks and areas for improvement in terms of productivity were. Even with the help of our client, who provided us with a “homegrown” development environment it took us literally days to set it up and learn some basics. [...]
\ No newline at end of file
diff --git a/blog/airflow-1.10.10/index.html b/blog/airflow-1.10.10/index.html
index 301d3a4..354fc27 100644
--- a/blog/airflow-1.10.10/index.html
+++ b/blog/airflow-1.10.10/index.html
@@ -36,13 +36,13 @@
 
 <meta property="og:image" content="/images/feature-image.png" />
 <meta property="article:published_time" content="2020-04-09T00:00:00+00:00" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Apache Airflow 1.10.10">
 <meta itemprop="description" content="We are happy to present Apache Airflow 1.10.10">
 
 
 <meta itemprop="datePublished" content="2020-04-09T00:00:00&#43;00:00" />
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="1143">
 
 
diff --git a/blog/airflow-1.10.12/index.html b/blog/airflow-1.10.12/index.html
index d9cfec8..09dd6b6 100644
--- a/blog/airflow-1.10.12/index.html
+++ b/blog/airflow-1.10.12/index.html
@@ -36,13 +36,13 @@
 
 <meta property="og:image" content="/images/feature-image.png" />
 <meta property="article:published_time" content="2020-08-25T00:00:00+00:00" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Apache Airflow 1.10.12">
 <meta itemprop="description" content="We are happy to present Apache Airflow 1.10.12">
 
 
 <meta itemprop="datePublished" content="2020-08-25T00:00:00&#43;00:00" />
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="911">
 
 
diff --git a/blog/airflow-1.10.8-1.10.9/index.html b/blog/airflow-1.10.8-1.10.9/index.html
index 641bf16..e2fc831 100644
--- a/blog/airflow-1.10.8-1.10.9/index.html
+++ b/blog/airflow-1.10.8-1.10.9/index.html
@@ -36,13 +36,13 @@
 
 <meta property="og:image" content="/images/feature-image.png" />
 <meta property="article:published_time" content="2020-02-23T00:00:00+00:00" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Apache Airflow 1.10.8 &amp; 1.10.9">
 <meta itemprop="description" content="We are happy to present the new 1.10.8 and 1.10.9 releases of Apache Airflow.">
 
 
 <meta itemprop="datePublished" content="2020-02-23T00:00:00&#43;00:00" />
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="437">
 
 
diff --git a/blog/its-a-breeze-to-develop-apache-airflow/index.html b/blog/airflow-2.2.0/index.html
similarity index 86%
copy from blog/its-a-breeze-to-develop-apache-airflow/index.html
copy to blog/airflow-2.2.0/index.html
index 6499916..6cd4cd0 100644
--- a/blog/its-a-breeze-to-develop-apache-airflow/index.html
+++ b/blog/airflow-2.2.0/index.html
@@ -29,30 +29,30 @@
 <meta name="msapplication-TileImage" content="/favicons/ms-icon-144x144.png">
 <meta name="theme-color" content="#ffffff">
 
-<title>It&#39;s a &#34;Breeze&#34; to develop Apache Airflow | Apache Airflow</title><meta property="og:title" content="It&#39;s a &#34;Breeze&#34; to develop Apache Airflow" />
-<meta property="og:description" content="A Principal Software Engineer&#39;s journey to developer productivity. Learn how Jarek and his team speeded up and simplified Airflow development for the community." />
+<title>What&#39;s new in Apache Airflow 2.2.0 | Apache Airflow</title><meta property="og:title" content="What&#39;s new in Apache Airflow 2.2.0" />
+<meta property="og:description" content="We&#39;re proud to announce that Apache Airflow 2.2.0 has been released." />
 <meta property="og:type" content="article" />
-<meta property="og:url" content="/blog/its-a-breeze-to-develop-apache-airflow/" />
+<meta property="og:url" content="/blog/airflow-2.2.0/" />
 
 <meta property="og:image" content="/images/feature-image.png" />
-<meta property="article:published_time" content="2019-11-22T00:00:00+00:00" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
-<meta itemprop="name" content="It&#39;s a &#34;Breeze&#34; to develop Apache Airflow">
-<meta itemprop="description" content="A Principal Software Engineer&#39;s journey to developer productivity. Learn how Jarek and his team speeded up and simplified Airflow development for the community.">
+<meta property="article:published_time" content="2021-10-11T00:00:00+00:00" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta itemprop="name" content="What&#39;s new in Apache Airflow 2.2.0">
+<meta itemprop="description" content="We&#39;re proud to announce that Apache Airflow 2.2.0 has been released.">
 
 
-<meta itemprop="datePublished" content="2019-11-22T00:00:00&#43;00:00" />
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
-<meta itemprop="wordCount" content="124">
+<meta itemprop="datePublished" content="2021-10-11T00:00:00&#43;00:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
+<meta itemprop="wordCount" content="658">
 
 
 
-<meta itemprop="keywords" content="Development," />
+<meta itemprop="keywords" content="Release," />
 <meta name="twitter:card" content="summary_large_image"/>
 <meta name="twitter:image" content="/images/feature-image.png"/>
 
-<meta name="twitter:title" content="It&#39;s a &#34;Breeze&#34; to develop Apache Airflow"/>
-<meta name="twitter:description" content="A Principal Software Engineer&#39;s journey to developer productivity. Learn how Jarek and his team speeded up and simplified Airflow development for the community."/>
+<meta name="twitter:title" content="What&#39;s new in Apache Airflow 2.2.0"/>
+<meta name="twitter:description" content="We&#39;re proud to announce that Apache Airflow 2.2.0 has been released."/>
 
 
 <script type="application/javascript">
@@ -80,7 +80,7 @@ if (!doNotTrack) {
   crossorigin="anonymous"></script>
 
 
-<meta name="description" content="A Principal Software Engineer&#39;s journey to developer productivity. Learn how Jarek and his team speeded up and simplified Airflow development for the community." />
+<meta name="description" content="We&#39;re proud to announce that Apache Airflow 2.2.0 has been released." />
 
 
 
@@ -435,35 +435,20 @@ if (!doNotTrack) {
         <div class="tags-container">
             
                 
-                    <a class="tag" href="/blog/tags/development/">Development</a>
+                    <a class="tag" href="/blog/tags/release/">Release</a>
                 
             
         </div>
-        <span class="bodytext__medium--brownish-grey">Fri, Nov 22, 2019</span>
+        <span class="bodytext__medium--brownish-grey">Mon, Oct 11, 2021</span>
     </div>
-    <p class="blogpost-content__metadata--title">It&#39;s a &#34;Breeze&#34; to develop Apache Airflow</p>
+    <p class="blogpost-content__metadata--title">What&#39;s new in Apache Airflow 2.2.0</p>
     <div class="blogpost-content__metadata--author">
         <span class="blogpost-content__metadata--author">
-            Jarek Potiuk
+            Jed Cunningham
         </span>
         
-            <a href="https://twitter.com/higrys/" class="blogpost-content__metadata--social-media-icon">
-                <svg xmlns="http://www.w3.org/2000/svg" width="22" height="21" viewBox="0 0 22 21">
-    <g id="Group_1746" data-name="Group 1746" transform="translate(.076 -.055)">
-        <ellipse id="Ellipse_19" cx="11" cy="10.5" fill="#51504f" data-name="Ellipse 19" rx="11" ry="10.5"
-                 transform="translate(-.076 .055)"/>
-        <g id="Logo_FIXED" data-name="Logo — FIXED" transform="translate(5.568 5.872)">
-            <path id="Path_643"
-                  d="M-1554.714 1446.466a6.538 6.538 0 0 0 6.581-6.581v-.3a4.711 4.711 0 0 0 1.155-1.2 4.7 4.7 0 0 1-1.331.365 2.328 2.328 0 0 0 1.019-1.281 4.6 4.6 0 0 1-1.47.559 2.309 2.309 0 0 0-1.687-.73 2.316 2.316 0 0 0-2.314 2.314 2.555 2.555 0 0 0 .059.528 6.569 6.569 0 0 1-4.767-2.418 2.311 2.311 0 0 0-.311 1.164 2.319 2.319 0 0 0 1.028 1.926 2.34 2.34 0 0 1-1.047-.289v.031a2.318 2.318 0 0 0 1.854 2.269 2.257 2.257 0 0 1-.609.081 2.281 2.281 0 0 1-.433-.041 2.313 2.313 0 0 0 2.1 [...]
-                  fill="#fff" data-name="Path 643" transform="translate(1558.255 -1437.301)"/>
-        </g>
-    </g>
-</svg>
-
-            </a>
-        
         
-            <a href="https://github.com/potiuk/" class="blogpost-content__metadata--social-media-icon">
+            <a href="https://github.com/jedcunningham/" class="blogpost-content__metadata--social-media-icon">
                 <svg xmlns="http://www.w3.org/2000/svg" width="21.737" height="21.2" viewBox="0 0 21.737 21.2">
     <path id="Path_1378" d="M33.971 1181.31a10.87 10.87 0 0 0-3.435 21.182c.543.1.742-.236.742-.524 0-.258-.009-.941-.015-1.848-3.023.657-3.661-1.457-3.661-1.457a2.876 2.876 0 0 0-1.207-1.59c-.987-.674.075-.661.075-.661a2.283 2.283 0 0 1 1.665 1.12 2.314 2.314 0 0 0 3.163.9 2.322 2.322 0 0 1 .69-1.453c-2.413-.274-4.951-1.207-4.951-5.371a4.2 4.2 0 0 1 1.119-2.917 3.908 3.908 0 0 1 .107-2.876s.913-.292 2.989 1.114a10.3 10.3 0 0 1 5.442 0c2.075-1.406 2.986-1.114 2.986-1.114a3.9 3.9 0 0 1 .1 [...]
 </svg>
@@ -471,7 +456,7 @@ if (!doNotTrack) {
             </a>
         
         
-            <a href="https://linkedin.com/in/jarekpotiuk/" class="blogpost-content__metadata--social-media-icon">
+            <a href="https://linkedin.com/in/jedidiah-cunningham/" class="blogpost-content__metadata--social-media-icon">
                 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 21">
     <g id="Group_1745" data-name="Group 1745" transform="translate(.155 -.055)">
         <ellipse id="Ellipse_20" cx="10" cy="10.5" fill="#51504f" data-name="Ellipse 20" rx="10" ry="10.5" transform="translate(-.155 .055)"/>
@@ -485,18 +470,83 @@ if (!doNotTrack) {
             </a>
         
     </div>
-    <p class="blogpost-content__metadata--description">A Principal Software Engineer&#39;s journey to developer productivity. Learn how Jarek and his team speeded up and simplified Airflow development for the community.</p>
+    <p class="blogpost-content__metadata--description">We&#39;re proud to announce that Apache Airflow 2.2.0 has been released.</p>
 </div>
 <div class="markdown-content">
     
 
-<h2 id="the-story-behind-the-airflow-breeze-tool">The story behind the Airflow Breeze tool</h2>
+<p>I’m proud to announce that Apache Airflow 2.2.0 has been released. It contains over 600 commits since 2.1.4 and includes 30 new features, 84 improvements, 85 bug fixes, and many internal and doc changes.</p>
+
+<p><strong>Details</strong>:</p>
+
+<p>📦 PyPI: <a href="https://pypi.org/project/apache-airflow/2.2.0/" target="_blank">https://pypi.org/project/apache-airflow/2.2.0/</a> <br />
+📚 Docs: <a href="https://airflow.apache.org/docs/apache-airflow/2.2.0/" target="_blank">https://airflow.apache.org/docs/apache-airflow/2.2.0/</a> <br />
+🛠️ Changelog: <a href="https://airflow.apache.org/docs/apache-airflow/2.2.0/changelog.html" target="_blank">https://airflow.apache.org/docs/apache-airflow/2.2.0/changelog.html</a> <br />
+🐳 Docker Image: docker pull apache/airflow:2.2.0 <br />
+🚏 Constraints: <a href="https://github.com/apache/airflow/tree/constraints-2.2.0" target="_blank">https://github.com/apache/airflow/tree/constraints-2.2.0</a></p>
+
+<p>As the changelog is quite large, the following are some notable new features that shipped in this release.</p>
+
+<h2 id="custom-timetables-aip-39">Custom Timetables (AIP-39)</h2>
+
+<p>Airflow has historically used cron expressions and timedeltas to represent when a DAG should run. This worked for a lot of use cases, but not all. For example, running daily on Monday-Friday, but not on weekends wasn’t possible.</p>
+
+<p>To provide more scheduling flexibility, determining when a DAG should run is now done with Timetables. Of course, backwards compatibility has been maintained - cron expressions and timedeltas are still fully supported, however, timetables are pluggable so you can add your own custom timetable to fit your needs! For example, you could write a timetable to schedule a DagRun</p>
+
+<p><code>execution_date</code> has long been confusing to new Airflowers, so as part of this change a new concept has been added to Airflow to replace it named <code>data_interval</code>, which is the period of data that a task should operate on. The following are now available:</p>
+
+<p><code>logical_date</code> (aka <code>execution_date</code>)
+<code>data_interval_start</code> (same value as <code>execution_date</code> for cron)
+<code>data_interval_end</code> (aka <code>next_execution_date</code>)</p>
 
-<p>Initially, we started contributing to this fantastic open-source project [Apache Airflow] with a team of three which then grew to five. When we kicked it off a year ago, I realized pretty soon where the biggest bottlenecks and areas for improvement in terms of productivity were. Even with the help of our client, who provided us with a “homegrown” development environment it took us literally days to set it up and learn some basics.</p>
+<p>If you write your own timetables, keep in mind they should be idempotent and fast as they are used in the scheduler to create DagRuns.</p>
 
-<p>That is how the journey to increased productivity in Apache Airflow began. The result? The Airflow Breeze open-source tool. Jarek Potiuk, an Airflow Committer, will tell you all about it.</p>
+<p>More information can be found at: <a href="https://airflow.apache.org/docs/apache-airflow/stable/howto/timetable.html" target="_blank">Customizing DAG Scheduling with Timetables</a></p>
 
-<p>You can learn <a href="https://higrys.medium.com/its-a-breeze-to-develop-apache-airflow-bf306d3e3505" target="_blank">how and why it’s a &ldquo;Breeze&rdquo; to Develop Apache Airflow</a>.</p>
+<h2 id="deferrable-tasks-aip-40">Deferrable Tasks (AIP-40)</h2>
+
+<p>Deferrable tasks allows operators or sensors to defer themselves until a light-weight async check passes, at which point they can resume executing. Most importantly, this results in the worker slot, and most notably any resources used by it, to be returned to Airflow. This allows simple things like monitoring a job in an external system or watching for an event to be much cheaper.</p>
+
+<p>To support this feature, a new component has been added to Airflow, the triggerer, which is the daemon process that runs the asyncio event loop.</p>
+
+<p>Airflow 2.2.0 ships with 2 deferrable sensors, <code>DateTimeSensorAsync</code> and <code>TimeDeltaSensorAsync</code>, both of which are drop-in replacements for the existing corresponding sensor.</p>
+
+<p>More information can be found at:</p>
+
+<p><a href="https://airflow.apache.org/docs/apache-airflow/stable/concepts/deferring.html" target="_blank">Deferrable Operators &amp; Triggers</a></p>
+
+<h2 id="custom-task-decorators-and-task-docker">Custom <code>@task</code> decorators and <code>@task.docker</code></h2>
+
+<p>Airflow 2.2.0 allows providers to create custom <code>@task</code> decorators in the TaskFlow interface.</p>
+
+<p>The <code>@task.docker</code> decorator is one such decorator that allows you to run a function in a docker container. Airflow handles getting the code into the container and returning xcom - you just worry about your function. This is particularly useful when you have conflicting dependencies between Airflow itself and tasks you need to run.</p>
+
+<p>More information on creating custom <code>@task</code> decorators can be found at: <a href="https://airflow.apache.org/docs/apache-airflow/stable/howto/create-custom-decorator.html" target="_blank">Creating Custom @task Decorators</a></p>
+
+<p>More information on the <code>@task.docker</code> decorator can be found at: <a href="https://airflow.apache.org/docs/apache-airflow/stable/tutorial_taskflow_api.html#using-the-taskflow-api-with-docker-or-virtual-environments" target="_blank">Using the Taskflow API with Docker or Virtual Environments</a></p>
+
+<h2 id="validation-of-dag-params">Validation of DAG params</h2>
+
+<p>You can now apply validation on DAG params by passing a <code>Param</code> object for each param. The <code>Param</code> object supports the full <a href="https://json-schema.org/draft/2020-12/json-schema-validation.html" target="_blank">json-schema validation specifications</a>.</p>
+
+<p>Currently this only functions with manually triggered DAGs, but it does set the stage for future params related functionality.</p>
+
+<p>More information can be found at: <a href="https://airflow.apache.org/docs/apache-airflow/stable/concepts/params.html" target="_blank">Params</a></p>
+
+<h2 id="other-small-features">Other small features</h2>
+
+<p>This isn’t a comprehensive list, but some noteworthy or interesting small features include:</p>
+
+<ul>
+<li>Testing Connections from the UI - test the credentials for your Connection actually work</li>
+<li>Duplication Connections from the UI</li>
+<li>DAGs “Next run” info is shown in the UI, including when the run will actually start</li>
+<li><code>airflow standalone</code> command runs all of the Airflow components directly without docker - great for local development</li>
+</ul>
+
+<h2 id="contributors">Contributors</h2>
+
+<p>Thanks to everyone who contributed to this release: Andrew Godwin, Ash Berlin-Taylor, Brent Bovenzi, Elad Kalif, Ephraim Anierobi, James Timmins, Jarek Potiuk, Jed Cunningham, Josh Fell, Kamil Breguła, Kaxil Naik, Malthe Borch, Sam Wheating, Sumit Maheshwari, Tzu-ping Chung and many others</p>
 
 </div>
 
@@ -554,16 +604,16 @@ if (!doNotTrack) {
             
 
 <div class="pager">
-    <a >
+    <a href="/blog/airflow_summit_2021/">
         
 
-<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" disabled>Previous</button>
+<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Previous</button>
 
     </a>
-    <a href="/blog/documenting-using-local-development-environments/">
+    <a >
         
 
-<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Next</button>
+<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" disabled>Next</button>
 
     </a>
 </div>
@@ -590,21 +640,21 @@ if (!doNotTrack) {
             <div class="tags-container">
                 
                     
-                        <a class="tag" href="/blog/tags/development/">Development</a>
+                        <a class="tag" href="/blog/tags/release/">Release</a>
                     
                 
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Fri, Nov 22, 2019</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Dec 17, 2020</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/documenting-using-local-development-environments/">
-                Documenting using local development environment
+            <a href="/blog/airflow-two-point-oh-is-here/">
+                Apache Airflow 2.0 is here!
             </a>
         </p>
-        <p class="box-event__blogpost--author">Elena Fedotova</p>
-        <p class="box-event__blogpost--description">The story behind documenting local development environment of Apache Airflow</p>
+        <p class="box-event__blogpost--author">Ash Berlin-Taylor</p>
+        <p class="box-event__blogpost--description">We&#39;re proud to announce that Apache Airflow 2.0.0 has been released.</p>
         <div class="mt-auto">
-            <a href="/blog/documenting-using-local-development-environments/">
+            <a href="/blog/airflow-two-point-oh-is-here/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
@@ -628,7 +678,7 @@ if (!doNotTrack) {
 
 <div class="base-layout--button">
     
-    <a href=https://github.com/apache/airflow-site/edit/main/landing-pages/site/content/en/blog/Its-a-breeze-to-develop-apache-airflow.md>
+    <a href=https://github.com/apache/airflow-site/edit/main/landing-pages/site/content/en/blog/airflow-2.2.0/index.md>
         
 
 
diff --git a/blog/airflow-survey-2020/index.html b/blog/airflow-survey-2020/index.html
index 3905abb..ed48767 100644
--- a/blog/airflow-survey-2020/index.html
+++ b/blog/airflow-survey-2020/index.html
@@ -36,13 +36,13 @@
 
 <meta property="og:image" content="/images/feature-image.png" />
 <meta property="article:published_time" content="2021-03-09T00:00:00+00:00" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Airflow Survey 2020">
 <meta itemprop="description" content="We observe steady growth in number of users as well as in an amount of active contributors. So listening and understanding our community is of high importance.">
 
 
 <meta itemprop="datePublished" content="2021-03-09T00:00:00&#43;00:00" />
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="2106">
 
 
diff --git a/blog/airflow-survey/index.html b/blog/airflow-survey/index.html
index c3d34c4..7db2d02 100644
--- a/blog/airflow-survey/index.html
+++ b/blog/airflow-survey/index.html
@@ -36,13 +36,13 @@
 
 <meta property="og:image" content="/images/feature-image.png" />
 <meta property="article:published_time" content="2019-12-11T00:00:00+00:00" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Airflow Survey 2019">
 <meta itemprop="description" content="Receiving and adjusting to our users’ feedback is a must. Let’s see who Airflow users are, how they play with it, and what they miss.">
 
 
 <meta itemprop="datePublished" content="2019-12-11T00:00:00&#43;00:00" />
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="1775">
 
 
diff --git a/blog/airflow-two-point-oh-is-here/index.html b/blog/airflow-two-point-oh-is-here/index.html
index 7e39fa7..fe46719 100644
--- a/blog/airflow-two-point-oh-is-here/index.html
+++ b/blog/airflow-two-point-oh-is-here/index.html
@@ -36,13 +36,13 @@
 
 <meta property="og:image" content="/images/feature-image.png" />
 <meta property="article:published_time" content="2020-12-17T00:00:00+00:00" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Apache Airflow 2.0 is here!">
 <meta itemprop="description" content="We&#39;re proud to announce that Apache Airflow 2.0.0 has been released.">
 
 
 <meta itemprop="datePublished" content="2020-12-17T00:00:00&#43;00:00" />
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="1166">
 
 
@@ -688,6 +688,50 @@ Docs on the <a href="http://airflow.apache.org/docs/apache-airflow-providers/pac
 
 
 
+    <div class="blog-pager">
+        <h5 class="header__xsmall--greyish-brown">Read also</h5>
+        <div class="pager">
+            <div class="list-items">
+                
+                    <div class="list-item list-item--wide">
+                        
+
+<div class="card">
+    <div class="box-event__blogpost">
+        <div class="box-event__blogpost--metadata">
+            <div class="tags-container">
+                
+                    
+                        <a class="tag" href="/blog/tags/release/">Release</a>
+                    
+                
+            </div>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Mon, Oct 11, 2021</span>
+        </div>
+        <p class="box-event__blogpost--header">
+            <a href="/blog/airflow-2.2.0/">
+                What&#39;s new in Apache Airflow 2.2.0
+            </a>
+        </p>
+        <p class="box-event__blogpost--author">Jed Cunningham</p>
+        <p class="box-event__blogpost--description">We&#39;re proud to announce that Apache Airflow 2.2.0 has been released.</p>
+        <div class="mt-auto">
+            <a href="/blog/airflow-2.2.0/">
+                
+
+<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
+
+            </a>
+        </div>
+    </div>
+</div>
+
+                    </div>
+                
+            </div>
+        </div>
+    </div>
+
 
     </div>
 
diff --git a/blog/airflow_summit_2021/index.html b/blog/airflow_summit_2021/index.html
index 11a2cfb..5681e18 100644
--- a/blog/airflow_summit_2021/index.html
+++ b/blog/airflow_summit_2021/index.html
@@ -36,13 +36,13 @@
 
 <meta property="og:image" content="/images/feature-image.png" />
 <meta property="article:published_time" content="2021-03-21T00:00:00+00:00" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Airflow Summit 2021">
 <meta itemprop="description" content="We are thrilled about Airflow Summit 2021!">
 
 
 <meta itemprop="datePublished" content="2021-03-21T00:00:00&#43;00:00" />
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="77">
 
 
@@ -533,10 +533,10 @@ participate in its development.</p>
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Previous</button>
 
     </a>
-    <a >
+    <a href="/blog/airflow-2.2.0/">
         
 
-<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" disabled>Next</button>
+<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Next</button>
 
     </a>
 </div>
diff --git a/blog/announcing-new-website/index.html b/blog/announcing-new-website/index.html
index d18eb47..fe6fec7 100644
--- a/blog/announcing-new-website/index.html
+++ b/blog/announcing-new-website/index.html
@@ -36,13 +36,13 @@
 
 <meta property="og:image" content="/images/feature-image.png" />
 <meta property="article:published_time" content="2019-12-11T00:00:00+00:00" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="New Airflow website">
 <meta itemprop="description" content="We are thrilled about our new website!">
 
 
 <meta itemprop="datePublished" content="2019-12-11T00:00:00&#43;00:00" />
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="282">
 
 
diff --git a/blog/apache-airflow-for-newcomers/index.html b/blog/apache-airflow-for-newcomers/index.html
index 54fc0ce..9fb2dde 100644
--- a/blog/apache-airflow-for-newcomers/index.html
+++ b/blog/apache-airflow-for-newcomers/index.html
@@ -37,14 +37,14 @@ Authoring Workflow in Apache Airflow. Airflow makes it easy to author workflows
 
 <meta property="og:image" content="/images/feature-image.png" />
 <meta property="article:published_time" content="2020-08-17T00:00:00+00:00" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Apache Airflow For Newcomers">
 <meta itemprop="description" content="Apache Airflow is a platform to programmatically author, schedule, and monitor workflows. A workflow is a sequence of tasks that processes a set of data. You can think of workflow as the path that describes how tasks go from being undone to done. Scheduling, on the other hand, is the process of planning, controlling, and optimizing when a particular task should be done.
 Authoring Workflow in Apache Airflow. Airflow makes it easy to author workflows using python scripts.">
 
 
 <meta itemprop="datePublished" content="2020-08-17T00:00:00&#43;00:00" />
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="1070">
 
 
diff --git a/blog/apache-con-europe-2019-thoughts-and-insights-by-airflow-committers/index.html b/blog/apache-con-europe-2019-thoughts-and-insights-by-airflow-committers/index.html
index 1a56a64..da09091 100644
--- a/blog/apache-con-europe-2019-thoughts-and-insights-by-airflow-committers/index.html
+++ b/blog/apache-con-europe-2019-thoughts-and-insights-by-airflow-committers/index.html
@@ -36,13 +36,13 @@
 
 <meta property="og:image" content="/images/feature-image.png" />
 <meta property="article:published_time" content="2019-11-22T00:00:00+00:00" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="ApacheCon Europe 2019 — Thoughts and Insights by Airflow Committers">
 <meta itemprop="description" content="Here come some thoughts by Airflow committers and contributors from the ApacheCon Europe 2019. Get to know the ASF community!">
 
 
 <meta itemprop="datePublished" content="2019-11-22T00:00:00&#43;00:00" />
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="138">
 
 
diff --git a/blog/documenting-using-local-development-environments/index.html b/blog/documenting-using-local-development-environments/index.html
index ef1ad10..a9d4b6b 100644
--- a/blog/documenting-using-local-development-environments/index.html
+++ b/blog/documenting-using-local-development-environments/index.html
@@ -36,13 +36,13 @@
 
 <meta property="og:image" content="/images/feature-image.png" />
 <meta property="article:published_time" content="2019-11-22T00:00:00+00:00" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Documenting using local development environment">
 <meta itemprop="description" content="The story behind documenting local development environment of Apache Airflow">
 
 
 <meta itemprop="datePublished" content="2019-11-22T00:00:00&#43;00:00" />
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="256">
 
 
diff --git a/blog/experience-in-google-season-of-docs-2019-with-apache-airflow/index.html b/blog/experience-in-google-season-of-docs-2019-with-apache-airflow/index.html
index a9bb01f..e42d346 100644
--- a/blog/experience-in-google-season-of-docs-2019-with-apache-airflow/index.html
+++ b/blog/experience-in-google-season-of-docs-2019-with-apache-airflow/index.html
@@ -37,14 +37,14 @@ About Me I have been writing tech articles on medium as well as my blog for the
 
 <meta property="og:image" content="/images/feature-image.png" />
 <meta property="article:published_time" content="2019-12-20T00:00:00+00:00" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Experience in Google Season of Docs 2019 with Apache Airflow">
 <meta itemprop="description" content="I came across Google Season of Docs (GSoD) almost by accident, thanks to my extensive HackerNews and Twitter addiction. I was familiar with the Google Summer of Code but not with this program. It turns out it was the inaugural phase. I read the details, and the process felt a lot like GSoC except that this was about documentation.
 About Me I have been writing tech articles on medium as well as my blog for the past 1.">
 
 
 <meta itemprop="datePublished" content="2019-12-20T00:00:00&#43;00:00" />
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="1521">
 
 
diff --git a/blog/experience-with-airflow-as-an-outreachy-intern/index.html b/blog/experience-with-airflow-as-an-outreachy-intern/index.html
index eb0604d..b4bdfeb 100644
--- a/blog/experience-with-airflow-as-an-outreachy-intern/index.html
+++ b/blog/experience-with-airflow-as-an-outreachy-intern/index.html
@@ -37,14 +37,14 @@ Contribution Period The first thing I had to do was choose a project under an or
 
 <meta property="og:image" content="/images/feature-image.png" />
 <meta property="article:published_time" content="2020-08-30T00:00:00+00:00" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Journey with Airflow as an Outreachy Intern">
 <meta itemprop="description" content="Outreachy is a program which organises three months paid internships with FOSS projects for people who are typically underrepresented in those projects.
 Contribution Period The first thing I had to do was choose a project under an organisation. After going through all the projects I chose “Extending the REST API of Apache Airflow”, because I had a good idea of what REST API(s) are, so I thought it would be easier to get started with the contributions.">
 
 
 <meta itemprop="datePublished" content="2020-08-30T00:00:00&#43;00:00" />
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="532">
 
 
diff --git a/blog/implementing-stable-api-for-apache-airflow/index.html b/blog/implementing-stable-api-for-apache-airflow/index.html
index 7c2c4c5..b001b36 100644
--- a/blog/implementing-stable-api-for-apache-airflow/index.html
+++ b/blog/implementing-stable-api-for-apache-airflow/index.html
@@ -36,13 +36,13 @@
 
 <meta property="og:image" content="/images/feature-image.png" />
 <meta property="article:published_time" content="2020-07-19T00:00:00+00:00" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Implementing Stable API for Apache Airflow">
 <meta itemprop="description" content="An Outreachy intern&#39;s progress report on contributing to Apache Airflow REST API.">
 
 
 <meta itemprop="datePublished" content="2020-07-19T00:00:00&#43;00:00" />
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="703">
 
 
diff --git a/blog/index.html b/blog/index.html
index 82f6c2b..4b35715 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -488,6 +488,41 @@ if (!doNotTrack) {
             <div class="tags-container">
                 
                     
+                        <a class="tag" href="/blog/tags/release/">Release</a>
+                    
+                
+            </div>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Mon, Oct 11, 2021</span>
+        </div>
+        <p class="box-event__blogpost--header">
+            <a href="/blog/airflow-2.2.0/">
+                What&#39;s new in Apache Airflow 2.2.0
+            </a>
+        </p>
+        <p class="box-event__blogpost--author">Jed Cunningham</p>
+        <p class="box-event__blogpost--description">We&#39;re proud to announce that Apache Airflow 2.2.0 has been released.</p>
+        <div class="mt-auto">
+            <a href="/blog/airflow-2.2.0/">
+                
+
+<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
+
+            </a>
+        </div>
+    </div>
+</div>
+
+                    </div>
+                
+                    <div class="list-item list-item--wide">
+                        
+
+<div class="card">
+    <div class="box-event__blogpost">
+        <div class="box-event__blogpost--metadata">
+            <div class="tags-container">
+                
+                    
                         <a class="tag" href="/blog/tags/community/">Community</a>
                     
                 
diff --git a/blog/index.xml b/blog/index.xml
index 2fb90e2..dcec2fd 100644
--- a/blog/index.xml
+++ b/blog/index.xml
@@ -14,6 +14,93 @@
     
     
     <item>
+      <title>Blog: What&#39;s new in Apache Airflow 2.2.0</title>
+      <link>/blog/airflow-2.2.0/</link>
+      <pubDate>Mon, 11 Oct 2021 00:00:00 +0000</pubDate>
+      
+      <guid>/blog/airflow-2.2.0/</guid>
+      <description>
+        
+        
+        
+
+&lt;p&gt;I’m proud to announce that Apache Airflow 2.2.0 has been released. It contains over 600 commits since 2.1.4 and includes 30 new features, 84 improvements, 85 bug fixes, and many internal and doc changes.&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;Details&lt;/strong&gt;:&lt;/p&gt;
+
+&lt;p&gt;📦 PyPI: &lt;a href=&#34;https://pypi.org/project/apache-airflow/2.2.0/&#34; target=&#34;_blank&#34;&gt;https://pypi.org/project/apache-airflow/2.2.0/&lt;/a&gt; &lt;br /&gt;
+📚 Docs: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/2.2.0/&#34; target=&#34;_blank&#34;&gt;https://airflow.apache.org/docs/apache-airflow/2.2.0/&lt;/a&gt; &lt;br /&gt;
+🛠️ Changelog: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/2.2.0/changelog.html&#34; target=&#34;_blank&#34;&gt;https://airflow.apache.org/docs/apache-airflow/2.2.0/changelog.html&lt;/a&gt; &lt;br /&gt;
+🐳 Docker Image: docker pull apache/airflow:2.2.0 &lt;br /&gt;
+🚏 Constraints: &lt;a href=&#34;https://github.com/apache/airflow/tree/constraints-2.2.0&#34; target=&#34;_blank&#34;&gt;https://github.com/apache/airflow/tree/constraints-2.2.0&lt;/a&gt;&lt;/p&gt;
+
+&lt;p&gt;As the changelog is quite large, the following are some notable new features that shipped in this release.&lt;/p&gt;
+
+&lt;h2 id=&#34;custom-timetables-aip-39&#34;&gt;Custom Timetables (AIP-39)&lt;/h2&gt;
+
+&lt;p&gt;Airflow has historically used cron expressions and timedeltas to represent when a DAG should run. This worked for a lot of use cases, but not all. For example, running daily on Monday-Friday, but not on weekends wasn’t possible.&lt;/p&gt;
+
+&lt;p&gt;To provide more scheduling flexibility, determining when a DAG should run is now done with Timetables. Of course, backwards compatibility has been maintained - cron expressions and timedeltas are still fully supported, however, timetables are pluggable so you can add your own custom timetable to fit your needs! For example, you could write a timetable to schedule a DagRun&lt;/p&gt;
+
+&lt;p&gt;&lt;code&gt;execution_date&lt;/code&gt; has long been confusing to new Airflowers, so as part of this change a new concept has been added to Airflow to replace it named &lt;code&gt;data_interval&lt;/code&gt;, which is the period of data that a task should operate on. The following are now available:&lt;/p&gt;
+
+&lt;p&gt;&lt;code&gt;logical_date&lt;/code&gt; (aka &lt;code&gt;execution_date&lt;/code&gt;)
+&lt;code&gt;data_interval_start&lt;/code&gt; (same value as &lt;code&gt;execution_date&lt;/code&gt; for cron)
+&lt;code&gt;data_interval_end&lt;/code&gt; (aka &lt;code&gt;next_execution_date&lt;/code&gt;)&lt;/p&gt;
+
+&lt;p&gt;If you write your own timetables, keep in mind they should be idempotent and fast as they are used in the scheduler to create DagRuns.&lt;/p&gt;
+
+&lt;p&gt;More information can be found at: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/stable/howto/timetable.html&#34; target=&#34;_blank&#34;&gt;Customizing DAG Scheduling with Timetables&lt;/a&gt;&lt;/p&gt;
+
+&lt;h2 id=&#34;deferrable-tasks-aip-40&#34;&gt;Deferrable Tasks (AIP-40)&lt;/h2&gt;
+
+&lt;p&gt;Deferrable tasks allows operators or sensors to defer themselves until a light-weight async check passes, at which point they can resume executing. Most importantly, this results in the worker slot, and most notably any resources used by it, to be returned to Airflow. This allows simple things like monitoring a job in an external system or watching for an event to be much cheaper.&lt;/p&gt;
+
+&lt;p&gt;To support this feature, a new component has been added to Airflow, the triggerer, which is the daemon process that runs the asyncio event loop.&lt;/p&gt;
+
+&lt;p&gt;Airflow 2.2.0 ships with 2 deferrable sensors, &lt;code&gt;DateTimeSensorAsync&lt;/code&gt; and &lt;code&gt;TimeDeltaSensorAsync&lt;/code&gt;, both of which are drop-in replacements for the existing corresponding sensor.&lt;/p&gt;
+
+&lt;p&gt;More information can be found at:&lt;/p&gt;
+
+&lt;p&gt;&lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/stable/concepts/deferring.html&#34; target=&#34;_blank&#34;&gt;Deferrable Operators &amp;amp; Triggers&lt;/a&gt;&lt;/p&gt;
+
+&lt;h2 id=&#34;custom-task-decorators-and-task-docker&#34;&gt;Custom &lt;code&gt;@task&lt;/code&gt; decorators and &lt;code&gt;@task.docker&lt;/code&gt;&lt;/h2&gt;
+
+&lt;p&gt;Airflow 2.2.0 allows providers to create custom &lt;code&gt;@task&lt;/code&gt; decorators in the TaskFlow interface.&lt;/p&gt;
+
+&lt;p&gt;The &lt;code&gt;@task.docker&lt;/code&gt; decorator is one such decorator that allows you to run a function in a docker container. Airflow handles getting the code into the container and returning xcom - you just worry about your function. This is particularly useful when you have conflicting dependencies between Airflow itself and tasks you need to run.&lt;/p&gt;
+
+&lt;p&gt;More information on creating custom &lt;code&gt;@task&lt;/code&gt; decorators can be found at: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/stable/howto/create-custom-decorator.html&#34; target=&#34;_blank&#34;&gt;Creating Custom @task Decorators&lt;/a&gt;&lt;/p&gt;
+
+&lt;p&gt;More information on the &lt;code&gt;@task.docker&lt;/code&gt; decorator can be found at: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/stable/tutorial_taskflow_api.html#using-the-taskflow-api-with-docker-or-virtual-environments&#34; target=&#34;_blank&#34;&gt;Using the Taskflow API with Docker or Virtual Environments&lt;/a&gt;&lt;/p&gt;
+
+&lt;h2 id=&#34;validation-of-dag-params&#34;&gt;Validation of DAG params&lt;/h2&gt;
+
+&lt;p&gt;You can now apply validation on DAG params by passing a &lt;code&gt;Param&lt;/code&gt; object for each param. The &lt;code&gt;Param&lt;/code&gt; object supports the full &lt;a href=&#34;https://json-schema.org/draft/2020-12/json-schema-validation.html&#34; target=&#34;_blank&#34;&gt;json-schema validation specifications&lt;/a&gt;.&lt;/p&gt;
+
+&lt;p&gt;Currently this only functions with manually triggered DAGs, but it does set the stage for future params related functionality.&lt;/p&gt;
+
+&lt;p&gt;More information can be found at: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/stable/concepts/params.html&#34; target=&#34;_blank&#34;&gt;Params&lt;/a&gt;&lt;/p&gt;
+
+&lt;h2 id=&#34;other-small-features&#34;&gt;Other small features&lt;/h2&gt;
+
+&lt;p&gt;This isn’t a comprehensive list, but some noteworthy or interesting small features include:&lt;/p&gt;
+
+&lt;ul&gt;
+&lt;li&gt;Testing Connections from the UI - test the credentials for your Connection actually work&lt;/li&gt;
+&lt;li&gt;Duplication Connections from the UI&lt;/li&gt;
+&lt;li&gt;DAGs “Next run” info is shown in the UI, including when the run will actually start&lt;/li&gt;
+&lt;li&gt;&lt;code&gt;airflow standalone&lt;/code&gt; command runs all of the Airflow components directly without docker - great for local development&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h2 id=&#34;contributors&#34;&gt;Contributors&lt;/h2&gt;
+
+&lt;p&gt;Thanks to everyone who contributed to this release: Andrew Godwin, Ash Berlin-Taylor, Brent Bovenzi, Elad Kalif, Ephraim Anierobi, James Timmins, Jarek Potiuk, Jed Cunningham, Josh Fell, Kamil Breguła, Kaxil Naik, Malthe Borch, Sam Wheating, Sumit Maheshwari, Tzu-ping Chung and many others&lt;/p&gt;
+
+      </description>
+    </item>
+    
+    <item>
       <title>Blog: Airflow Summit 2021</title>
       <link>/blog/airflow_summit_2021/</link>
       <pubDate>Sun, 21 Mar 2021 00:00:00 +0000</pubDate>
diff --git a/blog/its-a-breeze-to-develop-apache-airflow/index.html b/blog/its-a-breeze-to-develop-apache-airflow/index.html
index 6499916..1a6a53b 100644
--- a/blog/its-a-breeze-to-develop-apache-airflow/index.html
+++ b/blog/its-a-breeze-to-develop-apache-airflow/index.html
@@ -36,13 +36,13 @@
 
 <meta property="og:image" content="/images/feature-image.png" />
 <meta property="article:published_time" content="2019-11-22T00:00:00+00:00" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="It&#39;s a &#34;Breeze&#34; to develop Apache Airflow">
 <meta itemprop="description" content="A Principal Software Engineer&#39;s journey to developer productivity. Learn how Jarek and his team speeded up and simplified Airflow development for the community.">
 
 
 <meta itemprop="datePublished" content="2019-11-22T00:00:00&#43;00:00" />
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="124">
 
 
diff --git a/blog/tags/release/index.html b/blog/tags/release/index.html
index 4781e50..db37786 100644
--- a/blog/tags/release/index.html
+++ b/blog/tags/release/index.html
@@ -37,7 +37,7 @@
 
 <meta property="og:image" content="/images/feature-image.png" />
 
-<meta property="og:updated_time" content="2020-12-17T00:00:00+00:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="og:updated_time" content="2021-10-11T00:00:00+00:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="release">
 <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
 
@@ -502,6 +502,41 @@ if (!doNotTrack) {
                     
                 
             </div>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Mon, Oct 11, 2021</span>
+        </div>
+        <p class="box-event__blogpost--header">
+            <a href="/blog/airflow-2.2.0/">
+                What&#39;s new in Apache Airflow 2.2.0
+            </a>
+        </p>
+        <p class="box-event__blogpost--author">Jed Cunningham</p>
+        <p class="box-event__blogpost--description">We&#39;re proud to announce that Apache Airflow 2.2.0 has been released.</p>
+        <div class="mt-auto">
+            <a href="/blog/airflow-2.2.0/">
+                
+
+<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
+
+            </a>
+        </div>
+    </div>
+</div>
+
+                    </div>
+                
+                    <div class="list-item list-item--wide">
+                        
+
+<div class="card">
+    <div class="box-event__blogpost">
+        <div class="box-event__blogpost--metadata">
+            <div class="tags-container">
+                
+                    
+                        <a class="tag" href="/blog/tags/release/">Release</a>
+                    
+                
+            </div>
             <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Dec 17, 2020</span>
         </div>
         <p class="box-event__blogpost--header">
diff --git a/blog/tags/release/index.xml b/blog/tags/release/index.xml
index b32d2e2..9340149 100644
--- a/blog/tags/release/index.xml
+++ b/blog/tags/release/index.xml
@@ -4,7 +4,7 @@
     <link>/blog/tags/release/</link>
     <description>Recent content in release on Apache Airflow</description>
     <generator>Hugo -- gohugo.io</generator>
-    <lastBuildDate>Thu, 17 Dec 2020 00:00:00 +0000</lastBuildDate>
+    <lastBuildDate>Mon, 11 Oct 2021 00:00:00 +0000</lastBuildDate>
     
 	  <atom:link href="/blog/tags/release/index.xml" rel="self" type="application/rss+xml" />
     
@@ -15,6 +15,93 @@
     
     
     <item>
+      <title>Blog: What&#39;s new in Apache Airflow 2.2.0</title>
+      <link>/blog/airflow-2.2.0/</link>
+      <pubDate>Mon, 11 Oct 2021 00:00:00 +0000</pubDate>
+      
+      <guid>/blog/airflow-2.2.0/</guid>
+      <description>
+        
+        
+        
+
+&lt;p&gt;I’m proud to announce that Apache Airflow 2.2.0 has been released. It contains over 600 commits since 2.1.4 and includes 30 new features, 84 improvements, 85 bug fixes, and many internal and doc changes.&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;Details&lt;/strong&gt;:&lt;/p&gt;
+
+&lt;p&gt;📦 PyPI: &lt;a href=&#34;https://pypi.org/project/apache-airflow/2.2.0/&#34; target=&#34;_blank&#34;&gt;https://pypi.org/project/apache-airflow/2.2.0/&lt;/a&gt; &lt;br /&gt;
+📚 Docs: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/2.2.0/&#34; target=&#34;_blank&#34;&gt;https://airflow.apache.org/docs/apache-airflow/2.2.0/&lt;/a&gt; &lt;br /&gt;
+🛠️ Changelog: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/2.2.0/changelog.html&#34; target=&#34;_blank&#34;&gt;https://airflow.apache.org/docs/apache-airflow/2.2.0/changelog.html&lt;/a&gt; &lt;br /&gt;
+🐳 Docker Image: docker pull apache/airflow:2.2.0 &lt;br /&gt;
+🚏 Constraints: &lt;a href=&#34;https://github.com/apache/airflow/tree/constraints-2.2.0&#34; target=&#34;_blank&#34;&gt;https://github.com/apache/airflow/tree/constraints-2.2.0&lt;/a&gt;&lt;/p&gt;
+
+&lt;p&gt;As the changelog is quite large, the following are some notable new features that shipped in this release.&lt;/p&gt;
+
+&lt;h2 id=&#34;custom-timetables-aip-39&#34;&gt;Custom Timetables (AIP-39)&lt;/h2&gt;
+
+&lt;p&gt;Airflow has historically used cron expressions and timedeltas to represent when a DAG should run. This worked for a lot of use cases, but not all. For example, running daily on Monday-Friday, but not on weekends wasn’t possible.&lt;/p&gt;
+
+&lt;p&gt;To provide more scheduling flexibility, determining when a DAG should run is now done with Timetables. Of course, backwards compatibility has been maintained - cron expressions and timedeltas are still fully supported, however, timetables are pluggable so you can add your own custom timetable to fit your needs! For example, you could write a timetable to schedule a DagRun&lt;/p&gt;
+
+&lt;p&gt;&lt;code&gt;execution_date&lt;/code&gt; has long been confusing to new Airflowers, so as part of this change a new concept has been added to Airflow to replace it named &lt;code&gt;data_interval&lt;/code&gt;, which is the period of data that a task should operate on. The following are now available:&lt;/p&gt;
+
+&lt;p&gt;&lt;code&gt;logical_date&lt;/code&gt; (aka &lt;code&gt;execution_date&lt;/code&gt;)
+&lt;code&gt;data_interval_start&lt;/code&gt; (same value as &lt;code&gt;execution_date&lt;/code&gt; for cron)
+&lt;code&gt;data_interval_end&lt;/code&gt; (aka &lt;code&gt;next_execution_date&lt;/code&gt;)&lt;/p&gt;
+
+&lt;p&gt;If you write your own timetables, keep in mind they should be idempotent and fast as they are used in the scheduler to create DagRuns.&lt;/p&gt;
+
+&lt;p&gt;More information can be found at: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/stable/howto/timetable.html&#34; target=&#34;_blank&#34;&gt;Customizing DAG Scheduling with Timetables&lt;/a&gt;&lt;/p&gt;
+
+&lt;h2 id=&#34;deferrable-tasks-aip-40&#34;&gt;Deferrable Tasks (AIP-40)&lt;/h2&gt;
+
+&lt;p&gt;Deferrable tasks allows operators or sensors to defer themselves until a light-weight async check passes, at which point they can resume executing. Most importantly, this results in the worker slot, and most notably any resources used by it, to be returned to Airflow. This allows simple things like monitoring a job in an external system or watching for an event to be much cheaper.&lt;/p&gt;
+
+&lt;p&gt;To support this feature, a new component has been added to Airflow, the triggerer, which is the daemon process that runs the asyncio event loop.&lt;/p&gt;
+
+&lt;p&gt;Airflow 2.2.0 ships with 2 deferrable sensors, &lt;code&gt;DateTimeSensorAsync&lt;/code&gt; and &lt;code&gt;TimeDeltaSensorAsync&lt;/code&gt;, both of which are drop-in replacements for the existing corresponding sensor.&lt;/p&gt;
+
+&lt;p&gt;More information can be found at:&lt;/p&gt;
+
+&lt;p&gt;&lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/stable/concepts/deferring.html&#34; target=&#34;_blank&#34;&gt;Deferrable Operators &amp;amp; Triggers&lt;/a&gt;&lt;/p&gt;
+
+&lt;h2 id=&#34;custom-task-decorators-and-task-docker&#34;&gt;Custom &lt;code&gt;@task&lt;/code&gt; decorators and &lt;code&gt;@task.docker&lt;/code&gt;&lt;/h2&gt;
+
+&lt;p&gt;Airflow 2.2.0 allows providers to create custom &lt;code&gt;@task&lt;/code&gt; decorators in the TaskFlow interface.&lt;/p&gt;
+
+&lt;p&gt;The &lt;code&gt;@task.docker&lt;/code&gt; decorator is one such decorator that allows you to run a function in a docker container. Airflow handles getting the code into the container and returning xcom - you just worry about your function. This is particularly useful when you have conflicting dependencies between Airflow itself and tasks you need to run.&lt;/p&gt;
+
+&lt;p&gt;More information on creating custom &lt;code&gt;@task&lt;/code&gt; decorators can be found at: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/stable/howto/create-custom-decorator.html&#34; target=&#34;_blank&#34;&gt;Creating Custom @task Decorators&lt;/a&gt;&lt;/p&gt;
+
+&lt;p&gt;More information on the &lt;code&gt;@task.docker&lt;/code&gt; decorator can be found at: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/stable/tutorial_taskflow_api.html#using-the-taskflow-api-with-docker-or-virtual-environments&#34; target=&#34;_blank&#34;&gt;Using the Taskflow API with Docker or Virtual Environments&lt;/a&gt;&lt;/p&gt;
+
+&lt;h2 id=&#34;validation-of-dag-params&#34;&gt;Validation of DAG params&lt;/h2&gt;
+
+&lt;p&gt;You can now apply validation on DAG params by passing a &lt;code&gt;Param&lt;/code&gt; object for each param. The &lt;code&gt;Param&lt;/code&gt; object supports the full &lt;a href=&#34;https://json-schema.org/draft/2020-12/json-schema-validation.html&#34; target=&#34;_blank&#34;&gt;json-schema validation specifications&lt;/a&gt;.&lt;/p&gt;
+
+&lt;p&gt;Currently this only functions with manually triggered DAGs, but it does set the stage for future params related functionality.&lt;/p&gt;
+
+&lt;p&gt;More information can be found at: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/stable/concepts/params.html&#34; target=&#34;_blank&#34;&gt;Params&lt;/a&gt;&lt;/p&gt;
+
+&lt;h2 id=&#34;other-small-features&#34;&gt;Other small features&lt;/h2&gt;
+
+&lt;p&gt;This isn’t a comprehensive list, but some noteworthy or interesting small features include:&lt;/p&gt;
+
+&lt;ul&gt;
+&lt;li&gt;Testing Connections from the UI - test the credentials for your Connection actually work&lt;/li&gt;
+&lt;li&gt;Duplication Connections from the UI&lt;/li&gt;
+&lt;li&gt;DAGs “Next run” info is shown in the UI, including when the run will actually start&lt;/li&gt;
+&lt;li&gt;&lt;code&gt;airflow standalone&lt;/code&gt; command runs all of the Airflow components directly without docker - great for local development&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h2 id=&#34;contributors&#34;&gt;Contributors&lt;/h2&gt;
+
+&lt;p&gt;Thanks to everyone who contributed to this release: Andrew Godwin, Ash Berlin-Taylor, Brent Bovenzi, Elad Kalif, Ephraim Anierobi, James Timmins, Jarek Potiuk, Jed Cunningham, Josh Fell, Kamil Breguła, Kaxil Naik, Malthe Borch, Sam Wheating, Sumit Maheshwari, Tzu-ping Chung and many others&lt;/p&gt;
+
+      </description>
+    </item>
+    
+    <item>
       <title>Blog: Apache Airflow 2.0 is here!</title>
       <link>/blog/airflow-two-point-oh-is-here/</link>
       <pubDate>Thu, 17 Dec 2020 00:00:00 +0000</pubDate>
diff --git a/index.html b/index.html
index 12f6f53..f8c0ae9 100644
--- a/index.html
+++ b/index.html
@@ -1226,12 +1226,12 @@ if (!doNotTrack) {
             <div id="integrations-container" class="list-items">
                 
                 
-                <a class="list-item" href="/docs/apache-airflow-providers-google/stable/operators/marketing_platform/analytics.html">
+                <a class="list-item" href="/docs/apache-airflow-providers-cloudant/stable/index.html">
                     
 
 <div class="card">
     <div class="box-event box-event__integration">
-        <span class="box-event__integration--name">Google Analytics360</span>
+        <span class="box-event__integration--name">IBM Cloudant</span>
     </div>
 </div>
 
@@ -1239,12 +1239,12 @@ if (!doNotTrack) {
                 
                 
                 
-                <a class="list-item" href="/docs/apache-airflow-providers-microsoft-azure/stable/index.html">
+                <a class="list-item" href="/docs/apache-airflow-providers-papermill/stable/operators.html">
                     
 
 <div class="card">
     <div class="box-event box-event__integration">
-        <span class="box-event__integration--name">Microsoft Azure Data Explorer</span>
+        <span class="box-event__integration--name">Papermill</span>
     </div>
 </div>
 
@@ -1252,12 +1252,12 @@ if (!doNotTrack) {
                 
                 
                 
-                <a class="list-item" href="/docs/apache-airflow-providers-google/stable/operators/cloud/cloud_memorystore.html">
+                <a class="list-item" href="/docs/apache-airflow-providers-cncf-kubernetes/stable/operators.html">
                     
 
 <div class="card">
     <div class="box-event box-event__integration">
-        <span class="box-event__integration--name">Google Cloud Memorystore</span>
+        <span class="box-event__integration--name">Kubernetes</span>
     </div>
 </div>
 
@@ -1265,12 +1265,12 @@ if (!doNotTrack) {
                 
                 
                 
-                <a class="list-item" href="/docs/apache-airflow-providers-docker/stable/index.html">
+                <a class="list-item" href="/docs/apache-airflow-providers-vertica/stable/index.html">
                     
 
 <div class="card">
     <div class="box-event box-event__integration">
-        <span class="box-event__integration--name">Docker</span>
+        <span class="box-event__integration--name">Vertica</span>
     </div>
 </div>
 
@@ -1278,12 +1278,12 @@ if (!doNotTrack) {
                 
                 
                 
-                <a class="list-item" href="/docs/apache-airflow-providers-google/stable/operators/cloud/datafusion.html">
+                <a class="list-item" href="/docs/apache-airflow-providers-google/stable/operators/cloud/pubsub.html">
                     
 
 <div class="card">
     <div class="box-event box-event__integration">
-        <span class="box-event__integration--name">Google Data Fusion</span>
+        <span class="box-event__integration--name">Google Cloud Pub/Sub</span>
     </div>
 </div>
 
@@ -1291,12 +1291,12 @@ if (!doNotTrack) {
                 
                 
                 
-                <a class="list-item" href="/docs/apache-airflow-providers-samba/stable/index.html">
+                <a class="list-item" href="/docs/apache-airflow-providers-google/stable/operators/cloud/cloud_memorystore.html">
                     
 
 <div class="card">
     <div class="box-event box-event__integration">
-        <span class="box-event__integration--name">Samba</span>
+        <span class="box-event__integration--name">Google Cloud Memorystore</span>
     </div>
 </div>
 
@@ -1304,12 +1304,12 @@ if (!doNotTrack) {
                 
                 
                 
-                <a class="list-item" href="/docs/apache-airflow-providers-salesforce/stable/index.html">
+                <a class="list-item" href="/docs/apache-airflow-providers-samba/stable/index.html">
                     
 
 <div class="card">
     <div class="box-event box-event__integration">
-        <span class="box-event__integration--name">Salesforce</span>
+        <span class="box-event__integration--name">Samba</span>
     </div>
 </div>
 
@@ -1317,12 +1317,12 @@ if (!doNotTrack) {
                 
                 
                 
-                <a class="list-item" href="/docs/apache-airflow-providers-google/stable/operators/cloud/text_to_speech.html">
+                <a class="list-item" href="/docs/apache-airflow-providers-google/stable/operators/ads.html">
                     
 
 <div class="card">
     <div class="box-event box-event__integration">
-        <span class="box-event__integration--name">Google Cloud Text-to-Speech</span>
+        <span class="box-event__integration--name">Google Ads</span>
     </div>
 </div>
 
diff --git a/index.xml b/index.xml
index e4f05e2..9ebefbc 100644
--- a/index.xml
+++ b/index.xml
@@ -13,6 +13,93 @@
     
     
     <item>
+      <title>Blog: What&#39;s new in Apache Airflow 2.2.0</title>
+      <link>/blog/airflow-2.2.0/</link>
+      <pubDate>Mon, 11 Oct 2021 00:00:00 +0000</pubDate>
+      
+      <guid>/blog/airflow-2.2.0/</guid>
+      <description>
+        
+        
+        
+
+&lt;p&gt;I’m proud to announce that Apache Airflow 2.2.0 has been released. It contains over 600 commits since 2.1.4 and includes 30 new features, 84 improvements, 85 bug fixes, and many internal and doc changes.&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;Details&lt;/strong&gt;:&lt;/p&gt;
+
+&lt;p&gt;📦 PyPI: &lt;a href=&#34;https://pypi.org/project/apache-airflow/2.2.0/&#34; target=&#34;_blank&#34;&gt;https://pypi.org/project/apache-airflow/2.2.0/&lt;/a&gt; &lt;br /&gt;
+📚 Docs: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/2.2.0/&#34; target=&#34;_blank&#34;&gt;https://airflow.apache.org/docs/apache-airflow/2.2.0/&lt;/a&gt; &lt;br /&gt;
+🛠️ Changelog: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/2.2.0/changelog.html&#34; target=&#34;_blank&#34;&gt;https://airflow.apache.org/docs/apache-airflow/2.2.0/changelog.html&lt;/a&gt; &lt;br /&gt;
+🐳 Docker Image: docker pull apache/airflow:2.2.0 &lt;br /&gt;
+🚏 Constraints: &lt;a href=&#34;https://github.com/apache/airflow/tree/constraints-2.2.0&#34; target=&#34;_blank&#34;&gt;https://github.com/apache/airflow/tree/constraints-2.2.0&lt;/a&gt;&lt;/p&gt;
+
+&lt;p&gt;As the changelog is quite large, the following are some notable new features that shipped in this release.&lt;/p&gt;
+
+&lt;h2 id=&#34;custom-timetables-aip-39&#34;&gt;Custom Timetables (AIP-39)&lt;/h2&gt;
+
+&lt;p&gt;Airflow has historically used cron expressions and timedeltas to represent when a DAG should run. This worked for a lot of use cases, but not all. For example, running daily on Monday-Friday, but not on weekends wasn’t possible.&lt;/p&gt;
+
+&lt;p&gt;To provide more scheduling flexibility, determining when a DAG should run is now done with Timetables. Of course, backwards compatibility has been maintained - cron expressions and timedeltas are still fully supported, however, timetables are pluggable so you can add your own custom timetable to fit your needs! For example, you could write a timetable to schedule a DagRun&lt;/p&gt;
+
+&lt;p&gt;&lt;code&gt;execution_date&lt;/code&gt; has long been confusing to new Airflowers, so as part of this change a new concept has been added to Airflow to replace it named &lt;code&gt;data_interval&lt;/code&gt;, which is the period of data that a task should operate on. The following are now available:&lt;/p&gt;
+
+&lt;p&gt;&lt;code&gt;logical_date&lt;/code&gt; (aka &lt;code&gt;execution_date&lt;/code&gt;)
+&lt;code&gt;data_interval_start&lt;/code&gt; (same value as &lt;code&gt;execution_date&lt;/code&gt; for cron)
+&lt;code&gt;data_interval_end&lt;/code&gt; (aka &lt;code&gt;next_execution_date&lt;/code&gt;)&lt;/p&gt;
+
+&lt;p&gt;If you write your own timetables, keep in mind they should be idempotent and fast as they are used in the scheduler to create DagRuns.&lt;/p&gt;
+
+&lt;p&gt;More information can be found at: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/stable/howto/timetable.html&#34; target=&#34;_blank&#34;&gt;Customizing DAG Scheduling with Timetables&lt;/a&gt;&lt;/p&gt;
+
+&lt;h2 id=&#34;deferrable-tasks-aip-40&#34;&gt;Deferrable Tasks (AIP-40)&lt;/h2&gt;
+
+&lt;p&gt;Deferrable tasks allows operators or sensors to defer themselves until a light-weight async check passes, at which point they can resume executing. Most importantly, this results in the worker slot, and most notably any resources used by it, to be returned to Airflow. This allows simple things like monitoring a job in an external system or watching for an event to be much cheaper.&lt;/p&gt;
+
+&lt;p&gt;To support this feature, a new component has been added to Airflow, the triggerer, which is the daemon process that runs the asyncio event loop.&lt;/p&gt;
+
+&lt;p&gt;Airflow 2.2.0 ships with 2 deferrable sensors, &lt;code&gt;DateTimeSensorAsync&lt;/code&gt; and &lt;code&gt;TimeDeltaSensorAsync&lt;/code&gt;, both of which are drop-in replacements for the existing corresponding sensor.&lt;/p&gt;
+
+&lt;p&gt;More information can be found at:&lt;/p&gt;
+
+&lt;p&gt;&lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/stable/concepts/deferring.html&#34; target=&#34;_blank&#34;&gt;Deferrable Operators &amp;amp; Triggers&lt;/a&gt;&lt;/p&gt;
+
+&lt;h2 id=&#34;custom-task-decorators-and-task-docker&#34;&gt;Custom &lt;code&gt;@task&lt;/code&gt; decorators and &lt;code&gt;@task.docker&lt;/code&gt;&lt;/h2&gt;
+
+&lt;p&gt;Airflow 2.2.0 allows providers to create custom &lt;code&gt;@task&lt;/code&gt; decorators in the TaskFlow interface.&lt;/p&gt;
+
+&lt;p&gt;The &lt;code&gt;@task.docker&lt;/code&gt; decorator is one such decorator that allows you to run a function in a docker container. Airflow handles getting the code into the container and returning xcom - you just worry about your function. This is particularly useful when you have conflicting dependencies between Airflow itself and tasks you need to run.&lt;/p&gt;
+
+&lt;p&gt;More information on creating custom &lt;code&gt;@task&lt;/code&gt; decorators can be found at: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/stable/howto/create-custom-decorator.html&#34; target=&#34;_blank&#34;&gt;Creating Custom @task Decorators&lt;/a&gt;&lt;/p&gt;
+
+&lt;p&gt;More information on the &lt;code&gt;@task.docker&lt;/code&gt; decorator can be found at: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/stable/tutorial_taskflow_api.html#using-the-taskflow-api-with-docker-or-virtual-environments&#34; target=&#34;_blank&#34;&gt;Using the Taskflow API with Docker or Virtual Environments&lt;/a&gt;&lt;/p&gt;
+
+&lt;h2 id=&#34;validation-of-dag-params&#34;&gt;Validation of DAG params&lt;/h2&gt;
+
+&lt;p&gt;You can now apply validation on DAG params by passing a &lt;code&gt;Param&lt;/code&gt; object for each param. The &lt;code&gt;Param&lt;/code&gt; object supports the full &lt;a href=&#34;https://json-schema.org/draft/2020-12/json-schema-validation.html&#34; target=&#34;_blank&#34;&gt;json-schema validation specifications&lt;/a&gt;.&lt;/p&gt;
+
+&lt;p&gt;Currently this only functions with manually triggered DAGs, but it does set the stage for future params related functionality.&lt;/p&gt;
+
+&lt;p&gt;More information can be found at: &lt;a href=&#34;https://airflow.apache.org/docs/apache-airflow/stable/concepts/params.html&#34; target=&#34;_blank&#34;&gt;Params&lt;/a&gt;&lt;/p&gt;
+
+&lt;h2 id=&#34;other-small-features&#34;&gt;Other small features&lt;/h2&gt;
+
+&lt;p&gt;This isn’t a comprehensive list, but some noteworthy or interesting small features include:&lt;/p&gt;
+
+&lt;ul&gt;
+&lt;li&gt;Testing Connections from the UI - test the credentials for your Connection actually work&lt;/li&gt;
+&lt;li&gt;Duplication Connections from the UI&lt;/li&gt;
+&lt;li&gt;DAGs “Next run” info is shown in the UI, including when the run will actually start&lt;/li&gt;
+&lt;li&gt;&lt;code&gt;airflow standalone&lt;/code&gt; command runs all of the Airflow components directly without docker - great for local development&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h2 id=&#34;contributors&#34;&gt;Contributors&lt;/h2&gt;
+
+&lt;p&gt;Thanks to everyone who contributed to this release: Andrew Godwin, Ash Berlin-Taylor, Brent Bovenzi, Elad Kalif, Ephraim Anierobi, James Timmins, Jarek Potiuk, Jed Cunningham, Josh Fell, Kamil Breguła, Kaxil Naik, Malthe Borch, Sam Wheating, Sumit Maheshwari, Tzu-ping Chung and many others&lt;/p&gt;
+
+      </description>
+    </item>
+    
+    <item>
       <title>Blog: Airflow Summit 2021</title>
       <link>/blog/airflow_summit_2021/</link>
       <pubDate>Sun, 21 Mar 2021 00:00:00 +0000</pubDate>
diff --git a/search/index.html b/search/index.html
index 10a6d48..b4f9012 100644
--- a/search/index.html
+++ b/search/index.html
@@ -35,12 +35,12 @@
 <meta property="og:url" content="/search/" />
 
 <meta property="og:image" content="/images/feature-image.png" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Search Results">
 <meta itemprop="description" content="">
 
 
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="0">
 
 
diff --git a/sitemap.xml b/sitemap.xml
index 5116bfb..91970f7 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -4,152 +4,157 @@
   
   <url>
     <loc>/docs/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
-    <loc>/blog/tags/airflow-summit/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <loc>/blog/tags/release/</loc>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
-    <loc>/blog/airflow_summit_2021/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <loc>/tags/</loc>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
-    <loc>/blog/tags/community/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <loc>/blog/airflow-2.2.0/</loc>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
-    <loc>/tags/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <loc>/blog/tags/airflow-summit/</loc>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
+  </url>
+  
+  <url>
+    <loc>/blog/airflow_summit_2021/</loc>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
+  </url>
+  
+  <url>
+    <loc>/blog/tags/community/</loc>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/airflow-survey-2020/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/tags/survey/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/tags/users/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/airflow-two-point-oh-is-here/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
-  </url>
-  
-  <url>
-    <loc>/blog/tags/release/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/experience-with-airflow-as-an-outreachy-intern/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/airflow-1.10.12/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/apache-airflow-for-newcomers/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/announcements/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/implementing-stable-api-for-apache-airflow/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/tags/rest-api/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/airflow-1.10.10/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/airflow-1.10.8-1.10.9/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/tags/documentation/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/experience-in-google-season-of-docs-2019-with-apache-airflow/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/airflow-survey/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/announcing-new-website/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/apache-con-europe-2019-thoughts-and-insights-by-airflow-committers/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/tags/development/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/documenting-using-local-development-environments/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/its-a-breeze-to-develop-apache-airflow/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/use-cases/adobe/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/use-cases/adyen/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/use-cases/big-fish-games/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/blog/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
@@ -158,77 +163,77 @@
   
   <url>
     <loc>/community/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/use-cases/dish/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/ecosystem/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/use-cases/experity/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/install/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/meetups/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/use-cases/onefootball/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/use-cases/plarium-krasnodar/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/privacy-notice/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/roadmap/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/search/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/use-cases/seniorlink/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/use-cases/sift/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
   <url>
     <loc>/use-cases/</loc>
-    <lastmod>2021-10-11T19:59:36+02:00</lastmod>
+    <lastmod>2021-10-11T13:57:15-06:00</lastmod>
   </url>
   
 </urlset>
\ No newline at end of file
diff --git a/tags/index.html b/tags/index.html
index 2402eff..7453944 100644
--- a/tags/index.html
+++ b/tags/index.html
@@ -37,7 +37,7 @@
 
 <meta property="og:image" content="/images/feature-image.png" />
 
-<meta property="og:updated_time" content="2021-03-21T00:00:00+00:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="og:updated_time" content="2021-10-11T00:00:00+00:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Tags">
 <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
 
diff --git a/tags/index.xml b/tags/index.xml
index ff3bb66..779b1e1 100644
--- a/tags/index.xml
+++ b/tags/index.xml
@@ -4,7 +4,7 @@
     <link>/tags/</link>
     <description>Recent content in Tags on Apache Airflow</description>
     <generator>Hugo -- gohugo.io</generator>
-    <lastBuildDate>Sun, 21 Mar 2021 00:00:00 +0000</lastBuildDate>
+    <lastBuildDate>Mon, 11 Oct 2021 00:00:00 +0000</lastBuildDate>
     
 	  <atom:link href="/tags/index.xml" rel="self" type="application/rss+xml" />
     
diff --git a/use-cases/adobe/index.html b/use-cases/adobe/index.html
index 6b69aca..9a5fcf5 100644
--- a/use-cases/adobe/index.html
+++ b/use-cases/adobe/index.html
@@ -35,12 +35,12 @@
 <meta property="og:url" content="/use-cases/adobe/" />
 
 <meta property="og:image" content="/images/feature-image.png" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Adobe">
 <meta itemprop="description" content="What was the problem? Modern big data platforms need sophisticated data pipelines connecting to many backend services enabling complex workflows. These workflows need to be deployed, monitored, and run either on regular schedules or triggered by external events. Adobe Experience Platform component services architected and built an orchestration service to enable their users to author, schedule, and monitor complex hierarchical (including sequential a [...]
 
 
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="251">
 
 
diff --git a/use-cases/adyen/index.html b/use-cases/adyen/index.html
index 956e692..e6a16c5 100644
--- a/use-cases/adyen/index.html
+++ b/use-cases/adyen/index.html
@@ -35,12 +35,12 @@
 <meta property="og:url" content="/use-cases/adyen/" />
 
 <meta property="og:image" content="/images/feature-image.png" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Adyen">
 <meta itemprop="description" content="What was the problem? Many years ago we started out with our own orchestration framework. Due to all the required custom functionality it made sense at the time. However, quickly we realized creating an orchestration tool is not to be underestimated. With the quickly increasing number of users and teams, time spent on fixing issues increased, severely limiting development speed. Furthermore, due to it not being open source, we constantly had to make  [...]
 
 
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="405">
 
 
diff --git a/use-cases/big-fish-games/index.html b/use-cases/big-fish-games/index.html
index a000981..48beddc 100644
--- a/use-cases/big-fish-games/index.html
+++ b/use-cases/big-fish-games/index.html
@@ -35,12 +35,12 @@
 <meta property="og:url" content="/use-cases/big-fish-games/" />
 
 <meta property="og:image" content="/images/feature-image.png" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Big Fish Games">
 <meta itemprop="description" content="What was the problem? The main challenge is the lack of standardized ETL workflow orchestration tools. PowerShell and Python-based ETL frameworks built in-house are currently used for scheduling and running analytical workloads. However, there is no web UI through which we can monitor these workflows and it requires additional effort to maintain this framework. These scheduled jobs based on external dependencies are not well suited to modern Big Data [...]
 
 
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="336">
 
 
diff --git a/use-cases/dish/index.html b/use-cases/dish/index.html
index 26711a7..421a8fa 100644
--- a/use-cases/dish/index.html
+++ b/use-cases/dish/index.html
@@ -35,12 +35,12 @@
 <meta property="og:url" content="/use-cases/dish/" />
 
 <meta property="og:image" content="/images/feature-image.png" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Dish">
 <meta itemprop="description" content="What was the problem? We faced increasing complexity managing lengthy crontabs with scheduling being an issue, this required carefully planning timing due to resource constraints, usage patterns, and especially custom code needed for retry logic. In the last case, having to verify success of previous jobs and/or steps prior to running the next. Furthermore, time to results is important, but we were increasingly relying on buffers for processing, wher [...]
 
 
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="249">
 
 
diff --git a/use-cases/experity/index.html b/use-cases/experity/index.html
index b1e543c..544005e 100644
--- a/use-cases/experity/index.html
+++ b/use-cases/experity/index.html
@@ -36,13 +36,13 @@ How did Apache Airflow help to solve this problem? Ultimately we decided flexibl
 <meta property="og:url" content="/use-cases/experity/" />
 
 <meta property="og:image" content="/images/feature-image.png" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Experity">
 <meta itemprop="description" content="What was the problem? We had to deploy our complex, flagship app to multiple nodes in multiple ways. This required tasks to communicate across Windows nodes and coordinate timing perfectly. We did not want to buy an expensive enterprise scheduling tool and needed ultimate flexibility.
 How did Apache Airflow help to solve this problem? Ultimately we decided flexible, multi-node, DAG capable tooling was key and airflow was one of the few tools that fit that bill.">
 
 
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="191">
 
 
diff --git a/use-cases/onefootball/index.html b/use-cases/onefootball/index.html
index 87fbdaf..177ec49 100644
--- a/use-cases/onefootball/index.html
+++ b/use-cases/onefootball/index.html
@@ -36,13 +36,13 @@ On top of that, new data tools appear each month: third party data sources, clou
 <meta property="og:url" content="/use-cases/onefootball/" />
 
 <meta property="og:image" content="/images/feature-image.png" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Onefootball">
 <meta itemprop="description" content="What was the problem? With millions of daily active users, managing the complexity of data engineering at Onefootball is a constant challenge. Lengthy crontabs, multiplication of custom API clients, erosion of confidence in the analytics served, increasing heroism (&ldquo;only one person can solve this issue&rdquo;). Those are the challenges that most teams face unless they consciously invest in their tools and processes.
 On top of that, new data tools appear each month: third party data sources, cloud providers solutions, different storage technologies&hellip; Managing all those integrations is costly and brittle, especially for small data engineering teams that are trying to do more with less.">
 
 
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="294">
 
 
diff --git a/use-cases/plarium-krasnodar/index.html b/use-cases/plarium-krasnodar/index.html
index 69b831a..b012f5c 100644
--- a/use-cases/plarium-krasnodar/index.html
+++ b/use-cases/plarium-krasnodar/index.html
@@ -35,12 +35,12 @@
 <meta property="og:url" content="/use-cases/plarium-krasnodar/" />
 
 <meta property="og:image" content="/images/feature-image.png" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Plarium Krasnodar">
 <meta itemprop="description" content="What was the problem? Our Research &amp; Development department carries out various experiments, and in all of them, we need to create workflow orchestrations for solving tasks in game dev. Previously, we didn&rsquo;t have any suitable tools with a sufficient number of built-in functions, and we had to orchestrate processes manually and entirely from scratch every time. This led to difficulties with dependencies and monitoring when building complex w [...]
 
 
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="257">
 
 
diff --git a/use-cases/seniorlink/index.html b/use-cases/seniorlink/index.html
index d82b888..7b2f7f7 100644
--- a/use-cases/seniorlink/index.html
+++ b/use-cases/seniorlink/index.html
@@ -36,13 +36,13 @@ We had built a robust stack of batch processes to deliver value to the business,
 <meta property="og:url" content="/use-cases/seniorlink/" />
 
 <meta property="og:image" content="/images/feature-image.png" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Seniorlink">
 <meta itemprop="description" content="What was the problem? Here at Seniorlink, we provide services, support, and technology that engages family caregivers. One of our focuses is using data to bolster our knowledge and improve the experience of our users. Like many looking to build an effective data stack, we adopted a Python, Spark, Redshift, and Tableau core toolset.
 We had built a robust stack of batch processes to deliver value to the business, deploying these data services in AWS using a mixture of EMR, ECS, Lambda, and EC2.">
 
 
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="400">
 
 
diff --git a/use-cases/sift/index.html b/use-cases/sift/index.html
index d3a7176..50f366e 100644
--- a/use-cases/sift/index.html
+++ b/use-cases/sift/index.html
@@ -35,12 +35,12 @@
 <meta property="og:url" content="/use-cases/sift/" />
 
 <meta property="og:image" content="/images/feature-image.png" />
-<meta property="article:modified_time" content="2021-10-11T19:59:36+02:00" /><meta property="og:site_name" content="Apache Airflow" />
+<meta property="article:modified_time" content="2021-10-11T13:57:15-06:00" /><meta property="og:site_name" content="Apache Airflow" />
 <meta itemprop="name" content="Sift">
 <meta itemprop="description" content="What was the problem? At Sift, we’re constantly training machine learning models that feed into the core of Sift’s Digital Trust &amp; Safety platform. The platform gives our customers a way to discern suspicious online behavior from trustworthy behavior, allowing our customers to protect their online transactions, maintain the integrity of their content platforms, and keep their users’ accounts secure. To make this possible, we’ve built model traini [...]
 
 
-<meta itemprop="dateModified" content="2021-10-11T19:59:36&#43;02:00" />
+<meta itemprop="dateModified" content="2021-10-11T13:57:15-06:00" />
 <meta itemprop="wordCount" content="641">