diff --git a/docs/internal/diagrams.md b/docs/internal/diagrams.md
new file mode 100644
index 00000000..138768cd
--- /dev/null
+++ b/docs/internal/diagrams.md
@@ -0,0 +1,83 @@
+# Flux Diagrams
+
+## Cluster sync from Git
+
+```mermaid
+sequenceDiagram
+ actor me
+ participant git as Git
repository
+ participant sc as Flux
source-controller
+ participant kc as Flux
kustomize-controller
+ participant kube as Kubernetes
api-server
+ participant nc as Flux
notification-controller
+ me->>git: 1. git push
+ sc->>git: 2. git pull
+ sc->>sc: 3. build artifact for revision
+ sc->>kube: 4. update status for revision
+ sc-->>nc: 5. emit events
+ kube->>kc: 6. notify about new revision
+ kc->>sc: 7. fetch artifact for revision
+ kc->>kc: 8. build manifests to objects
+ kc-->>kc: 9. decrypt secrets
+ kc->>kube: 10. validate objects
+ kc->>kube: 11. apply objects
+ kc-->>kube: 12. delete objects
+ kc-->>kube: 13. wait for readiness
+ kc->>kube: 14. update status for revision
+ kc-->>nc: 15. emit events
+ nc-->>me: 16. send alerts for revision
+```
+
+## Helm release upgrade from Git
+
+```mermaid
+sequenceDiagram
+ actor me
+ participant git as Git
repository
+ participant sc as Flux
source-controller
+ participant hc as Flux
helm-controller
+ participant kube as Kubernetes
api-server
+ participant nc as Flux
notification-controller
+ me->>git: 1. git push
+ sc->>git: 2. git pull
+ sc->>sc: 3. build chart for revision
+ sc->>kube: 4. update chart status
+ sc-->>nc: 5. emit events
+ kube->>hc: 6. notify about new revision
+ hc->>sc: 7. fetch chart
+ hc->>kube: 8. get values
+ hc->>hc: 9. render and customize manifests
+ hc-->>kube: 10. apply CRDs
+ hc->>kube: 11. upgrade release
+ hc-->>kube: 12. run tests
+ hc-->>kube: 13. wait for readiness
+ hc->>kube: 14. update status
+ hc-->>nc: 15. emit events
+ nc-->>me: 16. send alerts
+```
+
+## Image update to Git
+
+```mermaid
+sequenceDiagram
+ actor me
+ participant oci as Image
repository
+ participant irc as Flux
image-reflector-controller
+ participant iac as Flux
image-automation-controller
+ participant kube as Kubernetes
api-server
+ participant nc as Flux
notification-controller
+ participant git as Git
repository
+ me->>oci: 1. docker push
+ irc->>oci: 2. list tags
+ irc->>irc: 3. match tags to policies
+ irc->>kube: 4. update status
+ irc-->>nc: 5. emit events
+ kube->>iac: 6. notify about new tags
+ iac->>git: 7. git clone
+ iac->>iac: 8. patch manifests with new tags
+ iac->>git: 9. git push
+ iac->>kube: 10. update status
+ iac-->>nc: 11. emit events
+ nc-->>me: 12. send alerts
+```
+