diff --git a/daprdocs/assets/js/search.js b/daprdocs/assets/js/search.js
new file mode 100644
index 000000000..844c89006
--- /dev/null
+++ b/daprdocs/assets/js/search.js
@@ -0,0 +1 @@
+// Intentionally blank
\ No newline at end of file
diff --git a/daprdocs/assets/scss/_code.scss b/daprdocs/assets/scss/_code.scss
index e986bca01..1c20542c6 100644
--- a/daprdocs/assets/scss/_code.scss
+++ b/daprdocs/assets/scss/_code.scss
@@ -1,14 +1,53 @@
// Code formatting.
+.copy-code-button {
+ color: #272822;
+ background-color: #FFF;
+ border-color: #0D2192;
+ border: 2px solid;
+ border-radius: 3px 3px 0px 0px;
+
+ /* right-align */
+ display: block;
+ margin-left: auto;
+ margin-right: 0;
+
+ margin-bottom: -2px;
+ padding: 3px 8px;
+ font-size: 0.8em;
+}
+
+.copy-code-button:hover {
+ cursor: pointer;
+ background-color: #F2F2F2;
+}
+
+.copy-code-button:focus {
+ /* Avoid an ugly focus outline on click in Chrome,
+ but darken the button for accessibility.
+ See https://stackoverflow.com/a/25298082/1481479 */
+ background-color: #E6E6E6;
+ outline: 0;
+}
+
+.copy-code-button:active {
+ background-color: #D9D9D9;
+}
+
+.highlight pre {
+ /* Avoid pushing up the copy buttons. */
+ margin: 0;
+}
+
.td-content {
// Highlighted code.
.highlight {
@extend .card;
- margin: 2rem 0;
- padding: 0;
+ margin: 0rem 0;
+ padding: 0rem;
- max-width: 80%;
+ max-width: 100%;
pre {
margin: 0;
@@ -37,7 +76,8 @@
word-wrap: normal;
background-color: $gray-100;
padding: $spacer;
-
+
+ max-width: 100%;
> code {
background-color: inherit !important;
diff --git a/daprdocs/config.toml b/daprdocs/config.toml
index 03637c952..dddd7e05b 100644
--- a/daprdocs/config.toml
+++ b/daprdocs/config.toml
@@ -52,25 +52,25 @@ id = "UA-149338238-3"
# Top Nav Bar
[[menu.main]]
- name = "Home"
+ name = "Homepage"
weight = 40
url = "https://dapr.io"
[[menu.main]]
- name = "About"
+ name = "GitHub"
weight = 50
- url = "https://dapr.io/#about"
-[[menu.main]]
- name = "Download"
- weight = 60
- url = "https://dapr.io/#download"
+ url = "https://github.com/dapr"
[[menu.main]]
name = "Blog"
- weight = 70
+ weight = 60
url = "https://blog.dapr.io/posts"
+[[menu.main]]
+ name = "Discord"
+ weight = 70
+ url = "https://aka.ms/dapr-discord"
[[menu.main]]
name = "Community"
weight = 80
- url = "https://dapr.io/#community"
+ url = "https://github.com/dapr/community/blob/master/README.md"
[params]
copyright = "Dapr"
diff --git a/daprdocs/content/en/concepts/overview.md b/daprdocs/content/en/concepts/overview.md
index 5f0f5f8aa..a05ccb626 100644
--- a/daprdocs/content/en/concepts/overview.md
+++ b/daprdocs/content/en/concepts/overview.md
@@ -87,6 +87,8 @@ Dapr can be used from any developer framework. Here are some that have been int
Dapr integrates easily with Python [Flask](https://pypi.org/project/Flask/) and node [Express](http://expressjs.com/). See examples in the [Dapr quickstarts](https://github.com/dapr/quickstarts).
+In the Dapr [PHP-SDK](https://github.com/dapr/php-sdk) you can serve with Apache, Nginx, or Caddyserver.
+
#### Actors
Dapr SDKs support for [virtual actors]({{< ref actors >}}) which are stateful objects that make concurrency simple, have method and state encapsulation, and are designed for scalable, distributed applications.
diff --git a/daprdocs/content/en/developing-applications/building-blocks/observability/_index.md b/daprdocs/content/en/developing-applications/building-blocks/observability/_index.md
index eb6891d61..3ac52e0fd 100644
--- a/daprdocs/content/en/developing-applications/building-blocks/observability/_index.md
+++ b/daprdocs/content/en/developing-applications/building-blocks/observability/_index.md
@@ -6,4 +6,4 @@ weight: 60
description: See and measure the message calls across components and networked services
---
-This section includes guides for developers in the context of observability. See other sections for a [general overview of the observability concept]({{< ref observability >}}) in Dapr and for [operations guidance on monitoring]({{< ref monitoring >}}).
+This section includes guides for developers in the context of observability. See other sections for a [general overview of the observability concept]({{< ref observability-concept >}}) in Dapr and for [operations guidance on monitoring]({{< ref monitoring >}}).
diff --git a/daprdocs/content/en/developing-applications/ides/intellij.md b/daprdocs/content/en/developing-applications/ides/intellij.md
index 2239a816a..e7facc35f 100644
--- a/daprdocs/content/en/developing-applications/ides/intellij.md
+++ b/daprdocs/content/en/developing-applications/ides/intellij.md
@@ -23,9 +23,44 @@ Let's get started!
## Add Dapr as an 'External Tool'
-First, quit IntelliJ.
+First, quit IntelliJ before modifying the configurations file directly.
-Create or edit the file in `$HOME/.IdeaIC2019.3/config/tools/External\ Tools.xml` (change IntelliJ version in path if needed) to add a new `` entry:
+### IntelliJ configuration file location
+For versions [2020.1](https://www.jetbrains.com/help/idea/2020.1/tuning-the-ide.html#config-directory) and above the configuration files for tools should be located in:
+
+{{< tabs Windows Linux MacOS >}}
+
+{{% codetab %}}
+
+```powershell
+%USERPROFILE%\AppData\Roaming\JetBrains\IntelliJIdea2020.1\tools\
+```
+{{% /codetab %}}
+
+
+{{% codetab %}}
+ ```shell
+ $HOME/.config/JetBrains/IntelliJIdea2020.1/tools/
+ ```
+{{% /codetab %}}
+
+
+{{% codetab %}}
+```shell
+~/Library/Application Support/JetBrains/IntelliJIdea2020.1/tools/
+```
+{{% /codetab %}}
+
+
+{{< /tabs >}}
+
+> The configuration file location is different for version 2019.3 or prior. See [here](https://www.jetbrains.com/help/idea/2019.3/tuning-the-ide.html#config-directory) for more details.
+
+Change the version of IntelliJ in the path if needed.
+
+Create or edit the file in `/tools/External\ Tools.xml` (change IntelliJ version in path if needed). The `` is OS dependennt as seen above.
+
+Add a new `` entry:
```xml
@@ -33,10 +68,10 @@ Create or edit the file in `$HOME/.IdeaIC2019.3/config/tools/External\ Tools.xml
-
-
+
+
-
+
@@ -53,7 +88,7 @@ Optionally, you may also create a new entry for a sidecar tool that can be reuse
-
+
@@ -64,7 +99,7 @@ Optionally, you may also create a new entry for a sidecar tool that can be reuse
-
+
@@ -108,3 +143,7 @@ After debugging, make sure you stop both `dapr` and your app in IntelliJ.
>Note: Since you launched the service(s) using the **dapr** ***run*** CLI command, the **dapr** ***list*** command will show runs from IntelliJ in the list of apps that are currently running with Dapr.
Happy debugging!
+
+## Related links
+
+- [Change](https://intellij-support.jetbrains.com/hc/en-us/articles/206544519-Directories-used-by-the-IDE-to-store-settings-caches-plugins-and-logs) in IntelliJ configuration directory location
diff --git a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/_index.md b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/_index.md
index 18fce75a1..0aff8764d 100644
--- a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/_index.md
+++ b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/_index.md
@@ -28,6 +28,12 @@ no_list: true
| [Twitter]({{< ref twitter.md >}}) | ✅ | ✅ | Alpha |
| [SendGrid]({{< ref sendgrid.md >}}) | | ✅ | Alpha |
+### Alibaba Cloud
+
+| Name | Input Binding | Output Binding | Status |
+|------|:----------------:|:-----------------:|--------|
+| [Alibaba Cloud OSS]({{< ref alicloudoss.md >}}) | | ✅ | Alpha |
+
### Amazon Web Services (AWS)
| Name | Input Binding | Output Binding | Status |
diff --git a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/alicloudoss.md b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/alicloudoss.md
new file mode 100644
index 000000000..2ac58b0a0
--- /dev/null
+++ b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/alicloudoss.md
@@ -0,0 +1,106 @@
+---
+type: docs
+title: "Alibaba Cloud Object Storage Service binding spec"
+linkTitle: "Alibaba Cloud Object Storage"
+description: "Detailed documentation on the Alibaba Cloud Object Storage binding component"
+---
+
+## Component format
+
+To setup an Alibaba Cloud Object Storage binding create a component of type `bindings.alicloud.oss`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a secretstore configuration. See this guide on [referencing secrets]({{< ref component-secrets.md >}}) to retrieve and use the secret with Dapr components.
+
+```yaml
+apiVersion: dapr.io/v1alpha1
+kind: Component
+metadata:
+ name: alicloudobjectstorage
+ namespace: default
+spec:
+ type: bindings.alicloud.oss
+ version: v1
+ metadata:
+ - name: endpoint
+ value: "[endpoint]"
+ - name: accessKeyID
+ value: "[key-id]"
+ - name: accessKey
+ value: "[access-key]"
+ - name: bucket
+ value: "[bucket]"
+```
+
+{{% alert title="Warning" color="warning" %}}
+The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}).
+{{% /alert %}}
+
+## Spec metadata fields
+
+| Field | Required | Details | Example |
+|---------------|----------|---------|---------|
+| `endpoint` | Y | Alicloud OSS endpoint. | https://oss-cn-hangzhou.aliyuncs.com
+| `accessKeyID` | Y | Access key ID credential. |
+| `accessKey` | Y | Access key credential. |
+| `bucket` | Y | Name of the storage bucket. |
+
+## Output operations
+
+The following operations are supported as within the output binding:
+
+### Create object
+
+To perform a create object operation, invoke the binding with a `POST` method and the following JSON body:
+
+```json
+{
+ "operation": "create",
+ "data": "YOUR_CONTENT"
+}
+```
+
+{{% alert title="Note" color="primary" %}}
+By default, a random UUID is auto-generated as the object key. See below for Metadata support to set the key for the object.
+{{% /alert %}}
+
+#### Example
+
+**Saving to a random generated UUID file**
+
+```bash
+curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\" }" http://localhost:/v1.0/bindings/
+```
+
+
+
+**Saving to a specific file**
+
+```bash
+curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\", \"metadata\": { \"key\": \"my-key\" } }" http://localhost:/v1.0/bindings/
+```
+
+{{% alert title="Note" color="primary" %}}
+Windows CMD requires escaping the `"` character.
+{{% /alert %}}
+
+## Metadata information
+
+### Object key
+
+By default, the Alicloud OSS output binding will auto-generate a UUID as the object key.
+You can set the key with the following metadata:
+
+```json
+{
+ "data": "file content",
+ "metadata": {
+ "key": "my-key"
+ },
+ "operation": "create"
+}
+```
+
+## Related links
+
+- [Bindings building block]({{< ref bindings >}})
+- [How-To: Trigger application with input binding]({{< ref howto-triggers.md >}})
+- [How-To: Use bindings to interface with external resources]({{< ref howto-bindings.md >}})
+- [Bindings API reference]({{< ref bindings_api.md >}})
diff --git a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/kafka.md b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/kafka.md
index ebacbdd47..9e274f647 100644
--- a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/kafka.md
+++ b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/kafka.md
@@ -30,12 +30,22 @@ spec:
value: topic3
- name: authRequired # Required. default: "true"
value: "false"
- - name: saslUsername # Optional.
+ - name: saslUsername # Optional.
value: "user"
- - name: saslPassword # Optional.
+ - name: saslPassword # Optional.
value: "password"
+ - name: maxMessageBytes # Optional.
+ value: 1024
```
+- `topics` is a comma separated string of topics for an input binding.
+- `brokers` is a comma separated string of kafka brokers.
+- `consumerGroup` is a kafka consumer group to listen on.
+- `publishTopic` is the topic to publish for an output binding.
+- `authRequired` determines whether to use SASL authentication or not.
+- `saslUsername` is the SASL username for authentication. Only used if `authRequired` is set to - `"true"`.
+- `maxMessageBytes` is the maximum message size allowed for a single Kafka message. Default is 1024.
+
{{% alert title="Warning" color="warning" %}}
The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}).
{{% /alert %}}
diff --git a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-apache-kafka.md b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-apache-kafka.md
index 0e75d4451..e2907b6ce 100644
--- a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-apache-kafka.md
+++ b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-apache-kafka.md
@@ -28,6 +28,8 @@ spec:
value: "adminuser"
- name: saslPassword
value: "KeFg23!"
+ - name: maxMessageBytes
+ value: 1024
```
{{% alert title="Warning" color="warning" %}}
@@ -42,7 +44,27 @@ The above example uses secrets as plain strings. It is recommended to use a secr
| authRequired | N | Enable authentication on the Kafka broker. Defaults to `"false"`. |`"true"`, `"false"`
| saslUsername | N | Username used for authentication. Only required if authRequired is set to true. | `"adminuser"`
| saslPassword | N | Password used for authentication. Can be `secretKeyRef` to use a secret reference. Only required if authRequired is set to true. Can be `secretKeyRef` to use a [secret reference]({{< ref component-secrets.md >}}) | `""`, `"KeFg23!"`
+| maxMessageBytes | N | The maximum message size allowed for a single Kafka message. Default is 1024. | `2048`
+## Per-call metadata fields
+
+### Partition Key
+
+When invoking the Kafka pub/sub, its possible to provide an optional partition key by using the `metadata` query param in the request url.
+
+The param name is `partitionKey`.
+
+Example:
+
+```shell
+curl -X POST http://localhost:3500/v1.0/publish/myKafka/myTopic?metadata.partitionKey=key1 \
+ -H "Content-Type: application/json" \
+ -d '{
+ "data": {
+ "message": "Hi"
+ }
+ }'
+```
## Create a Kafka instance
{{< tabs "Self-Hosted" "Kubernetes">}}
diff --git a/daprdocs/content/en/operations/configuration/increase-request-size.md b/daprdocs/content/en/operations/configuration/increase-request-size.md
new file mode 100644
index 000000000..b179f42d3
--- /dev/null
+++ b/daprdocs/content/en/operations/configuration/increase-request-size.md
@@ -0,0 +1,51 @@
+---
+type: docs
+title: "How-To: Handle large http body requests"
+linkTitle: "Http request body size"
+weight: 6000
+description: "Configure http requests that are bigger than 4 MB"
+---
+
+By default Dapr has a limit for the request body size which is set to 4 MB, however you can change this by defining `dapr.io/http-max-request-size` annotation or `--dapr-http-max-request-size` flag.
+
+
+### Self hosted
+
+When running in self hosted mode, use the `--dapr-http-max-request-size` flag to configure Dapr to use non-default request body size:
+
+```bash
+dapr run --dapr-http-max-request-size 16 node app.js
+```
+This tells Dapr to set maximum request body size to `16` MB.
+
+
+### Kubernetes
+
+On Kubernetes, set the following annotations in your deployment YAML:
+```yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: myapp
+ namespace: default
+ labels:
+ app: myapp
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: myapp
+ template:
+ metadata:
+ labels:
+ app: myapp
+ annotations:
+ dapr.io/enabled: "true"
+ dapr.io/app-id: "myapp"
+ dapr.io/app-port: "8000"
+ dapr.io/http-max-request-size: "16"
+...
+```
+
+## Related links
+- [Dapr Kubernetes pod annotations spec]({{< ref kubernetes-annotations.md >}})
diff --git a/daprdocs/layouts/partials/hooks/body-end.html b/daprdocs/layouts/partials/hooks/body-end.html
index 278f120d4..2d5af7014 100644
--- a/daprdocs/layouts/partials/hooks/body-end.html
+++ b/daprdocs/layouts/partials/hooks/body-end.html
@@ -14,4 +14,6 @@
debug: false,
});
-{{ end }}
\ No newline at end of file
+{{ end }}
+
+
\ No newline at end of file
diff --git a/daprdocs/static/js/copy-code-button.js b/daprdocs/static/js/copy-code-button.js
new file mode 100644
index 000000000..579d25148
--- /dev/null
+++ b/daprdocs/static/js/copy-code-button.js
@@ -0,0 +1,49 @@
+function addCopyButtons(clipboard) {
+ document.querySelectorAll('pre > code').forEach(function(codeBlock) {
+ var button = document.createElement('button');
+ button.className = 'copy-code-button';
+ button.type = 'button';
+ button.innerText = 'Copy';
+
+ button.addEventListener('click', function() {
+ clipboard.writeText(codeBlock.textContent).then(
+ function() {
+ button.blur();
+
+ button.innerText = 'Copied!';
+ setTimeout(function() {
+ button.innerText = 'Copy';
+ }, 2000);
+ },
+ function(error) {
+ button.innerText = 'Error';
+ console.error(error);
+ }
+ );
+ });
+
+ var pre = codeBlock.parentNode;
+ if (pre.parentNode.classList.contains('highlight')) {
+ var highlight = pre.parentNode;
+ highlight.parentNode.insertBefore(button, highlight);
+ } else {
+ pre.parentNode.insertBefore(button, pre);
+ }
+ });
+}
+
+if (navigator && navigator.clipboard) {
+ addCopyButtons(navigator.clipboard);
+} else {
+ var script = document.createElement('script');
+ script.src =
+ 'https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js';
+ script.integrity = 'sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=';
+ script.crossOrigin = 'anonymous';
+
+ script.onload = function() {
+ addCopyButtons(clipboard);
+ };
+
+ document.body.appendChild(script);
+}