{"config":{"lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Overview # Lens is the most powerful Kubernetes IDE on the market. It is a standalone application, and it is available on macOS, Windows, and Linux. Some of the benefits of using Lens include: Confidence that your clusters are properly setup and configured. Increased visibility, real time statistics, log streams, and hands-on troubleshooting capabilities. The ability to work with your clusters quickly and easily, radically improving productivity and the speed of business. Watch this introductory video to see Lens in action: Note: Use CTRL+click (on Windows and Linux) or CMD+click (on MacOS) to open the above in a new tab Downloading Lens # Download Lens for macOS, Windows, or Linux. Quick Start # Get up and running quickly by learning to add clusters .","title":"Overview"},{"location":"#overview","text":"Lens is the most powerful Kubernetes IDE on the market. It is a standalone application, and it is available on macOS, Windows, and Linux. Some of the benefits of using Lens include: Confidence that your clusters are properly setup and configured. Increased visibility, real time statistics, log streams, and hands-on troubleshooting capabilities. The ability to work with your clusters quickly and easily, radically improving productivity and the speed of business. Watch this introductory video to see Lens in action: Note: Use CTRL+click (on Windows and Linux) or CMD+click (on MacOS) to open the above in a new tab","title":"Overview"},{"location":"#downloading-lens","text":"Download Lens for macOS, Windows, or Linux.","title":"Downloading Lens"},{"location":"#quick-start","text":"Get up and running quickly by learning to add clusters .","title":"Quick Start"},{"location":"clusters/adding-clusters/","text":"Adding clusters # Add clusters by clicking the Add Cluster button in the left-side menu. Click the Add Cluster button (indicated with a '+' icon). Enter the path to your kubeconfig file. You'll need to have a kubeconfig file for the cluster you want to add. You can either browse for the path from the file system or or enter it directly. Selected cluster contexts are added as a separate item in the left-side cluster menu to allow you to operate easily on multiple clusters and/or contexts. NOTE : Any cluster that you added manually will not be merged into your kubeconfig file. For more information on kubeconfig see Kubernetes docs . To see your currently-enabled config with kubectl , enter kubectl config view --minify --raw in your terminal.","title":"Adding clusters"},{"location":"clusters/adding-clusters/#adding-clusters","text":"Add clusters by clicking the Add Cluster button in the left-side menu. Click the Add Cluster button (indicated with a '+' icon). Enter the path to your kubeconfig file. You'll need to have a kubeconfig file for the cluster you want to add. You can either browse for the path from the file system or or enter it directly. Selected cluster contexts are added as a separate item in the left-side cluster menu to allow you to operate easily on multiple clusters and/or contexts. NOTE : Any cluster that you added manually will not be merged into your kubeconfig file. For more information on kubeconfig see Kubernetes docs . To see your currently-enabled config with kubectl , enter kubectl config view --minify --raw in your terminal.","title":"Adding clusters"},{"location":"clusters/removing-clusters/","text":"Removing clusters # Remove Lens clusters using the context menu that appears when you right-click the cluster in the left-side menu that you want to remove. To remove a cluster from your cluster list: Right-click the name of the cluster in the left-side menu that you want to remove. Click Remove . NOTE : This will only remove the cluster from your Lens cluster list. It will not affect your actual Kubernetes cluster or its configuration.","title":"Removing cluster"},{"location":"clusters/removing-clusters/#removing-clusters","text":"Remove Lens clusters using the context menu that appears when you right-click the cluster in the left-side menu that you want to remove. To remove a cluster from your cluster list: Right-click the name of the cluster in the left-side menu that you want to remove. Click Remove . NOTE : This will only remove the cluster from your Lens cluster list. It will not affect your actual Kubernetes cluster or its configuration.","title":"Removing clusters"},{"location":"clusters/settings/","text":"Settings # It is easy to configure Lens Clusters to your liking through its various settings. Right-click the name of the cluster in the left-side menu that you want to open the settings for. Click Settings . Status # Overview of the cluster status Cluster Status # Cluster status information including the detected distribution, kernel version, API endpoint, and online status General # General cluster settings Cluster Name # The cluster name is inheritated by default from the kubeconfig file. Change the cluster name to another value by updating it here. Note that doing so does not update your kubeconfig file. Workspace # This is the Lens workspace that the cluster is associated with. Change workspaces by selecting a different workspace from the dropdown menu. Create a new workspace by clicking workspace in \"Define cluster workspace\" above the dropdown menu. This option will take you the workspaces editor. Create a new workspace and then navigate back to cluster settings. Cluster Icon # Lens randomly generates an icon to associate with each newly-created cluster. Use this setting to choose your own icon. HTTP Proxy # Some users will need to define an HTTP proxy for communicating with the Kubernetes API. Use this setting to do so. Prometheus # Lens can be configured to query a Prometheus server installed in the cluster. Select a query format by choosing either to auto-detect or from the following configurations: Lens Helm Operator Prometheus Operator Stacklight To learn more about custom Prometheus configurations, please refer to this guide . Working Directory # Use this field to set the terminal working directory. The default is $HOME . Features # Additional Lens features that can be installed by the user Metrics # Enable timeseries data visualization (Prometheus stack) for your cluster. Install this only if you don't have existing Prometheus stack installed. User Mode # User Mode feature enables non-admin users to see namespaces they have access to. This is achieved by configuring RBAC rules so that every authenticated user is granted to list namespaces. Removal # Use this setting to remove the current cluster.","title":"Settings"},{"location":"clusters/settings/#settings","text":"It is easy to configure Lens Clusters to your liking through its various settings. Right-click the name of the cluster in the left-side menu that you want to open the settings for. Click Settings .","title":"Settings"},{"location":"clusters/settings/#status","text":"Overview of the cluster status","title":"Status"},{"location":"clusters/settings/#cluster-status","text":"Cluster status information including the detected distribution, kernel version, API endpoint, and online status","title":"Cluster Status"},{"location":"clusters/settings/#general","text":"General cluster settings","title":"General"},{"location":"clusters/settings/#cluster-name","text":"The cluster name is inheritated by default from the kubeconfig file. Change the cluster name to another value by updating it here. Note that doing so does not update your kubeconfig file.","title":"Cluster Name"},{"location":"clusters/settings/#workspace","text":"This is the Lens workspace that the cluster is associated with. Change workspaces by selecting a different workspace from the dropdown menu. Create a new workspace by clicking workspace in \"Define cluster workspace\" above the dropdown menu. This option will take you the workspaces editor. Create a new workspace and then navigate back to cluster settings.","title":"Workspace"},{"location":"clusters/settings/#cluster-icon","text":"Lens randomly generates an icon to associate with each newly-created cluster. Use this setting to choose your own icon.","title":"Cluster Icon"},{"location":"clusters/settings/#http-proxy","text":"Some users will need to define an HTTP proxy for communicating with the Kubernetes API. Use this setting to do so.","title":"HTTP Proxy"},{"location":"clusters/settings/#prometheus","text":"Lens can be configured to query a Prometheus server installed in the cluster. Select a query format by choosing either to auto-detect or from the following configurations: Lens Helm Operator Prometheus Operator Stacklight To learn more about custom Prometheus configurations, please refer to this guide .","title":"Prometheus"},{"location":"clusters/settings/#working-directory","text":"Use this field to set the terminal working directory. The default is $HOME .","title":"Working Directory"},{"location":"clusters/settings/#features","text":"Additional Lens features that can be installed by the user","title":"Features"},{"location":"clusters/settings/#metrics","text":"Enable timeseries data visualization (Prometheus stack) for your cluster. Install this only if you don't have existing Prometheus stack installed.","title":"Metrics"},{"location":"clusters/settings/#user-mode","text":"User Mode feature enables non-admin users to see namespaces they have access to. This is achieved by configuring RBAC rules so that every authenticated user is granted to list namespaces.","title":"User Mode"},{"location":"clusters/settings/#removal","text":"Use this setting to remove the current cluster.","title":"Removal"},{"location":"contributing/","text":"Contributing # There are multiple ways you can contribute to Lens - even if you are not a developer, you can still contribute. We are always looking for assistance with creating or updating documentation, testing the application, reporting and troubleshooting issues. Here are some ideas how you can contribute! Development \u2013 Help making Lens better. Maintaining the Project \u2013 Become community maintainer and help us maintain the project. Extension Development \u2013 Add integrations via Lens Extensions. Documentation \u2013 Help improve Lens documentation. Promotion \u2013 Show your support, be an ambassador to Lens, write blogs and make videos! If you are an influencer, blogger or journalist, feel free to spread the word ! Code of Conduct # This project adheres to the Contributor Covenant code of conduct. By participating and contributing to Lens, you are expected to uphold this code. Please report unacceptable behaviour to info@k8slens.dev","title":"Overview"},{"location":"contributing/#contributing","text":"There are multiple ways you can contribute to Lens - even if you are not a developer, you can still contribute. We are always looking for assistance with creating or updating documentation, testing the application, reporting and troubleshooting issues. Here are some ideas how you can contribute! Development \u2013 Help making Lens better. Maintaining the Project \u2013 Become community maintainer and help us maintain the project. Extension Development \u2013 Add integrations via Lens Extensions. Documentation \u2013 Help improve Lens documentation. Promotion \u2013 Show your support, be an ambassador to Lens, write blogs and make videos! If you are an influencer, blogger or journalist, feel free to spread the word !","title":"Contributing"},{"location":"contributing/#code-of-conduct","text":"This project adheres to the Contributor Covenant code of conduct. By participating and contributing to Lens, you are expected to uphold this code. Please report unacceptable behaviour to info@k8slens.dev","title":"Code of Conduct"},{"location":"contributing/development/","text":"Development # TBD","title":"Development"},{"location":"contributing/development/#development","text":"TBD","title":"Development"},{"location":"contributing/documentation/","text":"Documentation # We are glad to see you are interested in contributing to Lens documentation. If this is the first Open Source project you will contribute to, we strongly suggest reading GitHub's excellent guide: How to Contribute to Open Source . Finding Documentation Issues to Work On # You can find a list of open documentation related issues here . When you find something you would like to work on: Express your interest to start working on an issue via comments. One of the maintainers will assign the issue for you. You can start working on the issue. Once done, simply submit a pull request. Requirements for Documentation Pull Requests # When you create a new pull request, we expect some requirements to be met. Follow this naming convention for Pull Requests: When adding new documentation, add New Documentation: before the title. E.g. New Documentation: Getting Started When fixing documentation, add Fix Documentation: before the title. E.g. Fix Documentation: Getting Started When updating documentation, add Update Documentation: before the title. E.g. Update Documentation: Getting Started If your Pull Request closes an issue you need to write Closes #ISSUE_NUMBER where the ISSUE_NUMBER is the number in the end of the link url that will link your pull request to the issue, when merged will close that issue. For each pull request made, we run tests to check if there are any broken links, the markdown formatting is valid and the linter is passing.","title":"Documentation"},{"location":"contributing/documentation/#documentation","text":"We are glad to see you are interested in contributing to Lens documentation. If this is the first Open Source project you will contribute to, we strongly suggest reading GitHub's excellent guide: How to Contribute to Open Source .","title":"Documentation"},{"location":"contributing/documentation/#finding-documentation-issues-to-work-on","text":"You can find a list of open documentation related issues here . When you find something you would like to work on: Express your interest to start working on an issue via comments. One of the maintainers will assign the issue for you. You can start working on the issue. Once done, simply submit a pull request.","title":"Finding Documentation Issues to Work On"},{"location":"contributing/documentation/#requirements-for-documentation-pull-requests","text":"When you create a new pull request, we expect some requirements to be met. Follow this naming convention for Pull Requests: When adding new documentation, add New Documentation: before the title. E.g. New Documentation: Getting Started When fixing documentation, add Fix Documentation: before the title. E.g. Fix Documentation: Getting Started When updating documentation, add Update Documentation: before the title. E.g. Update Documentation: Getting Started If your Pull Request closes an issue you need to write Closes #ISSUE_NUMBER where the ISSUE_NUMBER is the number in the end of the link url that will link your pull request to the issue, when merged will close that issue. For each pull request made, we run tests to check if there are any broken links, the markdown formatting is valid and the linter is passing.","title":"Requirements for Documentation Pull Requests"},{"location":"contributing/maintainers/","text":"Maintainers # We are looking for community maintainers for the Lens project. Maintainers will be added to a special team with write permissions. These permissions consist of opening, closing, tagging and editing issues, and pull requests, as well as create and delete non protected branches. The responsibilities of a community maintainer are listed below. Issues Triage # Labeling Issues: Label issues accordingly. Finding Duplicates: Finding and closing duplicate issues. Doing First Level Contact: Getting more information on the issues (like version number or asking for clarification) if needed. Closing Irrelevant Issues: Closing issues that are determined irrelevant, no longer needed, not relevant to the project and/or doesn't follow the issues guidelines. Help with Contributions # Help Manage Pull Requests: Help the author of the pull request with any problems. Contributing: Create pull requests to help maintain and drive the project forward.","title":"Maintainers"},{"location":"contributing/maintainers/#maintainers","text":"We are looking for community maintainers for the Lens project. Maintainers will be added to a special team with write permissions. These permissions consist of opening, closing, tagging and editing issues, and pull requests, as well as create and delete non protected branches. The responsibilities of a community maintainer are listed below.","title":"Maintainers"},{"location":"contributing/maintainers/#issues-triage","text":"Labeling Issues: Label issues accordingly. Finding Duplicates: Finding and closing duplicate issues. Doing First Level Contact: Getting more information on the issues (like version number or asking for clarification) if needed. Closing Irrelevant Issues: Closing issues that are determined irrelevant, no longer needed, not relevant to the project and/or doesn't follow the issues guidelines.","title":"Issues Triage"},{"location":"contributing/maintainers/#help-with-contributions","text":"Help Manage Pull Requests: Help the author of the pull request with any problems. Contributing: Create pull requests to help maintain and drive the project forward.","title":"Help with Contributions"},{"location":"contributing/promotion/","text":"Promoting # Help promote Lens! If you are not a developer (or even if you are), you can still contribute to the project, a lot, by helping us promote it. As we are a free open source project, the community is our most important asset, so here are some ways that you can help the project continue to grow. Follow, Like, Recommend, Favorite, Vote and Star Us # There are many sites where you can vote, recommend, favorite and star us. Twitter - Like, comment and retweet our posts, and follow us on Twitter Medium - Give claps to our articles and follow us on Medium GitHub - Become a stargazer on GitHub StackShare - Indicate you are using Lens and follow us on StackShare Reddit - Upvote and be an ambassador of Lens by participating relevant discussions on Reddit Hacker News - Upvote and be an ambassador of Lens by participating relevant discussions on Hacker News Write Blogs or Make Videos About Us # Here are some nice blog posts and videos about our project for you to get some inspiration: Onboard AWS EKS Cluster on Lens(Kubernetes IDE) Using Lens to Manage All Your Kubernetes Cluster Kontena Lens - Beautiful Kubernetes UI Gerenciando Kubernetes com Lens e Octant Walkthrough of Kubernetes IDE - Lens LENS - Interfaz Gr\u00e1fica para Kubernetes en 1 PASO. Psst... If you have created some content around Lens, let us know!","title":"Promotion"},{"location":"contributing/promotion/#promoting","text":"Help promote Lens! If you are not a developer (or even if you are), you can still contribute to the project, a lot, by helping us promote it. As we are a free open source project, the community is our most important asset, so here are some ways that you can help the project continue to grow.","title":"Promoting"},{"location":"contributing/promotion/#follow-like-recommend-favorite-vote-and-star-us","text":"There are many sites where you can vote, recommend, favorite and star us. Twitter - Like, comment and retweet our posts, and follow us on Twitter Medium - Give claps to our articles and follow us on Medium GitHub - Become a stargazer on GitHub StackShare - Indicate you are using Lens and follow us on StackShare Reddit - Upvote and be an ambassador of Lens by participating relevant discussions on Reddit Hacker News - Upvote and be an ambassador of Lens by participating relevant discussions on Hacker News","title":"Follow, Like, Recommend, Favorite, Vote and Star Us"},{"location":"contributing/promotion/#write-blogs-or-make-videos-about-us","text":"Here are some nice blog posts and videos about our project for you to get some inspiration: Onboard AWS EKS Cluster on Lens(Kubernetes IDE) Using Lens to Manage All Your Kubernetes Cluster Kontena Lens - Beautiful Kubernetes UI Gerenciando Kubernetes com Lens e Octant Walkthrough of Kubernetes IDE - Lens LENS - Interfaz Gr\u00e1fica para Kubernetes en 1 PASO. Psst... If you have created some content around Lens, let us know!","title":"Write Blogs or Make Videos About Us"},{"location":"extensions/","text":"Lens Extension API # The Extensions API in Lens allows users to customize and enhance the Lens experience by creating their own menus or page content that is extended from the existing pages. Many of the core features of Lens are built as extensions and use the same Extension API. This documentation describes: How to build, run, test and publish an extension How to take advantage of Lens's Extension API Where to find guides and code samples to help get you started Code samples are available at lensapp/lens-extension-samples . What can extensions do # Here are some examples of what you can achieve with the Extension API: Add custom components & views in the UI - Extending the Lens Workbench If you'd like to have a more comprehensive overview of the Extension API, refer to the Extension Capabilities Overview page. Extension Guides Overview also includes a list of code samples and guides that illustrate various Extension API usage. How to build extensions # Building a good extension can take a lot of effort. Here is what each section of the API doc can help you with: Get Started teaches fundamental concepts for building extensions with the Hello World sample. Extension Capabilities dissects Lens's Extension API into smaller categories and points you to more detailed topics. Extension Guides includes guides and code samples that explain specific usages of Lens Extension API. Testing and Publishing includes in-depth guides on various extension development topics, such as testing and publishing extensions. Advanced Topics explains advanced concepts such as integrating with 3rd party applications/services. References contains exhaustive references for the Lens Extension API, Contribution Points, and many other topics. What's new # Lens updates on a monthly cadence, and that applies to the Extension API as well. New features and APIs become available every month to increase the power and scope of Lens extensions. To stay current with the Extension API and Lens features in general, you can review the release notes . Looking for help # If you have questions for extension development, try asking on: Lens Dev Slack : Public chatroom for Lens developers. Some Lens team members chime in on conversations. To provide feedback on the documentation or issues with the Lens Extension API, create new issues at lensapp/lens with the labels area/documentation and/or area/extension . Download Lens - The Kubernetes IDE # Go to Lens","title":"Overview"},{"location":"extensions/#lens-extension-api","text":"The Extensions API in Lens allows users to customize and enhance the Lens experience by creating their own menus or page content that is extended from the existing pages. Many of the core features of Lens are built as extensions and use the same Extension API. This documentation describes: How to build, run, test and publish an extension How to take advantage of Lens's Extension API Where to find guides and code samples to help get you started Code samples are available at lensapp/lens-extension-samples .","title":"Lens Extension API"},{"location":"extensions/#what-can-extensions-do","text":"Here are some examples of what you can achieve with the Extension API: Add custom components & views in the UI - Extending the Lens Workbench If you'd like to have a more comprehensive overview of the Extension API, refer to the Extension Capabilities Overview page. Extension Guides Overview also includes a list of code samples and guides that illustrate various Extension API usage.","title":"What can extensions do"},{"location":"extensions/#how-to-build-extensions","text":"Building a good extension can take a lot of effort. Here is what each section of the API doc can help you with: Get Started teaches fundamental concepts for building extensions with the Hello World sample. Extension Capabilities dissects Lens's Extension API into smaller categories and points you to more detailed topics. Extension Guides includes guides and code samples that explain specific usages of Lens Extension API. Testing and Publishing includes in-depth guides on various extension development topics, such as testing and publishing extensions. Advanced Topics explains advanced concepts such as integrating with 3rd party applications/services. References contains exhaustive references for the Lens Extension API, Contribution Points, and many other topics.","title":"How to build extensions"},{"location":"extensions/#whats-new","text":"Lens updates on a monthly cadence, and that applies to the Extension API as well. New features and APIs become available every month to increase the power and scope of Lens extensions. To stay current with the Extension API and Lens features in general, you can review the release notes .","title":"What's new"},{"location":"extensions/#looking-for-help","text":"If you have questions for extension development, try asking on: Lens Dev Slack : Public chatroom for Lens developers. Some Lens team members chime in on conversations. To provide feedback on the documentation or issues with the Lens Extension API, create new issues at lensapp/lens with the labels area/documentation and/or area/extension .","title":"Looking for help"},{"location":"extensions/#download-lens-the-kubernetes-ide","text":"Go to Lens","title":"Download Lens - The Kubernetes IDE"},{"location":"extensions/api/","text":"Lens Extension API Reference # TBD","title":"API Reference"},{"location":"extensions/api/#lens-extension-api-reference","text":"TBD","title":"Lens Extension API Reference"},{"location":"extensions/capabilities/","text":"","title":"Overview"},{"location":"extensions/capabilities/color-reference/","text":"Theme color reference # You can use CSS variables generated from theme .json files to style an extension with respect of active theme. Base colors # blue : blue color. magenta : magenta color. golden : gold/yellow color. halfGray : gray with some apacity applied. primary : Lens brand (blue) color. colorSuccess : successfull operations color. colorOk : successfull operations (bright version) color. colorInfo : informational, in-progress color. colorError : critical error color. colorSoftError : error color. colorWarning : warning color. colorVague : soft gray color for notices, hints etc. colorTerminated : terminated, closed, stale color. boxShadow : semi-transparent box-shadow color. Text colors # textColorPrimary : foreground text color. textColorSecondary : foreground text color for different paragraps, parts of text. textColorAccent : foreground text color to highlight its parts. Border colors # borderColor : border color. borderFaintColor : fainted (lighter or darker, which depends on the theme) border color. Layout colors # mainBackground : main background color for the app. contentColor : background color for panels contains some data. layoutBackground : background color for layout parts. layoutTabsBackground : background color for general tabs. layoutTabsActiveColor : foreground color for general tabs. layoutTabsLineColor : background color for lines under general tabs. Sidebar colors # sidebarLogoBackground : background color behind logo in sidebar. sidebarActiveColor : foreground color for active menu items in sidebar. sidebarSubmenuActiveColor : foreground color for active submenu items in sidebar. sidebarBackground : background color for sidebar. Button colors # buttonPrimaryBackground : button background color for primary actions. buttonDefaultBackground : default button background color. buttonAccentBackground : accent button background color. buttonDisabledBackground : disabled button background color. Table colors # tableBgcStripe : background color for odd rows in table. tableBgcSelected : background color for selected row in table. tableHeaderBackground : background color for table header. tableHeaderBorderWidth : border width under table header. tableHeaderBorderColor : border color for line under table header. tableHeaderColor : foreground color for table header. tableSelectedRowColor : foreground color for selected row in table. Dock colors # dockHeadBackground : background color for dock's header. dockInfoBackground : background color for dock's info panel. dockInfoBorderColor : border color for dock's info panel. Helm chart colors # helmLogoBackground : background color for chart logo. helmImgBackground : background color for chart image. helmStableRepo : background color for stable repo. helmIncubatorRepo : background color for incubator repo. helmDescriptionHr : Helm chart description separator line color. helmDescriptionBlockqouteColor : Helm chart description blockquote color. helmDescriptionBlockqouteBorder : Helm chart description blockquote border color. helmDescriptionBlockquoteBackground : Helm chart description blockquote background color. helmDescriptionHeaders : Helm chart description headers color. helmDescriptionH6 : Helm chart description header foreground color. helmDescriptionTdBorder : Helm chart description table cell border color. helmDescriptionTrBackground : Helm chart description table row background color. helmDescriptionCodeBackground : Helm chart description code background color. helmDescriptionPreBackground : Helm chart description pre background color. helmDescriptionPreColor : Helm chart description pre foreground color. Terminal colors # terminalBackground : Terminal background color. terminalForeground : Terminal foreground color. terminalCursor : Terminal cursor color. terminalCursorAccent : Terminal cursor accent color. terminalSelection : Terminal selection background color. terminalBlack : Terminal black color. terminalRed : Terminal red color. terminalGreen : Terminal green color. terminalYellow : Terminal yellow color. terminalBlue : Terminal blue color. terminalMagenta : Terminal magenta color. terminalCyan : Terminal cyan color. terminalWhite : Terminal white color. terminalBrightBlack : Terminal bright black color. terminalBrightRed : Terminal bright red color. terminalBrightGreen : Terminal bright green color. terminalBrightYellow : Terminal bright yellow color. terminalBrightBlue : Terminal bright blue color. terminalBrightMagenta : Terminal bright magenta color. terminalBrightCyan : Terminal bright cyan color. terminalBrightWhite : Terminal bright white color. Dialog colors # dialogHeaderBackground : background color for dialog header. dialogFooterBackground : background color for dialog footer. Detail panel (Drawer) colors # drawerTitleText : drawer title foreground color. drawerSubtitleBackground : drawer subtitle foreground color. drawerItemNameColor : foreground color for item name in drawer. drawerItemValueColor : foreground color for item value in drawer. Misc colors # logsBackground : background color for pod logs. clusterMenuBackground : background color for cluster menu. clusterMenuBorderColor : border color for cluster menu. clusterSettingsBackground : background color for cluster settings. addClusterIconColor : add cluster button background color. iconActiveColor : active cluster icon foreground color. iconActiveBackground : active cluster icon background color. filterAreaBackground : page filter area (where selected namespaces are lister) background color. chartStripesColor : bar chart zebra stripes background color. chartCapacityColor : background color for capacity values in bar charts. pieChartDefaultColor : default background color for pie chart values. selectOptionHoveredColor : foregrond color for selected element in dropdown list. lineProgressBackground : background color for progress line. radioActiveBackground : background color for active radio buttons. menuActiveBackground : background color for active menu items. In most cases you would only need base, text and some of the layout colors.","title":"Color reference"},{"location":"extensions/capabilities/color-reference/#theme-color-reference","text":"You can use CSS variables generated from theme .json files to style an extension with respect of active theme.","title":"Theme color reference"},{"location":"extensions/capabilities/color-reference/#base-colors","text":"blue : blue color. magenta : magenta color. golden : gold/yellow color. halfGray : gray with some apacity applied. primary : Lens brand (blue) color. colorSuccess : successfull operations color. colorOk : successfull operations (bright version) color. colorInfo : informational, in-progress color. colorError : critical error color. colorSoftError : error color. colorWarning : warning color. colorVague : soft gray color for notices, hints etc. colorTerminated : terminated, closed, stale color. boxShadow : semi-transparent box-shadow color.","title":"Base colors"},{"location":"extensions/capabilities/color-reference/#text-colors","text":"textColorPrimary : foreground text color. textColorSecondary : foreground text color for different paragraps, parts of text. textColorAccent : foreground text color to highlight its parts.","title":"Text colors"},{"location":"extensions/capabilities/color-reference/#border-colors","text":"borderColor : border color. borderFaintColor : fainted (lighter or darker, which depends on the theme) border color.","title":"Border colors"},{"location":"extensions/capabilities/color-reference/#layout-colors","text":"mainBackground : main background color for the app. contentColor : background color for panels contains some data. layoutBackground : background color for layout parts. layoutTabsBackground : background color for general tabs. layoutTabsActiveColor : foreground color for general tabs. layoutTabsLineColor : background color for lines under general tabs.","title":"Layout colors"},{"location":"extensions/capabilities/color-reference/#sidebar-colors","text":"sidebarLogoBackground : background color behind logo in sidebar. sidebarActiveColor : foreground color for active menu items in sidebar. sidebarSubmenuActiveColor : foreground color for active submenu items in sidebar. sidebarBackground : background color for sidebar.","title":"Sidebar colors"},{"location":"extensions/capabilities/color-reference/#button-colors","text":"buttonPrimaryBackground : button background color for primary actions. buttonDefaultBackground : default button background color. buttonAccentBackground : accent button background color. buttonDisabledBackground : disabled button background color.","title":"Button colors"},{"location":"extensions/capabilities/color-reference/#table-colors","text":"tableBgcStripe : background color for odd rows in table. tableBgcSelected : background color for selected row in table. tableHeaderBackground : background color for table header. tableHeaderBorderWidth : border width under table header. tableHeaderBorderColor : border color for line under table header. tableHeaderColor : foreground color for table header. tableSelectedRowColor : foreground color for selected row in table.","title":"Table colors"},{"location":"extensions/capabilities/color-reference/#dock-colors","text":"dockHeadBackground : background color for dock's header. dockInfoBackground : background color for dock's info panel. dockInfoBorderColor : border color for dock's info panel.","title":"Dock colors"},{"location":"extensions/capabilities/color-reference/#helm-chart-colors","text":"helmLogoBackground : background color for chart logo. helmImgBackground : background color for chart image. helmStableRepo : background color for stable repo. helmIncubatorRepo : background color for incubator repo. helmDescriptionHr : Helm chart description separator line color. helmDescriptionBlockqouteColor : Helm chart description blockquote color. helmDescriptionBlockqouteBorder : Helm chart description blockquote border color. helmDescriptionBlockquoteBackground : Helm chart description blockquote background color. helmDescriptionHeaders : Helm chart description headers color. helmDescriptionH6 : Helm chart description header foreground color. helmDescriptionTdBorder : Helm chart description table cell border color. helmDescriptionTrBackground : Helm chart description table row background color. helmDescriptionCodeBackground : Helm chart description code background color. helmDescriptionPreBackground : Helm chart description pre background color. helmDescriptionPreColor : Helm chart description pre foreground color.","title":"Helm chart colors"},{"location":"extensions/capabilities/color-reference/#terminal-colors","text":"terminalBackground : Terminal background color. terminalForeground : Terminal foreground color. terminalCursor : Terminal cursor color. terminalCursorAccent : Terminal cursor accent color. terminalSelection : Terminal selection background color. terminalBlack : Terminal black color. terminalRed : Terminal red color. terminalGreen : Terminal green color. terminalYellow : Terminal yellow color. terminalBlue : Terminal blue color. terminalMagenta : Terminal magenta color. terminalCyan : Terminal cyan color. terminalWhite : Terminal white color. terminalBrightBlack : Terminal bright black color. terminalBrightRed : Terminal bright red color. terminalBrightGreen : Terminal bright green color. terminalBrightYellow : Terminal bright yellow color. terminalBrightBlue : Terminal bright blue color. terminalBrightMagenta : Terminal bright magenta color. terminalBrightCyan : Terminal bright cyan color. terminalBrightWhite : Terminal bright white color.","title":"Terminal colors"},{"location":"extensions/capabilities/color-reference/#dialog-colors","text":"dialogHeaderBackground : background color for dialog header. dialogFooterBackground : background color for dialog footer.","title":"Dialog colors"},{"location":"extensions/capabilities/color-reference/#detail-panel-drawer-colors","text":"drawerTitleText : drawer title foreground color. drawerSubtitleBackground : drawer subtitle foreground color. drawerItemNameColor : foreground color for item name in drawer. drawerItemValueColor : foreground color for item value in drawer.","title":"Detail panel (Drawer) colors"},{"location":"extensions/capabilities/color-reference/#misc-colors","text":"logsBackground : background color for pod logs. clusterMenuBackground : background color for cluster menu. clusterMenuBorderColor : border color for cluster menu. clusterSettingsBackground : background color for cluster settings. addClusterIconColor : add cluster button background color. iconActiveColor : active cluster icon foreground color. iconActiveBackground : active cluster icon background color. filterAreaBackground : page filter area (where selected namespaces are lister) background color. chartStripesColor : bar chart zebra stripes background color. chartCapacityColor : background color for capacity values in bar charts. pieChartDefaultColor : default background color for pie chart values. selectOptionHoveredColor : foregrond color for selected element in dropdown list. lineProgressBackground : background color for progress line. radioActiveBackground : background color for active radio buttons. menuActiveBackground : background color for active menu items. In most cases you would only need base, text and some of the layout colors.","title":"Misc colors"},{"location":"extensions/capabilities/common-capabilities/","text":"Common Capabilities # Common Capabilities are important building blocks for your extensions. Almost all extensions use some of these functionalities. Here is how you can take advantage of them. Main Extension # A main extension runs in the background and, apart from app menu items, does not add content to the Lens UI. If you want to see logs from this extension you need to start Lens from the command line. Activate # An extension can register a custom callback that is executed when an extension is activated (started). import { LensMainExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { async onActivate () { console . log ( \"hello world\" ) } } Deactivate # An extension can register a custom callback that is executed when an extension is deactivated (stopped). import { LensMainExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { async onDeactivate () { console . log ( \"bye bye\" ) } } App Menus # An extension can register custom App menus that will be displayed on OS native menus. Example: import { LensMainExtension , windowManager } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { appMenus = [ { parentId : \"help\" , label : \"Example item\" , click() { windowManager . navigate ( \"https://k8slens.dev\" ); } } ] } Renderer Extension # A renderer extension runs in a browser context and it's visible directly via Lens main window. If you want to see logs from this extension you need to check them via View -> Toggle Developer Tools -> Console. Activate # An extension can register a custom callback that is executed when an extension is activated (started). import { LensRendererExtension } from \"@k8slens/extensions\" export default class ExampleExtension extends LensRendererExtension { async onActivate () { console . log ( \"hello world\" ) } } Deactivate # An extension can register a custom callback that is executed when an extension is deactivated (stopped). import { LensRendererExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensRendererExtension { async onDeactivate () { console . log ( \"bye bye\" ) } } Global Pages # An extension can register custom global pages (views) to Lens main window. Global page is a full screen page that hides all the other content from a window. import React from \"react\" import { Component , LensRendererExtension } from \"@k8slens/extensions\" import { ExamplePage } from \"./src/example-page\" export default class ExampleRendererExtension extends LensRendererExtension { globalPages = [ { path : \"/example-route\" , hideInMenu : true , components : { Page : ExamplePage , } } ] } App Preferences # An extension can register custom app preferences. An extension is responsible for storing a state for custom preferences. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" import { myCustomPreferencesStore } from \"./src/my-custom-preferences-store\" import { MyCustomPreferenceHint , MyCustomPreferenceInput } from \"./src/my-custom-preference\" export default class ExampleRendererExtension extends LensRendererExtension { appPreferences = [ { title : \"My Custom Preference\" , components : { Hint : () => < MyCustomPreferenceHint /> , Input : () => < MyCustomPreferenceInput store = { myCustomPreferencesStore } /> } } ] } Cluster Pages # An extension can register custom cluster pages which are visible in a cluster menu when a cluster is opened. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./src/page\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { path : \"/extension-example\" , title : \"Example Extension\" , components : { Page : () => < ExamplePage extension = { this } /> , MenuIcon : ExampleIcon , } } ] } Cluster Features # An extension can register installable features for a cluster. A cluster feature is visible in \"Cluster Settings\" page. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" import { MyCustomFeature } from \"./src/my-custom-feature\" export default class ExampleExtension extends LensRendererExtension { clusterFeatures = [ { title : \"My Custom Feature\" , components : { Description : () => { return ( < span > Just an example . < /span> ) } }, feature : new MyCustomFeature () } ] } Status Bar Items # An extension can register custom icons/texts to a status bar area. import React from \"react\" ; import { Component , LensRendererExtension , Navigation } from \"@k8slens/extensions\" ; export default class ExampleExtension extends LensRendererExtension { statusBarItems = [ { item : ( < div className = \"flex align-center gaps hover-highlight\" onClick = {() => Navigation . navigate ( \"/example-page\" )} > < Component . Icon material = \"favorite\" smallest /> < /div> ) } ] } Kubernetes Object Menu Items # An extension can register custom menu items (actions) for specified Kubernetes kinds/apiVersions. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { CustomMenuItem , CustomMenuItemProps } from \"./src/custom-menu-item\" export default class ExampleExtension extends LensRendererExtension { kubeObjectMenuItems = [ { kind : \"Node\" , apiVersions : [ \"v1\" ], components : { MenuItem : ( props : CustomMenuItemProps ) => < CustomMenuItem {... props } /> } } ] } Kubernetes Object Details # An extension can register custom details (content) for specified Kubernetes kinds/apiVersions. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { CustomKindDetails , CustomKindDetailsProps } from \"./src/custom-kind-details\" export default class ExampleExtension extends LensRendererExtension { kubeObjectMenuItems = [ { kind : \"CustomKind\" , apiVersions : [ \"custom.acme.org/v1\" ], components : { Details : ( props : CustomKindDetailsProps ) => < CustomKindDetails {... props } /> } } ] }","title":"Common Capabilities"},{"location":"extensions/capabilities/common-capabilities/#common-capabilities","text":"Common Capabilities are important building blocks for your extensions. Almost all extensions use some of these functionalities. Here is how you can take advantage of them.","title":"Common Capabilities"},{"location":"extensions/capabilities/common-capabilities/#main-extension","text":"A main extension runs in the background and, apart from app menu items, does not add content to the Lens UI. If you want to see logs from this extension you need to start Lens from the command line.","title":"Main Extension"},{"location":"extensions/capabilities/common-capabilities/#activate","text":"An extension can register a custom callback that is executed when an extension is activated (started). import { LensMainExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { async onActivate () { console . log ( \"hello world\" ) } }","title":"Activate"},{"location":"extensions/capabilities/common-capabilities/#deactivate","text":"An extension can register a custom callback that is executed when an extension is deactivated (stopped). import { LensMainExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { async onDeactivate () { console . log ( \"bye bye\" ) } }","title":"Deactivate"},{"location":"extensions/capabilities/common-capabilities/#app-menus","text":"An extension can register custom App menus that will be displayed on OS native menus. Example: import { LensMainExtension , windowManager } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensMainExtension { appMenus = [ { parentId : \"help\" , label : \"Example item\" , click() { windowManager . navigate ( \"https://k8slens.dev\" ); } } ] }","title":"App Menus"},{"location":"extensions/capabilities/common-capabilities/#renderer-extension","text":"A renderer extension runs in a browser context and it's visible directly via Lens main window. If you want to see logs from this extension you need to check them via View -> Toggle Developer Tools -> Console.","title":"Renderer Extension"},{"location":"extensions/capabilities/common-capabilities/#activate_1","text":"An extension can register a custom callback that is executed when an extension is activated (started). import { LensRendererExtension } from \"@k8slens/extensions\" export default class ExampleExtension extends LensRendererExtension { async onActivate () { console . log ( \"hello world\" ) } }","title":"Activate"},{"location":"extensions/capabilities/common-capabilities/#deactivate_1","text":"An extension can register a custom callback that is executed when an extension is deactivated (stopped). import { LensRendererExtension } from \"@k8slens/extensions\" export default class ExampleMainExtension extends LensRendererExtension { async onDeactivate () { console . log ( \"bye bye\" ) } }","title":"Deactivate"},{"location":"extensions/capabilities/common-capabilities/#global-pages","text":"An extension can register custom global pages (views) to Lens main window. Global page is a full screen page that hides all the other content from a window. import React from \"react\" import { Component , LensRendererExtension } from \"@k8slens/extensions\" import { ExamplePage } from \"./src/example-page\" export default class ExampleRendererExtension extends LensRendererExtension { globalPages = [ { path : \"/example-route\" , hideInMenu : true , components : { Page : ExamplePage , } } ] }","title":"Global Pages"},{"location":"extensions/capabilities/common-capabilities/#app-preferences","text":"An extension can register custom app preferences. An extension is responsible for storing a state for custom preferences. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" import { myCustomPreferencesStore } from \"./src/my-custom-preferences-store\" import { MyCustomPreferenceHint , MyCustomPreferenceInput } from \"./src/my-custom-preference\" export default class ExampleRendererExtension extends LensRendererExtension { appPreferences = [ { title : \"My Custom Preference\" , components : { Hint : () => < MyCustomPreferenceHint /> , Input : () => < MyCustomPreferenceInput store = { myCustomPreferencesStore } /> } } ] }","title":"App Preferences"},{"location":"extensions/capabilities/common-capabilities/#cluster-pages","text":"An extension can register custom cluster pages which are visible in a cluster menu when a cluster is opened. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { ExampleIcon , ExamplePage } from \"./src/page\" export default class ExampleExtension extends LensRendererExtension { clusterPages = [ { path : \"/extension-example\" , title : \"Example Extension\" , components : { Page : () => < ExamplePage extension = { this } /> , MenuIcon : ExampleIcon , } } ] }","title":"Cluster Pages"},{"location":"extensions/capabilities/common-capabilities/#cluster-features","text":"An extension can register installable features for a cluster. A cluster feature is visible in \"Cluster Settings\" page. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" import { MyCustomFeature } from \"./src/my-custom-feature\" export default class ExampleExtension extends LensRendererExtension { clusterFeatures = [ { title : \"My Custom Feature\" , components : { Description : () => { return ( < span > Just an example . < /span> ) } }, feature : new MyCustomFeature () } ] }","title":"Cluster Features"},{"location":"extensions/capabilities/common-capabilities/#status-bar-items","text":"An extension can register custom icons/texts to a status bar area. import React from \"react\" ; import { Component , LensRendererExtension , Navigation } from \"@k8slens/extensions\" ; export default class ExampleExtension extends LensRendererExtension { statusBarItems = [ { item : ( < div className = \"flex align-center gaps hover-highlight\" onClick = {() => Navigation . navigate ( \"/example-page\" )} > < Component . Icon material = \"favorite\" smallest /> < /div> ) } ] }","title":"Status Bar Items"},{"location":"extensions/capabilities/common-capabilities/#kubernetes-object-menu-items","text":"An extension can register custom menu items (actions) for specified Kubernetes kinds/apiVersions. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { CustomMenuItem , CustomMenuItemProps } from \"./src/custom-menu-item\" export default class ExampleExtension extends LensRendererExtension { kubeObjectMenuItems = [ { kind : \"Node\" , apiVersions : [ \"v1\" ], components : { MenuItem : ( props : CustomMenuItemProps ) => < CustomMenuItem {... props } /> } } ] }","title":"Kubernetes Object Menu Items"},{"location":"extensions/capabilities/common-capabilities/#kubernetes-object-details","text":"An extension can register custom details (content) for specified Kubernetes kinds/apiVersions. import React from \"react\" import { LensRendererExtension } from \"@k8slens/extensions\" ; import { CustomKindDetails , CustomKindDetailsProps } from \"./src/custom-kind-details\" export default class ExampleExtension extends LensRendererExtension { kubeObjectMenuItems = [ { kind : \"CustomKind\" , apiVersions : [ \"custom.acme.org/v1\" ], components : { Details : ( props : CustomKindDetailsProps ) => < CustomKindDetails {... props } /> } } ] }","title":"Kubernetes Object Details"},{"location":"extensions/capabilities/styling/","text":"Styling an extension # Lens provides a set of global styles and UI components that can be used by any extension to preserve look and feel of the application. Styling approach # Lens heavily uses SCSS preprocessor with a set of predefined variables and mixins. For layout tasks Lens is using flex.box library which provides helpful class names to specify some of the flexbox properties. For example, div with class names:
at the end will have following css properties: div { display: flex; flex-direction: column; align-items: center; } However, feel free to use any styling technique or framework like Emotion or just plain CSS if you prefer. Themes # Lens using 2 built-in themes located in src/renderer/themes folder each for light and dark color schemes. Active theme can be changed in the Preferences page. When Lens gets loaded it transforms selected theme json file into list of CSS Custom Properties (CSS Variables) which then gets injected into :root element so any of the down-level components can use them. When user changes a theme, the process is repeated, new css variables appear instead of previous ones. If you want to follow a selected theme to keep the 'native' Lens look and feel, respecting the light/dark appearance of your extension, you can use provided variables and build-in lens components such as buttons, dropdowns, checkboxes etc. Injected styles # Every extention is affected by list of default global styles defined in src/renderer/components/app.scss . These are basic browser resets like setting box-sizing property for every element, default text and background colors, default font size, basic headings visualisation etc. Extension may overwrite them if needed. Variables to use # Basic styling # There is a list of CSS Variables available for extension to use. Basic variables located inside :root selected in src/renderer/components/app.scss : --unit: 8px; --padding: var(--unit); --margin: var(--unit); --border-radius: 3px; --font-main: 'Roboto', 'Helvetica', 'Arial', sans-serif; --font-monospace: Lucida Console, Monaco, Consolas, monospace; --font-size-small: calc(1.5 * var(--unit)); --font-size: calc(1.75 * var(--unit)); --font-size-big: calc(2 * var(--unit)); --font-weight-thin: 300; --font-weight-normal: 400; --font-weight-bold: 500; They're intended to set consistent paddings and font-sizes across components, e.g. .status { padding-left: calc(var(--padding) * 2); font-size: var(--font-size-small); } Themable colors # After theme file gets parsed it provides list of theme-defined colors. Most of their values are different for light and dark themes. You can use them to preserve consitent view of extension with respect of selected theme. \"blue\": \"#3d90ce\", \"magenta\": \"#c93dce\", \"golden\": \"#ffc63d\", \"halfGray\": \"#87909c80\", \"primary\": \"#3d90ce\", \"textColorPrimary\": \"#555555\", \"textColorSecondary\": \"#51575d\", \"textColorAccent\": \"#333333\", \"borderColor\": \"#c9cfd3\", \"borderFaintColor\": \"#dfdfdf\", \"mainBackground\": \"#f1f1f1\", \"contentColor\": \"#ffffff\", \"layoutBackground\": \"#e8e8e8\", \"layoutTabsBackground\": \"#f8f8f8\", \"layoutTabsActiveColor\": \"#333333\", \"layoutTabsLineColor\": \"#87909c80\" ... ... They can be used in form of var(--magenta) . A complete list of all themable colors can be found in the color reference . Colors values are located inside src/renderer/themes/lens-dark.json and src/renderer/themes/lens-light.json files. Using CSS Variables inside CSS-in-JS components # If a developer uses an Emotion (or similar) framework to work with styles inside an extension, they can use variables in the following form: const Container = styled.div(() => ({ backgroundColor: 'var(--mainBackground)' }));","title":"Styling"},{"location":"extensions/capabilities/styling/#styling-an-extension","text":"Lens provides a set of global styles and UI components that can be used by any extension to preserve look and feel of the application.","title":"Styling an extension"},{"location":"extensions/capabilities/styling/#styling-approach","text":"Lens heavily uses SCSS preprocessor with a set of predefined variables and mixins. For layout tasks Lens is using flex.box library which provides helpful class names to specify some of the flexbox properties. For example, div with class names: at the end will have following css properties: div { display: flex; flex-direction: column; align-items: center; } However, feel free to use any styling technique or framework like Emotion or just plain CSS if you prefer.","title":"Styling approach"},{"location":"extensions/capabilities/styling/#themes","text":"Lens using 2 built-in themes located in src/renderer/themes folder each for light and dark color schemes. Active theme can be changed in the Preferences page. When Lens gets loaded it transforms selected theme json file into list of CSS Custom Properties (CSS Variables) which then gets injected into :root element so any of the down-level components can use them. When user changes a theme, the process is repeated, new css variables appear instead of previous ones. If you want to follow a selected theme to keep the 'native' Lens look and feel, respecting the light/dark appearance of your extension, you can use provided variables and build-in lens components such as buttons, dropdowns, checkboxes etc.","title":"Themes"},{"location":"extensions/capabilities/styling/#injected-styles","text":"Every extention is affected by list of default global styles defined in src/renderer/components/app.scss . These are basic browser resets like setting box-sizing property for every element, default text and background colors, default font size, basic headings visualisation etc. Extension may overwrite them if needed.","title":"Injected styles"},{"location":"extensions/capabilities/styling/#variables-to-use","text":"","title":"Variables to use"},{"location":"extensions/capabilities/styling/#basic-styling","text":"There is a list of CSS Variables available for extension to use. Basic variables located inside :root selected in src/renderer/components/app.scss : --unit: 8px; --padding: var(--unit); --margin: var(--unit); --border-radius: 3px; --font-main: 'Roboto', 'Helvetica', 'Arial', sans-serif; --font-monospace: Lucida Console, Monaco, Consolas, monospace; --font-size-small: calc(1.5 * var(--unit)); --font-size: calc(1.75 * var(--unit)); --font-size-big: calc(2 * var(--unit)); --font-weight-thin: 300; --font-weight-normal: 400; --font-weight-bold: 500; They're intended to set consistent paddings and font-sizes across components, e.g. .status { padding-left: calc(var(--padding) * 2); font-size: var(--font-size-small); }","title":"Basic styling"},{"location":"extensions/capabilities/styling/#themable-colors","text":"After theme file gets parsed it provides list of theme-defined colors. Most of their values are different for light and dark themes. You can use them to preserve consitent view of extension with respect of selected theme. \"blue\": \"#3d90ce\", \"magenta\": \"#c93dce\", \"golden\": \"#ffc63d\", \"halfGray\": \"#87909c80\", \"primary\": \"#3d90ce\", \"textColorPrimary\": \"#555555\", \"textColorSecondary\": \"#51575d\", \"textColorAccent\": \"#333333\", \"borderColor\": \"#c9cfd3\", \"borderFaintColor\": \"#dfdfdf\", \"mainBackground\": \"#f1f1f1\", \"contentColor\": \"#ffffff\", \"layoutBackground\": \"#e8e8e8\", \"layoutTabsBackground\": \"#f8f8f8\", \"layoutTabsActiveColor\": \"#333333\", \"layoutTabsLineColor\": \"#87909c80\" ... ... They can be used in form of var(--magenta) . A complete list of all themable colors can be found in the color reference . Colors values are located inside src/renderer/themes/lens-dark.json and src/renderer/themes/lens-light.json files.","title":"Themable colors"},{"location":"extensions/capabilities/styling/#using-css-variables-inside-css-in-js-components","text":"If a developer uses an Emotion (or similar) framework to work with styles inside an extension, they can use variables in the following form: const Container = styled.div(() => ({ backgroundColor: 'var(--mainBackground)' }));","title":"Using CSS Variables inside CSS-in-JS components"},{"location":"extensions/get-started/anatomy/","text":"Extension Anatomy # You've now learnt how to get basic extension running. In this topic you will learn some fundamental concepts to Lens Extension development; How does it work under the hood? Hello World extension does three things: Hooks on onActivate() and ouputs message into console. Hooks on onDectivate() and ouputs message into console. Registers ClusterPage so that page is visible in the sidebars of cluster dashboards. Let's take a closer look at Hello World sample's source code and see how to achieve these things. Extension File Structure # . \u251c\u2500\u2500 .gitignore // Ignore build output and node_modules \u251c\u2500\u2500 Makefile // Config for build tasks that compiles the extension \u251c\u2500\u2500 README.md // Readable description of your extension's functionality \u251c\u2500\u2500 src \u2502 \u2514\u2500\u2500 page.tsx // Extension's additional source code \u251c\u2500\u2500 main.ts // Source code for extension's main entrypoint \u251c\u2500\u2500 package.json // Extension manifest and dependencies \u251c\u2500\u2500 renderer.tsx // Source code for extension's renderer entrypoint \u251c\u2500\u2500 tsconfig.json // TypeScript configuration \u251c\u2500\u2500 webpack.config.js // Webpack configuration Extension directory contains extension's entry files and few configuration files. Let's focus on package.json , main.ts and renderer.tsx which are essential to understanding the Hello World extension. Extension Manifest # Each Lens extension must have package.json . The package.json contains a mix of Node.js fields such as scripts and dependencies and Lens specific fields such as publisher and contributes . Here are some most important fields: name and publisher : Lens uses @