Juju documentation cover page

Juju is an enterprise Operator Lifecycle Manager (OLM) that provides model-driven application management and next-generation infrastructure-as-code.

The Kubernetes operator pattern replaces configuration file management with software-defined operations and shared, reusable ops code packages. Juju expands this idea to include traditional apps on Windows and Linux.

As a universal operator lifecycle manager for containers, virtual machines and bare metal that manages provisioning and underlying infrastructure, Juju provides a clean approach to multi-cloud operations. Applications can be managed on multiple clouds, and on premise, in machines or on Kubernetes, and then integrated automatically.

Operators are packaged in charms and distributed through Charmhub.io which hosts the Open Operator Collection. A charm is a compressed archive of the operator code and metadata, which can also be shared directly along with applications.

Reusable ops code

We share the code to our open source applications. Why don’t we share the operations code, too?

With traditional configuration management, the architecture of a deployment was hard-coded into the infrastructure-as-code for that operation.

With Juju, the architecture is expressed in a model, which captures the applications, the integration, the machines. Operators discover the model dynamically, which means they can be reused in different models, for different deployments, for different organisations.

Reuse improves quality for any software, and especially operations software, which benefits from application ops experience and hard-to-achieve domain knowledge. Over time, an open source operator reflects deep and wide experience of running that application in a very broad range of contexts.

Model-driven operators

Model-driven operations reduce duplication and errors in complex system administration, allowing administrators to express their intent and having machinery translate that intent to configuration or actions across all the affected applications.

With Juju, operators are deployed together in models, which provide an administrative boundary for permissions and capacity allocation. All the operators in a single model share the same group of administrators, and run on the same cloud or the same Kubernetes cluster.

Automated integration

The Juju model includes an application graph, which declares the lines of integration between applications. Operators drive that integration automatically based on the graph. Administrators can add or remove integration lines dynamically.

Integration can take place within a model, or between applications in different models with the permission of both groups of model administrators. Cross-model integration allows multi-cloud integration, or integration between different substrates such as bare metal Windows and virtualised Kubernetes.

Each operator declares integration endpoints. Integration can be declared between matching endpoints, and code in each operator then handles their end of the integration.

Why Juju?

Juju transforms your ability to integrate fast-moving open source components into large, complex deployments. The move to microservices and the explosion in open source have conspired to make modern operations incredibly complex and dependent on very rare skills. Model-driven operators solve two key problems - application operations domain knowledge is encapsulated in reusable packages, and dynamic model discovery allows reuse of those packages in widely different settings.

  • Multi-cloud operations
    Reusable operations packages mean that you can deploy on multiple clouds without changing operations code. Cross-model integration enables direct integration of workloads on different clouds.

  • Reduced complexity
    Microservices have made applications simpler, but operations more complex. Working at a higher level of abstraction makes it simpler to understand and share complex deployments. Delegating the details to shared open source ops code makes sense.

  • Simplify day two and beyond
    Model-driven operators go beyond the application lifecycle, to handle integration, upgrades, storage, networking, configuration and everyday actions like backup and restore.

  • Optimisation
    Charmed operators are aware of their setting and can optimise the application configuration accordingly.

Navigation

Introduction

Understanding Juju

Setting up

Deployment

Cloud Guides

Operations Tasks

System Administration Tasks

Writing Charms

Reference

Troubleshooting

Seeking help

URLs

