552 lines
18 KiB
Markdown
552 lines
18 KiB
Markdown
|
|
# 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
|