diff --git a/.github/build/features-to-json.js b/.github/build/features-to-json.js new file mode 100644 index 00000000..23a345b3 --- /dev/null +++ b/.github/build/features-to-json.js @@ -0,0 +1,87 @@ +#!/usr/bin/env node +const fs = require("fs").promises; +const csv = require("csvtojson"); + +const headers = [ + "Theme", + "Category Order", + "Category", + "Function Order", + "Function", + "Feature", + "Subscription Tier", + "Free", + "Team Designer", + "Team Operator", + "Enterprise", + "Exclude", + "Docs", +]; + +async function processCSV() { + try { + // Default paths, can be overridden by command line arguments + const csvFilePath = process.argv[2] || ".github/build/spreadsheet.csv"; + const featuresFile = process.argv[3] || "data/feature_data.json"; + + // Log file paths if custom paths are provided + if (process.argv[2]) { + console.log("Reading features from: " + process.argv[2]); + } + if (process.argv[3]) { + console.log("Outputting JSON to: " + process.argv[3]); + } + + // Read CSV and parse + const rows = await csv({ + noheader: true, + headers: headers, + output: "json", + }).fromFile(csvFilePath); + + // Filter and transform rows + const filteredData = rows + .filter(row => { + // Only include rows with a non-empty docs column + const docsValue = row["Docs"]?.trim(); + return docsValue && docsValue !== ""; + }) + .map(row => { + // Transform row to desired structure + return { + theme: row["Theme"]?.trim(), + categoryOrder: row["Category Order"]?.trim(), + category: row["Category"]?.trim(), + functionOrder: row["Function Order"]?.trim(), + function: row["Function"]?.trim(), + feature: row["Feature"]?.trim(), + subscriptionTier: row["Subscription Tier"]?.trim(), + comparisonTiers: { + free: row["Free"]?.trim().toLowerCase() === 'x', + teamDesigner: row["Team Designer"]?.trim().toLowerCase() === 'x', + teamOperator: row["Team Operator"]?.trim().toLowerCase() === 'x', + enterprise: row["Enterprise"]?.trim().toLowerCase() === 'x' + }, + docs: row["Docs"]?.trim() + }; + }); + + // Write filtered data to JSON file + try { + await fs.writeFile( + featuresFile, + JSON.stringify(filteredData, null, 2) + ); + console.log(`Successfully wrote ${filteredData.length} features to ${featuresFile}`); + } catch (error) { + console.error("Error writing to features JSON file:", error); + process.exit(1); + } + + } catch (error) { + console.error("Error processing CSV:", error); + process.exit(1); + } +} + +processCSV(); \ No newline at end of file diff --git a/.github/workflows/feature-list.yml b/.github/workflows/feature-list.yml index cb94acd7..3709ecd3 100644 --- a/.github/workflows/feature-list.yml +++ b/.github/workflows/feature-list.yml @@ -1,85 +1,51 @@ -name: Feature List Update +name: Feature List on: + workflow_dispatch: schedule: - - cron: '0 0 * * *' # Run every night at midnight UTC - workflow_dispatch: + - cron: '0 0 * * *' permissions: contents: write actions: read jobs: - check-and-update-features: + trigger-feature-list: runs-on: ubuntu-latest env: - FEATURES_FILE: 'data/features.json' + FEATURES_FILE: 'data/feature_data.json' + SPREADSHEET_URL: 'https://docs.google.com/spreadsheets/d/e/2PACX-1vQwzrUSKfuSRcpkp7sJTw1cSB63s4HCjYLJeGPWECsvqn222hjaaONQlN4X8auKvlaB0es3BqV5rQyz/pub?gid=1153419764&single=true&output=csv' steps: - name: Checkout current repository uses: actions/checkout@v4 - - name: Restore cache - id: cache-sha - uses: actions/cache@v3 + - name: Install Node.js + uses: actions/setup-node@v4 with: - path: .sha-cache - key: feature-data-sha - restore-keys: | - feature-data-sha + node-version: 18 - - name: Check for updates in source repository - id: check-updates - uses: actions/github-script@v7 - with: - script: | - const { data: sourceFile } = await github.rest.repos.getContent({ - owner: 'layer5labs', - repo: 'meshery-extensions-packages', - path: 'feature_data.json', - ref: 'master' - }); - - // Store the latest commit SHA - const latestSHA = sourceFile.sha; - - const fs = require('fs'); - - // Check if we have a previous SHA - let hasUpdates = true; - const shaCachePath = '.sha-cache/latest-sha'; - if (fs.existsSync(shaCachePath)) { - const lastSHA = fs.readFileSync(shaCachePath, 'utf8'); - hasUpdates = lastSHA !== latestSHA; - } - - if (hasUpdates) { - // Save the new SHA - fs.mkdirSync('.sha-cache', { recursive: true }); - fs.writeFileSync(shaCachePath, latestSHA); - - // Decode and save the content - const content = Buffer.from(sourceFile.content, 'base64').toString('utf8'); - - // Create data directory if it doesn't exist - fs.mkdirSync('data', { recursive: true }); - - // Write the new content - fs.writeFileSync(process.env.FEATURES_FILE, content); - - core.setOutput('has-updates', 'true'); - } else { - core.setOutput('has-updates', 'false'); - } + - name: Install dependencies + run: | + npm install csvtojson --legacy-peer-deps + + - name: Fetch spreadsheet and process updates + run: | + # Download the spreadsheet + curl -L $SPREADSHEET_URL -o .github/build/spreadsheet.csv + ls -al + + # Process the CSV, filter data, and append to feature_data.json + node .github/build/features-to-json.js - name: Commit changes - if: steps.check-updates.outputs.has-updates == 'true' + id: commit-changes uses: stefanzweifel/git-auto-commit-action@v5 with: - commit_message: "Updated feature data from source repository" + commit_message: "Updated feature data from spreadsheet" file_pattern: ${{ env.FEATURES_FILE }} branch: master commit_options: "--signoff" commit_user_name: l5io commit_user_email: ci@layer5.io - commit_author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com> \ No newline at end of file + commit_author: 'l5io ' \ No newline at end of file diff --git a/.github/workflows/generate-pricing-list.yml b/.github/workflows/generate-pricing-list.yml new file mode 100644 index 00000000..ab9dc301 --- /dev/null +++ b/.github/workflows/generate-pricing-list.yml @@ -0,0 +1,42 @@ +name: Pricing List +on: + workflow_dispatch: + inputs: + spreadsheet_uri: + description: Link of the spreadsheet containing subscription details. + type: string + default: https://docs.google.com/spreadsheets/d/1Ck_5q7U_vLSIDTtplugG3pCVC5zugXgTHtO7T7-yL8g/pub?output=csv + schedule: + - cron: "0 0 * * *" +jobs: + fetch-pricing-list: + name: Fetch Pricing List + if: github.repository == 'layer5io/docs' + runs-on: ubuntu-22.04 + steps: + - name: Check out code + uses: actions/checkout@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + fetch-depth: 1 + - name: Set spreadsheet_uri as environment variable + run: echo "spreadsheet_uri=https://docs.google.com/spreadsheets/d/1Ck_5q7U_vLSIDTtplugG3pCVC5zugXgTHtO7T7-yL8g/pub?output=csv" >> $GITHUB_ENV + if: inputs.spreadsheet_uri != '' + echo "spreadsheet_uri=${{ inputs.spreadsheet_uri }}" >> $GITHUB_ENV + + - name: Dump pricing list from the spreadsheet + run: | + curl -L $spreadsheet_uri -o "./pricing-list.csv"; + - name: Create data folder + run: | + [ ! -d "./static/data/csv" ] && mkdir -p "./static/data/csv"; + mv pricing-list.csv static/data/csv/pricing-list.csv; + - name: Commit changes + uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: Updated pricing-list data. + branch: master + commit_options: "--signoff" + commit_user_name: l5io + commit_user_email: ci@layer5.io + commit_author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>author of the commit that triggered the run diff --git a/assets/scss/_pageinfo.scss b/assets/scss/_pageinfo.scss index 5d439ded..ca632375 100644 --- a/assets/scss/_pageinfo.scss +++ b/assets/scss/_pageinfo.scss @@ -22,4 +22,4 @@ margin-top: map-get($spacers, 5) !important; padding-top: map-get($spacers, 3) !important; } -} +} \ No newline at end of file diff --git a/assets/scss/_styles_project.scss b/assets/scss/_styles_project.scss index 279f6894..9e61dec4 100644 --- a/assets/scss/_styles_project.scss +++ b/assets/scss/_styles_project.scss @@ -373,7 +373,6 @@ a:not([href]):not([class]):hover { font-weight: $font-weight-medium; background: $black; font-family: "Qanelas Soft"; - border-style: solid; margin: 2rem auto; padding: 1rem; border-color: #00b39f; diff --git a/content/en/cloud/self-hosted/planning/identity-services.md b/content/en/cloud/self-hosted/planning/identity-services.md index 0227121c..5e3b66ec 100644 --- a/content/en/cloud/self-hosted/planning/identity-services.md +++ b/content/en/cloud/self-hosted/planning/identity-services.md @@ -5,6 +5,7 @@ categories: [Self-Hosted] tags: [identity] weight: 3 --- + Layer5 Cloud offers a built-in identity provider (IDP), supporting OIDC for normal users and token-based authentication (access, ID, refresh tokens) for API clients with JSON Web Signature (JWS) for token signing. Layer5 Cloud users can sign-up via email and password in addition to social identity providers (Google and GitHub) via OAuth2. See [Getting Started with a Layer5 Account](../../getting-started/getting-started-with-layer5-account.md) for details. Layer5 Cloud identity services include features such as account recovery, email verification, automatica social sign-in account linking, and multi-factor authentication (coming soon). diff --git a/content/en/cloud/tutorials/gitops-snapshots.md b/content/en/cloud/tutorials/gitops-snapshots.md index 5d71e765..18a0b12b 100644 --- a/content/en/cloud/tutorials/gitops-snapshots.md +++ b/content/en/cloud/tutorials/gitops-snapshots.md @@ -6,7 +6,6 @@ category: GitOps weight: 4 --- - Kanvas Snapshots offer visual insights in every pull request. Verify your workload designs and Kubernetes cluster configurations prior to accepting and merging pull requests. ## Meshery GitHub App @@ -78,11 +77,11 @@ Next level leggings before they sold out, PBR&B church-key shaman echo park. Kal ###### Header 6 -| What | Follows | -|-----------|-----------------| -| A table | A header | -| A table | A header | -| A table | A header | +| What | Follows | +| ------- | -------- | +| A table | A header | +| A table | A header | +| A table | A header | ---------------- @@ -147,19 +146,19 @@ Color Tables should have bold headings and alternating shaded rows. -| Artist | Album | Year | -|-------------------|-----------------|------| -| Michael Jackson | Thriller | 1982 | -| Prince | Purple Rain | 1984 | -| Beastie Boys | License to Ill | 1986 | +| Artist | Album | Year | +| --------------- | -------------- | ---- | +| Michael Jackson | Thriller | 1982 | +| Prince | Purple Rain | 1984 | +| Beastie Boys | License to Ill | 1986 | If a table is too wide, it should scroll horizontally. -| Artist | Album | Year | Label | Awards | Songs | -|-------------------|-----------------|------|-------------|----------|-----------| -| Michael Jackson | Thriller | 1982 | Epic Records | Grammy Award for Album of the Year, American Music Award for Favorite Pop/Rock Album, American Music Award for Favorite Soul/R&B Album, Brit Award for Best Selling Album, Grammy Award for Best Engineered Album, Non-Classical | Wanna Be Startin' Somethin', Baby Be Mine, The Girl Is Mine, Thriller, Beat It, Billie Jean, Human Nature, P.Y.T. (Pretty Young Thing), The Lady in My Life | -| Prince | Purple Rain | 1984 | Warner Brothers Records | Grammy Award for Best Score Soundtrack for Visual Media, American Music Award for Favorite Pop/Rock Album, American Music Award for Favorite Soul/R&B Album, Brit Award for Best Soundtrack/Cast Recording, Grammy Award for Best Rock Performance by a Duo or Group with Vocal | Let's Go Crazy, Take Me With U, The Beautiful Ones, Computer Blue, Darling Nikki, When Doves Cry, I Would Die 4 U, Baby I'm a Star, Purple Rain | -| Beastie Boys | License to Ill | 1986 | Mercury Records | noawardsbutthistablecelliswide | Rhymin & Stealin, The New Style, She's Crafty, Posse in Effect, Slow Ride, Girls, (You Gotta) Fight for Your Right, No Sleep Till Brooklyn, Paul Revere, Hold It Now, Hit It, Brass Monkey, Slow and Low, Time to Get Ill | +| Artist | Album | Year | Label | Awards | Songs | +| --------------- | -------------- | ---- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Michael Jackson | Thriller | 1982 | Epic Records | Grammy Award for Album of the Year, American Music Award for Favorite Pop/Rock Album, American Music Award for Favorite Soul/R&B Album, Brit Award for Best Selling Album, Grammy Award for Best Engineered Album, Non-Classical | Wanna Be Startin' Somethin', Baby Be Mine, The Girl Is Mine, Thriller, Beat It, Billie Jean, Human Nature, P.Y.T. (Pretty Young Thing), The Lady in My Life | +| Prince | Purple Rain | 1984 | Warner Brothers Records | Grammy Award for Best Score Soundtrack for Visual Media, American Music Award for Favorite Pop/Rock Album, American Music Award for Favorite Soul/R&B Album, Brit Award for Best Soundtrack/Cast Recording, Grammy Award for Best Rock Performance by a Duo or Group with Vocal | Let's Go Crazy, Take Me With U, The Beautiful Ones, Computer Blue, Darling Nikki, When Doves Cry, I Would Die 4 U, Baby I'm a Star, Purple Rain | +| Beastie Boys | License to Ill | 1986 | Mercury Records | noawardsbutthistablecelliswide | Rhymin & Stealin, The New Style, She's Crafty, Posse in Effect, Slow Ride, Girls, (You Gotta) Fight for Your Right, No Sleep Till Brooklyn, Paul Revere, Hold It Now, Hit It, Brass Monkey, Slow and Low, Time to Get Ill | ---------------- @@ -198,10 +197,10 @@ Long, single-line code blocks should not wrap. They should horizontally scroll i Inline code inside table cells should still be distinguishable. -| Language | Code | -|-------------|--------------------| -| Javascript | `var foo = "bar";` | -| Ruby | `foo = "bar"{` | +| Language | Code | +| ---------- | ------------------ | +| Javascript | `var foo = "bar";` | +| Ruby | `foo = "bar"{` | ---------------- diff --git a/data/feature_data.json b/data/feature_data.json new file mode 100644 index 00000000..a6ee920c --- /dev/null +++ b/data/feature_data.json @@ -0,0 +1,690 @@ +[ + { + "theme": "Theme", + "categoryOrder": "Category\nOrder", + "category": "Category", + "functionOrder": "Function\nOrder", + "function": "Function", + "feature": "Feature", + "subscriptionTier": "Subscription Tier", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": false + }, + "docs": "Docs" + }, + { + "theme": "", + "categoryOrder": "0", + "category": "Configuration Management", + "functionOrder": "2", + "function": "Export Designs", + "feature": "Export a latest version of design in any supported format: Kubernetes Manifest, Helm Chart, Docker Compose, Artifact Hub and as any OCI, YAML, or JSON.", + "subscriptionTier": "", + "comparisonTiers": { + "free": true, + "teamDesigner": true, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://docs.layer5.io/kanvas/designer/export-designs/#exporting-as-a-design-file" + }, + { + "theme": "", + "categoryOrder": "0", + "category": "Configuration Management", + "functionOrder": "3", + "function": "350 Built-in Models", + "feature": "Thousands of standardized components to represent complex systems, providing logical architecture of your infrastructure.", + "subscriptionTier": "Free", + "comparisonTiers": { + "free": true, + "teamDesigner": true, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://docs.meshery.io/concepts/logical/models" + }, + { + "theme": "", + "categoryOrder": "0", + "category": "Configuration Management", + "functionOrder": "4", + "function": "Custom Models", + "feature": "Define new components, relationships, and policies as needed. Import/export your custom models as OCI images.", + "subscriptionTier": "Free", + "comparisonTiers": { + "free": true, + "teamDesigner": true, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://docs.meshery.io/guides/configuration-management/importing-models" + }, + { + "theme": "", + "categoryOrder": "0", + "category": "Configuration Management", + "functionOrder": "5", + "function": "Import your IaC", + "feature": "Import a design from Kubernetes Manifest, Helm Chart, Docker Compose or Artifact Hub.", + "subscriptionTier": "", + "comparisonTiers": { + "free": true, + "teamDesigner": true, + "teamOperator": false, + "enterprise": true + }, + "docs": "https://docs.meshery.io/extensions/importing-a-design" + }, + { + "theme": "", + "categoryOrder": "0", + "category": "Configuration Management", + "functionOrder": "7", + "function": "Bulk Import IaC", + "feature": "Bulk import of your existing infrastructure as code from GitHub repositories.", + "subscriptionTier": "", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": true + }, + "docs": "https://docs.layer5.io/cloud/getting-started/github-integration/" + }, + { + "theme": "", + "categoryOrder": "0", + "category": "Configuration Management", + "functionOrder": "8", + "function": "Validate Infrastructure Configuration", + "feature": "Static validation of configured parameters for design completeness and accuracy.", + "subscriptionTier": "TeamDesigner", + "comparisonTiers": { + "free": false, + "teamDesigner": true, + "teamOperator": false, + "enterprise": false + }, + "docs": "https://docs.layer5.io/kanvas/tasks/designs/validating-designs/" + }, + { + "theme": "", + "categoryOrder": "0", + "category": "Configuration Management", + "functionOrder": "12", + "function": "Intelligent Inference", + "feature": "Relationeirarchical relationships", + "subscriptionTier": "Free", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": false + }, + "docs": "https://docs.layer5.io/kanvas/concepts/relationships/#2-hierarchical-relationships" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "102", + "function": "Robust CLI", + "feature": "Seamlessly manage your configurations, deployments, and interactions through our intuitive and powerful command-line interface: mesheryctl", + "subscriptionTier": "Free", + "comparisonTiers": { + "free": true, + "teamDesigner": true, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://docs.meshery.io/reference/mesheryctl" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "104", + "function": "Web-based Terminal", + "feature": "Direct terminal access to one ore more pods/containers simultaneously. Integrated experience.", + "subscriptionTier": "TeamOperator", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://docs.layer5.io/kanvas/tasks/designs/deploying-designs/" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "105", + "function": "Standard Metrics", + "feature": "Real-time resource metrics for managed workloads.", + "subscriptionTier": "", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://docs.layer5.io/kanvas/operator/operator-views/" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "108", + "function": "Export views", + "feature": "Export views to JSON format", + "subscriptionTier": "", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://docs.layer5.io/kanvas/operator/operator-views/#5-export-a-view" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "109", + "function": "Share Views", + "feature": "Share views with anyone within your organization, and make your design easily accessible to all relevant team members.", + "subscriptionTier": "", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://docs.layer5.io/kanvas/operator/operator-views/#3-share-a-view" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "111", + "function": "Deployments and Deployment dry-runs", + "feature": "Test and verify configuration changes in a separate environment.", + "subscriptionTier": "TeamOperator", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://docs.layer5.io/kanvas/tasks/designs/deploying-designs/" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "115", + "function": "Orchestration: Provisioning / Deprovisioning", + "feature": "Provision and deprovision cloud native infrastructure using your designs.", + "subscriptionTier": "", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://docs.layer5.io/kanvas/tasks/designs/undeploying-designs/" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "116", + "function": "Orchestration: Deprovisioning", + "feature": "Retract all resources used in a Meshery design from the cluster", + "subscriptionTier": "", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": true, + "enterprise": false + }, + "docs": "https://docs.layer5.io/kanvas/tasks/designs/undeploying-designs/" + }, + { + "theme": "", + "categoryOrder": "2", + "category": "Kanvas", + "functionOrder": "201", + "function": "Whiteboarding", + "feature": "Pencil for freeform drawing of any shapes", + "subscriptionTier": "Free", + "comparisonTiers": { + "free": true, + "teamDesigner": true, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://docs.layer5.io/kanvas/designer/whiteboarding/" + }, + { + "theme": "", + "categoryOrder": "3", + "category": "Performance Management", + "functionOrder": "301", + "function": "Load Generation and Performance Testing", + "feature": "Continuous visibility across all of your clusters and workloads. Single or multiple results in standardized format.", + "subscriptionTier": "Free", + "comparisonTiers": { + "free": true, + "teamDesigner": true, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://docs.meshery.io/guides/performance-management/performance-management" + }, + { + "theme": "", + "categoryOrder": "4", + "category": "Collaboration", + "functionOrder": "401", + "function": "Team Design Review", + "feature": "Multiple users to simultaneously edit a document, leave comments directly on specific text sections, and track changes made by others, enabling efficient collaboration and feedback loops during the review process.", + "subscriptionTier": "TeamDesigner", + "comparisonTiers": { + "free": false, + "teamDesigner": true, + "teamOperator": false, + "enterprise": true + }, + "docs": "https://docs.layer5.io/kanvas/designer/comments/" + }, + { + "theme": "", + "categoryOrder": "4", + "category": "Collaboration", + "functionOrder": "405", + "function": "Public and Private Views", + "feature": "Invite any user to collaborate on your public or private views.", + "subscriptionTier": "TeamOperator", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://docs.layer5.io/kanvas/operator/operator-views/" + }, + { + "theme": "", + "categoryOrder": "5", + "category": "Identity & Access Management", + "functionOrder": "501", + "function": "Built-in Roles", + "feature": "Predefined user roles: Organization Admin, Team Admin, Workspace Admin", + "subscriptionTier": "Free", + "comparisonTiers": { + "free": true, + "teamDesigner": true, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://docs.layer5.io/cloud/security/roles/" + }, + { + "theme": "", + "categoryOrder": "5", + "category": "Identity & Access Management", + "functionOrder": "503", + "function": "Teams", + "feature": "Establish new team for organizing groups of users and resource access. Single organization, multiple teams.", + "subscriptionTier": "TeamDesigner|TeamOperator", + "comparisonTiers": { + "free": false, + "teamDesigner": true, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://docs.layer5.io/cloud/identity/teams/" + }, + { + "theme": "", + "categoryOrder": "5", + "category": "Identity & Access Management", + "functionOrder": "504", + "function": "Custom Roles", + "feature": "Assign User Roles, Assign Keychains to Roles", + "subscriptionTier": "Enterprise", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://docs.layer5.io/cloud/security/roles/" + }, + { + "theme": "", + "categoryOrder": "5", + "category": "Identity & Access Management", + "functionOrder": "506", + "function": "User-defined Roles", + "feature": "Customizable roles for specific permission assignments", + "subscriptionTier": "Enterprise", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": true + }, + "docs": "https://docs.layer5.io/cloud/security/roles/" + }, + { + "theme": "", + "categoryOrder": "5", + "category": "Identity & Access Management", + "functionOrder": "509", + "function": "Organizations", + "feature": "Particpate as a member of multiple organizations each with their own accounting and billing structure. Multiple organizations, multiple teams.", + "subscriptionTier": "Enterprise", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": true + }, + "docs": "https://docs.layer5.io/cloud/identity/organizations/" + }, + { + "theme": "", + "categoryOrder": "6", + "category": "Workspaces", + "functionOrder": "603", + "function": "GitOps Snapshots", + "feature": "Visual insights in your pull requests in GitHub. Verify your workload designs and Kubernetes cluster configurations prior to accepting and merging pull requests.", + "subscriptionTier": "TeamDesigner", + "comparisonTiers": { + "free": false, + "teamDesigner": true, + "teamOperator": false, + "enterprise": true + }, + "docs": "https://docs.layer5.io/cloud/tutorials/gitops-snapshots/" + }, + { + "theme": "", + "categoryOrder": "7", + "category": "Catalog", + "functionOrder": "701", + "function": "Public Catalog: 400 Cloud Native Patterns", + "feature": "A library of pre-built design patterns and operational templates for common deployment scenarios, simplifying the configuration process and ensuring best practices.", + "subscriptionTier": "Free", + "comparisonTiers": { + "free": true, + "teamDesigner": true, + "teamOperator": true, + "enterprise": true + }, + "docs": "https://cloud.layer5.io/catalog" + }, + { + "theme": "", + "categoryOrder": "7", + "category": "Catalog", + "functionOrder": "702", + "function": "Organization Private Catalog", + "feature": "Privately publish and share reusable design patterns and operational templates within your organization.", + "subscriptionTier": "Enterprise", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": true + }, + "docs": "https://docs.layer5.io/cloud/catalog/" + }, + { + "theme": "", + "categoryOrder": "7", + "category": "Catalog", + "functionOrder": "703", + "function": "Share Design", + "feature": "Share design with anyone within your organization, and make your design easily accessible to all relevant team members.", + "subscriptionTier": "", + "comparisonTiers": { + "free": true, + "teamDesigner": true, + "teamOperator": false, + "enterprise": true + }, + "docs": "https://docs.layer5.io/kanvas/designer/share-resource/" + }, + { + "theme": "", + "categoryOrder": "7", + "category": "Catalog", + "functionOrder": "704", + "function": "Clone Design", + "feature": "Clone any published design to customise it according to your use cases", + "subscriptionTier": "", + "comparisonTiers": { + "free": true, + "teamDesigner": true, + "teamOperator": false, + "enterprise": true + }, + "docs": "https://docs.layer5.io/kanvas/tasks/designs/cloning-a-design/" + }, + { + "theme": "", + "categoryOrder": "7", + "category": "Catalog", + "functionOrder": "705", + "function": "Publish Design", + "feature": "Publish a design", + "subscriptionTier": "", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": false + }, + "docs": "https://docs.meshery.io/extensions/publishing-a-design" + }, + { + "theme": "", + "categoryOrder": "7", + "category": "Catalog", + "functionOrder": "706", + "function": "View Designs", + "feature": "View all public and published designs of other team members and private of signed-in user", + "subscriptionTier": "", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": false + }, + "docs": "https://docs.meshery.io/guides/configuration-management/creating-a-meshery-design" + }, + { + "theme": "", + "categoryOrder": "7", + "category": "Catalog", + "functionOrder": "708", + "function": "Approve Catalog Request", + "feature": "Change management for the curation of content published in the catalog.", + "subscriptionTier": "Enterprise", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": true + }, + "docs": "https://docs.layer5.io/cloud/catalog/" + }, + { + "theme": "", + "categoryOrder": "7", + "category": "Catalog", + "functionOrder": "709", + "function": "Single and multiple approvers", + "feature": "", + "subscriptionTier": "", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": false + }, + "docs": "https://docs.layer5.io/cloud/catalog/" + }, + { + "theme": "", + "categoryOrder": "7", + "category": "Catalog", + "functionOrder": "710", + "function": "Import Filter", + "feature": "Import a publish WASM filter", + "subscriptionTier": "", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": false + }, + "docs": "https://docs.meshery.io/guides/configuration-management/filter-management" + }, + { + "theme": "", + "categoryOrder": "8", + "category": "Security", + "functionOrder": "802", + "function": "Event Audit Trail", + "feature": "Detailed accounting of user activity. Historical record or each action taken.", + "subscriptionTier": "Enterprise", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": true + }, + "docs": "https://docs.layer5.io/cloud/security/" + }, + { + "theme": "", + "categoryOrder": "8", + "category": "Security", + "functionOrder": "803", + "function": "Customizable Permissions: Keys, Keychains and Roles", + "feature": "Highly flexible permissioning. Organize keys into custom keychains and assign to existing or custom roles that you define.", + "subscriptionTier": "Enterprise", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": true + }, + "docs": "https://docs.layer5.io/cloud/security/" + }, + { + "theme": "", + "categoryOrder": "8", + "category": "Security", + "functionOrder": "805", + "function": "User Session and API Token Oversight", + "feature": "Expiring and non-expiring API tokens. Visibility into active and expired user sessions.", + "subscriptionTier": "Enterprise", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": true + }, + "docs": "https://docs.layer5.io/cloud/security/tokens/" + }, + { + "theme": "", + "categoryOrder": "9", + "category": "Managed Service Provider", + "functionOrder": "904", + "function": "Self-service User Accounts", + "feature": "New user sign-up verification. Self-service password recovery.", + "subscriptionTier": "", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": true + }, + "docs": "https://docs.layer5.io/cloud/getting-started/getting-started-with-layer5-account/#7-viewing-your-layer5-profile" + }, + { + "theme": "", + "categoryOrder": "10", + "category": "Support and Deployment", + "functionOrder": "1008", + "function": "Self-hosted Deployment", + "feature": "Self-hosted Layer5 Cloud for on-prem appliances or self-managed cloud tenants. Keep your Kanvas designs internal to your workplace. Get remote support from Layer5 when you need it.", + "subscriptionTier": "Enterprise", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": true + }, + "docs": "https://docs.layer5.io/cloud/self-hosted/" + }, + { + "theme": "", + "categoryOrder": "", + "category": "Identity & Access Management", + "functionOrder": "", + "function": "Organizations", + "feature": "Establish new organization for organizing teams, users, and resource access.", + "subscriptionTier": "Enterprise", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": true + }, + "docs": "https://docs.layer5.io/cloud/identity/organizations/" + }, + { + "theme": "", + "categoryOrder": "", + "category": "Identity & Access Management", + "functionOrder": "", + "function": "Direct Add or Invite User to Organization", + "feature": "Directly create a new user account within an organization. Send a request for a user to join an organization.", + "subscriptionTier": "Enterprise", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": false + }, + "docs": "https://docs.layer5.io/cloud/identity/users/user-management/#create-user" + }, + { + "theme": "Meshery System", + "categoryOrder": "", + "category": "Settings", + "functionOrder": "", + "function": "View Metrics", + "feature": "View already configured metrics", + "subscriptionTier": "Free", + "comparisonTiers": { + "free": false, + "teamDesigner": false, + "teamOperator": false, + "enterprise": false + }, + "docs": "https://docs.layer5.io/cloud/catalog/metrics/" + } +] \ No newline at end of file diff --git a/data/features.json b/data/features.json deleted file mode 100644 index 0ff9d3c8..00000000 --- a/data/features.json +++ /dev/null @@ -1,1296 +0,0 @@ -[ - { - "documentation": "https://docs.layer5.io/cloud/getting-started/getting-started-with-layer5-account/#7-viewing-your-layer5-profile", - "entire_row": { - "Category": "Profile", - "Documented?": "https://docs.layer5.io/cloud/getting-started/getting-started-with-layer5-account/#7-viewing-your-layer5-profile", - "Enterprise Comparison Tier": "x", - "Feature": "View your profile.", - "Free Comparison Tier": "x", - "Function": "View Profile", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Cloud", - "Theme (also: Keychain Name)": "Account Management" - } - }, - { - "documentation": "https://docs.layer5.io/cloud/catalog/", - "entire_row": { - "Category": "Catalog", - "Documented?": "https://docs.layer5.io/cloud/catalog/", - "Enterprise Comparison Tier": "x", - "Feature": "Export a copy of a design to your local system.", - "Free Comparison Tier": "x", - "Function": "", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.layer5.io/kanvas/designer/share-resource/", - "entire_row": { - "Category": "Catalog", - "Documented?": "https://docs.layer5.io/kanvas/designer/share-resource/", - "Enterprise Comparison Tier": "x", - "Feature": "Share design with anyone within your organization, and make your design easily accessible to all relevant team members.", - "Free Comparison Tier": "x", - "Function": "Share Design", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.layer5.io/kanvas/tasks/designs/cloning-a-design/", - "entire_row": { - "Category": "Catalog", - "Documented?": "https://docs.layer5.io/kanvas/tasks/designs/cloning-a-design/", - "Enterprise Comparison Tier": "x", - "Feature": "Clone any published design to customise it according to your use cases", - "Free Comparison Tier": "x", - "Function": "Clone Design", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.meshery.io/guides/configuration-management/creating-a-meshery-design", - "entire_row": { - "Category": "Designs", - "Documented?": "https://docs.meshery.io/guides/configuration-management/creating-a-meshery-design", - "Enterprise Comparison Tier": "x", - "Feature": "Create new Meshery design", - "Free Comparison Tier": "", - "Function": "Create new design", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.meshery.io/extensions/importing-a-design", - "entire_row": { - "Category": "Designs", - "Documented?": "https://docs.meshery.io/extensions/importing-a-design", - "Enterprise Comparison Tier": "x", - "Feature": "Import a design", - "Free Comparison Tier": "", - "Function": "Import Design", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.meshery.io/guides/configuration-management/importing-designs#import-designs-using-meshery-cli", - "entire_row": { - "Category": "Designs", - "Documented?": "https://docs.meshery.io/guides/configuration-management/importing-designs#import-designs-using-meshery-cli", - "Enterprise Comparison Tier": "x", - "Feature": "Import a design from Kubernetes Manifest", - "Free Comparison Tier": "", - "Function": "Import Design", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.layer5.io/kanvas/getting-started/starting-helm/#importing-a-design", - "entire_row": { - "Category": "Designs", - "Documented?": "https://docs.layer5.io/kanvas/getting-started/starting-helm/#importing-a-design", - "Enterprise Comparison Tier": "x", - "Feature": "Import a design from Meshery Design (YAML)", - "Free Comparison Tier": "", - "Function": "Import Design", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.meshery.io/guides/configuration-management/importing-designs#import-designs-using-meshery-cli", - "entire_row": { - "Category": "Designs", - "Documented?": "https://docs.meshery.io/guides/configuration-management/importing-designs#import-designs-using-meshery-cli", - "Enterprise Comparison Tier": "x", - "Feature": "Import a design from Helm Chart", - "Free Comparison Tier": "", - "Function": "Import Design", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.meshery.io/guides/configuration-management/importing-designs#import-designs-using-meshery-cli", - "entire_row": { - "Category": "Designs", - "Documented?": "https://docs.meshery.io/guides/configuration-management/importing-designs#import-designs-using-meshery-cli", - "Enterprise Comparison Tier": "x", - "Feature": "Import a design from Docker Compose", - "Free Comparison Tier": "", - "Function": "Import Design", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Designs", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Import a design from Kubernetes Manifest, Helm Chart, or Docker Compose", - "Free Comparison Tier": "", - "Function": "Standard Import IaC", - "Pricing page?": "X", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.layer5.io/cloud/getting-started/github-integration/#connect-github-and-import-designs", - "entire_row": { - "Category": "Designs", - "Documented?": "https://docs.layer5.io/cloud/getting-started/github-integration/#connect-github-and-import-designs", - "Enterprise Comparison Tier": "x", - "Feature": "Import a design from GitHub", - "Free Comparison Tier": "", - "Function": "Import Design", - "Pricing page?": "", - "Subscription Tier": "Enterprise", - "Tech": "Cloud", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Designs", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Bulk import designs from GitHub", - "Free Comparison Tier": "", - "Function": "Premium Import IaC", - "Pricing page?": "X", - "Subscription Tier": "Enterprise", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.layer5.io/kanvas/designer/export-designs/#exporting-as-a-design-file", - "entire_row": { - "Category": "Designs", - "Documented?": "https://docs.layer5.io/kanvas/designer/export-designs/#exporting-as-a-design-file", - "Enterprise Comparison Tier": "x", - "Feature": "Export a latest version of design in Meshery Design (YAML format)", - "Free Comparison Tier": "x", - "Function": "Export Design", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.layer5.io/kanvas/designer/export-designs/#exporting-as-an-oci-image", - "entire_row": { - "Category": "Designs", - "Documented?": "https://docs.layer5.io/kanvas/designer/export-designs/#exporting-as-an-oci-image", - "Enterprise Comparison Tier": "x", - "Feature": "Export a latest version of design in Meshery Design (OCI format)", - "Free Comparison Tier": "", - "Function": "Export Design", - "Pricing page?": "", - "Subscription Tier": "TeamDesigner", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Designs", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Export a latest version of design in Meshery Design (OCI format, YAML format) Export a design in source type format (Kubernetes Manifest, Helm Chart, Docker Compose)", - "Free Comparison Tier": "", - "Function": "Standard Design Export", - "Pricing page?": "X", - "Subscription Tier": "TeamDesigner", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Designs", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Export a design as a snapshot", - "Free Comparison Tier": "", - "Function": "Premium Design Export", - "Pricing page?": "X", - "Subscription Tier": "Enterprise", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Designs", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Import and export your designs using your local filesystem or remote URL.", - "Free Comparison Tier": "", - "Function": "Cloud Native Design Patterns", - "Pricing page?": "X", - "Subscription Tier": "Free", - "Tech": "", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.meshery.io/extensions/publishing-a-design", - "entire_row": { - "Category": "Designs", - "Documented?": "https://docs.meshery.io/extensions/publishing-a-design", - "Enterprise Comparison Tier": "", - "Feature": "Publish a design", - "Free Comparison Tier": "", - "Function": "Publish Design", - "Pricing page?": "", - "Subscription Tier": "TeamDesigner", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.layer5.io/kanvas/tasks/designs/validating-designs/", - "entire_row": { - "Category": "Designs", - "Documented?": "https://docs.layer5.io/kanvas/tasks/designs/validating-designs/", - "Enterprise Comparison Tier": "", - "Feature": "Validate a design", - "Free Comparison Tier": "", - "Function": "Validate Design", - "Pricing page?": "", - "Subscription Tier": "TeamDesigner", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.layer5.io/kanvas/tasks/designs/deploying-designs/", - "entire_row": { - "Category": "Designs", - "Documented?": "https://docs.layer5.io/kanvas/tasks/designs/deploying-designs/", - "Enterprise Comparison Tier": "", - "Feature": "Deploy a design", - "Free Comparison Tier": "", - "Function": "Deploy Design", - "Pricing page?": "", - "Subscription Tier": "TeamOperator", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.layer5.io/kanvas/tasks/designs/undeploying-designs/", - "entire_row": { - "Category": "Designs", - "Documented?": "https://docs.layer5.io/kanvas/tasks/designs/undeploying-designs/", - "Enterprise Comparison Tier": "", - "Feature": "Retract all resources used in a Meshery design from the cluster", - "Free Comparison Tier": "", - "Function": "Undeploy Design", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.meshery.io/guides/configuration-management/filter-management", - "entire_row": { - "Category": "Filters", - "Documented?": "https://docs.meshery.io/guides/configuration-management/filter-management", - "Enterprise Comparison Tier": "", - "Feature": "Import a filter", - "Free Comparison Tier": "", - "Function": "Import Filter", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.meshery.io/guides/configuration-management/filter-management", - "entire_row": { - "Category": "Filters", - "Documented?": "https://docs.meshery.io/guides/configuration-management/filter-management", - "Enterprise Comparison Tier": "", - "Feature": "Publish WASM Filter", - "Free Comparison Tier": "", - "Function": "Publish WASM Filter", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.meshery.io/guides/configuration-management/filter-management", - "entire_row": { - "Category": "Filters", - "Documented?": "https://docs.meshery.io/guides/configuration-management/filter-management", - "Enterprise Comparison Tier": "", - "Feature": "Unpublish WASM Filter", - "Free Comparison Tier": "", - "Function": "Unpublish WASM Filter", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.meshery.io/guides/configuration-management/filter-management", - "entire_row": { - "Category": "Filters", - "Documented?": "https://docs.meshery.io/guides/configuration-management/filter-management", - "Enterprise Comparison Tier": "", - "Feature": "Download a WASM filter", - "Free Comparison Tier": "", - "Function": "Download a WASM filter", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.meshery.io/guides/configuration-management/filter-management", - "entire_row": { - "Category": "Filters", - "Documented?": "https://docs.meshery.io/guides/configuration-management/filter-management", - "Enterprise Comparison Tier": "", - "Feature": "Check information or details of a WASM filter", - "Free Comparison Tier": "", - "Function": "Details of WASM Filter", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.meshery.io/guides/configuration-management/filter-management", - "entire_row": { - "Category": "Filters", - "Documented?": "https://docs.meshery.io/guides/configuration-management/filter-management", - "Enterprise Comparison Tier": "", - "Feature": "Edit WASM filter", - "Free Comparison Tier": "", - "Function": "Edit WASM filter", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.meshery.io/guides/configuration-management/filter-management", - "entire_row": { - "Category": "Filters", - "Documented?": "https://docs.meshery.io/guides/configuration-management/filter-management", - "Enterprise Comparison Tier": "", - "Feature": "Clone WASM filter from catalog, which allows customizing filter and use it in design", - "Free Comparison Tier": "", - "Function": "Clone WASM Filter", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "documentation": "https://docs.meshery.io/guides/configuration-management/filter-management", - "entire_row": { - "Category": "Filters", - "Documented?": "https://docs.meshery.io/guides/configuration-management/filter-management", - "Enterprise Comparison Tier": "", - "Feature": "Delete WASM filter permanently from catalog.", - "Free Comparison Tier": "", - "Function": "Delete WASM Filter", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Filters", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Import, Unpublish, Publish, Download, Edit, Clone, Delete, Details of WASM Filter", - "Free Comparison Tier": "", - "Function": "WASM Filter and filter", - "Pricing page?": "X", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Team Chat", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Message in real-time, unattached to a specific design. Control who can pariticpate in the discussion.", - "Free Comparison Tier": "", - "Function": "Message in real-time", - "Pricing page?": "X", - "Subscription Tier": "Enterprise", - "Tech": "Kanvas", - "Theme (also: Keychain Name)": "Collaboration" - } - }, - { - "pricing_page": "true", - "documentation": "https://docs.layer5.io/kanvas/designer/comments/", - "entire_row": { - "Category": "Design Reviews", - "Documented?": "https://docs.layer5.io/kanvas/designer/comments/", - "Enterprise Comparison Tier": "", - "Feature": "Discuss any design by leaving review comments or notes on a specific design. Control who has access, notify discussion participants with updates, and link from anywhere.", - "Free Comparison Tier": "", - "Function": "Discuss any design by leaving review comments", - "Pricing page?": "X", - "Subscription Tier": "Team", - "Tech": "Kanvas", - "Theme (also: Keychain Name)": "Collaboration" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Organization and Team Management", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Manage access to designs on a team-by-team, or individual user, basis.", - "Free Comparison Tier": "", - "Function": "Manage access to designs", - "Pricing page?": "X", - "Subscription Tier": "TeamDesigner", - "Tech": "Kanvas", - "Theme (also: Keychain Name)": "Collaboration" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Create and collaborate in online operational topologies in real-time.", - "Free Comparison Tier": "", - "Function": "Manage access to views", - "Pricing page?": "X", - "Subscription Tier": "TeamOperator", - "Tech": "Kanvas", - "Theme (also: Keychain Name)": "" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Built-in Roles", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Static - out of the box", - "Free Comparison Tier": "x", - "Function": "Built-in Roles", - "Pricing page?": "X", - "Subscription Tier": "Free", - "Tech": "Cloud", - "Theme (also: Keychain Name)": "Identity \u0026 Access Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "User-defined Roles", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Customizable roles for specific permission assignments", - "Free Comparison Tier": "x", - "Function": "User-defined Roles", - "Pricing page?": "X", - "Subscription Tier": "Enterprise", - "Tech": "Cloud", - "Theme (also: Keychain Name)": "Identity \u0026 Access Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Authentication: LDAP", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Access Meshery Server using your existing accounts and centrally manage repository access.", - "Free Comparison Tier": "", - "Function": "Authentication: LDAP", - "Pricing page?": "X", - "Subscription Tier": "Enterprise", - "Tech": "Cloud", - "Theme (also: Keychain Name)": "Identity \u0026 Access Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Authentication: SAML", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Use an identity provider to manage the identities of GitHub users and applications.", - "Free Comparison Tier": "", - "Function": "Authentication: SAML", - "Pricing page?": "X", - "Subscription Tier": "Enterprise", - "Tech": "Cloud", - "Theme (also: Keychain Name)": "Identity \u0026 Access Management" - } - }, - { - "documentation": "https://docs.layer5.io/cloud/identity/users/user-management/#add-user-remove-user", - "entire_row": { - "Category": "Users", - "Documented?": "https://docs.layer5.io/cloud/identity/users/user-management/#add-user-remove-user", - "Enterprise Comparison Tier": "", - "Feature": "Delete a user account", - "Free Comparison Tier": "", - "Function": "Delete User", - "Pricing page?": "", - "Subscription Tier": "Team", - "Tech": "", - "Theme (also: Keychain Name)": "Identity \u0026 Access Management" - } - }, - { - "documentation": "https://docs.layer5.io/cloud/identity/users/user-management/#create-user", - "entire_row": { - "Category": "Users", - "Documented?": "https://docs.layer5.io/cloud/identity/users/user-management/#create-user", - "Enterprise Comparison Tier": "", - "Feature": "Create a new user", - "Free Comparison Tier": "", - "Function": "Create User", - "Pricing page?": "", - "Subscription Tier": "", - "Tech": "", - "Theme (also: Keychain Name)": "Identity \u0026 Access Management" - } - }, - { - "documentation": "https://docs.layer5.io/cloud/identity/teams/", - "entire_row": { - "Category": "Teams", - "Documented?": "https://docs.layer5.io/cloud/identity/teams/", - "Enterprise Comparison Tier": "", - "Feature": "Directly create a new user account within a team.", - "Free Comparison Tier": "", - "Function": "Add User to Team", - "Pricing page?": "", - "Subscription Tier": "Team", - "Tech": "Cloud", - "Theme (also: Keychain Name)": "Identity \u0026 Access Management" - } - }, - { - "documentation": "https://docs.layer5.io/cloud/identity/organizations/", - "entire_row": { - "Category": "Organizations", - "Documented?": "https://docs.layer5.io/cloud/identity/organizations/", - "Enterprise Comparison Tier": "", - "Feature": "Establish new organization for organizing teams, users, and resource access.", - "Free Comparison Tier": "", - "Function": "Create Organization", - "Pricing page?": "", - "Subscription Tier": "Enterprise", - "Tech": "Cloud", - "Theme (also: Keychain Name)": "Identity \u0026 Access Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Dry-run", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Test and verify configuration changes in a separate environment.", - "Free Comparison Tier": "", - "Function": "Dry-run", - "Pricing page?": "X", - "Subscription Tier": "TeamOperator", - "Tech": "Server", - "Theme (also: Keychain Name)": "Lifecycle Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Multiple Kubernetes Clusters", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Ongoing synchronization of Kubernetes configuration, workloads and service mesh changes across any number of Kubernetes clusters.", - "Free Comparison Tier": "", - "Function": "Multiple Kubernetes Clusters", - "Pricing page?": "X", - "Subscription Tier": "TeamOperator", - "Tech": "Server", - "Theme (also: Keychain Name)": "Lifecycle Management" - } - }, - { - "pricing_page": "true", - "documentation": "https://docs.meshery.io/reference/mesheryctl", - "entire_row": { - "Category": "mesheryctl", - "Documented?": "https://docs.meshery.io/reference/mesheryctl", - "Enterprise Comparison Tier": "x", - "Feature": "Seamlessly manage your configurations, deployments, and interactions through our intuitive and powerful command-line interface: mesheryctl", - "Free Comparison Tier": "x", - "Function": "CLI", - "Pricing page?": "X", - "Subscription Tier": "Free", - "Tech": "Golang", - "Theme (also: Keychain Name)": "Meshery System" - } - }, - { - "documentation": "https://docs.layer5.io/cloud/catalog/metrics/", - "entire_row": { - "Category": "Settings", - "Documented?": "https://docs.layer5.io/cloud/catalog/metrics/", - "Enterprise Comparison Tier": "", - "Feature": "View already configured metrics", - "Free Comparison Tier": "x", - "Function": "View Metrics", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Meshery System" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Service Performance", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Continuous visibility across all of your clusters and workloads.", - "Free Comparison Tier": "", - "Function": "Service Performance", - "Pricing page?": "X", - "Subscription Tier": "Free", - "Tech": "Kanvas", - "Theme (also: Keychain Name)": "Kanvas" - } - }, - { - "documentation": "https://docs.layer5.io/kanvas/concepts/relationships/#2-hierarchical-relationships", - "entire_row": { - "Category": "Design Patterns", - "Documented?": "https://docs.layer5.io/kanvas/concepts/relationships/#2-hierarchical-relationships", - "Enterprise Comparison Tier": "", - "Feature": "", - "Free Comparison Tier": "x", - "Function": "Use heirarchical relationships", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Kanvas", - "Theme (also: Keychain Name)": "Kanvas" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Design Patterns", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "This permission grants the user the ability to undo/redo any action in done in Kanvas", - "Free Comparison Tier": "x", - "Function": "Undo or Redo", - "Pricing page?": "X", - "Subscription Tier": "Team", - "Tech": "Kanvas", - "Theme (also: Keychain Name)": "Kanvas" - } - }, - { - "pricing_page": "true", - "documentation": "https://docs.layer5.io/kanvas/designer/whiteboarding/", - "entire_row": { - "Category": "Design Patterns", - "Documented?": "https://docs.layer5.io/kanvas/designer/whiteboarding/", - "Enterprise Comparison Tier": "", - "Feature": "Ability to freeform draw any shapes, draw edges", - "Free Comparison Tier": "x", - "Function": "Whiteboarding", - "Pricing page?": "X", - "Subscription Tier": "Free", - "Tech": "Kanvas", - "Theme (also: Keychain Name)": "Kanvas" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Visual Design", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Drag-n-drop cloud native infrastructure designer to configure, model, and deploy your workloads", - "Free Comparison Tier": "x", - "Function": "Visual Design", - "Pricing page?": "X", - "Subscription Tier": "Free", - "Tech": "Kanvas", - "Theme (also: Keychain Name)": "Kanvas" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Design Review", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "In-line commenting. Threaded discussions. Notifications w/user mentions. Silence notifications. Resolve and reopen comments. Comment history.", - "Free Comparison Tier": "", - "Function": "Collaborative Design Review", - "Pricing page?": "x", - "Subscription Tier": "TeamDesigner", - "Tech": "Kanvas", - "Theme (also: Keychain Name)": "Kanvas" - } - }, - { - "documentation": "https://docs.layer5.io/kanvas/visualizer/visualizer-views/", - "entire_row": { - "Category": "Operator", - "Documented?": "https://docs.layer5.io/kanvas/visualizer/visualizer-views/", - "Enterprise Comparison Tier": "x", - "Feature": "See all views withing a workspace", - "Free Comparison Tier": "", - "Function": "View Views", - "Pricing page?": "", - "Subscription Tier": "TeamOperator", - "Tech": "Server", - "Theme (also: Keychain Name)": "Kanvas" - } - }, - { - "documentation": "https://docs.layer5.io/kanvas/visualizer/visualizer-views/#4-delete-a-view", - "entire_row": { - "Category": "Operator", - "Documented?": "https://docs.layer5.io/kanvas/visualizer/visualizer-views/#4-delete-a-view", - "Enterprise Comparison Tier": "x", - "Feature": "Dissolve environment and all connection memberships. Leave associated resources intact.", - "Free Comparison Tier": "", - "Function": "Delete View", - "Pricing page?": "", - "Subscription Tier": "TeamOperator", - "Tech": "Server", - "Theme (also: Keychain Name)": "Kanvas" - } - }, - { - "documentation": "https://docs.layer5.io/kanvas/visualizer/visualizer-views/#5-export-a-view", - "entire_row": { - "Category": "Operator", - "Documented?": "https://docs.layer5.io/kanvas/visualizer/visualizer-views/#5-export-a-view", - "Enterprise Comparison Tier": "x", - "Feature": "Export views to JSON format", - "Free Comparison Tier": "", - "Function": "Export views", - "Pricing page?": "", - "Subscription Tier": "TeamOperator", - "Tech": "Server", - "Theme (also: Keychain Name)": "Kanvas" - } - }, - { - "documentation": "https://docs.layer5.io/kanvas/visualizer/visualizer-views/#3-share-a-view", - "entire_row": { - "Category": "Operator", - "Documented?": "https://docs.layer5.io/kanvas/visualizer/visualizer-views/#3-share-a-view", - "Enterprise Comparison Tier": "x", - "Feature": "Share Views", - "Free Comparison Tier": "", - "Function": "Share Views", - "Pricing page?": "", - "Subscription Tier": "TeamOperator", - "Tech": "Kanvas", - "Theme (also: Keychain Name)": "Kanvas" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Operator", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Direct terminal access to one ore more pods/containers simultaneously. Integrated experience.", - "Free Comparison Tier": "", - "Function": "Web-based Terminal", - "Pricing page?": "X", - "Subscription Tier": "TeamOperator", - "Tech": "Kanvas", - "Theme (also: Keychain Name)": "Kanvas" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Operator", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Real-time resource metrics.", - "Free Comparison Tier": "", - "Function": "Standard Events and Metrics", - "Pricing page?": "X", - "Subscription Tier": "TeamOperator", - "Tech": "", - "Theme (also: Keychain Name)": "Kanvas" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Load Generation", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Single Load Generator: Support testing multiple endpoints simultaneously.", - "Free Comparison Tier": "", - "Function": "Load Generation", - "Pricing page?": "X", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Performance Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Load Generation", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Multiple Meshery Servers or Meshery Adapters generating load, collecting and coalescing results into a single report.", - "Free Comparison Tier": "", - "Function": "Distributed Load Generator", - "Pricing page?": "X", - "Subscription Tier": "Team", - "Tech": "GetNighthawk", - "Theme (also: Keychain Name)": "Performance Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Performance Profiles", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Share performance profiles and test results with individual users or teams.", - "Free Comparison Tier": "", - "Function": "Performance Profiles", - "Pricing page?": "X", - "Subscription Tier": "Team", - "Tech": "Cloud", - "Theme (also: Keychain Name)": "Performance Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Comparative Testing", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Historical views: Infrastructure-centric", - "Free Comparison Tier": "", - "Function": "Comparative Testing", - "Pricing page?": "X", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Performance Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Comparative Testing", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Detect real-time anomalies.", - "Free Comparison Tier": "", - "Function": "Comparative Testing", - "Pricing page?": "X", - "Subscription Tier": "Team", - "Tech": "Cloud", - "Theme (also: Keychain Name)": "Performance Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Continuous Quality of Service Monitoring", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Experience uninterrupted oversight of your service quality with our Continuous Quality of Service Monitoring.", - "Free Comparison Tier": "", - "Function": "Continuous Quality of Service Monitoring", - "Pricing page?": "X", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Performance Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "MeshMark", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Identify the cost of a specific network function.", - "Free Comparison Tier": "", - "Function": "MeshMark", - "Pricing page?": "X", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Performance Management" - } - }, - { - "documentation": "https://docs.layer5.io/cloud/security/sessions/#what-sessions-are", - "entire_row": { - "Category": "Sessions", - "Documented?": "https://docs.layer5.io/cloud/security/sessions/#what-sessions-are", - "Enterprise Comparison Tier": "x", - "Feature": "", - "Free Comparison Tier": "x", - "Function": "View Sessions", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "", - "Theme (also: Keychain Name)": "Security Management" - } - }, - { - "documentation": "https://docs.layer5.io/cloud/security/tokens/#creating-tokens", - "entire_row": { - "Category": "Tokens", - "Documented?": "https://docs.layer5.io/cloud/security/tokens/#creating-tokens", - "Enterprise Comparison Tier": "x", - "Feature": "", - "Free Comparison Tier": "", - "Function": "Create Token", - "Pricing page?": "", - "Subscription Tier": "Enterprise", - "Tech": "", - "Theme (also: Keychain Name)": "Security Management" - } - }, - { - "documentation": "https://docs.layer5.io/cloud/security/keys/", - "entire_row": { - "Category": "Keys", - "Documented?": "https://docs.layer5.io/cloud/security/keys/", - "Enterprise Comparison Tier": "x", - "Feature": "", - "Free Comparison Tier": "", - "Function": "View Keys", - "Pricing page?": "", - "Subscription Tier": "Enterprise", - "Tech": "", - "Theme (also: Keychain Name)": "Security Management" - } - }, - { - "documentation": "https://docs.layer5.io/cloud/spaces/workspaces/", - "entire_row": { - "Category": "Workspace", - "Documented?": "https://docs.layer5.io/cloud/spaces/workspaces/", - "Enterprise Comparison Tier": "x", - "Feature": "See all workspaces within an organization", - "Free Comparison Tier": "x", - "Function": "View Workspace", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "", - "Theme (also: Keychain Name)": "Workspace Management" - } - }, - { - "documentation": "https://docs.layer5.io/cloud/spaces/environments/#deleting-an-environment", - "entire_row": { - "Category": "Environments", - "Documented?": "https://docs.layer5.io/cloud/spaces/environments/#deleting-an-environment", - "Enterprise Comparison Tier": "x", - "Feature": "Dissolve environment and all connection memberships. Leave associated resources intact.", - "Free Comparison Tier": "", - "Function": "Delete Environment", - "Pricing page?": "", - "Subscription Tier": "Enterprise", - "Tech": "", - "Theme (also: Keychain Name)": "Workspace Management" - } - }, - { - "documentation": "https://docs.layer5.io/cloud/getting-started/creating-a-design-from-templete.md/", - "entire_row": { - "Category": "Catalog", - "Documented?": "https://docs.layer5.io/cloud/getting-started/creating-a-design-from-templete.md/", - "Enterprise Comparison Tier": "", - "Feature": "Clone any item from catalog", - "Free Comparison Tier": "", - "Function": "Clone Catalog Item", - "Pricing page?": "", - "Subscription Tier": "", - "Tech": "", - "Theme (also: Keychain Name)": "Catalog Management" - } - }, - { - "pricing_page": "true", - "documentation": "https://docs.layer5.io/cloud/getting-started/support/#contacting-support", - "entire_row": { - "Category": "Community Support", - "Documented?": "https://docs.layer5.io/cloud/getting-started/support/#contacting-support", - "Enterprise Comparison Tier": "", - "Feature": "Get help with most of your Meshery questions and issues in our Community Forum.", - "Free Comparison Tier": "", - "Function": "Community Support", - "Pricing page?": "X", - "Subscription Tier": "Free", - "Tech": "", - "Theme (also: Keychain Name)": "Support and Deployment" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Standard Support", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Layer5 Support can help you troubleshoot issues you run into while using Meshery. Get support via the web.", - "Free Comparison Tier": "", - "Function": "Standard Support", - "Pricing page?": "X", - "Subscription Tier": "TeamDesigner", - "Tech": "", - "Theme (also: Keychain Name)": "Support and Deployment" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Premium and Premium Plus Support", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "With Premium, get a 30-minute SLA and 24/7 web and phone support. With Premium Plus, get everything in Premium plus your own Support Account Manager and more.", - "Free Comparison Tier": "", - "Function": "Premium and Premium Plus Support", - "Pricing page?": "X", - "Subscription Tier": "Enterprise", - "Tech": "", - "Theme (also: Keychain Name)": "Support and Deployment" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Self-hosted Deployment", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Self-hosted Layer5 Cloud for on-prem appliances or self-managed cloud tenants. Keep your Kanvas designs internal to your workplace. Get remote support from Layer5 when you need it.", - "Free Comparison Tier": "", - "Function": "Self-hosted Deployment", - "Pricing page?": "X", - "Subscription Tier": "Enterprise", - "Tech": "", - "Theme (also: Keychain Name)": "Support and Deployment" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Phone Support", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Layer5 Support can help you troubleshoot issues you run into while using Meshery. Get support via phone.", - "Free Comparison Tier": "", - "Function": "Phone Support", - "Pricing page?": "X", - "Subscription Tier": "TeamDesigner", - "Tech": "", - "Theme (also: Keychain Name)": "Support and Deployment" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Invoice Billing", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "", - "Free Comparison Tier": "", - "Function": "Pay bills via invoice, rather than using your credit card.", - "Pricing page?": "X", - "Subscription Tier": "Enterprise", - "Tech": "", - "Theme (also: Keychain Name)": "Support and Deployment" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Screenshots", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Capture and share visual snapshots of your work with ease using our Screenshots feature.", - "Free Comparison Tier": "", - "Function": "Screenshots", - "Pricing page?": "X", - "Subscription Tier": "Free", - "Tech": "WASM", - "Theme (also: Keychain Name)": "Digital Experience Management" - } - }, - { - "documentation": "https://docs.layer5.io/cloud/identity/users/notification-preferences/", - "entire_row": { - "Category": "Notification Center", - "Documented?": "https://docs.layer5.io/cloud/identity/users/notification-preferences/", - "Enterprise Comparison Tier": "", - "Feature": "", - "Free Comparison Tier": "", - "Function": "Events: Reporting of asynchronous events.", - "Pricing page?": "", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Incident Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Notification Center", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Consolidate all important updates, alerts, and messages in one centralized hub, ensuring you never miss a critical communication or task.", - "Free Comparison Tier": "", - "Function": "Notification Center", - "Pricing page?": "X", - "Subscription Tier": "Free", - "Tech": "Server", - "Theme (also: Keychain Name)": "Incident Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Audit Trail", - "Documented?": "", - "Enterprise Comparison Tier": "x", - "Feature": "Detailed accounting of user activity. Historical record or each action taken.", - "Free Comparison Tier": "", - "Function": "Audit Trail", - "Pricing page?": "X", - "Subscription Tier": "Enterprise", - "Tech": "", - "Theme (also: Keychain Name)": "Incident Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Alert Generation", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Dismiss individual; Dismiss bulk.", - "Free Comparison Tier": "", - "Function": "Alert Generation", - "Pricing page?": "X", - "Subscription Tier": "Free", - "Tech": "Server UI", - "Theme (also: Keychain Name)": "Incident Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Calendaring", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Get integration with GSuite and integration with Microsoft Outlook.", - "Free Comparison Tier": "", - "Function": "Calendaring", - "Pricing page?": "X", - "Subscription Tier": "Team", - "Tech": "Golang", - "Theme (also: Keychain Name)": "Incident Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Traffic Replay", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Visual event replay in Kanvas", - "Free Comparison Tier": "", - "Function": "Traffic Replay", - "Pricing page?": "X", - "Subscription Tier": "Enterprise", - "Tech": "Postgres", - "Theme (also: Keychain Name)": "Incident Management" - } - }, - { - "pricing_page": "true", - "entire_row": { - "Category": "Notification Integrations", - "Documented?": "", - "Enterprise Comparison Tier": "", - "Feature": "Access a variety of third-party applications, right from Kanvas. Send a message to Slack, identify an on-duty team to page, or raise an alarm in Datadog.", - "Free Comparison Tier": "", - "Function": "Notification Integrations", - "Pricing page?": "X", - "Subscription Tier": "Enterprise", - "Tech": "Cloud", - "Theme (also: Keychain Name)": "Incident Management" - } - } -] \ No newline at end of file diff --git a/layouts/docs/baseof.html b/layouts/docs/baseof.html index 25e3cb6b..b7b5327b 100644 --- a/layouts/docs/baseof.html +++ b/layouts/docs/baseof.html @@ -1,36 +1,43 @@ - - - {{ partial "head.html" . }} - - -
{{ partial "navbar.html" . }}
-
-
-
- - -
- {{ partial "version-banner.html" . }} {{ if not - .Site.Params.ui.breadcrumb_disable }}{{ partial "breadcrumb.html" . - }}{{ end }} {{ block "main" . }}{{ end }} -
-
+ + + + {{ partial "head.html" . }} + + + +
{{ partial "navbar.html" . }}
+
+
+
+ + +
+ {{ partial "version-banner.html" . }} + + {{ block "main" . }}{{ end }} +
- {{ partial "footer.html" . }}
- {{ partial "scripts.html" . }} {{ partial "image-modal.html" . }} - - + {{ partial "footer.html" . }} +
+ {{ partial "scripts.html" . }} + {{ partial "image-modal.html" . }} + + + \ No newline at end of file diff --git a/layouts/docs/list.html b/layouts/docs/list.html index 2c0a6adf..a93af80a 100644 --- a/layouts/docs/list.html +++ b/layouts/docs/list.html @@ -1,25 +1,24 @@ {{ define "main" }}