Mapping table
Topic Path
https://discourse.jujucharms.com/t/commands/1667 /docs/commands
https://discourse.jujucharms.com/t/juju-environment-variables/1162 /docs/environment-variables
https://discourse.jujucharms.com/t/getting-started-with-juju-on-your-laptop/1970 /docs/wip-getting-started
https://discourse.jujucharms.com/t/glossary/1949 /docs/glossary
https://discourse.jujucharms.com/t/a-multi-user-cloud/1190 /docs/multi-user-cloud
https://discourse.jujucharms.com/t/actions-for-the-charm-author/1113 /docs/charm-writing/actions
https://discourse.jujucharms.com/t/adding-a-model/1147 /docs/adding-a-model
https://discourse.jujucharms.com/t/additional-lxd-resources/1092 /docs/lxd-resources
https://discourse.jujucharms.com/t/appendix-installing-a-gke-cluster/1448 /docs/appendix-gke
https://discourse.jujucharms.com/t/application-configuration/1052 /docs/charm-writing/application-config
https://discourse.jujucharms.com/t/application-groups/1076 /docs/application-groups
https://discourse.jujucharms.com/t/application-high-availability/1066 /docs/ha-applications
https://discourse.jujucharms.com/t/application-metrics/1067 /docs/metrics-applications
https://discourse.jujucharms.com/t/applications-and-charms/1034 /docs/applications-and-charms
https://discourse.jujucharms.com/t/basic-client-usage-tutorial/1191 /docs/client-usage-tutorial
https://discourse.jujucharms.com/t/benchmarking-juju-applications/1036 /docs/charm-writing/benchmarks
https://discourse.jujucharms.com/t/best-practice-for-charm-authors/1037 /docs/charm-writing/best-practice
https://discourse.jujucharms.com/t/bundle-reference/1158 /docs/bundle-reference
https://discourse.jujucharms.com/t/charm-bundles/1058 /docs/charm-bundles
https://discourse.jujucharms.com/t/charm-hooks/1040 /docs/charm-hooks
https://discourse.jujucharms.com/t/charm-layer-yaml-reference/1165 /docs/charm-layer-yaml-reference
https://discourse.jujucharms.com/t/charm-metadata/1043 /docs/charm-metadata
https://discourse.jujucharms.com/t/charm-network-primitives/1126 /docs/charm-network-primitives
https://discourse.jujucharms.com/t/charm-promulgation/1054 /docs/charm-writing/promulgation
https://discourse.jujucharms.com/t/charm-review-process/1055 /docs/charm-review-process
https://discourse.jujucharms.com/t/charm-store-policy/1044 /docs/charm-store-policy
https://discourse.jujucharms.com/t/charm-tools/1180 /docs/charm-tools
https://discourse.jujucharms.com/t/charm-unit-status-and-their-meanings/1168 /docs/charm-unit-status-and-their-meanings
https://discourse.jujucharms.com/t/charm-writing/1260 /docs/charm-writing
https://discourse.jujucharms.com/t/charms-and-mysql-interfaces/1139 /docs/charms-and-mysql-interfaces
https://discourse.jujucharms.com/t/client/1083 /docs/client
https://discourse.jujucharms.com/t/cloud-image-metadata/1137 /docs/cloud-image-metadata
https://discourse.jujucharms.com/t/clouds/1100 /docs/clouds
https://discourse.jujucharms.com/t/cmr-scenario-1/1148 /docs/cmr-scenario-1
https://discourse.jujucharms.com/t/cmr-scenario-2/1149 /docs/cmr-scenario-2
https://discourse.jujucharms.com/t/collecting-juju-metrics/1138 /docs/collecting-juju-metrics
https://discourse.jujucharms.com/t/command-changes-from-1-25-to-2-0/1101 /docs/command-changes-from-1-25-to-2-0
https://discourse.jujucharms.com/t/components-of-a-charm/1038 /docs/components-of-a-charm
https://discourse.jujucharms.com/t/concepts-and-terms/1144 /docs/concepts-and-terms
https://discourse.jujucharms.com/t/configuring-applications/1059 /docs/configuring-applications
https://discourse.jujucharms.com/t/configuring-controllers/1107 /docs/configuring-controllers
https://discourse.jujucharms.com/t/configuring-juju-for-offline-usage/1068 /docs/configuring-offline-usage
https://discourse.jujucharms.com/t/configuring-models/1151 /docs/configuring-models
https://discourse.jujucharms.com/t/contact-us/1103 /docs/contact-us
https://discourse.jujucharms.com/t/controller-backups/1106 /docs/controller-backups
https://discourse.jujucharms.com/t/controller-high-availability/1110 /docs/controller-high-availability
https://discourse.jujucharms.com/t/controller-logins/1389 /docs/controller-logins
https://discourse.jujucharms.com/t/controllers/1111 /docs/controllers
https://discourse.jujucharms.com/t/create-a-google-compute-engine-controller/1189 /docs/create-a-google-compute-engine-controller
https://discourse.jujucharms.com/t/creating-a-controller/1108 /docs/creating-a-controller
https://discourse.jujucharms.com/t/appendix-creating-an-aws-vpc/1064 /docs/appendix-creating-an-aws-vpc
https://discourse.jujucharms.com/t/creating-config-yaml-and-configuring-charms/1039 /docs/creating-config-yaml-and-configuring-charms
https://discourse.jujucharms.com/t/creating-icons-for-charms/1041 /docs/creating-icons-for-charms
https://discourse.jujucharms.com/t/creating-ssh-keypairs-on-windows/1133 /docs/creating-ssh-keypairs-on-windows
https://discourse.jujucharms.com/t/credentials/1112 /docs/credentials
https://discourse.jujucharms.com/t/cross-model-relations/1150 /docs/cross-model-relations
https://discourse.jujucharms.com/t/dealing-with-errors-encountered-by-charm-hooks/1048 /docs/charm-writing/hook-errors
https://discourse.jujucharms.com/t/debugging-building-layers/1115 /docs/debugging-building-layers
https://discourse.jujucharms.com/t/debugging-charm-hooks/1116 /docs/charm-writing/hook-debug
https://discourse.jujucharms.com/t/deploying-applications-advanced/1061 /docs/deploying-advanced-applications
https://discourse.jujucharms.com/t/deploying-applications/1062 /docs/deploying-applications
https://discourse.jujucharms.com/t/deploying-charms-offline/1069 /docs/deploying-charms-offline
https://discourse.jujucharms.com/t/dhx-a-customized-hook-debugging-environment-plugin/1114 /docs/charm-writing/hook-debug-dhx
https://discourse.jujucharms.com/t/disabling-commands/1141 /docs/disabling-commands
https://discourse.jujucharms.com/t/event-cycle/1117 /docs/event-cycle
https://discourse.jujucharms.com/t/fan-container-networking/1065 /docs/fan-container-networking
https://discourse.jujucharms.com/t/getting-started-with-charm-development/1118 /docs/getting-started-with-charm-development
https://discourse.jujucharms.com/t/getting-started-with-juju-on-jaas/1134 /docs/getting-started-with-juju-on-jaas
https://discourse.jujucharms.com/t/getting-started-with-juju/1970 /docs/getting-started-with-juju
https://discourse.jujucharms.com/t/hook-tools/1163 /docs/charm-writing/hook-tools
https://discourse.jujucharms.com/t/how-to-become-a-juju-charm-author/1049 /docs/charm-writing/howto-author
https://discourse.jujucharms.com/t/implementing-leadership/1124 /docs/implementing-leadership
https://discourse.jujucharms.com/t/implementing-relations/1051 /docs/charm-writing/relations
https://discourse.jujucharms.com/t/appendix-installing-ceph/1077 /docs/appendix-installing-ceph
https://discourse.jujucharms.com/t/installing-juju/1164 /docs/installing
https://discourse.jujucharms.com/t/installing-snaps-offline/1179 /docs/installing-snaps-offline
https://discourse.jujucharms.com/t/instance-naming-and-tagging-in-clouds/1102 /docs/instance-naming-and-tagging-in-clouds
https://discourse.jujucharms.com/t/interface-layers/1121 /docs/interface-layers
https://discourse.jujucharms.com/t/introducing-juju-2-0/1140 /docs/introducing-juju-2-0
https://discourse.jujucharms.com/t/introduction-to-juju-charms/1188 /docs/introduction-to-juju-charms
https://discourse.jujucharms.com/t/juju-constraints/1160 /docs/constraints-reference
https://discourse.jujucharms.com/t/juju-environment-variables/1162 /docs/juju-environment-variables
https://discourse.jujucharms.com/t/juju-gui/1109 /docs/gui
https://discourse.jujucharms.com/t/juju-logs/1184 /docs/logs
https://discourse.jujucharms.com/t/juju-plugins/1145 /docs/juju-plugins
https://discourse.jujucharms.com/t/juju-resources/1074 /docs/juju-resources
https://discourse.jujucharms.com/t/juju-support-for-centos7/1142 /docs/centos
https://discourse.jujucharms.com/t/language-details-contributing-to-juju-docs/1104 /docs/language-details-contributing-to-juju-docs
https://discourse.jujucharms.com/t/layers-for-charm-authoring/1122 /docs/layers-for-charm-authoring
https://discourse.jujucharms.com/t/leadership-howtos/1123 /docs/leadership-howtos
https://discourse.jujucharms.com/t/machine-authentication/1146 /docs/machine-auth
https://discourse.jujucharms.com/t/managed-solutions/1132 /docs/managed-solutions
https://discourse.jujucharms.com/t/managing-relations/1073 /docs/relations
https://discourse.jujucharms.com/t/metric-collecting-charms/1125 /docs/metric-collecting-charms
https://discourse.jujucharms.com/t/migrating-models/1152 /docs/migrating-models
https://discourse.jujucharms.com/t/models/1155 /docs/models
https://discourse.jujucharms.com/t/multi-user-basic-setup-tutorial/1195 /docs/multi-user-basic-tutorial
https://discourse.jujucharms.com/t/multi-user-external-setup-tutorial/1196 /docs/multi-user-external-tutorial
https://discourse.jujucharms.com/t/network-spaces/1157 /docs/spaces
https://discourse.jujucharms.com/t/notes-on-upgrading-juju-software/1153 /docs/notes-on-upgrading-juju-software
https://discourse.jujucharms.com/t/offline-mode-strategies/1071 /docs/offline-mode-strategies
https://discourse.jujucharms.com/t/persistent-storage-and-kubernetes/1078 /docs/persistent-storage-and-kubernetes
https://discourse.jujucharms.com/t/reference-documents/1161 /docs/reference
https://discourse.jujucharms.com/t/release-notes/1166 /docs/release-notes
https://discourse.jujucharms.com/t/removing-things/1063 /docs/removing-things
https://discourse.jujucharms.com/t/running-multiple-versions-of-juju/1143 /docs/running-multiple-versions-of-juju
https://discourse.jujucharms.com/t/sample-command-usage-and-output-interpretation/1200 /docs/sample-command-usage-and-output-interpretation
https://discourse.jujucharms.com/t/scaling-applications/1075 /docs/scaling-applications
https://discourse.jujucharms.com/t/setting-up-static-kubernetes-storage-tutorial/1193 /docs/k8s-static-pv-tutorial
https://discourse.jujucharms.com/t/subordinate-applications/1053 /docs/charm-writing/subordinates
https://discourse.jujucharms.com/t/the-hook-environment-hook-tools-and-how-hooks-are-run/1047 /docs/charm-writing/hook-env
https://discourse.jujucharms.com/t/the-juju-charm-store/1045 /docs/charm-writing/store
https://discourse.jujucharms.com/t/the-lifecycle-of-charm-relations/1050 /docs/charm-writing/relations-lifecycle
https://discourse.jujucharms.com/t/tools/1181 /docs/tools
https://discourse.jujucharms.com/t/troubleshooting-additions/1182 /docs/help-additions
https://discourse.jujucharms.com/t/troubleshooting-clouds/1183 /docs/help-clouds
https://discourse.jujucharms.com/t/troubleshooting-model-upgrades/1186 /docs/help-model-upgrades
https://discourse.jujucharms.com/t/troubleshooting-removals/1185 /docs/help-removals
https://discourse.jujucharms.com/t/troubleshooting/1187 /docs/help
https://discourse.jujucharms.com/t/tutorial-installing-kubernetes-with-cdk-and-using-auto-configured-storage/1469 /docs/k8s-cdk-autostorage-tutorial
https://discourse.jujucharms.com/t/tutorial-multi-cloud-controller-with-gke-and-auto-configured-storage/1465 /docs/k8s-multicloud-gke-autostorage-tutorial
https://discourse.jujucharms.com/t/tutorials/1197 /docs/tutorials
https://discourse.jujucharms.com/t/understanding-kubernetes-charms-tutorial/1263 /docs/k8s-charms-tutorial
https://discourse.jujucharms.com/t/unmaintained-charms/1056 /docs/unmaintained-charms
https://discourse.jujucharms.com/t/upgrading-a-charm/1131 /docs/charm-writing/upgrading
https://discourse.jujucharms.com/t/upgrading-a-machine-series/1198 /docs/upgrading-series
https://discourse.jujucharms.com/t/upgrading-applications/1080 /docs/upgrading-applications
https://discourse.jujucharms.com/t/upgrading-models/1154 /docs/upgrading-models
https://discourse.jujucharms.com/t/upgrading/1199 /docs/upgrading
https://discourse.jujucharms.com/t/user-types-and-abilities/1201 /docs/user-types-and-abilities
https://discourse.jujucharms.com/t/using-amazon-aws-with-juju/1084 /docs/aws-cloud
https://discourse.jujucharms.com/t/using-bundles-with-the-gui/1057 /docs/using-bundles-with-the-gui
https://discourse.jujucharms.com/t/using-constraints/1060 /docs/constraints
https://discourse.jujucharms.com/t/using-docker-in-charms/1135 /docs/using-docker-in-charms
https://discourse.jujucharms.com/t/using-google-gce-with-juju/1088 /docs/gce-cloud
https://discourse.jujucharms.com/t/using-joyent-with-juju/1089 /docs/joyent-cloud
https://discourse.jujucharms.com/t/using-juju-storage/1079 /docs/storage
https://discourse.jujucharms.com/t/using-juju-with-microk8s-tutorial/1194 /docs/microk8s-cloud
https://discourse.jujucharms.com/t/using-kubernetes-with-juju/1090 /docs/kubernetes
https://discourse.jujucharms.com/t/using-lxd-with-juju-advanced/1091 /docs/lxd-cloud-advanced
https://discourse.jujucharms.com/t/using-lxd-with-juju/1093 /docs/lxd-cloud
https://discourse.jujucharms.com/t/using-maas-with-juju/1094 /docs/maas-cloud
https://discourse.jujucharms.com/t/using-microsoft-azure-with-juju-advanced/1085 /docs/advanced-azure-cloud
https://discourse.jujucharms.com/t/using-microsoft-azure-with-juju/1086 /docs/azure-cloud
https://discourse.jujucharms.com/t/using-openstack-with-juju/1097 /docs/openstack-cloud
https://discourse.jujucharms.com/t/using-oracle-oci-with-juju/1096 /docs/oci-cloud
https://discourse.jujucharms.com/t/using-rackspace-with-juju/1098 /docs/rackspace-cloud
https://discourse.jujucharms.com/t/using-resources-developer-guide/1127 /docs/using-resources-developer-guide
https://discourse.jujucharms.com/t/using-the-aws-integrator-charm-tutorial/1192 /docs/k8s-aws-integrator-tutorial
https://discourse.jujucharms.com/t/using-the-localhost-cloud-offline/1070 /docs/using-the-localhost-cloud-offline
https://discourse.jujucharms.com/t/using-the-manual-cloud-with-juju/1095 /docs/manual-cloud
https://discourse.jujucharms.com/t/using-vmware-vsphere-with-juju/1099 /docs/vsphere-cloud
https://discourse.jujucharms.com/t/what-is-juju/1032 /docs/what-is-juju
https://discourse.jujucharms.com/t/whats-new-in-2-6/1202 /docs/whats-new-2-6
https://discourse.jujucharms.com/t/working-offline/1072 /docs/working-offline
https://discourse.jujucharms.com/t/working-with-actions/1033 /docs/working-with-actions
https://discourse.jujucharms.com/t/working-with-multiple-users/1156 /docs/working-with-multiple-users
https://discourse.jujucharms.com/t/writing-a-layer-by-example/1120 /docs/writing-a-layer-by-example
https://discourse.jujucharms.com/t/writing-charm-tests/1130 /docs/writing-charm-tests
https://discourse.jujucharms.com/t/writing-charms-that-use-storage/1128 /docs/writing-charms-that-use-storage
https://discourse.jujucharms.com/t/writing-charms-that-use-terms/1129 /docs/writing-charms-that-use-terms
https://discourse.jujucharms.com/t/writing-your-first-juju-charm/1046 /docs/writing-your-first-juju-charm
https://discourse.jujucharms.com/t/tutorial-managing-credentials/1289 /docs/tutorial-managing-credentials
https://discourse.charmhub.io/t/juju-on-azure-aks/3301 /docs/kubernetes/azure-aks
https://discourse.charmhub.io/t/juju-with-google-kubernetes-engine-gke/3341 /docs/kubernetes/google-gke
https://discourse.charmhub.io/t/juju-with-amazon-elastic-kubernetes-service-amazon-eks/3352 /docs/kubernetes/amazon-eks
https://discourse.charmhub.io/t/command-consume/1698 /docs/command-consume
https://discourse.charmhub.io/t/command-find-offers/1722 /docs/command-find-offers
https://discourse.charmhub.io/t/command-list-firewall-rules/1745 /docs/command-list-firewall-rules
https://discourse.charmhub.io/t/command-offer/1772 /docs/command-offer
https://discourse.charmhub.io/t/command-offers/1773 /docs/command-offers
https://discourse.charmhub.io/t/command-remove-offer/1788 /docs/command-remove-offer
https://discourse.charmhub.io/t/command-remove-saas/1790 /docs/command-remove-saas
https://discourse.charmhub.io/t/command-resume-relation/1799 /docs/command-resume-relation
https://discourse.charmhub.io/t/command-set-firewall-rule/1811 /docs/command-set-firewall-rule
https://discourse.charmhub.io/t/command-show-offer/1826 /docs/command-show-offer
https://discourse.charmhub.io/t/command-suspend-relation/1840 /docs/command-suspend-relation

