Skip to content

Commit 116b367

Browse files
authored
Merge pull request #282 from crossplane-contrib/pre-release
chore(release): prepare 4.5.0 release
2 parents 82312f1 + 88d9577 commit 116b367

19 files changed

Lines changed: 280 additions & 152 deletions

File tree

.github/workflows/helm-test.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,8 @@ jobs:
2626
version: '3.13.0'
2727

2828
- name: Install Helm unittest plugin
29-
run: |
30-
helm plugin install https://github.com/quintush/helm-unittest.git || true
31-
helm plugin update unittest || true
29+
# v1.0.1 is the latest helm-unittest release compatible with Helm 3.13 (v1.1.1+ need a newer Helm).
30+
run: helm plugin install https://github.com/helm-unittest/helm-unittest.git --version v1.0.1
3231

3332
- name: Run Helm Lint
3433
run: |

CHANGELOG.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,31 @@
1+
# [4.5.0](https://github.com/crossplane-contrib/crossview/compare/v4.4.0...v4.5.0) (2026-06-29)
2+
3+
4+
### Bug Fixes
5+
6+
* **oidc:** allow empty issuer to skip discovery for split-horizon setups ([d722457](https://github.com/crossplane-contrib/crossview/commit/d7224577f8f0d149db3a9f2e7be824667f827b12))
7+
* **relations:** align kind badge and type title across graph and overview ([cc74494](https://github.com/crossplane-contrib/crossview/commit/cc744949f7f364d6395397f0da4ef5b3909e7532))
8+
* **ci:** fix helm-unittest plugin install on Helm 3.13 and document pinning rationale ([3866a05](https://github.com/crossplane-contrib/crossview/commit/3866a05bd7fcaf1c58f2a877d86071f9848ef1ca), [e32a362](https://github.com/crossplane-contrib/crossview/commit/e32a3628e23c572d03f4bb22cf77cd1436ee8d4f))
9+
10+
11+
### Features
12+
13+
* **relations:** show kind badges and health state on graph nodes and overview tab ([bc0deb1](https://github.com/crossplane-contrib/crossview/commit/bc0deb16a44f4364f24d12fbd96f52ad4f9f8154))
14+
* **frontend:** add ErrorBoundary to prevent full-app crashes ([ae8bb69](https://github.com/crossplane-contrib/crossview/commit/ae8bb69c223639673aa3d4e6384f3889296d6bc2))
15+
* **ui:** add Crossview favicon and switch to icon-only SVG ([52d3a41](https://github.com/crossplane-contrib/crossview/commit/52d3a41cf2a2d79312f8b56f09c7247d8bf50b7a), [3ea3a5c](https://github.com/crossplane-contrib/crossview/commit/3ea3a5cd8f5f2b3d65edc5ec590ce20f3dde2a29))
16+
17+
18+
### Documentation
19+
20+
* clarify PostgreSQL is only required for `auth_mode=session` ([8786f18](https://github.com/crossplane-contrib/crossview/commit/8786f188d3076cc3f41ea72e6227d8f6826e1db0))
21+
* **oidc:** trim loader issuer comment and mirror empty-issuer defaults in JS config loader ([2d56b2e](https://github.com/crossplane-contrib/crossview/commit/2d56b2e9a96ab767b0eb4f8aeeac771f6d910228), [88256f5](https://github.com/crossplane-contrib/crossview/commit/88256f5a897f8bf4e68f2db5752503c2f3c63711), [53e9ce3](https://github.com/crossplane-contrib/crossview/commit/53e9ce38d55b0303563ff47094c2098e4f0fcbaf))
22+
23+
24+
### Other
25+
26+
* cleanups: remove error boundary screenshots and style-only inline comments ([66573ca](https://github.com/crossplane-contrib/crossview/commit/66573ca49558d4306fbf7f4cfd9987d352f7f08b), [07a414b](https://github.com/crossplane-contrib/crossview/commit/07a414bc4d26a4ef57d6c6f228550e81aa96b9db))
27+
* maintenance: update roadmap/dashboard assets and next-version metadata ([223a722](https://github.com/crossplane-contrib/crossview/commit/223a722e1ca4c3f57a8ae724fb69c91d4fed12bf), [b4c98c2](https://github.com/crossplane-contrib/crossview/commit/b4c98c2149ffdb10f70659bbab18f9369aa0db85))
28+
129
# [4.4.0](https://github.com/crossplane-contrib/crossview/compare/v3.9.0...v4.4.0) (2026-05-19)
230

331

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161

6262
- Node.js 20+ (for frontend development)
6363
- Go 1.24+ (for backend server)
64-
- PostgreSQL database (port 8920 by default, or set via `DB_PORT` env var)
64+
- PostgreSQL database — only required when using `auth_mode: session` (the default). For local development without a database, set `auth_mode: none` in `config/config.yaml` (see `config/examples/config-none.yaml.example`).
6565
- Kubernetes config file at `~/.kube/config` (or set `KUBECONFIG` env var)
6666

6767
### Install Dependencies

config/loader.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ export const loadConfig = (configPath = null) => {
7676
enabled: process.env.SSO_ENABLED === 'true' || fileConfig.sso?.enabled === true,
7777
oidc: {
7878
enabled: process.env.OIDC_ENABLED === 'true' || fileConfig.sso?.oidc?.enabled === true,
79-
issuer: process.env.OIDC_ISSUER || fileConfig.sso?.oidc?.issuer || 'http://localhost:8080/realms/crossview',
79+
issuer: process.env.OIDC_ISSUER || fileConfig.sso?.oidc?.issuer || '',
8080
clientId: process.env.OIDC_CLIENT_ID || fileConfig.sso?.oidc?.clientId || 'crossview-client',
8181
clientSecret: process.env.OIDC_CLIENT_SECRET || fileConfig.sso?.oidc?.clientSecret || '',
8282
authorizationURL: process.env.OIDC_AUTHORIZATION_URL || fileConfig.sso?.oidc?.authorizationURL || '',

crossview-go-server/api/controllers/sso/sso_test_helpers.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func TestSSOConfig_OIDC_Enabled(t *testing.T) {
7373
assert.True(t, cfg.Enabled)
7474
assert.True(t, cfg.OIDC.Enabled)
7575
assert.False(t, cfg.SAML.Enabled)
76-
assert.Equal(t, "http://localhost:8080/realms/crossview", cfg.OIDC.Issuer)
76+
assert.Empty(t, cfg.OIDC.Issuer)
7777
assert.Equal(t, "crossview-client", cfg.OIDC.ClientId)
7878
assert.Equal(t, "openid profile email", cfg.OIDC.Scope)
7979
}

crossview-go-server/lib/sso_config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func getOIDCConfig(enabledStr string) OIDCConfig {
6969
Issuer: firstNonEmpty(
7070
os.Getenv("OIDC_ISSUER"),
7171
viper.GetString("sso.oidc.issuer"),
72-
"http://localhost:8080/realms/crossview",
72+
"",
7373
),
7474
ClientId: firstNonEmpty(
7575
os.Getenv("OIDC_CLIENT_ID"),

docs/GETTING_STARTED.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ docker run -p 3001:3001 \
6969
ghcr.io/crossplane-contrib/crossview:latest
7070
```
7171

72+
> **Note:** PostgreSQL is only required when using `auth_mode: session` (the default). For local development without a database, copy `config/examples/config-none.yaml.example` to `config/config.yaml` — the backend will skip the database connection entirely.
73+
7274
## First Steps After Installation
7375

7476
1. **Access the Dashboard**

docs/ROADMAP.md

Lines changed: 29 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,69 +4,65 @@ This roadmap outlines the planned direction for **CrossView**, the open-source d
44

55
We welcome contributions, discussions, and new ideas via GitHub Issues, Discussions, or Pull Requests!
66

7-
## Current Status (as of February 2026)
8-
- Stable core features: real-time resource watching, interactive relationship graphs, multi-cluster support, detailed resource views, OIDC/SAML SSO, Helm chart deployment
9-
- Latest release: v3.5.0 (February 2026)
7+
## Current Status (as of June 2026)
8+
9+
- Stable core features: real-time resource watching, interactive relationship graphs, **partial multi-cluster support** (full support when running outside Kubernetes via kubeconfig; limited to single cluster when deployed inside via Helm/service account), detailed resource views, OIDC/SAML SSO, Helm chart deployment
10+
- Latest release: v4.0.0 (June 2026)
1011
- Actively maintained with frequent updates
1112

12-
## Short-term (Next 3–6 months) – v3.6 – v4.x
13-
Focus: Security hardening, usability improvements, and production readiness
13+
## Short-term (Next 3–6 months) – v4.x
14+
**Focus:** Security hardening, real-time experience, usability, and ecosystem integrations
1415

1516
- **Fine-grained RBAC permissions**
1617
Implement Kubernetes-native authorization checks (via SubjectAccessReview API) so users only see/edit resources they are allowed to access. Support Crossplane-specific verbs (e.g., view compositions, approve claims).
1718

18-
- **Customizable dashboard**
19-
Allow users to create personalized views: rearrange widgets, pin favorite resources/clusters, create custom filters/queries, and save dashboard layouts per user or team.
20-
21-
- **Automatic user role sync from Identity Provider (IDP) when SSO is enabled**
22-
When using OIDC/SAML, automatically map IDP groups/roles/claims to CrossView permissions or Kubernetes RBAC bindings. Support common providers (Keycloak, Okta, Auth0, Azure AD) with configurable mapping rules.
19+
- **Improved resource watching**
20+
Significantly enhance real-time watching: better performance on large clusters, smarter event filtering, improved reconnection logic, and reduced latency.
2321

2422
- **Improved search and filtering**
25-
Advanced full-text search across all resource fields, saved searches, and quick filters (e.g., by status, provider, composition name).
23+
Advanced full-text search across all resource fields, saved searches, quick filters (by status, provider, composition, cluster), and cross-cluster search.
2624

2725
- **Events & audit log viewer**
28-
Dedicated tab for browsing Kubernetes events and Crossplane reconciliation events with filtering, timestamps, and correlation to resources.
26+
Dedicated tab for browsing Kubernetes events and Crossplane reconciliation events with filtering, timestamps, and direct correlation to resources.
2927

30-
- **Dark mode refinements & accessibility improvements**
31-
Full WCAG compliance checks, keyboard navigation, screen reader support.
28+
- **Full multi-cluster support (in-cluster)**
29+
Enable true multi-cluster management when CrossView is deployed inside Kubernetes (via Helm). Support loading multiple kubeconfigs, using external cluster credentials/secrets, unified views, easy context switching, and cluster grouping — removing the current limitation of single-cluster service-account access.
3230

33-
## Medium-term (6–12 months) – v4.x – v5.x
34-
Focus: Deeper Crossplane integration, observability, and extensibility
31+
- **Native Headlamp Plugin**
32+
Develop a native Headlamp plugin (see [crossview-headlamp](https://github.com/MoeidHeidari/crossview-headlamp)) that integrates the CrossView UI into Headlamp while using **CrossView’s own backend**. The plugin will connect to the CrossView backend service instead of relying on Headlamp’s backend, providing a seamless experience within Headlamp’s interface while leveraging CrossView’s full capabilities (real-time watching, graphs, etc.).
3533

36-
- **Composition & claim workflow enhancements**
37-
Visual editor for creating/editing Compositions and Claims (with YAML preview and validation), dry-run previews, and one-click apply.
34+
## Medium-term (6–12 months) – v4.x – v5.x
35+
**Focus:** Deeper Crossplane integration, visibility, and GitOps alignment
3836

39-
- **Provider & managed resource health dashboard**
40-
Aggregated health overview per provider (e.g., AWS, GCP, Azure), showing unhealthy resources, drift detection alerts, and quick actions.
37+
- **Resource diff & history viewer (YAML support)**
38+
Side-by-side and unified YAML diff, generation-based history, change attribution, and drift visualization.
4139

42-
- **Multi-tenancy & team workspaces**
43-
Namespace/project-based isolation, team-specific dashboards, and resource quotas visibility.
40+
- **GitOps integration**
41+
Show Git commit links for managed resources and claims via annotations. Basic drift detection against Git source.
4442

45-
- **Alerting & notifications**
46-
Integrate with common tools (Slack, PagerDuty, email) for critical events (e.g., reconciliation failures, resource deletion, composition drift).
43+
- **Full Flux/Argo CD deep integration**
44+
Deep support for Flux and Argo CD: reconciliation status, sync state, Git repository linking, and visual indicators for drift or sync failures.
4745

48-
- **Resource diff & history viewer**
49-
Show changes over time (generation diffs), previous states, and who/what triggered updates.
46+
- **Full resource map / relationship graph improvements**
47+
Enhanced interactive resource map showing full dependency graphs across clusters, with better filtering and navigation.
5048

51-
- **CLI companion tool**
52-
Lightweight `crossview` CLI for quick resource lookups, context switching, and dashboard URL generation.
49+
- **Analytics page**
50+
Overview dashboard with usage statistics, resource distribution, health trends, and Crossplane adoption metrics across clusters.
5351

5452
## Long-term (12+ months) – v5.x+
55-
Focus: Ecosystem leadership and advanced features
53+
**Focus:** Advanced capabilities and ecosystem leadership
5654

5755
- **Crossplane-native plugin system**
5856
Allow community extensions (custom widgets, resource renderers, actions) via WebAssembly or simple JS plugins.
5957

6058
- **Cost & usage insights**
61-
Integrate with provider-specific cost APIs (where available) to show estimated costs per composition/claim.
62-
63-
- **GitOps integration**
64-
Show Git commit links for managed resources (via annotations), drift detection against Git source.
59+
Integrate with provider-specific cost APIs to show estimated costs per composition/claim.
6560

6661
- **AI-assisted troubleshooting**
6762
Natural language query support and suggested fixes (optional opt-in, using local or user-provided LLM).
6863

6964
## How to Influence the Roadmap
65+
7066
- Open a GitHub Issue or Discussion for feature requests
7167
- Upvote existing issues to show demand
7268
- Contribute code, tests, docs, or design feedback

docs/SSO_SETUP.md

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,27 @@ sso:
7272
3. **Copy the client ID and secret** to your config
7373
4. **Use the issuer URL** (usually ends with `/realms/...` or `/oauth2/...`)
7474

75-
The implementation supports **OIDC Discovery** - if you provide the `issuer` URL, it will automatically discover the authorization, token, and userinfo endpoints.
75+
The implementation supports **OIDC Discovery** - if you provide the `issuer` URL, it will automatically discover the authorization, token, and userinfo endpoints. The discovered endpoints take precedence over any explicit `authorizationURL`/`tokenURL`/`userInfoURL` you set.
76+
77+
### Split-horizon endpoints (public authorize + in-cluster token)
78+
79+
Leave `issuer` empty to **skip discovery** and use the explicit `authorizationURL`, `tokenURL`, and `userInfoURL` exactly as written. This is required when the identity provider is reachable at different URLs from the browser and from inside the cluster — a public `authorizationURL` for the user's browser redirect, plus in-cluster `tokenURL`/`userInfoURL` for the server-side code→token exchange and userinfo lookup:
80+
81+
```yaml
82+
sso:
83+
enabled: true
84+
oidc:
85+
enabled: true
86+
issuer: "" # empty -> discovery skipped
87+
authorizationURL: https://idp.example.com/authorize # browser-reachable
88+
tokenURL: http://idp.idp.svc.cluster.local:5556/token # in-cluster
89+
userInfoURL: http://idp.idp.svc.cluster.local:5556/userinfo # in-cluster
90+
clientId: your-client-id
91+
clientSecret: your-client-secret
92+
callbackURL: https://crossview.example.com/api/auth/oidc/callback
93+
```
94+
95+
Because a non-empty `issuer` makes discovery override the explicit endpoints, split-horizon setups must leave `issuer` empty.
7696

7797
## SAML Configuration
7898

helm/crossview/templates/configmap.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ data:
3030
LOG_LEVEL: {{ .Values.config.server.log.level | default "info" | quote }}
3131
CORS_ORIGIN: {{ .Values.config.server.cors.origin | default "http://localhost:5173" | quote }}
3232
OIDC_ENABLED: {{ .Values.config.sso.oidc.enabled | default false | quote }}
33-
OIDC_ISSUER: {{ .Values.config.sso.oidc.issuer | default "http://localhost:8080/realms/crossview" | quote }}
33+
OIDC_ISSUER: {{ .Values.config.sso.oidc.issuer | default "" | quote }}
3434
OIDC_CLIENT_ID: {{ .Values.config.sso.oidc.clientId | default "crossview-client" | quote }}
3535
OIDC_AUTHORIZATION_URL: {{ .Values.config.sso.oidc.authorizationURL | default "" | quote }}
3636
OIDC_TOKEN_URL: {{ .Values.config.sso.oidc.tokenURL | default "" | quote }}

0 commit comments

Comments
 (0)