diff --git a/spring-cloud-function-adapters/pom.xml b/spring-cloud-function-adapters/pom.xml
index 431c83115..19f922f81 100644
--- a/spring-cloud-function-adapters/pom.xml
+++ b/spring-cloud-function-adapters/pom.xml
@@ -17,6 +17,7 @@
spring-cloud-function-adapter-awsspring-cloud-function-adapter-openwhisk
+ spring-cloud-function-adapter-azure
diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/.jdk8 b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/.jdk8
new file mode 100644
index 000000000..e69de29bb
diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/README.adoc b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/README.adoc
new file mode 100644
index 000000000..108e81ba0
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/README.adoc
@@ -0,0 +1,75 @@
+This work is experimental.
+This project provides an adapter layer for a Spring Cloud Function application onto Azure.
+You can write an app with a single `@Bean` of type `Function` and it will be deployable in Azure if you get the JAR file laid out right.
+
+The adapter has a generic http request handler that you can use.
+There is a `AzureSpringBootRequestHandler` which you must extend, and provide the input and output types as type parameters (enabling Azure to inspect the class and do the JSON conversions itself).
+
+If your app has more than one `@Bean` of type `Function` etc. then you can choose the one to use by configuring `function.name`.
+The functions are extracted from the Spring Cloud `FunctionCatalog`.
+
+=== Notes on JAR Layout
+
+You don't need the Spring Cloud Function Web at runtime in Azure, so you need to exclude this before you create the JAR you deploy to Azure.
+A function application on Azure has to be shaded, but a Spring Boot standalone application does not, so you can run the same app using 2 separate jars (as per the sample here).
+The sample app creates the shaded jar file, with an `azure` classifier for deploying in Azure.
+
+== Build
+
+----
+./mvnw -U clean package
+----
+
+== Running the sample
+
+Before running the sample, we need to install a custom azure maven plugin.
+Checkout this fork: https://github.com/sobychacko/azure-maven-plugins/tree/for-spring-boot-apps
+----
+cd azure-functions-maven-plugin
+mvn clean install -Dcheckstyle.skip=true -DskipTests -Dfindbugs.skip=true
+----
+
+Build the sample under `spring-cloud-function-samples/function-sample-azure`.
+
+----
+mvn clean package
+----
+
+Running Azure function locally.
+
+----
+mvn azure-functions:run
+
+On another terminal try this: curl localhost:7071/api/uppercase -d '{"value": "hello foobar"}'
+----
+
+Deploying the function that ran locally on Azure runtime.
+
+----
+az login
+
+mvn azure-functions:deploy
+
+On another terminal try this: curl https:///api/uppercase -d '{"value": "hello foobar!"}'
+
+Please ensure that you use the right URL for the function above.
+----
+
+Running the function as a standalone Spring Boot app
+
+Go to the samples project and uncomment `spring-cloud-function-web` dependency and `spring-boot-maven-plugin`.
+
+----
+mvn clean package
+java -jar target/
+
+On another terminal: curl -H "Content-Type: text/plain" localhost:8080/function -d '{"value": "hello foobar"}'
+----
+
+The input type for the function in the Azure sample is a Foo with a single property called "value". So you would need this to test it with something as below.
+
+----
+{
+ "value": "foobar"
+}
+----
\ No newline at end of file
diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/pom.xml b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/pom.xml
new file mode 100644
index 000000000..7f15cd126
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/pom.xml
@@ -0,0 +1,89 @@
+
+
+ 4.0.0
+
+ spring-cloud-function-adapter-azure
+ jar
+
+ spring-cloud-function-adapter-aws
+ Azure Function Adapter for Spring Cloud Function
+
+
+ org.springframework.cloud
+ spring-cloud-function-adapter-parent
+ 1.0.0.BUILD-SNAPSHOT
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ 1.2.1
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-function-context
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ io.projectreactor
+ reactor-core
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ com.microsoft.azure
+ azure-functions-java-core
+ [1.0.0-beta-1,1.0.0)
+
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+
+
+
diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringBootRequestHandler.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringBootRequestHandler.java
new file mode 100644
index 000000000..5bec73e53
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringBootRequestHandler.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.cloud.function.adapter.azure;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import com.microsoft.azure.serverless.functions.ExecutionContext;
+import reactor.core.publisher.Flux;
+
+/**
+ * @author Soby Chacko
+ */
+public class AzureSpringBootRequestHandler extends AzureSpringFunctionInitializer {
+
+ public Object handleRequest(I foo, ExecutionContext context) {
+ context.getLogger().info("Handler Java HTTP trigger processed a request.");
+ initialize(context);
+
+ Object convertedEvent = convertEvent(foo);
+ Flux> output = apply(extract(convertedEvent));
+ return result(convertedEvent, output);
+ }
+
+ protected Object convertEvent(I input) {
+ return input;
+ }
+
+ private Flux> extract(Object input) {
+ if (input instanceof Collection) {
+ return Flux.fromIterable((Iterable>) input);
+ }
+ return Flux.just(input);
+ }
+
+ private Object result(Object input, Flux> output) {
+ List