{"id":46096598,"url":"https://github.com/crossplane-contrib/crossview","last_synced_at":"2026-04-15T22:03:15.926Z","repository":{"id":327968894,"uuid":"1105915656","full_name":"crossplane-contrib/crossview","owner":"crossplane-contrib","description":"A standard Crossplane UI dashboard. ","archived":false,"fork":false,"pushed_at":"2026-04-13T17:37:01.000Z","size":98080,"stargazers_count":150,"open_issues_count":17,"forks_count":18,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-13T19:13:39.285Z","etag":null,"topics":["crossplane","crossplane-managed","gui","kubernetes","troubleshooting","ui"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/crossplane-contrib.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"docs/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":"docs/ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":"docs/MAINTAINERS.md","copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-28T10:46:29.000Z","updated_at":"2026-04-13T11:08:41.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/crossplane-contrib/crossview","commit_stats":null,"previous_names":["corpobit/crossview","crossplane-contrib/crossview"],"tags_count":43,"template":false,"template_full_name":null,"purl":"pkg:github/crossplane-contrib/crossview","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crossplane-contrib%2Fcrossview","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crossplane-contrib%2Fcrossview/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crossplane-contrib%2Fcrossview/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crossplane-contrib%2Fcrossview/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crossplane-contrib","download_url":"https://codeload.github.com/crossplane-contrib/crossview/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crossplane-contrib%2Fcrossview/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31861709,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"ssl_error","status_checked_at":"2026-04-15T15:24:39.138Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["crossplane","crossplane-managed","gui","kubernetes","troubleshooting","ui"],"created_at":"2026-03-01T19:00:31.988Z","updated_at":"2026-04-15T22:03:15.921Z","avatar_url":"https://github.com/crossplane-contrib.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"public/images/readme-logo.png\" alt=\"Crossview Logo\" width=\"200\"/\u003e\n  \n# Crossview - Crossplane Dashboard\n  \n  A modern React-based dashboard for managing and monitoring Crossplane resources in Kubernetes. Visualize, search, and manage your infrastructure-as-code with ease.\n\u003cbr\u003e\u003cbr\u003e\n\n  \u003ca href=\"https://join.slack.com/t/crossviewtalk/shared_invite/zt-3px5umxyo-G_tgt_3Eyt84nE1c1ykNTw\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Join%20Crossview%20on%20Slack-4A154B?style=for-the-badge\u0026logo=slack\u0026logoColor=white\" alt=\"Join on Slack\"/\u003e\n  \u003c/a\u003e\n  \n[![GitHub stars](https://img.shields.io/github/stars/crossplane-contrib/crossview?style=social)](https://github.com/crossplane-contrib/crossview)\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n  [![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/crossview)](https://artifacthub.io/packages/search?repo=crossview)\n\u003c/div\u003e\n\n![Crossview Dashboard](public/images/new-screeenshot.png)\n\n### Demo Video\n\n📹 [Watch Demo Video](https://github.com/crossplane-contrib/crossview/raw/main/public/images/demo-video.mov)\n\n## Table of Contents\n\n- [Features](#features)\n- [Getting Started](#getting-started)\n  - [Prerequisites](#prerequisites)\n  - [Install Dependencies](#install-dependencies)\n  - [Configuration](#configuration)\n  - [Development](#development)\n  - [Build](#build)\n  - [Production Mode](#production-mode)\n- [Backend API](#backend-api)\n- [Helm Chart](#helm-chart)\n  - [Add the Helm Repository](#add-the-helm-repository)\n  - [Install with Helm](#install-with-helm)\n- [Docker](#docker)\n  - [Build the Docker Image](#build-the-docker-image)\n  - [Run with Environment Variables](#run-with-environment-variables-recommended)\n  - [Run with Docker Compose](#run-with-docker-compose)\n- [Documentation](#documentation)\n- [Tech Stack](#tech-stack)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Features\n\n- **Real-Time Resource Watching**: Monitor any Kubernetes resource in real-time with event-driven updates using Kubernetes Informers\n- **Multi-Cluster Support**: Manage and switch between multiple Kubernetes contexts seamlessly\n- **Resource Visualization**: Browse and visualize Crossplane resources (providers, XRDs, compositions, claims, etc.)\n- **Resource Details**: View comprehensive resource information including status conditions, metadata, events, and relationships\n- **Modern UI**: Built with React and Chakra UI with dark mode support\n- **High Performance**: Backend built with Go and Gin framework for optimal performance\n- **WebSocket Support**: Real-time updates via WebSocket connections\n- **SSO Integration**: Support for OIDC and SAML authentication\n\n## Getting Started\n\n### Prerequisites\n\n- Node.js 20+ (for frontend development)\n- Go 1.24+ (for backend server)\n- PostgreSQL database (port 8920 by default, or set via `DB_PORT` env var)\n- Kubernetes config file at `~/.kube/config` (or set `KUBECONFIG` env var)\n\n### Install Dependencies\n\n```bash\nnpm install\n```\n\n### Configuration\n\nCopy the example config file and update with your settings:\n\n```bash\ncp config/config.yaml.example config/config.yaml\n```\n\nEdit `config/config.yaml` with your database credentials:\n- Database port: `8920` (or your port)\n- Database password: `password` (or your password)\n\nAlternatively, use environment variables (they take precedence):\n```bash\nexport DB_HOST=localhost\nexport DB_PORT=8920\nexport DB_NAME=crossview\nexport DB_USER=postgres\nexport DB_PASSWORD=password\n```\n\n### Development\n\n**Run Frontend and Backend separately:**\n\nTerminal 1 - Frontend:\n```bash\nnpm install\nnpm run dev\n```\n\nTerminal 2 - Backend (Go server):\n```bash\ncd crossview-go-server\ngo run main.go app:serve\n```\n\nThe app will be available at `http://localhost:5173` (frontend proxies `/api` requests to backend at `http://localhost:3001`)\n\n### Build\n\nBuild for production:\n\n```bash\nnpm run build\n```\n\nThis creates a `dist/` folder with the compiled frontend.\n\n### Production Mode\n\nTo run in production mode:\n\n1. Build the frontend:\n```bash\nnpm run build\n```\n\n2. Run the Go server (it will serve the frontend from the `dist/` folder):\n```bash\ncd crossview-go-server\ngo run main.go app:serve\n```\n\nThe app will be available at `http://localhost:3001` (both frontend and API)\n\n## Backend API\n\nThe backend API is built with Go using the Gin framework and runs on port 3001. It provides the following endpoints:\n\n- `GET /api/health` - Health check and connection status\n- `GET /api/contexts` - List available Kubernetes contexts\n- `GET /api/contexts/current` - Get current Kubernetes context\n- `POST /api/contexts/current` - Set Kubernetes context\n- `GET /api/resources?apiVersion=\u0026kind=\u0026namespace=\u0026context=` - List resources\n- `GET /api/resource?apiVersion=\u0026kind=\u0026name=\u0026namespace=\u0026context=` - Get single resource\n- `GET /api/events?kind=\u0026name=\u0026namespace=\u0026context=` - Get resource events\n- `GET /api/managed?context=` - List managed resources\n- `GET /api/watch` - WebSocket endpoint for real-time resource watching\n- `POST /api/auth/login` - User login\n- `POST /api/auth/logout` - User logout\n- `GET /api/auth/check` - Check authentication status\n\nThe backend uses the Go Kubernetes client with Informers for efficient, event-driven resource monitoring:\n\n**When running in a Kubernetes pod:**\n- Automatically uses service account token (no config file needed)\n- Accesses the same cluster the pod is running in\n- Uses `/var/run/secrets/kubernetes.io/serviceaccount/`\n\n**When running locally:**\n- `~/.kube/config` (default)\n- `KUBECONFIG` environment variable\n\nSee [Kubernetes Deployment Guide](docs/KUBERNETES_DEPLOYMENT.md) for deployment examples.\n\n## Helm Chart\n\nCrossview can be deployed using Helm, which simplifies Kubernetes deployment and management.\n\n### Add the Helm Repository\n\n```bash\nhelm repo add crossview https://crossplane-contrib.github.io/crossview\nhelm repo update\n```\n\n### Install with Helm\n\n```bash\nhelm install crossview crossview/crossview \\\n  --namespace crossview \\\n  --create-namespace \\\n  --set secrets.dbPassword=your-db-password \\\n  --set secrets.sessionSecret=$(openssl rand -base64 32)\n```\n\nFor more details, see:\n- [Helm Deployment Guide](docs/HELM_DEPLOYMENT.md) - Complete Helm deployment guide\n- [Helm Chart Reference](helm/crossview/README.md) - All available chart options\n\n## Docker\n\n### Build the Docker Image\n\n```bash\ndocker build -t ghcr.io/crossplane-contrib/crossview:latest .\n```\n\nImages are published to **GHCR** (`ghcr.io/crossplane-contrib/crossview`) on each release.\n\n### Run with Environment Variables (Recommended)\n\nEnvironment variables take precedence over config files:\n\n```bash\ndocker run -p 3001:3001 \\\n  -e DB_HOST=host.docker.internal \\\n  -e DB_PORT=8920 \\\n  -e DB_NAME=crossview \\\n  -e DB_USER=postgres \\\n  -e DB_PASSWORD=password \\\n  -e KUBECONFIG=/app/.kube/config \\\n  -e SESSION_SECRET=your-secret-key-here \\\n  -v ~/.kube/config:/app/.kube/config:ro \\\n  ghcr.io/crossplane-contrib/crossview:latest\n```\n\n### Run with Config File\n\nMount your config file as a volume:\n\n```bash\ndocker run -p 3001:3001 \\\n  -v $(pwd)/config/config.yaml:/app/config/config.yaml:ro \\\n  -e KUBECONFIG=/app/.kube/config \\\n  -v ~/.kube/config:/app/.kube/config:ro \\\n  ghcr.io/crossplane-contrib/crossview:latest\n```\n\n### Run with Docker Compose\n\nCreate a `docker-compose.yml`:\n\n```yaml\nservices:\n  crossview:\n    build: .\n    ports:\n      - \"3001:3001\"\n    environment:\n      - DB_HOST=postgres\n      - DB_PORT=5432\n      - DB_NAME=crossview\n      - DB_USER=postgres\n      - DB_PASSWORD=password\n      - KUBECONFIG=/app/.kube/config\n      - SESSION_SECRET=your-secret-key-here\n    volumes:\n      - ./config/config.yaml:/app/config/config.yaml:ro\n      - ~/.kube/config:/app/.kube/config:ro\n    depends_on:\n      - postgres\n\n  postgres:\n    image: postgres:latest\n    environment:\n      - POSTGRES_DB=crossview\n      - POSTGRES_USER=postgres\n      - POSTGRES_PASSWORD=password\n    ports:\n      - \"8920:5432\"\n    volumes:\n      - postgres_data:/var/lib/postgresql\n\nvolumes:\n  postgres_data:\n```\n\nThen run:\n```bash\ndocker-compose up\n```\n\n### Configuration Priority\n\nThe application loads configuration in this order (highest to lowest priority):\n1. **Environment variables** (e.g., `DB_HOST`, `DB_PORT`, `DB_PASSWORD`)\n2. **Config file** (`config/config.yaml` - mounted or included in image)\n3. **Default values** (fallback)\n\n### Required Environment Variables for Docker\n\n- `DB_HOST` - Database host (use `host.docker.internal` for local DB, or service name in Docker Compose)\n- `DB_PORT` - Database port (default: 5432)\n- `DB_NAME` - Database name\n- `DB_USER` - Database user\n- `DB_PASSWORD` - Database password\n- `KUBECONFIG` or `KUBE_CONFIG_PATH` - Path to Kubernetes config file inside container\n- `SESSION_SECRET` - Secret for session encryption (optional, has default)\n\n## Documentation\n\n### Getting Started\n- [Getting Started Guide](docs/GETTING_STARTED.md) - Quick start and first steps\n- [Features \u0026 Capabilities](docs/FEATURES.md) - What Crossview can do\n\n### Deployment\n- [Helm Deployment](docs/HELM_DEPLOYMENT.md) - Deploy using Helm (recommended)\n- [Kubernetes Deployment](docs/KUBERNETES_DEPLOYMENT.md) - Deploy using Kubernetes manifests\n- [Helm Chart Reference](helm/crossview/README.md) - Complete Helm chart options\n\n### Configuration\n- [Configuration Guide](docs/CONFIGURATION.md) - Configure Crossview for your environment\n- [SSO Setup](docs/SSO_SETUP.md) - Configure Single Sign-On (OIDC/SAML)\n- [SSO Protocols](docs/SSO_PROTOCOLS.md) - Understanding OIDC and SAML\n\n### Support\n- [Troubleshooting](docs/TROUBLESHOOTING.md) - Common issues and solutions\n- [Kubernetes Manifests](k8s/README.md) - Reference for Kubernetes manifests\n- [Keycloak Setup](keycloak/README.md) - Keycloak integration guide\n\n### Community\n- [Contributing Guide](docs/CONTRIBUTING.md) - How to contribute code, report issues, and open PRs\n- [Maintainers](docs/MAINTAINERS.md) - Who maintains the project and how to reach them\n- [Security Policy](.github/SECURITY.md) - How to report vulnerabilities\n- [Code of Conduct](docs/CODE_OF_CONDUCT.md) - Community standards and reporting\n- [Roadmap](docs/ROADMAP.md) - Planned direction and how to influence it\n\n## Tech Stack\n\n### Frontend\n- **React** - UI library\n- **Vite** - Build tool and dev server\n- **Chakra UI** - Component library\n- **React Router** - Routing\n- **WebSocket** - Real-time updates\n\n### Backend\n- **Go** - Programming language\n- **Gin** - Web framework\n- **Kubernetes client-go** - Kubernetes API client\n- **Kubernetes Informers** - Event-driven resource watching\n- **PostgreSQL** - Database (via GORM)\n\n## Contributing\n\nContributions are welcome. Please read the [Contributing Guide](docs/CONTRIBUTING.md) for development setup, PR guidelines, and how to report issues. By participating, you agree to our [Code of Conduct](docs/CODE_OF_CONDUCT.md). To see where the project is headed, check the [Roadmap](docs/ROADMAP.md).\n\n## License\n\nThis project is open source and available under the [Apache License 2.0](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrossplane-contrib%2Fcrossview","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrossplane-contrib%2Fcrossview","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrossplane-contrib%2Fcrossview/lists"}