{{ .Title }}

- {{ with .Params.description }}
{{ . | markdownify }}
{{ end }} + {{ with .Params.description }}
{{ . | markdownify }}
{{ end }} {{ with .Params.plan }} - {{ partial "plan-info.html" (dict "plan" .) }} - {{ end }} - {{- partial "feature-info.html" . -}} + {{ partial "plan-info.html" (dict "plan" .) }} + {{ end }} {{ .Content }} - {{ partial "section-index.html" . -}} - + {{ partial "section-index.html" . -}} + {{ if (.Site.Config.Services.Disqus.Shortname) -}} -
- {{- partial "disqus-comment.html" . -}} +
+ {{- partial "disqus-comment.html" . -}} {{ end -}}{{ partial "pager.html" . }} {{ partial "page-meta-lastmod.html" . -}} {{ partial "recent-discussions.html" . -}}
-{{ end -}} +{{ end -}} \ No newline at end of file diff --git a/layouts/docs/single.html b/layouts/docs/single.html index b8ae29bb..589654ae 100644 --- a/layouts/docs/single.html +++ b/layouts/docs/single.html @@ -1,7 +1,6 @@ {{ define "main" }} -{{ partial "feature-info.html" . }} {{ .Render "content" }}
-{{ partial "recent-discussions.html" . }} + {{ partial "recent-discussions.html" . }}
-{{ end }} +{{ end }} \ No newline at end of file diff --git a/layouts/partials/feature-info.html b/layouts/partials/feature-info.html index 0d6cb49e..e97c0587 100644 --- a/layouts/partials/feature-info.html +++ b/layouts/partials/feature-info.html @@ -1,55 +1,64 @@ {{ $currentPage := .Page.Permalink }} -{{ $features := .Site.Data.features }} +{{ $features := .Site.Data.feature_data }} {{ if not $features }} -{{ $features = getJSON "features.json" }} +{{ $features = getJSON "feature_data.json" }} {{ end }} -{{ if $features }} -{{ $groupedFeatures := dict }} + +{{ $featuresByUrl := dict }} {{ range $features }} -{{ $docUrl := .documentation | default "" }} +{{ $docUrl := .docs | default "" }} +{{ if ne $docUrl "" }} {{ $cleanDocUrl := (index (split $docUrl "#") 0) }} -{{ $currentPagePath := path.Clean (urls.Parse $currentPage).Path }} -{{ $cleanDocUrlPath := path.Clean (urls.Parse $cleanDocUrl).Path }} -{{ if eq $cleanDocUrlPath $currentPagePath }} -{{ $tier := index .entire_row "Subscription Tier" }} -{{ $feature := index .entire_row "Feature" }} -{{ $currentFeatures := index $groupedFeatures $tier | default "" }} -{{ $groupedFeatures = merge $groupedFeatures (dict $tier (printf "%s%s%s" $currentFeatures (cond (eq $currentFeatures "") "" ", ") $feature)) }} +{{ $existingFeatures := slice }} +{{ with index $featuresByUrl $cleanDocUrl }} +{{ if reflect.IsSlice . }} +{{ $existingFeatures = . }} +{{ else if reflect.IsMap . }} +{{ $existingFeatures = slice . }} +{{ end }} +{{ end }} + +{{ $updatedFeatures := $existingFeatures }} +{{ $updatedFeatures = $updatedFeatures | append . }} +{{ $featuresByUrl = merge $featuresByUrl (dict $cleanDocUrl $updatedFeatures) }} {{ end }} {{ end }} -{{ if ne (len $groupedFeatures) 0 }} -{{ $maxTier := "" }} -{{ $maxLength := 0 }} -{{ range $tier, $features := $groupedFeatures }} -{{ $length := len (split $features ", ") }} -{{ if gt $length $maxLength }} -{{ $maxTier = $tier }} -{{ $maxLength = $length }} +{{ range $docUrl, $urlFeatures := $featuresByUrl }} +{{ $currentPagePath := path.Clean (urls.Parse $currentPage).Path }} +{{ $cleanDocUrlPath := path.Clean (urls.Parse $docUrl).Path }} + +{{ if eq $cleanDocUrlPath $currentPagePath }} +{{ $tiers := slice }} +{{ range $feature := $urlFeatures }} +{{ if $feature.comparisonTiers.free }} +{{ $tiers = $tiers | append "Free" }} +{{ end }} +{{ if $feature.comparisonTiers.teamDesigner }} +{{ $tiers = $tiers | append "Team Designer" }} +{{ end }} +{{ if $feature.comparisonTiers.teamOperator }} +{{ $tiers = $tiers | append "Team Operator" }} {{ end }} +{{ if $feature.comparisonTiers.enterprise }} +{{ $tiers = $tiers | append "Enterprise" }} {{ end }} +{{ end }} + +{{ $uniqueTiers := uniq $tiers }} +{{ if len $uniqueTiers }}
-

Who can use this feature

-
- Icon - Supported on {{ $maxTier }} Plan -
- {{ if gt (len $groupedFeatures) 1 }} -
- Add-ons: - {{ $first := true }} - {{ range $tier, $features := $groupedFeatures }} - {{ if ne $tier $maxTier }} - {{ if not $first }}, {{ end }} - {{ $first = false }} - {{ $features }} [{{ $tier }}] - {{ end }} - {{ end }} + - {{ end }}
{{ end }} {{ end }} +{{ end }} \ No newline at end of file