From 27b9aeb45e72f2e6d69fa7181ddba63d116c03e8 Mon Sep 17 00:00:00 2001 From: Matt Date: Mon, 10 Aug 2026 00:00:59 +0000 Subject: [PATCH] chore: rename app from ProxmoxDesktop to Clustri --- README.md | 8 +-- index.html | 2 +- package-lock.json | 4 +- package.json | 2 +- src-tauri/Cargo.lock | 58 +++++++++++----------- src-tauri/Cargo.toml | 2 +- src-tauri/capabilities/default.json | 2 +- src-tauri/gen/schemas/capabilities.json | 2 +- src-tauri/src/connection.rs | 2 +- src-tauri/src/lib.rs | 6 +-- src-tauri/src/main.rs | 2 +- src-tauri/tauri.conf.json | 6 +-- src-tauri/tests/api_client.rs | 2 +- src-tauri/tests/api_commands.rs | 2 +- src-tauri/tests/api_console.rs | 2 +- src-tauri/tests/api_disk_network.rs | 2 +- src-tauri/tests/api_snapshots_backups.rs | 2 +- src-tauri/tests/cluster_flow.rs | 2 +- src-tauri/tests/discovery.rs | 2 +- src-tauri/tests/failover.rs | 2 +- src-tauri/tests/persistence.rs | 2 +- src-tauri/tests/tls.rs | 4 +- src/components/console/TerminalConsole.tsx | 2 +- src/components/layout/Sidebar.tsx | 2 +- src/components/settings/SettingsPage.tsx | 12 ----- src/stores/uiStore.ts | 4 +- 26 files changed, 63 insertions(+), 75 deletions(-) diff --git a/README.md b/README.md index 3b7d5dd..33a5e07 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ProxmoxDesktop +# Clustri A cross-platform desktop client for managing Proxmox VE servers and clusters. The backend is Rust on Tauri 2; the UI is React 19 with TypeScript, Vite, and Tailwind CSS v4. @@ -9,7 +9,7 @@ A cross-platform desktop client for managing Proxmox VE servers and clusters. Th - Manage multiple simultaneous connections to servers and clusters. - Authenticate with an API token or with a username and password. Password mode uses ticket-based auth (PVEAuthCookie plus CSRF token). - Credentials live in the OS keyring. API tokens never touch disk. -- Connections persist to `{app-config-dir}/proxmoxdesktop/connections.json`. The last active connection reconnects on launch. +- Connections persist to `{app-config-dir}/clustri/connections.json`. The last active connection reconnects on launch. ### Cluster support @@ -171,7 +171,7 @@ source $HOME/.cargo/env ```bash git clone -cd ProxmoxDesktop +cd clustri npm install ``` @@ -250,7 +250,7 @@ When adding a connection you need: ## Project Structure ``` -ProxmoxDesktop/ +clustri/ ├── src/ # React frontend │ ├── components/ │ │ ├── ui/ # base components (buttons, dialogs, toasts) diff --git a/index.html b/index.html index 2d5f165..b43317c 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - ProxmoxDesktop + Clustri
diff --git a/package-lock.json b/package-lock.json index 191deb7..69d7fb5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "proxmoxdesktop", + "name": "clustri", "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "proxmoxdesktop", + "name": "clustri", "version": "0.1.0", "dependencies": { "@fontsource-variable/geist": "^5.3.0", diff --git a/package.json b/package.json index 14d5885..365c0cf 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "proxmoxdesktop", + "name": "clustri", "private": true, "version": "0.1.0", "type": "module", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 7c63c01..c2c4178 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -411,6 +411,35 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "clustri" +version = "0.1.0" +dependencies = [ + "futures-util", + "hex", + "httpmock", + "keyring", + "percent-encoding", + "rcgen", + "reqwest 0.12.28", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "sha2", + "tauri", + "tauri-build", + "tauri-plugin-shell", + "tempfile", + "thiserror 2.0.19", + "tokio", + "tokio-rustls", + "tokio-tungstenite", + "url", + "uuid", + "x509-cert", +] + [[package]] name = "cmake" version = "0.1.58" @@ -2704,35 +2733,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "proxmox-desktop" -version = "0.1.0" -dependencies = [ - "futures-util", - "hex", - "httpmock", - "keyring", - "percent-encoding", - "rcgen", - "reqwest 0.12.28", - "rustls", - "rustls-pemfile", - "serde", - "serde_json", - "sha2", - "tauri", - "tauri-build", - "tauri-plugin-shell", - "tempfile", - "thiserror 2.0.19", - "tokio", - "tokio-rustls", - "tokio-tungstenite", - "url", - "uuid", - "x509-cert", -] - [[package]] name = "quick-xml" version = "0.41.0" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index b1ab6e6..b5deb38 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "proxmox-desktop" +name = "clustri" version = "0.1.0" description = "A cross-platform desktop application for managing Proxmox VE servers" authors = ["you"] diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index 671299f..7449cdb 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "identifier": "default", - "description": "Default capabilities for ProxmoxDesktop", + "description": "Default capabilities for Clustri", "windows": ["main"], "permissions": [ "core:default", diff --git a/src-tauri/gen/schemas/capabilities.json b/src-tauri/gen/schemas/capabilities.json index 77eb0c2..a131f2f 100644 --- a/src-tauri/gen/schemas/capabilities.json +++ b/src-tauri/gen/schemas/capabilities.json @@ -1 +1 @@ -{"default":{"identifier":"default","description":"Default capabilities for ProxmoxDesktop","local":true,"windows":["main"],"permissions":["core:default","core:event:default","core:event:allow-listen","core:event:allow-emit","core:event:allow-emit-to","core:window:default","core:window:allow-show","core:window:allow-hide","core:window:allow-close","core:window:allow-set-focus","core:window:allow-is-visible","shell:allow-execute","shell:default"]}} \ No newline at end of file +{"default":{"identifier":"default","description":"Default capabilities for Clustri","local":true,"windows":["main"],"permissions":["core:default","core:event:default","core:event:allow-listen","core:event:allow-emit","core:event:allow-emit-to","core:window:default","core:window:allow-show","core:window:allow-hide","core:window:allow-close","core:window:allow-set-focus","core:window:allow-is-visible","shell:allow-execute","shell:default"]}} \ No newline at end of file diff --git a/src-tauri/src/connection.rs b/src-tauri/src/connection.rs index c161a7b..3f3cc4e 100644 --- a/src-tauri/src/connection.rs +++ b/src-tauri/src/connection.rs @@ -370,7 +370,7 @@ impl Connection { } fn keyring_service() -> &'static str { - "proxmox-desktop" + "clustri" } fn keyring_entry(connection_id: &str, field: &str) -> crate::Result { diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index dfa0701..a1759ab 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -129,11 +129,11 @@ struct AppState { /// Returns the path of the persisted connections file. /// -/// Lives at `{app_config_dir}/proxmoxdesktop/connections.json`; the parent +/// Lives at `{app_config_dir}/clustri/connections.json`; the parent /// directory is created lazily when the file is first written. fn connections_file(app: &tauri::AppHandle) -> Result { let dir = app.path().app_config_dir()?; - Ok(dir.join("proxmoxdesktop").join("connections.json")) + Ok(dir.join("clustri").join("connections.json")) } #[tauri::command] @@ -939,7 +939,7 @@ pub fn run() { .build()?; let _tray = TrayIconBuilder::with_id("main-tray") - .tooltip("ProxmoxDesktop") + .tooltip("Clustri") .icon(app.default_window_icon().cloned().expect("no default icon")) .menu(&menu) .on_menu_event(move |app, event| match event.id.as_ref() { diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 7db13bd..b1a4f22 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -1,5 +1,5 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] fn main() { - proxmox_desktop::run() + clustri::run() } diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index f5fdcf3..d13a04e 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,8 +1,8 @@ { "$schema": "https://schema.tauri.app/config/2", - "productName": "ProxmoxDesktop", + "productName": "Clustri", "version": "0.1.0", - "identifier": "com.proxmoxdesktop.app", + "identifier": "dev.clustri.app", "build": { "beforeDevCommand": "npm run dev", "devUrl": "http://localhost:1420", @@ -12,7 +12,7 @@ "app": { "windows": [ { - "title": "ProxmoxDesktop", + "title": "Clustri", "width": 1200, "height": 800, "resizable": true, diff --git a/src-tauri/tests/api_client.rs b/src-tauri/tests/api_client.rs index 35a09e7..d2444ab 100644 --- a/src-tauri/tests/api_client.rs +++ b/src-tauri/tests/api_client.rs @@ -5,7 +5,7 @@ //! error mapping, query parameters, and URL construction. use httpmock::prelude::*; -use proxmox_desktop::{api_request, AuthContext, AuthMode, Error}; +use clustri::{api_request, AuthContext, AuthMode, Error}; use reqwest::Client; use reqwest::Method as RMethod; diff --git a/src-tauri/tests/api_commands.rs b/src-tauri/tests/api_commands.rs index 9130d39..6ae7ec4 100644 --- a/src-tauri/tests/api_commands.rs +++ b/src-tauri/tests/api_commands.rs @@ -8,7 +8,7 @@ //! called directly on an added connection without `connect()`. use httpmock::prelude::*; -use proxmox_desktop::{ConnectionConfig, ConnectionManager, EndpointConfig, Error}; +use clustri::{ConnectionConfig, ConnectionManager, EndpointConfig, Error}; /// Builds a `ConnectionManager` with a single token-mode connection whose /// primary endpoint points at the mock server. `node` pins the storage node. diff --git a/src-tauri/tests/api_console.rs b/src-tauri/tests/api_console.rs index 41b405a..14cae04 100644 --- a/src-tauri/tests/api_console.rs +++ b/src-tauri/tests/api_console.rs @@ -9,7 +9,7 @@ //! directly on an added connection without `connect()`. use httpmock::prelude::*; -use proxmox_desktop::{ConnectionConfig, ConnectionManager, EndpointConfig, Error}; +use clustri::{ConnectionConfig, ConnectionManager, EndpointConfig, Error}; /// Builds a `ConnectionManager` with a single token-mode connection whose /// primary endpoint points at `url`. diff --git a/src-tauri/tests/api_disk_network.rs b/src-tauri/tests/api_disk_network.rs index 150a886..bd58e79 100644 --- a/src-tauri/tests/api_disk_network.rs +++ b/src-tauri/tests/api_disk_network.rs @@ -11,7 +11,7 @@ //! `body_includes` assertions use the encoded form (e.g. `:` becomes `%3A`). use httpmock::prelude::*; -use proxmox_desktop::{ +use clustri::{ AddDiskConfig, AddNICConfig, ConnectionConfig, ConnectionManager, EditNICConfig, EndpointConfig, Error, }; diff --git a/src-tauri/tests/api_snapshots_backups.rs b/src-tauri/tests/api_snapshots_backups.rs index cf98bb1..169ee98 100644 --- a/src-tauri/tests/api_snapshots_backups.rs +++ b/src-tauri/tests/api_snapshots_backups.rs @@ -7,7 +7,7 @@ //! directly on an added connection without `connect()`. use httpmock::prelude::*; -use proxmox_desktop::{ +use clustri::{ BackupJobConfig, ConnectionConfig, ConnectionManager, CreateSnapshotConfig, EndpointConfig, Error, }; diff --git a/src-tauri/tests/cluster_flow.rs b/src-tauri/tests/cluster_flow.rs index d4544bb..17a40e0 100644 --- a/src-tauri/tests/cluster_flow.rs +++ b/src-tauri/tests/cluster_flow.rs @@ -11,7 +11,7 @@ use httpmock::prelude::*; use httpmock::Mock; -use proxmox_desktop::{ConnectionConfig, ConnectionManager, EndpointConfig, Error}; +use clustri::{ConnectionConfig, ConnectionManager, EndpointConfig, Error}; const TOKEN: &str = "root@pam!cluster-token"; diff --git a/src-tauri/tests/discovery.rs b/src-tauri/tests/discovery.rs index 3e2718d..ab66a1f 100644 --- a/src-tauri/tests/discovery.rs +++ b/src-tauri/tests/discovery.rs @@ -8,7 +8,7 @@ use httpmock::prelude::*; use httpmock::Mock; -use proxmox_desktop::{derive_node_url, ConnectionConfig, ConnectionManager, EndpointConfig}; +use clustri::{derive_node_url, ConnectionConfig, ConnectionManager, EndpointConfig}; const TOKEN: &str = "root@pam!discovery-token"; diff --git a/src-tauri/tests/failover.rs b/src-tauri/tests/failover.rs index 34a741d..cebb486 100644 --- a/src-tauri/tests/failover.rs +++ b/src-tauri/tests/failover.rs @@ -8,7 +8,7 @@ use httpmock::prelude::*; use httpmock::Mock; -use proxmox_desktop::{ +use clustri::{ api_request, AuthContext, AuthMode, ConnectionConfig, ConnectionManager, EndpointConfig, Error, }; use reqwest::Client; diff --git a/src-tauri/tests/persistence.rs b/src-tauri/tests/persistence.rs index bd57afb..ec89976 100644 --- a/src-tauri/tests/persistence.rs +++ b/src-tauri/tests/persistence.rs @@ -6,7 +6,7 @@ //! request layer falls back to the OS keyring. use httpmock::prelude::*; -use proxmox_desktop::{ConnectionConfig, ConnectionManager, EndpointConfig, Error}; +use clustri::{ConnectionConfig, ConnectionManager, EndpointConfig, Error}; /// Builds a token-mode connection config with a real token set. fn token_config(id: &str, url: &str, token: &str, accept_untrusted: bool) -> ConnectionConfig { diff --git a/src-tauri/tests/tls.rs b/src-tauri/tests/tls.rs index a287ac7..bb9a6c7 100644 --- a/src-tauri/tests/tls.rs +++ b/src-tauri/tests/tls.rs @@ -4,10 +4,10 @@ //! Each test spawns a local TLS server with a freshly generated self-signed //! certificate and exercises the capture/verify helpers against it. -use proxmox_desktop::tls::{ +use clustri::tls::{ capture_fingerprint, fetch_certificate_info, verify_pin, verify_server_certificate, }; -use proxmox_desktop::Error; +use clustri::Error; use rustls::pki_types::{CertificateDer, PrivateKeyDer, PrivatePkcs8KeyDer}; use rustls::ServerConfig; use sha2::{Digest, Sha256}; diff --git a/src/components/console/TerminalConsole.tsx b/src/components/console/TerminalConsole.tsx index 5455fda..878aaa9 100644 --- a/src/components/console/TerminalConsole.tsx +++ b/src/components/console/TerminalConsole.tsx @@ -100,7 +100,7 @@ export function TerminalConsole({ connectionId, node, vmid, onError, onConnected if (!isTauriMode && !cancelled) { // Dev mode mock terminal terminal.writeln('\x1b[1;32m╔══════════════════════════════════════════╗\x1b[0m') - terminal.writeln('\x1b[1;32m║ ProxmoxDesktop - Terminal Console ║\x1b[0m') + terminal.writeln('\x1b[1;32m║ Clustri - Terminal Console ║\x1b[0m') terminal.writeln('\x1b[1;32m╚══════════════════════════════════════════╝\x1b[0m') terminal.writeln('') terminal.writeln(`\x1b[33mNode: ${node} | VMID: ${vmid} | Type: LXC\x1b[0m`) diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx index eaec70b..869e228 100644 --- a/src/components/layout/Sidebar.tsx +++ b/src/components/layout/Sidebar.tsx @@ -43,7 +43,7 @@ export function Sidebar({ onAddConnection, activeView, onNavigate }: SidebarProp

