Skip to main content

Changelog

Every improvement, automatically tracked from our commit history.

Subscribe via Atom feed
← Prev Page 77 of 117 Next →
February 19, 2026
patch Desktop Shell

Eliminate sidebar icon flash, add item-card hover lift v1.39.1

Desktop 1.39.0 → 1.39.1 | 2b6b5974
Details

Fix the hover flash on sidebar nav icons and add hover lift to list items.

Sidebar flash root cause: two competing background transitions firing simultaneously

on pointer enter. The explicit `Button.nav-item:pointerover /template/ ContentPresenter`

style snapped the ContentPresenter background to ThemeNavHoverBrush immediately (no

transition) while the Button's own BrushTransition was still interpolating over 0.12s.

The instantaneous ContentPresenter repaint behind the icons was the flash. Additionally,

`Button.nav-item:pointerover Border.nav-icon-bubble` was transitioning the bubble to

ThemeNavHoverBrush (the same color as the button background), creating a double-transition

artifact on the composited layers. Both of those styles are removed — the Button's

BrushTransition on Background is the sole source of hover feedback, which is clean and

flicker-free.

New Border.item-card style in PrivStackTheme: lift-only hover effect for list items.

On pointer-over it applies translateY(-1px) via TransformOperationsTransition (200ms

CubicEaseOut) and deepens the BoxShadow from none to a two-layer shadow — same feel

as the card hover lift on dashboard stat-cards but at a smaller 1px travel distance

appropriate for compact list items. No background color change (items keep

ThemeSurfaceElevatedBrush throughout).

patch Desktop Shell

Resolve build errors and warnings from design system overhaul

Details

Three issues introduced by the v1.38.0 design system commit:

1. BoxShadow on Button (AVLN2000/AVLN2200) — removed invalid BoxShadow setter

from Button.view-toggle.active in both ViewToggleGroup.axaml (local style)

and PrivStackTheme.axaml (global style). BoxShadow is only valid on Border

and Panel-derived controls in Avalonia, not Button. The active segment is

visually distinguished by ThemeSurfaceElevatedBrush + SemiBold alone.

2. async void with [RelayCommand] (MVVMTK0039) — changed GoNext() return type

from async void to async Task in SetupWizardViewModel.cs so the generated

RelayCommand can properly await and surface exceptions.

3. Unused c_int import in privstack-ffi/src/cloud/mod.rs — this was reverted

in the companion Rust commit; the import is required for the android_log

constants added in that commit.

patch Core

Embedded CA bundle + android_log infrastructure for cloud sync

Core 1.12.1 → 1.12.2 | e153fbcc
Details

Switch S3 transport from rustls-native-certs to an embedded Mozilla CA bundle

(cacert.pem baked in at compile time via include_bytes!) so the AWS SDK can

establish TLS connections on Android where root CAs live in a non-standard

path (/system/etc/security/cacerts/) that rustls-native-certs does not

discover, causing a panic or empty trust store.

Changes:

  • Add aws-smithy-http-client with rustls-ring feature; build a custom

HttpClient in S3Transport::build_client() that loads the embedded PEM

bundle into a TrustStore rather than relying on the host OS CA store.

  • Switch reqwest to rustls-tls-webpki-roots (statically linked Mozilla roots)

for the API client to avoid the same problem on the HTTP side.

  • Add android_log() helper in privstack-ffi/src/cloud/mod.rs that routes

INFO/ERROR messages to __android_log_write on Android and eprintln! on all

other platforms. All cloud_err() calls now use it instead of bare eprintln!.

  • Add step-by-step android_log instrumentation inside

privstack_cloudsync_enter_passphrase (list_workspaces, user_id,

get_credentials, S3 download, deserialise+decrypt) so Android logcat shows

exactly which step fails during keypair loading.

  • Bump workspace version 1.12.1 → 1.12.2.
patch Desktop Shell

Fix graph node colors not respecting active theme (v1.37.1)

Desktop 1.37.0 → 1.37.1 | 984047c6
Details

NeuronGraphControl.GetNodeBrush() looked up ThemeNodeXxxBrush resource

keys for 10 extended entity types (tag, company, contact_group, snippet,

rss, project, deal, transaction, credential, file), but none of the 7

theme files defined those keys. The fallback hardcoded hex colors were

always used instead, causing mismatched bright colors (e.g. cyan #06B6D4

snippets) on light themes like Sage where they looked jarring.

Added ThemeNodeXxxBrush blocks to all 7 themes:

Dark themes (DarkTheme, EmberTheme, SlateTheme) — vivid/saturated colors

optimized for near-black graph backgrounds:

Tag #9CA3AF · Company #F97316 · ContactGroup #A855F7

Snippet #06B6D4 · RSS #FB923C · Project #84CC16

Deal #EAB308 · Transaction #EC4899 · Credential #EF4444 · File #64748B

Light themes (LightTheme, AzureTheme, LavenderTheme, SageTheme) — muted

mid-tone variants that remain distinct and readable on near-white

graph backgrounds without appearing garish:

Tag #718096 · Company #DD6B20 · ContactGroup #7B2FC0

Snippet #0E7490 · RSS #C05621 · Project #4D7C0F

Deal #B45309 · Transaction #BE185D · Credential #B91C1C · File #475569

All 10 keys are now resolved via the DynamicResource lookup path rather

than the hardcoded fallback, ensuring graph node colors switch correctly

when the user changes themes at runtime.

patch Core

Update 2026-02-18

← Prev Page 77 of 117 Next →

Get notified about new releases