tftsr-devops_investigation/TICKET-freelens-feature-inventory.md
Shaun Arman 7a6a47a21b
Some checks failed
PR Review Automation / review (pull_request) Has been cancelled
Test / frontend-tests (pull_request) Successful in 1m40s
Test / frontend-typecheck (pull_request) Successful in 1m43s
Test / rust-fmt-check (pull_request) Successful in 10m59s
Test / rust-clippy (pull_request) Successful in 12m55s
Test / rust-tests (pull_request) Successful in 14m30s
test(kube): fix stale nav section assertions + add research docs
KubernetesPage.test.tsx had two stale section heading assertions from
before the nav restructure:
- "Services & Networking" → "Network"
- "Config & Storage" → "Config" + "Storage" (now separate sections)
Also renamed the matching it() description for accuracy.

eslint.config.js: add .claude/ to ignores (session memory dir).

Adds FreeLens feature inventory (md + json) generated during
gap analysis research for this feature parity work.
2026-06-08 20:48:02 -05:00

18 KiB

FreeLens Feature Inventory — Complete Analysis

Project: FreeLens (https://github.com/freelensapp/freelens) License: MIT License (Copyright 2024-2026 Freelens Authors; Copyright 2022 OpenLens Authors) Description: Free and open-source Kubernetes IDE, community fork of Open Lens v5 Analysis Date: 2026-06-08 Repository Commit: main branch (latest)


Executive Summary

FreeLens is a production-ready, feature-complete Kubernetes desktop IDE built on Electron with a comprehensive resource management interface. The application provides extensive coverage of Kubernetes API resources with dedicated UI components, context menus, and detail views for nearly all standard Kubernetes objects.

Key Findings:

  • 13 main navigation categories with 60+ resource types
  • Comprehensive pod management: shell/exec, logs, attach, edit, delete, force delete, force finalize
  • Full workload lifecycle: scale, restart, edit, delete for Deployments, StatefulSets, DaemonSets
  • Helm chart integration: install, upgrade, rollback, delete
  • Port forwarding UI: start/stop/edit/open in browser
  • Terminal integration: built-in terminal with kubectl and node shell access
  • Resource metrics: CPU/memory usage visualization (when metrics-server available)
  • YAML editing: Monaco editor with syntax highlighting
  • RBAC management: full support for roles, bindings, service accounts
  • Extension ecosystem: plugin architecture for custom functionality

Left Navigation Structure (Complete)

1. Favorites

  • User-bookmarked resources for quick access

2. Cluster Overview

  • Cluster-wide dashboard with health metrics

3. Nodes

  • Node list and details
  • Context Menu Actions:
    • Shell (node shell access via SSH or similar)
    • Cordon/Uncordon
    • Drain (with confirmation)
    • Edit
    • Delete

4. Workloads

Parent category containing:

4.1 Overview

  • Aggregated workload dashboard

4.2 Pods

  • Pod list with status, IP, node, age
  • Context Menu Actions:
    • Shell (per-container with auto-detection: bash/ash/sh, PowerShell for Windows nodes)
    • Logs (per-container, including init and ephemeral containers)
    • Attach (kubectl attach -it)
    • Edit (YAML editor)
    • Delete (graceful)
    • Force Delete (skip grace period, only for Running/Pending phases)
    • Force Finalize (remove finalizers when stuck)

4.3 Deployments

  • Context Menu Actions:
    • Scale (replica count dialog)
    • Restart (rolling restart)
    • Edit
    • Delete

4.4 StatefulSets

  • Context Menu Actions:
    • Restart
    • Edit
    • Delete

4.5 DaemonSets

  • Context Menu Actions:
    • Restart
    • Edit
    • Delete

4.6 Jobs

  • Context Menu Actions:
    • Edit
    • Delete

4.7 CronJobs

  • Context Menu Actions:
    • Edit
    • Delete

4.8 ReplicaSets

  • List view (typically managed by Deployments)

4.9 ReplicationControllers

  • Legacy replication support

5. Config

Parent category containing:

5.1 ConfigMaps

  • Context Menu Actions:
    • Edit
    • Delete

5.2 Secrets

  • Context Menu Actions:
    • Edit (with data obfuscation)
    • Delete

5.3 Horizontal Pod Autoscalers (HPA)

  • HPA configuration and status

5.4 Vertical Pod Autoscalers (VPA)

  • VPA recommendations and settings

5.5 Resource Quotas

  • Namespace quota limits

5.6 Limit Ranges

  • Default resource limits

5.7 Priority Classes

  • Pod scheduling priority definitions

5.8 Runtime Classes

  • Container runtime selection

5.9 Pod Disruption Budgets

  • PDB configuration

5.10 Leases

  • Coordination.k8s.io lease objects

5.11 Mutating Webhook Configurations

  • Admission webhook config

5.12 Validating Webhook Configurations

  • Validation webhook config

6. Network

Parent category containing:

6.1 Services

  • Service list and endpoints
  • Context Menu Actions:
    • Edit
    • Delete

6.2 Ingresses

  • Ingress rules and backends

6.3 Ingress Classes

  • IngressClass definitions

6.4 Network Policies

  • Network segmentation rules

6.5 Endpoints

  • Service endpoint slices

6.6 Endpoint Slices

  • EndpointSlice objects

6.7 Port Forwards

  • Active port-forward management
  • Context Menu Actions:
    • Open (in browser, for HTTP/HTTPS)
    • Edit (change local/remote port, protocol)
    • Start
    • Stop
    • Delete

7. Storage

Parent category containing:

7.1 Persistent Volumes

  • Cluster-wide PV list

7.2 Persistent Volume Claims

  • PVC list with binding status

7.3 Storage Classes

  • Dynamic provisioning configuration

8. Namespaces

  • Namespace list and quota overview
  • Namespace filtering (global namespace selector in UI)

9. Events

  • Cluster events stream with filtering

10. Helm

Parent category containing:

10.1 Charts

  • Helm chart repository browser
  • Search across configured repositories
  • Chart Actions:
    • Install (opens install dialog with values editor)

10.2 Releases

  • Deployed Helm releases
  • Context Menu Actions:
    • Upgrade (opens upgrade dialog)
    • Rollback (to previous revision)
    • Delete

11. User Management (RBAC)

Parent category containing:

11.1 Service Accounts

  • Context Menu Actions:
    • Edit
    • Delete

11.2 Roles

  • Namespace-scoped RBAC roles

11.3 Role Bindings

  • Role-to-subject mappings

11.4 Cluster Roles

  • Cluster-wide RBAC roles

11.5 Cluster Role Bindings

  • ClusterRole-to-subject mappings

12. Custom Resources

  • Custom Resource Definitions (CRDs)
  • Custom Resources (instances of CRDs)
  • Dynamic UI generation for any CRD installed in cluster

13. Pod Security Policies (PSP)

  • Legacy PSP support (deprecated in K8s 1.25+)

Detail Views

All resources support a detail drawer (right-side panel) showing:

Pod Detail View

  • Status (Running, Pending, Failed, etc.)
  • Node (clickable link to node)
  • Host IPs (multi-IP support)
  • Pod IPs (IPv4/IPv6)
  • Service Account (clickable link)
  • Priority Class (clickable link)
  • QoS Class (BestEffort, Burstable, Guaranteed)
  • Runtime Class (clickable link)
  • Termination Grace Period
  • Node Selector (labels)
  • Tolerations (with key/value/effect)
  • Affinity/Anti-Affinity (node and pod affinity rules)
  • Resource Requests (CPU, memory, ephemeral-storage)
  • Resource Limits (CPU, memory)
  • Secrets (mounted secrets with clickable links)
  • Conditions (PodScheduled, Initialized, ContainersReady, Ready)
  • Init Containers (with status, restart count, state)
  • Containers (with status, restart count, image, ports, env vars, volume mounts, liveness/readiness probes)
  • Ephemeral Containers (debug containers)
  • Volumes (ConfigMaps, Secrets, PVCs, EmptyDir, HostPath, etc.)

Other Resource Detail Views

  • Deployment: replicas, strategy, conditions, selector, pod template
  • Service: type, cluster IP, external IP, ports, selector, endpoints
  • ConfigMap: data key-value pairs
  • Secret: data keys (values obfuscated)
  • Node: conditions, addresses, capacity, allocatable, taints, images
  • PVC: access modes, storage class, volume name, capacity
  • Ingress: rules, TLS, backends

All detail views include:

  • Metadata section (name, namespace, labels, annotations, creation time, resource version, UID)
  • YAML view (Monaco editor with syntax highlighting)
  • Events related to the resource

Dock Panel (Bottom Panel)

The dock is a tabbed bottom panel supporting multiple simultaneous views:

Terminal

  • Node Shell: SSH or similar access to cluster nodes
  • Pod Shell: kubectl exec -it with container selection
  • Pod Attach: kubectl attach -it for attaching to running container
  • Custom Commands: run arbitrary kubectl commands
  • Multi-tab support: multiple shells in separate tabs
  • Shell Detection: auto-selects bash/ash/sh on Linux, PowerShell on Windows nodes

Logs

  • Pod Logs: per-container log streaming
  • Container Selection: dropdown for multi-container pods (including init and ephemeral)
  • Follow Mode: tail -f equivalent
  • Timestamps: toggle timestamp display
  • Previous Logs: view logs from crashed/restarted containers
  • Search/Filter: text search within logs
  • Download: save logs to file
  • Wrap Lines: toggle line wrapping

Edit Resource

  • YAML Editor: Monaco-based syntax highlighting
  • Apply Changes: update resource via kubectl apply
  • Validation: client-side YAML validation
  • Diff View: show changes before applying

Create Resource

  • YAML Editor: create new resources from scratch
  • Templates: common resource templates
  • Multi-resource: create multiple resources from YAML with --- separator

Install Chart

  • Chart Selection: from Helm repository browser
  • Values Editor: YAML editor for values.yaml
  • Release Name: custom release name
  • Namespace Selection: target namespace
  • Preview: dry-run before install

Upgrade Chart

  • Current Values: shows existing values
  • New Version Selection: dropdown of available chart versions
  • Values Diff: highlight changes from current release
  • Revision History: list previous revisions

Special Features

Metrics & Resource Usage

  • Pod Metrics: CPU and memory usage graphs (requires metrics-server)
  • Node Metrics: cluster-wide resource utilization
  • Container Metrics: per-container CPU/memory in detail view
  • Historical Charts: time-series graphs for resource usage

Namespace Filtering

  • Global Namespace Selector: filters all views to selected namespace(s)
  • Multi-namespace Selection: view resources across multiple namespaces
  • All Namespaces: cluster-wide view

Search & Filtering

  • Global Search: search across all resource types
  • Per-View Search: resource-specific search with multiple field filtering
  • Label Filtering: filter by labels and annotations

Context Menu Behavior

  • Toolbar Mode: icons with tooltips in detail view header
  • Table Row Menu: three-dot menu in list views
  • Right-click Context Menu: anywhere on resource row

Delete Modes (Intelligent)

FreeLens implements intelligent delete mode selection based on resource state:

Pod Deletion

  • Delete (graceful): default for all phases
  • Force Delete (grace period = 0): only shown for Running/Pending pods with terminationGracePeriodSeconds > 0
  • Force Finalize (remove finalizers): shown when pod has deletionTimestamp AND finalizers

Logic prevents showing "Force Delete" for terminal phases (Succeeded, Failed, Unknown) where it would have no effect.

Generic Resource Deletion

  • Delete: default
  • Force Finalize: only when resource has deletionTimestamp AND finalizers

Confirmation Dialogs

All destructive actions (delete, drain, restart) require user confirmation with resource name displayed.


Kubernetes API Coverage

FreeLens supports all standard Kubernetes API groups:

Core (v1)

  • Pods, Services, Endpoints, ConfigMaps, Secrets, Namespaces, Nodes, PersistentVolumes, PersistentVolumeClaims, ServiceAccounts, Events, ResourceQuotas, LimitRanges

Apps (apps/v1)

  • Deployments, StatefulSets, DaemonSets, ReplicaSets, ReplicationControllers

Batch (batch/v1, batch/v1beta1)

  • Jobs, CronJobs

Networking (networking.k8s.io/v1)

  • Ingresses, IngressClasses, NetworkPolicies

Storage (storage.k8s.io/v1)

  • StorageClasses, VolumeAttachments

RBAC (rbac.authorization.k8s.io/v1)

  • Roles, RoleBindings, ClusterRoles, ClusterRoleBindings

Autoscaling (autoscaling/v1, autoscaling/v2)

  • HorizontalPodAutoscalers, VerticalPodAutoscalers

Policy (policy/v1, policy/v1beta1)

  • PodDisruptionBudgets, PodSecurityPolicies

Admission (admissionregistration.k8s.io/v1)

  • MutatingWebhookConfigurations, ValidatingWebhookConfigurations

Scheduling (scheduling.k8s.io/v1)

  • PriorityClasses

Node (node.k8s.io/v1)

  • RuntimeClasses

Coordination (coordination.k8s.io/v1)

  • Leases

Discovery (discovery.k8s.io/v1)

  • EndpointSlices

Custom Resources

  • Full CRD support with dynamic UI generation

Helm

  • Charts, Releases (via Helm API, not native K8s)

Extension System

FreeLens supports extensions via a plugin API:

  • Custom Pages: add new sidebar items and routes
  • Custom Menus: inject menu items into resource context menus
  • Custom Resource Views: override or enhance detail views
  • Protocol Handlers: register custom URL schemes
  • Preferences: add extension settings to preferences UI

Extensions are TypeScript/JavaScript modules loaded at runtime.


Comparison to TFTSR Requirements

Based on the TFTSR project's needs for Kubernetes cluster management, FreeLens provides:

Strengths

Complete resource coverage: All K8s API objects supported Shell execution: Built-in terminal with pod exec and node shell Log streaming: Real-time log viewing with container selection YAML editing: Monaco editor with validation Port forwarding: Full UI for managing forwards Helm integration: Chart install, upgrade, rollback RBAC management: Full RBAC resource support Extension API: Customizable via plugins Multi-cluster: Supports multiple kubeconfig contexts Metrics: Resource usage visualization (when metrics-server available) Open source: MIT licensed, can be forked/customized

Potential Gaps for TFTSR

⚠️ No AI integration: FreeLens is a pure Kubernetes IDE, no AI/ML features ⚠️ No RCA/triage features: No incident management or root cause analysis ⚠️ No PII detection: Standard K8s IDE, no data privacy features ⚠️ No audit logging: No built-in audit trail (relies on K8s audit logs) ⚠️ Electron-based: Desktop app, not web-based (may not fit deployment model) ⚠️ No integrations: No Confluence, ServiceNow, ADO connectors

Feature Parity Opportunities

If building TFTSR's K8s management UI, FreeLens demonstrates best practices for:

  • Resource action menus: Comprehensive context menus with confirmation flows
  • Detail views: Structured drawer layout with expandable sections
  • Intelligent delete modes: State-aware action availability
  • Terminal integration: Seamless kubectl exec and attach
  • Log viewer: Feature-rich log streaming with filters
  • Port forward UI: Start/stop/edit/open workflow
  • Helm UI: Chart browser, install wizard, upgrade/rollback flows

Technical Architecture Insights

Codebase Organization

  • Dependency Injection: Uses @ogre-tools/injectable for all services
  • State Management: MobX for reactive stores
  • Component Pattern: React with TypeScript, HOCs for injection
  • Menu System: Dynamic menu generation based on resource type and state
  • API Layer: Abstractions for kubectl, Helm API, metrics-server
  • Store Pattern: Separate stores for each resource type with watch API integration

Key Design Patterns

  1. KubeObjectMenu: Generic menu component that dynamically injects resource-specific menu items
  2. Sidebar Items: Injectable pattern for navigation tree construction
  3. Detail Views: Drawer-based detail panels with tabbed sections
  4. Dock System: Multi-tab bottom panel for logs, terminal, editors
  5. State-aware Actions: Action availability based on resource phase, deletion timestamp, finalizers

Menu Item Registration

Each resource type registers menu items via injectables:

  • pod-shell-menu.tsx: Shell action for pods
  • pod-logs-menu.tsx: Logs action for pods
  • deployment-menu.tsx: Scale and Restart for deployments
  • node-menu.tsx: Cordon, Uncordon, Drain for nodes

This modular approach allows easy extension without modifying core menu code.


Recommendations for TFTSR

1. Feature Parity Checklist

If implementing K8s management in TFTSR, prioritize:

  • Pod shell exec (with container selection)
  • Log streaming (with follow/timestamps/search)
  • YAML editor (with validation)
  • Delete modes (graceful, force, finalize based on state)
  • Port forwarding UI
  • Helm chart management
  • Resource detail views (structured drawer layout)
  • Namespace filtering
  • Metrics/resource usage (if metrics-server available)

2. Integration Points

TFTSR could integrate K8s management with:

  • AI Analysis: Use pod logs, events, describe output as context for AI triage
  • RCA Workflow: Link K8s resources to incident timeline
  • Audit Trail: Log all kubectl commands executed via UI
  • PII Detection: Scan logs and ConfigMaps before AI processing

3. Web vs Desktop

FreeLens is Electron-based. For TFTSR (likely Tauri web UI):

  • Pros: Can reuse architecture patterns, menu system, detail view layouts
  • Cons: Cannot directly fork FreeLens (Electron vs Tauri)
  • Approach: Study FreeLens UI/UX patterns, implement in React + Tauri with Rust backend

4. Licensing

MIT license allows:

  • Studying code for design patterns
  • Borrowing UI/UX concepts
  • Forking and modifying (with attribution)
  • Cannot claim FreeLens authors' copyright as your own

Sources

  1. FreeLens GitHub Repository. "freelensapp/freelens." GitHub, 2026-06-08. https://github.com/freelensapp/freelens
  2. FreeLens. "LICENSE." MIT License, 2024-2026. https://github.com/freelensapp/freelens/blob/main/LICENSE
  3. FreeLens. "KubeObjectMenu Component." TypeScript source, main branch. /packages/core/src/renderer/components/kube-object-menu/kube-object-menu.tsx
  4. FreeLens. "Pod Menu Actions." TypeScript source, main branch. /packages/core/src/renderer/components/node-pod-menu/
  5. FreeLens. "Sidebar Navigation." TypeScript source, main branch. /packages/core/src/common/sidebar-menu-items-starting-order.ts
  6. FreeLens. "Deployment, StatefulSet, DaemonSet Menus." TypeScript source, main branch. /packages/core/src/renderer/components/workloads-*/
  7. FreeLens. "Helm Release Menu." TypeScript source, main branch. /packages/core/src/renderer/components/helm-releases/release-menu.tsx
  8. FreeLens. "Port Forward Menu." TypeScript source, main branch. /packages/core/src/renderer/components/network-port-forwards/port-forward-menu.tsx

Analysis completed by: Claude Code (Technical Researcher) Format: Markdown ticket for project documentation