- ProxmoxDesktop + Clustri

Ops Console diff --git a/src/components/settings/SettingsPage.tsx b/src/components/settings/SettingsPage.tsx index 02c54d3..ec3001d 100644 --- a/src/components/settings/SettingsPage.tsx +++ b/src/components/settings/SettingsPage.tsx @@ -1,7 +1,6 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { ThemeSwitcher } from '@/components/settings/ThemeSwitcher' import { ConnectionManager } from '@/components/settings/ConnectionManager' -import { ExternalLink } from 'lucide-react' export function SettingsPage() { return ( @@ -59,17 +58,6 @@ export function SettingsPage() { Platform Tauri + React

-
- - View on GitHub - - -
diff --git a/src/stores/uiStore.ts b/src/stores/uiStore.ts index 7be8433..571b7b1 100644 --- a/src/stores/uiStore.ts +++ b/src/stores/uiStore.ts @@ -25,11 +25,11 @@ function applyTheme(theme: Theme) { root.classList.add(theme) } - localStorage.setItem('proxmoxdesktop-theme', theme) + localStorage.setItem('clustri-theme', theme) } function getInitialTheme(): Theme { - const stored = localStorage.getItem('proxmoxdesktop-theme') + const stored = localStorage.getItem('clustri-theme') if (stored === 'light' || stored === 'dark' || stored === 'system') { return stored }