diff --git a/website/docs/addons/addons.md b/website/docs/addons/addons.md index 7422ea4a704..9402d20e3bd 100644 --- a/website/docs/addons/addons.md +++ b/website/docs/addons/addons.md @@ -1,6 +1,6 @@ --- id: index -title: Introduction +title: Addons --- > This feature was introduced in _Unleash v3.11.0_. diff --git a/website/docs/advanced/api_access.md b/website/docs/advanced/api_access.md index e841b7cae68..2d0d674a8c0 100644 --- a/website/docs/advanced/api_access.md +++ b/website/docs/advanced/api_access.md @@ -1,13 +1,13 @@ --- id: api_access -title: API Access +title: How to use the Admin API --- It is possible to integrate directly with the Admin API. In this guide we will explain all the steps to set it up. ## Step 1: Create API token {#step-1-create-api-token} -Please refer to [Create token](../user_guide/api-token) on how to create an API token. You'll need a token with `Admin` level access for this to work. +Please refer to [_how to create API tokens_](../user_guide/api-token) on how to create an API token. You'll need a token with `Admin` level access for this to work. Please note that it may take up to 60 seconds for the new key to propagate to all Unleash instances due to eager caching. diff --git a/website/docs/advanced/sso-google.md b/website/docs/advanced/sso-google.md index 7e2584d768f..4cfcf26931a 100644 --- a/website/docs/advanced/sso-google.md +++ b/website/docs/advanced/sso-google.md @@ -1,6 +1,6 @@ --- id: sso-google -title: SSO - Google (deprecated) +title: "[Deprecated] How to add SSO with Google" --- > Single Sign-on via the Google Authenticator provider is deprecated. We recommend using [OpenId Connect](./sso-open-id-connect.md) instead. diff --git a/website/docs/advanced/sso-open-id-connect.md b/website/docs/advanced/sso-open-id-connect.md index a826d7d8c7b..b2cd6a4ece8 100644 --- a/website/docs/advanced/sso-open-id-connect.md +++ b/website/docs/advanced/sso-open-id-connect.md @@ -1,6 +1,6 @@ --- id: sso-open-id-connect -title: SSO - OpenId Connect +title: How to add SSO with OpenId Connect --- > The **Single-Sign-On capability** is only available for customers on the Enterprise subscription. Check out the [Unleash plans](https://www.getunleash.io/plans) for details. diff --git a/website/docs/advanced/sso-saml-keycloak.md b/website/docs/advanced/sso-saml-keycloak.md index 0f4e466046f..1d55381176f 100644 --- a/website/docs/advanced/sso-saml-keycloak.md +++ b/website/docs/advanced/sso-saml-keycloak.md @@ -1,6 +1,6 @@ --- id: sso-saml-keycloak -title: SSO - SAML 2.0 Keycloak +title: How to add SSO with SAML 2.0 Keycloak --- > The **Single-Sign-On capability** is only available for customers on the Enterprise subscription. Check out the [Unleash plans](https://www.getunleash.io/plans) for details. diff --git a/website/docs/advanced/sso-saml.md b/website/docs/advanced/sso-saml.md index 821ed80a388..663bbcb1d65 100644 --- a/website/docs/advanced/sso-saml.md +++ b/website/docs/advanced/sso-saml.md @@ -1,6 +1,6 @@ --- id: sso-saml -title: SSO - SAML 2.0 Okta +title: How to add SSO with SAML 2.0 Okta --- > The **Single-Sign-On capability** is only available for customers on the Enterprise subscription. Check out the [Unleash plans](https://www.getunleash.io/plans) for details. diff --git a/website/docs/integrations/integrations.md b/website/docs/integrations/integrations.md index a79f09c51f7..888a2272200 100644 --- a/website/docs/integrations/integrations.md +++ b/website/docs/integrations/integrations.md @@ -2,8 +2,21 @@ id: integrations title: External Integrations and plugins --- +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; -Available integrations with Unleash + +Unleash can also integrate with other systems in different ways. + +## Official integrations + +Unleash provides these official integrations: + + + +## Community-contributed integrations: + +Our wonderful community has also created the following integrations: - [Vue Unleash plugin](https://github.com/crishellco/vue-unleash) - [Quarkus](https://github.com/quarkiverse/quarkus-unleash) diff --git a/website/docs/sdks/java.md b/website/docs/sdks/java.md index 978a92670aa..8968113756a 100644 --- a/website/docs/sdks/java.md +++ b/website/docs/sdks/java.md @@ -57,7 +57,7 @@ Read more about the [Unleash architecture](https://www.unleash-hosted.com/articl ## Step 4: Provide Unleash Context {#step-4-provide-unleash-context} -It is the client SDK that computes whether a feature toggle should be considered enabled or disabled for specific use request. This is the job of the [activation strategies](../user_guide/control_rollout), which are implemented in the client SDK. +It is the client SDK that computes whether a feature toggle should be considered enabled or disabled for specific use request. This is the job of the [activation strategies](../user_guide/activation-strategies.md), which are implemented in the client SDK. The activation strategies is an implementation of rules based on data, which you provide as part of the Unleash Context. diff --git a/website/docs/sdks/php.md b/website/docs/sdks/php.md index 54f4d456824..cf5d2572f2e 100644 --- a/website/docs/sdks/php.md +++ b/website/docs/sdks/php.md @@ -56,7 +56,7 @@ Read more about the [Unleash architecture](https://www.unleash-hosted.com/articl ## Step 4: Provide Unleash Context {#step-4-provide-unleash-context} -It is the client SDK that computes whether a feature toggle should be considered enabled or disabled for specific use request. This is the job of the [activation strategies](../user_guide/control_rollout), which are implemented in the client SDK. +It is the client SDK that computes whether a feature toggle should be considered enabled or disabled for specific use request. This is the job of the [activation strategies](../user_guide/activation-strategies.md), which are implemented in the client SDK. The activation strategies is an implementation of rules based on data, which you provide as part of the Unleash Context. diff --git a/website/docs/user_guide/activation-strategies.md b/website/docs/user_guide/activation-strategies.md index 53cdd5891f5..0fd6d7bdfdd 100644 --- a/website/docs/user_guide/activation-strategies.md +++ b/website/docs/user_guide/activation-strategies.md @@ -7,7 +7,13 @@ It is powerful to be able to turn a feature on and off instantaneously, without The definition of an activation strategy lives in the Unleash API and can be created via the Unleash UI. The implementation of activation strategies lives in various client implementations. -Unleash comes with a few common activation strategies. Some of them require the client to provide the [unleash-context](unleash-context.md), which gives the necessary context for Unleash. +Unleash comes with a few common activation strategies. Some of them require the client to provide the [unleash-context](unleash-context.md), which gives the necessary context for Unleash. The built-in activation strategies are: + +- [Standard](#standard) +- [UserIDs](#userids) +- [Gradual Rollout](#gradual-rollout) +- [IPs](#ips) +- [Hostnames](#hostnames) ## Standard {#standard} @@ -80,7 +86,18 @@ This strategy has the following modelling name in the code: - **applicationHostname** -## gradualRolloutUserId (DEPRECATED from v4) - Use Gradual rollout instead {#gradualrolloutuserid-deprecated-from-v4---use-gradual-rollout-instead} + +## Multiple activation strategies {#multiple-activation-strategies} + +You can apply as many activation strategies to a toggle as you want. When a toggle has multiple strategies, Unleash will check each strategy in isolation. If any one of the strategies would enable the toggle for the current user, then the toggle is enabled. + +As an example, consider a case where you want to roll a feature out to 75% of your users. However, you also want to make sure that the you and your product lead get access to the feature. To achieve this, you would apply a **gradual rollout** strategy and set it to 75%. Additionally, you would add a **user IDs** strategy and add `engineer@mycompany.com` and `productlead@mycompany.com`. + +![A feature toggle with two active strategies: a user ID strategy and a gradual rollout strategy. The strategies are configured as described in the preceding paragraph.](/img/control_rollout_multiple_strategies.png) + +## Deprecated strategies + +### gradualRolloutUserId (DEPRECATED from v4) - Use Gradual rollout instead {#gradualrolloutuserid-deprecated-from-v4---use-gradual-rollout-instead} The `gradualRolloutUserId` strategy gradually activates a feature toggle for logged-in users. Stickiness is based on the user ID. The strategy guarantees that the same user gets the same experience every time across devices. It also assures that a user which is among the first 10% will also be among the first 20% of the users. That way, we ensure the users get the same experience, even if we gradually increase the number of users exposed to a particular feature. To achieve this, we hash the user ID and normalize the hash value to a number between 1 and 100 with a simple modulo operator. @@ -93,7 +110,7 @@ Starting from v3.x all clients should use the 32-bit [MurmurHash3](https://en.wi - percentage - _The percentage (0-100) you want to enable the feature toggle for._ - groupId - _Used to define an activation group, which allows you to correlate rollout across feature toggles._ -## gradualRolloutSessionId (DEPRECATED from v4) - Use Gradual rollout instead {#gradualrolloutsessionid-deprecated-from-v4---use-gradual-rollout-instead} +### gradualRolloutSessionId (DEPRECATED from v4) - Use Gradual rollout instead {#gradualrolloutsessionid-deprecated-from-v4---use-gradual-rollout-instead} Similar to `gradualRolloutUserId` strategy, this strategy gradually activates a feature toggle, with the exception being that the stickiness is based on the session IDs. This makes it possible to target all users (not just logged-in users), guaranteeing that a user will get the same experience within a session. @@ -102,7 +119,7 @@ Similar to `gradualRolloutUserId` strategy, this strategy gradually activates a - percentage - _The percentage (0-100) you want to enable the feature toggle for._ - groupId - _Used to define an activation group, which allows you to correlate rollout across feature toggles._ -## gradualRolloutRandom (DEPRECATED from v4) - Use Gradual rollout instead {#gradualrolloutrandom-deprecated-from-v4---use-gradual-rollout-instead} +### gradualRolloutRandom (DEPRECATED from v4) - Use Gradual rollout instead {#gradualrolloutrandom-deprecated-from-v4---use-gradual-rollout-instead} The `gradualRolloutRandom` strategy randomly activates a feature toggle and has no stickiness. We have found this rollout strategy very useful in some scenarios, especially when we enable a feature which is not visible to the user. It is also the strategy we use to sample metrics and error reports. diff --git a/website/docs/user_guide/control-rollout.md b/website/docs/user_guide/control-rollout.md deleted file mode 100644 index 3f667adf175..00000000000 --- a/website/docs/user_guide/control-rollout.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -id: control_rollout -title: Control rollout ---- - -It is powerful to be able to turn a feature on and off instantaneously, without redeploying the application. The next level of control comes when you are able to enable a feature for specific users or enable it for a small subset of users. - -In this guide you will learn how to control the roll-out (expose it to real users) of a new feature with the help of activation strategies. - -## Built in activation strategies {#built-in-activation-strategies} - -Unleash comes with a few common activation strategies. Some of them require the client to provide the unleash-context, which gives the necessary context for Unleash. - -The built-in activation strategies: - -- Standard -- UserIDs -- Gradual Rollout -- IPs -- Hostnames - -## The standard activation strategy {#the-standard-activation-strategy} - -When you create a new feature toggle you will get the standard activation strategy, if you don’t configure any specific strategies. The standard activation strategy will always evaluate to true, given that the feature toggle is enabled. - -![A UI element describing the \"standard\" strategy. It says \"The standard strategy is strictly on / off for your entire userbase\".](/img/control_rollout_standard_strategy.png) - -## The UserIDs strategy {#the-userids-strategy} - -When we have deployed some new code to production it would be nice to enable the new feature for ourselves before we enable it to everyone else. To achieve this with Unleash, you can use the **UserIDs** activation strategy. This strategy allows you to specify a list of user IDs that you want to expose the new feature for. - -A userId is how you identify users in your system (email, UUID, etc) and is provided as part of the Unleash Context to the client SDK. - -![A UI element showing the user ID strategy. It has an active list of two user IDs: \"productlead@mycompany.com\" and \"me@mycompany.com\".](/img/control_rollout_userid_strategy.png) - -## Multiple activation strategies {#multiple-activation-strategies} - -In order to increase the exposure of the feature which is protected with the feature toggle you can configure multiple activation strategies on the same feature toggle. - -![A feature toggle with two active strategies: a user ID strategy and a gradual rollout strategy.](/img/control_rollout_multiple_strategies.png) - -In the example above we have to configure two activation strategies, **userWithId** and **flexibleRollout**. If one of them evaluates to true the feature toggle is considered enabled. In the example we have enabled the feature toggle for usersWithId (*productlead@mycompany.com* and *me@mycompany.com*) in addition to 75% of the traffic. - -## Summary {#summary} - -You use activation strategies to control who the feature toggle will be enabled for. You can configure multiple strategies for a feature toggle, and they are considered in an OR fashion, meaning if one of them evaluates to true the toggle will be enabled. - -If you need to limit the exposure (AND) you should look in to [strategy constraints](advanced/strategy-constraints.md), which is the building block for that. diff --git a/website/docs/user_guide/create-feature-toggle.md b/website/docs/user_guide/create-feature-toggle.md index 5d46e3b8080..ffcf4e560eb 100644 --- a/website/docs/user_guide/create-feature-toggle.md +++ b/website/docs/user_guide/create-feature-toggle.md @@ -1,6 +1,6 @@ --- id: create_feature_toggle -title: Create a feature toggle +title: How to create a feature toggle --- In this guide you will learn how to create your first feature toggle using Unleash. @@ -32,7 +32,7 @@ The toggle is now created and ready to be used. The toggle does not have any met ## Step 4: Enable the feature toggle only for your boss! {#step-4-enable-the-feature-toggle-only-for-your-boss} -The next step is to change the activation strategy to only target your boss. You can use the “userWithId”-strategy for that. Using the configuration shown below will only enable the feature toggle for “boss@company.com” and “me@company.com”. Thus, you can safely test your feature in production, without exposing it to your users. In [control roll-out](./control_rollout) with strategies we will go in to greater details on how to use activation strategies to gradually expose new features to your users. +The next step is to change the activation strategy to only target your boss. You can use the “userIDs”-strategy for that. Using the configuration shown below will only enable the feature toggle for “boss@company.com” and “me@company.com”. Thus, you can safely test your feature in production, without exposing it to your users. ![Create a feature toggle](/img/create_feature_toggle_userIds.png) diff --git a/website/docs/user_guide/index.md b/website/docs/user_guide/index.md index d870431903d..5e3c3fd0695 100644 --- a/website/docs/user_guide/index.md +++ b/website/docs/user_guide/index.md @@ -1,35 +1,65 @@ --- id: index -title: Introduction +title: About the docs slug: / sidebar_position: 1 --- -Welcome to the Unleash documentation. Our goal with our documentation is to guide you through the most essential concepts of Unleash. +:::note +The docs are currently undergoing some heavy restructuring and development 👷‍♀️👷🏽 If something is unclear, don't hesitate to [let us know on Slack](https://join.slack.com/t/unleash-community/shared_invite/enQtNjUxMjU2MDc0MTAxLTJjYmViYjkwYmE0ODVlNmY1YjcwZGRmZWU5MTU1YTQ1Nzg5ZWQ2YzBlY2U1MjlmZDg5ZDRmZTMzNmQ5YmEyOGE)! +::: -One of the most important aspects of the architecture to understand is that feature toggles _are evaluated in a client SDKs_ which runs as part of your application. This makes toggle evaluations super-fast (_we talk nano-seconds_), scalable and resilient against network disturbances. In order to achieve this Unleash compromises a small update-delay when you change your toggle configurations until it is fully propagated to your application (in terms of seconds and is configurable). +Welcome to the Unleash documentation, your one-stop shop to everything Unleash. Whether you're just getting started or have been using Unleash for years, you should be able to find answers to all your questions here. -If you want more details you can read about [our unique architecture](https://www.getunleash.io/blog/our-unique-architecture). +## Getting help -### Unleash Server {#unleash-server} +Have questions that you can't find the answer to in these docs? You can always turn to [the Unleash Slack community](https://join.slack.com/t/unleash-community/shared_invite/enQtNjUxMjU2MDc0MTAxLTJjYmViYjkwYmE0ODVlNmY1YjcwZGRmZWU5MTU1YTQ1Nzg5ZWQ2YzBlY2U1MjlmZDg5ZDRmZTMzNmQ5YmEyOGE) and ask us questions directly (or just come and hang out 😄). -Before you can connect your application to Unleash you need a Unleash server. You have a few options available: +## Documentation structure -1. **Unleash Open-source** - - [Docker](deploy/getting_started) - - [Helm Chart](https://github.com/unleash/helm-charts/) - - [Click-to-deploy on Heroku](https://www.heroku.com/deploy/?template=https://github.com/Unleash/unleash) -2. **Unleash Enterprise** - - [Hosted Plans](https://www.getunleash.io/plans) - - [Self-hosted](https://www.getunleash.io/blog/self-host-your-feature-toggle-system) +Our documentation is split into four parts, using the [Diataxis documentation framework](https://diataxis.fr/): +- [tutorials and introductory material](#tutorials) +- [how-to guides](#how-to-guides) +- [reference documentation](#reference-documentation) +- [topic guides](#topic-guides) -### System Overview {#system-overview} +### Tutorials and introductory material {#tutorials} -![system_overview](/img/Unleash_architecture.svg 'System Overview') +New to Unleash? Not sure where to get started? The tutorials guide you through your first steps with Unleash: +- [Unleash introductory overview](unleash_overview.md) +- [Important Unleash concepts](important-concepts.md) +- [Quickstart guides](quickstart.md) -- **Unleash API** - The service holding all feature toggles and their configurations. Configurations declare which activation strategies to use and which parameters they should get. [API documentation](/api) -- **Unleash Admin UI** - The dashboard used to manage feature toggles, define new strategies, look at metrics, etc. [Create your first feature toggle](user_guide/create-feature-toggle.md) -- **Unleash SDK** - Used by clients to check if a feature is enabled or disabled. The SDK also collects metrics and sends them to the Unleash API. [See all our SDKs](sdks/index.md) -- **Unleash Proxy** - Sits between frontend/native applications and the Unleash API. Ensures high performance and that you don't expose the full feature toggle configuration to end-users. [Read more about Unleash Proxy](sdks/unleash-proxy.md) +### How-to guides -To be super fast (_we talk nano-seconds_), the [client SDK](sdks/index.md) caches all feature toggles and their current configuration in memory. The activation strategies are also implemented in the SDK. This makes it really fast to check if a toggle is on or off because it is just a simple function operating on local state, without the need to poll data from the database. +Our how-to guides show you how to perform a number of common tasks that you'll want to do. Think of them as recipes. They are more advanced than the tutorials and assume you have some working knowledge of Unleash. + +The guides are organized into the following categories: +- [API how-tos](/how-to/api) +- [Feature toggles, strategies, context, and general how-tos](/how-to/misc) +- [Users and permissions how-tos](/how-to/users-and-permissions) +- [Single Sign-On (SSO) how-tos](/how-to/sso) + +### Reference documentation + +The reference docs contain technical reference for Unleash and the API. Go here to find out how Unleash works and what configuration options are available. They're like an Unleash encyclopedia and assume you have a grip on key Unleash concepts. + +The reference docs are organized into the following topics: +- [Addons](/addons) +- [API documentation](/api) +- [Unleash Client SDKs](/sdks) +- [Deployment and management of Unleash](/deploy) +- [Integrations with other systems](/integrations) +- [Unleash concepts](/reference/concepts) + +### Topic guides + +[The topic guides](/topics) discuss high-level concepts related to Unleash and provide extra background information and explanations around these concepts. + +## Other resources and communities + +💻 The core of Unleash is all open source and [hosted on GitHub](https://www.heroku.com/deploy/?template=https://github.com/Unleash/unleash "Unleash on GitHub"). + +💬 If you've got questions or just wanna chat to the team and other Unleash users, come [join our Slack community](https://join.slack.com/t/unleash-community/shared_invite/enQtNjUxMjU2MDc0MTAxLTJjYmViYjkwYmE0ODVlNmY1YjcwZGRmZWU5MTU1YTQ1Nzg5ZWQ2YzBlY2U1MjlmZDg5ZDRmZTMzNmQ5YmEyOGE) + +🐦 You can also follow us [on Twitter](https://twitter.com/getunleash "Unleash on Twitter"), [LinkedIn](https://www.linkedin.com/company/getunleash/ "Unleash on LinkedIn"), or [Instagram](https://www.instagram.com/getunleash/ "Unleash on Instagram") for more updates and extra content. diff --git a/website/docs/user_guide/token.md b/website/docs/user_guide/token.md index b6ab8586d1a..29a24d1f5d5 100644 --- a/website/docs/user_guide/token.md +++ b/website/docs/user_guide/token.md @@ -1,6 +1,6 @@ --- id: api-token -title: API Tokens +title: How to create API Tokens --- In order to connect to Unleash clients will need an API token to grant access. A client SDK will need to token with "client privileges", which allows them to fetch feature toggle configuration and post usage metrics back. diff --git a/website/docs/user_guide/unleash_overview.md b/website/docs/user_guide/unleash_overview.md new file mode 100644 index 00000000000..d427e266e90 --- /dev/null +++ b/website/docs/user_guide/unleash_overview.md @@ -0,0 +1,30 @@ +--- +title: Unleash introductory overview +--- + +One of the most important aspects of the architecture to understand is that feature toggles _are evaluated in a client SDKs_ which runs as part of your application. This makes toggle evaluations super-fast (_we're talk nano-seconds_), scalable and resilient against network disturbances. In order to achieve this Unleash compromises a small update-delay when you change your toggle configurations until it is fully propagated to your application (in terms of seconds and is configurable). + +If you want more details you can read about [our unique architecture](https://www.getunleash.io/blog/our-unique-architecture). + +### Unleash Server {#unleash-server} + +Before you can connect your application to Unleash you need a Unleash server. You have a few options available: + +1. **Unleash Open-source** + - [Docker](deploy/getting_started) + - [Helm Chart](https://github.com/unleash/helm-charts/) + - [Click-to-deploy on Heroku](https://www.heroku.com/deploy/?template=https://github.com/Unleash/unleash) +2. **Unleash Enterprise** + - [Hosted Plans](https://www.getunleash.io/plans) + - [Self-hosted](https://www.getunleash.io/blog/self-host-your-feature-toggle-system) + +### System Overview {#system-overview} + +![system_overview](/img/Unleash_architecture.svg 'System Overview') + +- **Unleash API** - The service holding all feature toggles and their configurations. Configurations declare which activation strategies to use and which parameters they should get. [API documentation](/api) +- **Unleash Admin UI** - The dashboard used to manage feature toggles, define new strategies, look at metrics, etc. [Create your first feature toggle](user_guide/create-feature-toggle.md) +- **Unleash SDK** - Used by clients to check if a feature is enabled or disabled. The SDK also collects metrics and sends them to the Unleash API. [See all our SDKs](sdks/index.md) +- **Unleash Proxy** - Sits between frontend/native applications and the Unleash API. Ensures high performance and that you don't expose the full feature toggle configuration to end-users. [Read more about Unleash Proxy](sdks/unleash-proxy.md) + +To be super fast (_we're talking nano-seconds_), the [client SDK](sdks/index.md) caches all feature toggles and their current configuration in memory. The activation strategies are also implemented in the SDK. This makes it really fast to check if a toggle is on or off because it is just a simple function operating on local state, without the need to poll data from the database. diff --git a/website/docs/user_guide/user-management.md b/website/docs/user_guide/user-management.md index ef42be043a2..04cd0686d1c 100644 --- a/website/docs/user_guide/user-management.md +++ b/website/docs/user_guide/user-management.md @@ -1,23 +1,21 @@ --- id: user-management -title: User Management +title: How to add new users to your Unleash instance --- > This feature was introduced in Unleash v4 for Unleash Open-Source. -You can manage users with access to Unleash in the `Admin > Users`. +You can add new users to Unleash in `Admin > Users`. -From the top-line menu – click on the “Settings Wheel” then click on “Users”. -![Add user button](/img/user_admin_list_button.png) +1. From the top-line menu – click on the “Settings Wheel” then click on “Users”. + ![A visual representation of the current step: the Unleash Admin UI with the steps highlighted.](/img/user_admin_list_button.png) +2. To add a new user to your Unleash instance simply click the "Add user" button: + ![The Unleash users page with the 'add new user' button being pointed to.](/img/user_admin-add-user.jpg) +3. Fill out the required fields about the user in the modal. You need to choose which role the new user should have on the "root level". E.g. giving the user an Editor role will allow the user to create a new project. -To add a new user to your Unleash instance simply click the "Add user" button: -![Add user button](/img/user_admin-add-user.jpg) + ![A form titled "Add team member". It has the fields "full name", "email", and "role". The role field is a radio button set with roles called "admin", "editor", and "viewer".](/img/user_admin_add_user_modal.png) -Fill out the required fields about the user in the modal. You need to choose which role the new user should have on the "root level". E.g. giving the user an Editor role will allow the user to create a new project. - -![Add user button](/img/user_admin_add_user_modal.png) - -If you have configured an email server the user will receive the invite link in her inbox, otherwise you should share the magic invite link to Unleash presented in the confirmation dialogue. + If you have configured an email server the user will receive the invite link in her inbox, otherwise you should share the magic invite link to Unleash presented in the confirmation dialogue. diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 906d0dc2e13..c348e1f1284 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -30,9 +30,6 @@ module.exports = { label: 'Documentation', activeBaseRegex: '(user_guide|sdks|addons|advanced)', }, - { to: 'deploy/getting_started', label: 'Deploy and manage' }, - { to: 'integrations', label: 'Integrations' }, - { to: '/api', label: 'API' }, { href: 'https://www.getunleash.io/plans', label: 'Unleash Enterprise', @@ -42,7 +39,7 @@ module.exports = { href: 'https://github.com/Unleash/unleash', position: 'right', className: 'header-github-link', - 'aria-label': 'GitHub repository', + 'aria-label': 'Unleash GitHub repository', }, ], }, @@ -60,7 +57,7 @@ module.exports = { to: '/', }, { - label: 'Open-Source', + label: 'Unleash on GitHub', href: 'https://github.com/Unleash/unleash', }, { @@ -151,6 +148,10 @@ module.exports = { to: '/integrations', from: '/integrations/integrations', }, + { + to: '/user_guide/activation_strategy', + from: '/user_guide/control_rollout', + }, ], createRedirects: function(toPath) { if ( diff --git a/website/sidebars.js b/website/sidebars.js index 65f2abc0289..05d05c53fdb 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -10,140 +10,282 @@ */ module.exports = { - documentation: { - 'Getting started': [ - 'user_guide/index', - 'user_guide/quickstart', - 'user_guide/important-concepts', - 'user_guide/v4-whats-new', - 'user_guide/create_feature_toggle', - 'user_guide/activation_strategy', - 'user_guide/control_rollout', - 'user_guide/projects', - 'user_guide/environments', - 'user_guide/unleash_context', - 'user_guide/user-management', - 'user_guide/rbac', - 'user_guide/api-token', - 'user_guide/technical_debt', - ], - 'Unleash SDKs': [ - 'sdks/index', - 'sdks/unleash-proxy', - { - type: 'category', - collapsible: false, - label: 'Server-side SDKs', - items: [ - 'sdks/go_sdk', - 'sdks/java_sdk', - 'sdks/node_sdk', - 'sdks/php_sdk', - 'sdks/python_sdk', - 'sdks/ruby_sdk', - { - type: 'link', - href: 'https://github.com/unleash/unleash-client-rust', - label: 'Rust SDK', - }, - 'sdks/dot_net_sdk', - ], + documentation: [ + 'user_guide/index', + { + label: 'First steps and tutorials', + type: 'category', + collapsed: false, + link: { + type: 'generated-index', + title: 'First steps', + description: 'Learn how and where to get started with Unleash.', + slug: '/tutorials', + }, + items: [ + 'user_guide/unleash_overview', + 'user_guide/important-concepts', + 'user_guide/quickstart', + ], + }, + { + label: 'How-to guides', + collapsed: false, + type: 'category', + link: { + type: 'generated-index', + title: 'How-to guides', + description: 'Step-by-step recipes for you to follow.', + slug: '/how-to', }, - { - type: 'category', - collapsible: false, - label: 'Client-side SDKs', - items: [ - 'sdks/android_proxy_sdk', - 'sdks/proxy-ios', - 'sdks/proxy-javascript', - 'sdks/proxy-react', - ], + items: [ + { + type: 'category', + link: { + type: 'generated-index', + title: 'How-to: Unleash API', + description: 'Learn how to work with the Unleash API', + slug: '/how-to/api', + }, + label: 'API', + items: ['user_guide/api-token', 'advanced/api_access'], + }, + { + label: 'Feature toggles, strategies, context', + items: [ + 'how-to/how-to-add-strategy-constraints', + 'user_guide/create_feature_toggle', + 'how-to/how-to-define-custom-context-fields', + 'how-to/how-to-use-custom-strategies', + ], + type: 'category', + link: { + type: 'generated-index', + title: 'How-to: general Unleash tasks', + description: + 'Guides for how to perform general Unleash tasks.', + slug: '/how-to/misc', + }, + }, + { + label: 'Users and permissions', + items: [ + 'user_guide/user-management', + 'how-to/how-to-create-and-assign-custom-project-roles', + ], + type: 'category', + link: { + type: 'generated-index', + title: 'How-to: users and permissions', + description: 'Users and permission how-to guides.', + slug: '/how-to/users-and-permissions', + }, + }, + { + label: 'Single Sign-On (SSO)', + items: [ + 'advanced/sso-open-id-connect', + 'advanced/sso-saml', + 'advanced/sso-saml-keycloak', + 'advanced/sso-google', + ], + type: 'category', + link: { + type: 'generated-index', + title: 'How-to: Single Sign-On', + description: 'Single Sign-On how-to guides.', + slug: '/how-to/sso', + }, + }, + , + ], + }, + { + label: 'Reference documentation', + collapsed: false, + type: 'category', + link: { + type: 'generated-index', + title: 'Reference documentation', + description: + 'Technical reference documentation relating to Unleash, including APIs, SDKs, Unleash concepts and deployment.', + slug: '/reference', }, - { - type: 'link', - label: 'Community SDKs', - href: '/sdks#community-sdks', + items: [ + { + type: 'category', + link: { type: 'doc', id: 'addons/index' }, + items: [ + 'addons/datadog', + 'addons/slack', + 'addons/teams', + 'addons/webhook', + ], + label: 'Addons', + }, + { + type: 'category', + link: { type: 'doc', id: 'api/index' }, + label: 'APIs', + items: [ + { + 'Admin API': [ + 'api/admin/addons', + 'api/admin/context', + 'api/admin/events', + 'api/admin/feature-toggles-v2', + 'api/admin/feature-types', + 'api/admin/features', + 'api/admin/features-archive', + 'api/admin/metrics', + 'api/admin/projects', + 'api/admin/state', + 'api/admin/strategies', + 'api/admin/user-admin', + { + type: 'category', + label: 'subcat', + link: { + type: 'generated-index', + title: 'Subcat', + description: 'Lorem ipsum', + slug: '/api/subcat', + }, + items: ['api/admin/user-admin'], + }, + ], + 'Client API': [ + 'api/client/features', + 'api/client/metrics', + 'api/client/register', + ], + 'System API': [ + 'api/internal/internal', + 'api/internal/health', + ], + }, + 'api/open_api', + ], + }, + { + type: 'category', + label: 'Client SDKs', + link: { type: 'doc', id: 'sdks/index' }, + items: [ + { + type: 'category', + label: 'Server-side SDKs', + items: [ + 'sdks/go_sdk', + 'sdks/java_sdk', + 'sdks/node_sdk', + 'sdks/php_sdk', + 'sdks/python_sdk', + 'sdks/ruby_sdk', + { + type: 'link', + href: 'https://github.com/unleash/unleash-client-rust', + label: 'Rust SDK', + }, + 'sdks/dot_net_sdk', + ], + }, + { + type: 'category', + label: 'Client-side SDKs', + items: [ + 'sdks/android_proxy_sdk', + 'sdks/proxy-ios', + 'sdks/proxy-javascript', + 'sdks/proxy-react', + ], + }, + { + type: 'link', + label: 'Community SDKs', + href: '/sdks#community-sdks', + }, + ], + }, + { + type: 'category', + link: { + type: 'generated-index', + title: 'Deployment and management of Unleash', + description: + 'All you need to learn how to deploy and manage your own Unleash instance.', + slug: '/deploy', + }, + label: 'Deploy and manage Unleash', + items: [ + 'deploy/getting_started', + 'deploy/configuring_unleash', + 'deploy/database-setup', + 'deploy/database_backup', + 'deploy/email', + 'deploy/google_auth', + 'deploy/import_export', + 'deploy/migration_guide', + 'deploy/securing_unleash', + ], + }, + { + type: 'category', + label: 'Integrations', + link: { type: 'doc', id: 'integrations/integrations' }, + items: [ + { + 'Jira Server': [ + 'integrations/jira_server_plugin_installation', + 'integrations/jira_server_plugin_usage', + ], + }, + , + ], + }, + { + type: 'category', + link: { + type: 'generated-index', + title: 'Unleash concepts', + description: + 'Documents describing the inner parts of Unleash.', + slug: '/reference/concepts', + }, + label: 'Unleash concepts', + items: [ + 'user_guide/activation_strategy', + 'advanced/archived_toggles', + 'advanced/audit_log', + 'advanced/custom_activation_strategy', + 'user_guide/environments', + 'advanced/feature_toggle_types', + 'advanced/toggle_variants', + 'user_guide/projects', + 'user_guide/rbac', + 'advanced/enterprise-authentication', + 'advanced/stickiness', + 'advanced/strategy_constraints', + 'advanced/tags', + 'user_guide/technical_debt', + 'user_guide/unleash_context', + 'sdks/unleash-proxy', + ], + }, + ], + }, + { + label: 'Topic guides', + collapsed: false, + type: 'category', + link: { + type: 'generated-index', + title: 'Topic guides', + description: + 'Discussions, explanations, and explorations regarding topics related to Unleash.', + slug: '/topics', }, - ], - Addons: [ - 'addons/index', - 'addons/webhook', - 'addons/slack', - 'addons/teams', - 'addons/datadog', - ], - Advanced: [ - 'advanced/strategy_constraints', - 'advanced/custom_activation_strategy', - 'advanced/feature_toggle_types', - 'advanced/toggle_variants', - 'advanced/stickiness', - 'advanced/archived_toggles', - 'advanced/audit_log', - 'advanced/api_access', - 'advanced/tags', - 'advanced/enterprise-authentication', - 'advanced/sso-open-id-connect', - 'advanced/sso-saml', - 'advanced/sso-saml-keycloak', - 'advanced/sso-google', - ], - 'Topic guides': [ - 'topics/a-b-testing' - ], - "How-to guides": [ - "how-to/how-to-add-strategy-constraints", - "how-to/how-to-create-and-assign-custom-project-roles", - "how-to/how-to-define-custom-context-fields", - "how-to/how-to-use-custom-strategies", - ] - }, - api: { - Introduction: [ - 'api/index', - 'api/internal/internal', - 'api/internal/health', - 'api/open_api', - ], - 'Admin API': [ - 'api/admin/features', - 'api/admin/projects', - 'api/admin/feature-toggles-v2', - 'api/admin/features-archive', - 'api/admin/strategies', - 'api/admin/metrics', - 'api/admin/events', - 'api/admin/state', - 'api/admin/feature-types', - 'api/admin/addons', - 'api/admin/context', - 'api/admin/user-admin', - ], - 'Client SDK API': [ - 'api/client/features', - 'api/client/register', - 'api/client/metrics', - ], - }, - 'Deploy and manage': { - 'Deploy & configure': [ - 'deploy/getting_started', - 'deploy/configuring_unleash', - 'deploy/securing_unleash', - 'deploy/email', - 'deploy/google_auth', - 'deploy/database-setup', - 'deploy/database_backup', - 'deploy/migration_guide', - 'deploy/import_export', - ], - }, - Integrations: { - Integrations: ['integrations/integrations'], - 'Jira server': [ - 'integrations/jira_server_plugin_installation', - 'integrations/jira_server_plugin_usage', - ] - }, + items: ['topics/a-b-testing'], + }, + ], }; diff --git a/website/src/css/custom.css b/website/src/css/custom.css index a0ca34ea6b8..c00de0f93b7 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -7,6 +7,7 @@ /* You can override the default Infima variables here. */ :root { + --color-unleash-purple: #635dc5; --ifm-color-primary: #39535b; --ifm-color-primary-dark: #334b52; --ifm-color-primary-darker: #30474d; @@ -16,7 +17,7 @@ --ifm-color-primary-lightest: #4a6c76; --ifm-code-font-size: 90%; --ifm-font-size-base: 15px; - --ifm-link-color: #635DC5; + --ifm-link-color: var(--color-unleash-purple); --navbar-link-color: #122d33; } @@ -28,6 +29,15 @@ footer { font-size: 2.5rem !important; } +li.theme-doc-sidebar-item-category-level-1 > div::before { + width: 0.3em; + height: 100%; + content: ' '; + background-color: var(--color-unleash-purple); + border-radius: 2px; + position: absolute; +} + .docusaurus-highlight-code-line { background-color: rgb(72, 77, 91); display: block;