diff --git a/.icons/airflow.svg b/.icons/airflow.svg
new file mode 100644
index 0000000..46300fe
--- /dev/null
+++ b/.icons/airflow.svg
@@ -0,0 +1,19 @@
+
diff --git a/.images/airflow.png b/.images/airflow.png
new file mode 100644
index 0000000..bdd5798
Binary files /dev/null and b/.images/airflow.png differ
diff --git a/apache-airflow/README.md b/apache-airflow/README.md
new file mode 100644
index 0000000..ae8a278
--- /dev/null
+++ b/apache-airflow/README.md
@@ -0,0 +1,69 @@
+---
+display_name: airflow
+description: A module that adds Apache Airflow in your Coder template
+icon: ../.icons/airflow.svg
+maintainer_github: nataindata
+verified: false
+tags: [airflow, idea, web, helper]
+---
+
+# airflow
+
+A module that adds Apache Airflow in your Coder template.
+
+```tf
+module "airflow" {
+ source = "registry.coder.com/modules/airflow/coder"
+ version = "1.0.2"
+}
+```
+
+
+
+## Examples
+
+### Example 1
+
+Install the Dracula theme from [OpenVSX](https://open-vsx.org/):
+
+```tf
+module "airflow" {
+ source = "registry.coder.com/modules/airflow/coder"
+ version = "1.0.2"
+ agent_id = coder_agent.example.id
+ extensions = [
+ "dracula-theme.theme-dracula"
+ ]
+}
+```
+
+Enter the `.` into the extensions array and code-server will automatically install on start.
+
+### Example 2
+
+Configure VS Code's [settings.json](https://code.visualstudio.com/docs/getstarted/settings#_settingsjson) file:
+
+```tf
+module "airflow" {
+ source = "registry.coder.com/modules/airflow/coder"
+ version = "1.0.2"
+ agent_id = coder_agent.example.id
+ extensions = ["dracula-theme.theme-dracula"]
+ settings = {
+ "workbench.colorTheme" = "Dracula"
+ }
+}
+```
+
+### Example 3
+
+Run code-server in the background, don't fetch it from GitHub:
+
+```tf
+module "airflow" {
+ source = "registry.coder.com/modules/airflow/coder"
+ version = "1.0.2"
+ agent_id = coder_agent.example.id
+ offline = true
+}
+```
diff --git a/apache-airflow/main.tf b/apache-airflow/main.tf
new file mode 100644
index 0000000..91b6682
--- /dev/null
+++ b/apache-airflow/main.tf
@@ -0,0 +1,65 @@
+terraform {
+ required_version = ">= 1.0"
+
+ required_providers {
+ coder = {
+ source = "coder/coder"
+ version = ">= 0.17"
+ }
+ }
+}
+
+# Add required variables for your modules and remove any unneeded variables
+variable "agent_id" {
+ type = string
+ description = "The ID of a Coder agent."
+}
+
+variable "log_path" {
+ type = string
+ description = "The path to log airflow to."
+ default = "/tmp/airflow.log"
+}
+
+variable "port" {
+ type = number
+ description = "The port to run airflow on."
+ default = 8080
+}
+
+variable "share" {
+ type = string
+ default = "owner"
+ validation {
+ condition = var.share == "owner" || var.share == "authenticated" || var.share == "public"
+ error_message = "Incorrect value. Please set either 'owner', 'authenticated', or 'public'."
+ }
+}
+
+variable "order" {
+ type = number
+ description = "The order determines the position of app in the UI presentation. The lowest order is shown first and apps with equal order are sorted by name (ascending order)."
+ default = null
+}
+
+resource "coder_script" "airflow" {
+ agent_id = var.agent_id
+ display_name = "airflow"
+ icon = "/icon/apache-guacamole.svg"
+ script = templatefile("${path.module}/run.sh", {
+ LOG_PATH : var.log_path,
+ PORT : var.port
+ })
+ run_on_start = true
+}
+
+resource "coder_app" "airflow" {
+ agent_id = var.agent_id
+ slug = "airflow"
+ display_name = "airflow"
+ url = "http://localhost:${var.port}"
+ icon = "/icon/apache-guacamole.svg"
+ subdomain = true
+ share = var.share
+ order = var.order
+}
diff --git a/apache-airflow/run.sh b/apache-airflow/run.sh
new file mode 100644
index 0000000..d881260
--- /dev/null
+++ b/apache-airflow/run.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/env sh
+
+BOLD='\033[0;1m'
+
+PATH=$PATH:~/.local/bin
+pip install --upgrade apache-airflow
+
+filename=~/airflow/airflow.db
+if ! [ -f $filename ] || ! [ -s $filename ]; then
+ airflow db init
+fi
+
+export AIRFLOW__CORE__LOAD_EXAMPLES=false
+
+airflow webserver > ${LOG_PATH} 2>&1 &
+
+airflow scheduler >> /tmp/airflow_scheduler.log 2>&1 &
+
+airflow users create -u admin -p admin -r Admin -e admin@admin.com -f Coder -l User