diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a8c49ba..30a6f7d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -69,6 +69,11 @@ jobs: > **Windows note:** The installer is not yet code-signed. Windows SmartScreen will show an "Unknown publisher" warning — click "More info → Run anyway" to install. + ### v0.14.1 — Support view crash fix + proxy/Tor support + + - **Fixed the Support view crash.** Opening Support showed a blank "Vega crashed" screen. This affected every release build since v0.13.2; it now opens correctly. + - **Network proxy (HTTP / SOCKS5), including Tor.** A new Settings section routes Vega's traffic — including update checks — through a proxy. Thanks to [Anderseta](https://github.com/Anderseta) for contributing this (#10). Note: the proxy routes traffic but does not yet guarantee DNS privacy. + ### v0.14.0 — Vega moves to its own app identifier Vega's internal app identifier changes from `com.hoornet.vega` to `com.veganostr.Vega`, so it is anchored to a domain the project controls. This is a prerequisite for publishing Vega on Flathub and winget, and it makes the app's identity consistent across every platform. diff --git a/CHANGELOG.md b/CHANGELOG.md index dee016c..80768b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,18 @@ > Note: entries for v0.12.10 through v0.13.1 live in the [GitHub Releases](https://github.com/hoornet/vega/releases) notes; this file resumes at v0.13.2. +## v0.14.1 — Fix Support view crash, add proxy/Tor support (2026-07-15) + +### Fixed +- **Support view no longer crashes.** Opening Support (the About/donate view) crashed the app with a blank "Vega crashed" screen (React error #130). `react-qr-code` ships CommonJS, and since the Vite 8 / Rolldown migration (v0.13.2) its default import resolved to the module namespace object instead of the component, making the QR code an invalid element. The import now unwraps to the real component. Reproduced and verified fixed against the production build. + +### Added +- **Configurable network proxy (HTTP / SOCKS5), including Tor.** New section in Settings routes Vega's traffic — relay WebSockets, Rust-side fetches, and update checks — through a proxy. Contributed by [Anderseta](https://github.com/Anderseta) ([#10](https://github.com/hoornet/vega/pull/10)). +- **Contributors section** in the README. + +### Known limitation +- The proxy routes traffic but DNS may still resolve locally, so relay hostnames can leak. Full DNS privacy (e.g. `socks5h` for Tor) is not guaranteed yet — noted in the proxy settings and tracked in [#11](https://github.com/hoornet/vega/issues/11). + ## v0.14.0 — App identifier moves to `com.veganostr.Vega` (2026-07-14) ### Changed diff --git a/PKGBUILD b/PKGBUILD index e232be7..343ed38 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,6 +1,6 @@ # Maintainer: hoornet pkgname=vega-nostr -pkgver=0.14.0 +pkgver=0.14.1 pkgrel=1 pkgdesc="Cross-platform Nostr desktop client with Lightning integration" arch=('x86_64') diff --git a/README.md b/README.md index 809a5ab..f0e8cd3 100644 --- a/README.md +++ b/README.md @@ -233,6 +233,15 @@ Vega is free and open-source. If it's useful to you: | ♥ GitHub Sponsors | [github.com/sponsors/hoornet](https://github.com/sponsors/hoornet) | | ★ GitHub star | Helps with visibility and grant applications | +## Contributors + +Vega is built by one person, but it's better because of the people who've pitched in. Thank you: + +- **[Anderseta](https://github.com/Anderseta)** — configurable HTTP/SOCKS5 network proxy, including Tor support, with the update checks routed through the proxy too ([#10](https://github.com/hoornet/vega/pull/10)). +- **[SondreB](https://github.com/SondreB)** — Vega's first external contributor; early new-user-experience feedback that shaped onboarding ([#2](https://github.com/hoornet/vega/issues/2)). + +Spotted a bug or have an idea? Issues and pull requests are welcome. + ## Acknowledgements Vega is built on the shoulders of excellent open-source projects: diff --git a/package.json b/package.json index 4e46cbd..19e3832 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "vega", "private": true, - "version": "0.14.0", + "version": "0.14.1", "type": "module", "scripts": { "dev": "vite", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index e552ba3..bf1a736 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -5429,7 +5429,7 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "vega" -version = "0.14.0" +version = "0.14.1" dependencies = [ "dirs", "futures-util", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index bfbd22a..e0b0061 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "vega" -version = "0.14.0" +version = "0.14.1" description = "Cross-platform Nostr desktop client with Lightning integration" authors = ["hoornet"] edition = "2021" diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 046d75e..2d82e4e 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "Vega", - "version": "0.14.0", + "version": "0.14.1", "identifier": "com.veganostr.Vega", "build": { "beforeDevCommand": "npm run dev", diff --git a/src/components/shared/AboutView.tsx b/src/components/shared/AboutView.tsx index f7fb072..c10449d 100644 --- a/src/components/shared/AboutView.tsx +++ b/src/components/shared/AboutView.tsx @@ -1,8 +1,17 @@ import { useState } from "react"; -import QRCode from "react-qr-code"; +import QRCodeImport from "react-qr-code"; import { ZapModal } from "../zap/ZapModal"; import pkg from "../../../package.json"; +// react-qr-code ships CommonJS. Under the app's bundler (Vite 8 / Rolldown) the +// default import can resolve to the module namespace object ({ QRCode, default }) +// rather than the component itself, which makes an invalid React element +// and crashes the whole view with "Element type is invalid" (#130). Unwrap to the +// real component, tolerating both a correct default import and the namespace form. +const QRCode = + (QRCodeImport as unknown as { default?: typeof QRCodeImport }).default ?? + QRCodeImport; + const DEV_NPUB = "npub1ezt7xcq87ljj65jkjsuagwll4yp75tacgkuyjdhkw6mza8j3azfq2vrvl6"; const DEV_PUBKEY = "c897e36007f7e52d52569439d43bffa903ea2fb845b84936f676b62e9e51e892"; const LIGHTNING_ADDRESS = "jure@getalby.com"; diff --git a/src/components/shared/SettingsView.tsx b/src/components/shared/SettingsView.tsx index 4ec0285..3044872 100644 --- a/src/components/shared/SettingsView.tsx +++ b/src/components/shared/SettingsView.tsx @@ -525,6 +525,10 @@ function ProxySection() {

Applies after restart. Example: socks5://127.0.0.1:9050

+

+ Note: this routes your traffic, but DNS may still be resolved locally, so + relay hostnames can leak. Full DNS privacy (e.g. for Tor) is not guaranteed yet. +

{(error || validationError) && (

{error ?? validationError}

)}