Redirects

Mapping table
Path Location
/docs/authors-charm-writing /docs/charm-writing
/stable/models-config /docs/configuring-models
/stable/controllers-config /docs/configuring-controllers
/getting-started /docs/getting-started-with-juju
/docs/getting-started /docs/getting-started-with-juju
/docs/getting-started-with-jaas /docs/getting-started-with-juju-on-jaas
/docs/clouds-lxd-resources /docs/lxd-resources
/docs/applications/groups /docs/application-groups
/docs/applications/ha /docs/ha-applications
/docs/applications/metrics /docs/application-metrics
/docs/tutorials/client-basic /docs/client-usage-tutorial
/docs/applications/configuring /docs/configuring-applications
/docs/applications/deploying-advanced /docs/deploying-advanced-applications
/docs/applications/deploying /docs/deploying-applications
/docs/reference/constraints /docs/constraints-reference
/docs/tutorials/multi-user-basic /docs/multi-user-basic-tutorial
/docs/tutorials/multi-user-external /docs/multi-user-external-tutorial
/docs/applications/scaling /docs/scaling-applications
/docs/tutorials/k8s-static-pv /docs/k8s-static-pv-tutorial
/docs/tutorials/k8s-charms /docs/k8s-charms-tutorial
/docs/applications/upgrading /docs/upgrading-applications
/docs/aws /docs/aws-cloud
/docs/gce /docs/gce-cloud
/docs/gcp /docs/gce-cloud
/docs/azure /docs/azure-cloud
/docs/microk8s /docs/kubernetes/microk8s
/docs/microk8s-cloud /docs/kubernetes/microk8s
/docs/k8s-cloud /docs/kubernetes
/docs/aks /docs/kubernetes/azure-aks
/docs/eks /docs/kubernetes/amazon-eks
/docs/gke /docs/kubernetes/google-gke
/docs/azure-aks /docs/kubernetes/azure-aks
/docs/amazon-eks /docs/kubernetes/amazon-eks
/docs/google-gke /docs/kubernetes/google-gke
/docs/oracle /docs/oracle-cloud
/docs/openstack /docs/openstack-cloud
/docs/rackspace /docs/rackspace-cloud
/docs/clouds-aws /docs/aws-cloud
/docs/clouds-gce /docs/gce-cloud
/docs/clouds-joyent /docs/joyent-cloud
/docs/tutorials/k8s-microk8s /docs/microk8s-cloud
/docs/clouds-k8s /docs/k8s-cloud
/docs/clouds-lxd-advanced /docs/lxd-cloud-advanced
/docs/clouds-lxd /docs/lxd-cloud
/docs/clouds-maas /docs/maas-cloud
/docs/clouds-azure-advanced /docs/advanced-azure-cloud
/docs/clouds-azure /docs/azure-cloud
/docs/clouds-openstack /docs/openstack-cloud
/docs/clouds-oci /docs/oci-cloud
/docs/clouds-rackspace /docs/rackspace-cloud
/docs/tutorials/k8s-aws-integrator /docs/k8s-aws-integrator-tutorial
/docs/clouds-manual /docs/manual-cloud
/docs/clouds-vsphere /docs/vsphere-cloud
/docs/tutorials/k8s-cdk-autostorage /docs/k8s-cdk-autostorage-tutorial
/docs/tutorials/k8s-multicloud-gke-autostorage /docs/k8s-multicloud-gke-autostorage-tutorial
/docs/charm-building /docs/charm-writing
/docs/authors-charm-building /docs/charm-writing
/docs/install /docs/installing
/docs/install-juju /docs/installing
/docs/installing-juju /docs/installing
/docs/amulet /docs/tools#heading–amulet

