mirror of
https://github.com/hoornet/vega.git
synced 2026-05-31 02:03:37 -07:00
bc4c72d6a0
Commit 214c42b (v0.12.6) added auto-detection of content-addressed
Blossom URLs (64-hex SHA-256 paths) as <img> elements. Blossom is
widespread in modern Nostr feeds — every feed page started rendering
3-5x more <img> elements. Combined with WebKitGTK's weak decoded-
bitmap eviction, feed scrolling grew the WebKit web process to
8-12 GB and triggered WebKit's self-kill threshold with:
Unable to shrink memory footprint of process (9022 MB) below
the kill threshold (8192 MB). Killed
Disable BLOSSOM_URL_REGEX in parseContent(). Real Blossom images
shared via standard upload flows (with proper extensions) still
render. Proper reintroduction (HEAD request + Content-Type
validation, or known-server whitelist) planned for v0.12.9.
Also restore feed depth caps to pre-crisis values now that memory
is under control:
- MAX_FEED_SIZE 30 → 200 (v0.12.6 baseline)
- fetchFollowFeed limit 30 → 100
- fetchGlobalFeed fetch 80 → 100
- Following tab slice 30 → 100
The earlier 30-caps were themselves OOM firefighting that shipped
in v0.12.7 and were no longer needed.
Memory verified 2026-04-16: oscillates 1.1-1.6 GB across all tabs
(Global / Following / Trending / Media / profile / thread) under
heavy use with embedded relay enabled. No crashes. Elastic cache
behaviour rather than monotonic leak — memory spikes briefly on
content loads and reclaims within seconds.
See private_docs/WEBKIT_OOM_INVESTIGATION.md for the full
investigation (4 days of chasing symptoms before finding the
one-line regex as the real cause).
185 lines
11 KiB
YAML
185 lines
11 KiB
YAML
name: Release
|
||
|
||
on:
|
||
push:
|
||
tags:
|
||
- 'v*'
|
||
|
||
permissions:
|
||
contents: write
|
||
|
||
jobs:
|
||
release:
|
||
permissions:
|
||
contents: write
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
include:
|
||
- platform: ubuntu-22.04
|
||
args: ''
|
||
- platform: windows-latest
|
||
args: ''
|
||
- platform: macos-latest
|
||
args: '--target aarch64-apple-darwin'
|
||
|
||
runs-on: ${{ matrix.platform }}
|
||
|
||
steps:
|
||
- uses: actions/checkout@v6
|
||
|
||
- name: Setup Node.js
|
||
uses: actions/setup-node@v5
|
||
with:
|
||
node-version: 'lts/*'
|
||
|
||
- name: Install Rust stable
|
||
uses: dtolnay/rust-toolchain@stable
|
||
with:
|
||
targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin' || matrix.platform == 'macos-12' && 'x86_64-apple-darwin' || '' }}
|
||
|
||
- name: Install Linux dependencies
|
||
if: matrix.platform == 'ubuntu-22.04'
|
||
run: |
|
||
sudo apt-get update
|
||
sudo apt-get install -y \
|
||
libwebkit2gtk-4.1-dev \
|
||
build-essential \
|
||
libssl-dev \
|
||
libayatana-appindicator3-dev \
|
||
librsvg2-dev \
|
||
patchelf
|
||
|
||
- name: Install frontend dependencies
|
||
run: npm install
|
||
|
||
- name: Build and release
|
||
uses: tauri-apps/tauri-action@v0
|
||
env:
|
||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
||
with:
|
||
tagName: ${{ github.ref_name }}
|
||
releaseName: Vega ${{ github.ref_name }}
|
||
releaseBody: |
|
||
## Vega ${{ github.ref_name }}
|
||
|
||
Cross-platform Nostr desktop client — polished UI, deep Lightning integration, first-class long-form writing.
|
||
|
||
> **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.12.8 — Fix Linux OOM crash
|
||
|
||
- **Fix Linux memory crash** — Vega no longer crashes on Linux. Memory now oscillates at ~1.1–1.6 GB during heavy use instead of climbing to 8–12 GB. Root cause traced to v0.12.6: the Blossom SHA-256 URL auto-detection regex caused 3–5× more `<img>` elements per feed page, which combined with WebKitGTK's weak bitmap eviction pushed the WebKit process past its 8 GB self-kill threshold. Blossom auto-detection is temporarily disabled pending proper validation in v0.12.9.
|
||
- **Feed depths restored** — the v0.12.7 OOM firefighting that slashed follow/global feed limits to 30 is reverted; follow feed now fetches 100 and global caches up to 200, matching pre-crisis v0.12.6 behavior.
|
||
- **WebKit rendering fix** — `WEBKIT_FORCE_SOFTWARE_RENDERING=1` keeps the Wayland compositor path intact on Hyprland.
|
||
- **Notification fetch dedup** — `fetchNotifications` was firing 3× in the first 8 seconds of login; now fires once and the first background poll is delayed to 90s.
|
||
|
||
### v0.12.7 — Upload Fixes
|
||
|
||
- **Image uploads fixed** — updated to current NIP-96 endpoints for nostr.build and files.sovbit.host; removed dead services (void.cat, nostrcheck.me)
|
||
- **SVG upload blocked** — SVG files are now rejected with a clear error message; they were silently uploading but rendering as broken images on all Nostr clients
|
||
- **NIP-98 payload hash** — upload auth headers now include the required SHA-256 body hash for strict NIP-96 servers
|
||
|
||
### v0.12.5 — UI Polish & Consistency
|
||
|
||
- **Comprehensive UI polish** — 14 rounds of systematic fixes across every view: sentence case on all button labels, Unicode ellipsis (…) and × throughout, consistent theme tokens replacing all hard-coded colors
|
||
- **Fix V4V auto-streaming** — disabling streaming mid-episode now stays off; previously any play/pause/seek event would re-engage auto-streaming
|
||
- **Production-silent logging** — all debug output now goes through `debug.ts` and is stripped in production builds; zero console leaks
|
||
- **Accessibility** — hover title tooltips on all truncated text, focus rings on interactive elements, aria-labels on all icon-only buttons
|
||
- **Theme consistency** — all amber/gray/white hard-coded colors replaced with theme tokens; correct across all 7 themes
|
||
|
||
### v0.12.4 — Polls, Custom Relay & UI Polish
|
||
- **NIP-1068 Polls** — create polls from the compose box, vote on polls in the feed, animated result bars with vote counts and percentages, per-pubkey dedup, expiry support
|
||
- **Custom Go relay** — switched default relay from strfry to Vega's own Go relay (`wss://relay2.veganostr.com`) with 19 NIPs including NIP-45 COUNT, NIP-50 Search, and NIP-77 Negentropy
|
||
- **Note action icons** — replaced text labels (reply/repost/share/save) with icons, added tooltips on hover, dot separators for visual clarity
|
||
- **Sidebar icons** — distinct icons for V4V (📡) vs Zaps (⚡), better icons for podcasts (🎙), follows (👥), bookmarks (★)
|
||
- **Fix duplicate search results** — people search now deduplicates by pubkey across relays
|
||
- **Fix thread indentation** — deep threads no longer overflow on narrow/half-screen windows; indent capped at depth 3 with relative spacing
|
||
|
||
### v0.12.3 — Fix Direct Messages
|
||
- **Fix DMs not loading** — NIP-17 gift-wrapped messages were silently dropped by NDK's fetchEvents; switched to subscribe-based fetch that correctly receives kind 1059 events
|
||
- **Repo cleanup** — hardened .gitignore, updated AGENTS.md and ROADMAP.md
|
||
|
||
### v0.12.2 — Vega Public Relay
|
||
- **`wss://relay2.veganostr.com`** — Vega's custom Go relay, included by default for all users
|
||
- Existing users get the relay auto-added on upgrade (one-time migration)
|
||
|
||
### v0.12.1 — Fixes
|
||
- **Fix empty Media feed** — widened time window from 2h to 24h so media notes actually appear
|
||
- **Fix empty Trending feed** — retry once after 3s when relays return nothing on startup
|
||
- **Read-only mode banner** — persistent amber warning at top of app when not signed in
|
||
- **Larger account badge** — avatar and name more prominent when logged in
|
||
|
||
### v0.12.0 — Podcasts & Value 4 Value
|
||
- **Built-in podcast player** — search and play podcasts via Fountain.fm with Podcast Index enrichment
|
||
- **V4V streaming** — stream sats per minute to podcast creators via Lightning (keysend + LNURL-pay)
|
||
- **Auto-streaming** — enable once, V4V starts automatically on every supported episode at your chosen rate
|
||
- **Per-episode caps & weekly budgets** — set spending limits; streaming stops automatically when caps are reached
|
||
- **V4V sidebar section** — dedicated dashboard with live status, budget bars, stats, settings, and full streaming history
|
||
- **Recipient breakdown** — see exactly who gets paid and their split percentages
|
||
- **Accessibility** — WCAG AA contrast compliance, ARIA labels, reduced motion support
|
||
- **Media pause on navigation** — video/audio automatically pauses when navigating between views
|
||
- **Performance** — React.memo, granular Zustand selectors, code splitting for faster renders
|
||
- **Podcast player stability** — 15s loading timeout, auto-stop V4V on audio failure
|
||
|
||
### v0.11.0 — Embedded Relay & Polish
|
||
- Embedded Nostr relay, naddr links, new themes, follower badges, bookmark + relay pool fixes
|
||
|
||
### v0.10.1 — Search Reliability
|
||
- Search resilience, nostr: URI prefix support in search
|
||
|
||
### v0.10.0 — Renamed to Vega + UX Improvements
|
||
- **Renamed from Wrystr to Vega** — named after Jurij Vega (1754–1802), Slovenian mathematician and artillery officer. Fresh identity, same mission: a desktop Nostr client built for writers.
|
||
- **Paste nevent/note1/naddr in search** — pasting a Nostr event link navigates directly to the note or article (GitHub #2)
|
||
- **Copy npub from profiles** — click the pubkey on any profile to copy the full npub to clipboard (GitHub #2)
|
||
- **Zap reliability fix** — custom outbox relays replace broken default (purplepag.es DNS failure), 45s timeout prevents indefinite hang
|
||
- **Zap history note preview** — zap entries now show a preview of the zapped note with click-to-navigate
|
||
- **Follower notification dedup** — fixed repeated OS notifications for the same follower (in-memory store now updated alongside DB)
|
||
- **Data migration** — existing Wrystr users automatically migrate settings, database, and keychain on first launch
|
||
|
||
### Previous: v0.9.11 — Notifications & Bookmarks Polish
|
||
- Follower notifications cleaned up, follower OS notification dedup, article bookmarks fixed
|
||
|
||
### Previous: v0.9.10 — Instant Everything
|
||
- SQLite-backed followers, bookmarks, and articles cache; instant own-profile load
|
||
|
||
### Previous: v0.9.8–v0.9.9 — Web of Trust, Speed & Linux Fix
|
||
- Web of Trust (Vertex DVM), SQLite-backed notifications, instant threads, Linux upload fix, trending reliability
|
||
|
||
### Previous: v0.9.0–v0.9.7 — Reactions, Search, Threads & Themes
|
||
- Grouped emoji reactions, advanced search (NIP-50), follows view, nested thread trees, 7 color themes, font size presets, relay management, live feed, NIP-46 remote signer
|
||
|
||
### Previous highlights
|
||
- v0.8.x: Trending feed, media feed, profile gallery, OS notifications, NIP-05 badges, hashtag pages, keyword muting, emoji picker, data export, relay health checker
|
||
- v0.7.x: NIP-98 uploads, markdown toolbar, multi-draft management, advanced search with modifiers
|
||
- v0.6.x: Article discovery feed, article cards, article search
|
||
- v0.5.x and earlier: Note sharing, reply counts, image lightbox, bookmarks, DMs, multi-account, system tray, auto-updater
|
||
|
||
### Install
|
||
|
||
**Linux (Ubuntu / Debian / Mint):** Download the `.deb` and run:
|
||
```
|
||
sudo dpkg -i vega_*.deb
|
||
```
|
||
**Linux (Fedora / openSUSE):** Download the `.rpm` and run:
|
||
```
|
||
sudo rpm -i vega-*.rpm # Fedora
|
||
sudo zypper install vega-*.rpm # openSUSE
|
||
```
|
||
**Linux (Arch / Manjaro):** Install from the AUR:
|
||
```
|
||
yay -S vega-nostr-git
|
||
```
|
||
|
||
**Windows:** Download the `.exe` installer and run it.
|
||
**macOS (Apple Silicon):** Download the `aarch64.dmg` and open it.
|
||
|
||
---
|
||
⚡ Find Vega useful? [Zap the developer](https://github.com/hoornet/vega#support) or star the repo.
|
||
releaseDraft: false
|
||
prerelease: false
|
||
includeUpdaterJson: true
|
||
args: ${{ matrix.args }}
|