Question for @anthonydillon, @nottrobin & @pmatulis - would changing the title of this post impact negatively downstream? If it’s being pinned globally, I believe it should be inviting. (Also, why is it being pinned globally?)

“Juju documentation” makes it hard to know whether it’s worth clicking on. If it’s changed to “Need help? Links to Juju’s documentation”.

The introduction should also be more welcoming, in my opinion. It reads to me as “you’ve come to the wrong place”:

Yes, you can happily change the title, that won’t have any impact on the system.

The thinking behind it being pinned is that it provides effectively the navigation table for the documentation system. But I don’t think it needs to be pinned globally, that seems like a mistake.

But I consider it very much your call whether it’s the right decision to pin it at all. You can happily unpin it, again without having any impact on the documentation system.

The content above the “Navigation” title is also currently not used by the docs site, so you can change it to whatever you like for the time being. However, in other documentation sets - docs.snapcraft.io and the soon-to-be created maas.io/docs, the content above the “Navigation” title in that topic forms the content of the docs homepage, so we might want to move this way in Juju too before too long.

Does that all make sense?

Thanks for the response Robin. I’ll pin this thread to the #docs category, rather than globally. That way it can still be useful as an index for people writing documentation.

1 Like

Heads up, the following pages under the Reference section are missing actual links:

  • Juju commands
  • Environment variables

FYI, I very much like this page pinned to the Docs category. Helps me a lot. :slight_smile:

This currently links to https://discourse.charmhub.io/t/getting-started-with-juju/1970 - the same target as “Getting started on traditional infrastructure” which is highly confusing until you notice it.

As a minimum it should probably link to https://discourse.charmhub.io/t/using-kubernetes-with-juju/1090 and be moved lower (because that document references https://discourse.charmhub.io/t/getting-started-with-juju/1970 as a prerequisite)

Thanks for raising this @doismellburning. I will get this addressed very shortly :slight_smile:

Edit: updated

I found these 404 broken links:

That’s strange… I must have edited the index incorrectly. I will take a look now.

Edit: the problem was that I had edited the titles of those URLs. Discourse is not sensitive to these changes (it only cares about the post ID).