Repository navigation
Releases: SandObserver/Stackyard
Release list
1.19.0
Added
-
Nine short Backup haikus that fit small cards.
-
Let a widget manifest list the query parameters its data function reads.
-
Settings offers to add the address you are signed in on to Allowed Addresses.
Changed
-
The Unsplash wallpaper changes once a day instead of on every load.
-
Log a failing widget once, with a reminder every 10 minutes and a line on
recovery, instead of on every request. -
Redraw the Weather widget artwork as frosted glass with gentle motion that
pauses off screen. -
Choose the icon colour style (Dark, White, Auto, Clear or Color) from a
drop-down; colours and sliders show only under Color. -
Badge and wallpaper colour swatches sit together at the end of their row, all
one size.
Fixed
-
Name a widget without a manifest for re-entry when a port map change clears
its settings. -
Backup cards show a whole haiku or none, never part of one.
-
Show an error instead of zero DNS queries, "Nothing playing" or "Not secured"
when a service sends an unreadable reply. -
Stop a large non-JSON reply from a service from stalling the dashboard.
-
Show an error when a widget cannot draw the data it received, instead of
leaving old data on screen. -
Keep healthy Backup cards when another backup server stops answering.
-
Answer every widget request before the dashboard's proxy gives up, even when a
service stalls on several calls. -
Keep the dashboard and healthy widgets responsive while several services
stall. -
Keep every widget, badge and health check working while the DNS server is
down, instead of stalling behind lookups that never finish. -
Keep app health dots updating while the Docker socket proxy stops answering.
-
Treat a damaged settings block in the config file as damage instead of loading
it as an open install. -
Skip invalid entries in the config file's app list instead of failing health
checks, badges and widgets. -
Keep a config file edited by hand while the container runs instead of
overwriting it on the next save. -
Report no changes when importing an export that matches the current
configuration. -
Stop an icon upload from overwriting an existing icon when many share its
name. -
The Referrer policy picker shows and selects Default.
-
Now Playing no longer cuts off the second line of a long title.
-
Stop extra query values on widget data requests from filling server memory and
multiplying upstream calls. -
Stop app tiles with a refresh interval from filling the browser Back history.
-
Stop the Connections VPN view from stacking animation loops while its page is
off screen. -
Pause the Analog clock, Connections map and VPN animations on dashboard pages
not shown. -
Adding or removing a row in a widget's settings keeps the stored passwords and
keys of the other rows. -
Colour pickers in Settings fit on narrow phones without cutting off labels or
swatches. -
Colour sliders in Settings share one length.
-
Safari no longer logs a viewport warning when the dashboard loads.
Security
-
Keep a stored widget secret out of the browser when a save sends the widget
under a legacy type. -
Withhold stored secrets when a widget's type changes, the port map is removed,
or certificate checking for widgets is turned on or off. -
Stop trusting the first host name that opens Stackyard while no password is
set. Add a domain name in Allowed Addresses from an IP address or a local
name. -
Refuse service names that resolve to loopback or link-local addresses, such as
ip6-localhost, in admin URL tests. -
Block 6to4, local-use NAT64 and site-local IPv6 addresses in admin URL tests.
-
Refuse a config save whose settings block is not an object, which could remove
the password. -
Refuse a config save or import nested too deeply, which could leave the config
unreadable. -
Saving the wallpaper no longer replaces the stored Unsplash key with the
field's label. -
Icons always load through the server, so the CDN does not learn which services
a dashboard shows. -
A page on another site can no longer lock the owner out of sign-in by pointing
its host name at the server. -
The wallpaper endpoint no longer returns Unsplash's error text.
-
A session cookie set by another host on the same parent domain no longer signs
the owner out. -
The Connections widget no longer names an address the guard blocked.
1.18.0
Added
-
The widget picker shows a one-line description of each widget type.
-
Widgets open their service when no Click URL is set, if the browser can reach
its address. -
Backup, Now Playing and System Summary open the job, item or system they show,
under the Click URL when one is set. -
System Summary and the Connections map have a Click URL setting.
-
Add an optional API token for Scrutiny in Disk Health, needed from Scrutiny
2.0.
Changed
-
The small VPN view leaves more room between its text and the card edge.
-
The VPN view no longer shows the public IP address unless Show IP Address is
turned on in its settings. -
Widgets show soft placeholder shapes while they load, and Books and Now
Playing no longer show a heading or "Nothing playing" before their data
arrives. -
Disk Health shows each drive's status light on its bay.
-
Disk Health bay tooltips use the full widget width, so drive names are cut
less often. -
Widget link fields are labelled Link URL.
-
Weather hover and screen-reader text include when the data was last updated.
-
The Persian analog clock no longer shows the year on the dial.
Fixed
-
Weather, Books and GitHub contributions now mark their data as out of date
after one failed refresh, not two. -
Disk Health names a failed drive in words instead of only turning its light
red. -
The DNS widget labels its chart, so allowed, cached and blocked queries no
longer rely on colour alone. -
Widget text is never smaller than 11 points, including book spines, disk bay
labels, backup cards and the Now Playing band. -
Book spine titles and disk bay labels no longer shift letter by letter on
hover. -
Large and extra large widgets on desktop now end level with the widgets beside
them. -
Counts in search, badges and widgets follow the plural rules of the selected
language. -
Backup, Now Playing, Books, Weather and Connections read their labels in the
selected language's word order. -
Backup shows run times in the selected language.
-
Lists use the selected language's separators.
-
The language picker marks each language name with its language for screen
readers. -
System Summary translates "All interfaces" and badges translate container
states. -
Persian text reads as everyday Persian and no longer misdescribes several
settings. -
German, Spanish, French and Chinese text reads naturally, uses one form of
address, and follows each language's typography. -
Weather no longer shows dark bands at the card's sides in daytime with the
dark theme. -
System Summary chart columns have equal gaps.
-
Backup job names and error lines no longer break inside a word.
-
The analog clock date is no longer drawn below 11px.
-
Connections map legend entries have larger tap areas.
-
Backup card text no longer runs past the card in Persian.
-
Large Books spines show more of each title.
-
Stackyard icon no longer shows blank on the Unraid Docker tab and Dashboard.
-
Stop logging an nginx warning on every settings save.
-
Show settings labels in full on a phone instead of cutting them off.
Security
- Update expat to 2.9.0 to fix CVE-2026-77214 and CVE-2026-102633.
1.17.0
Added
-
Add an Update Every setting to System Summary, from 5 seconds to 1 minute.
-
Point at a System Summary chart to see a past reading, or at a disk to see its
used and total size. -
The logo on the About page turns its arc once on hover or tap.
-
A sideways trackpad swipe or mouse wheel turns dashboard pages, one page per
gesture.
Changed
-
Redesign System Summary with coloured figures in the small size and column
charts in the medium size. -
Show the System Summary network line in the medium size only.
-
Show System Summary temperatures in whole degrees.
-
Redesign the GitHub widget with a headline figure, a cleaner pull request list
and a contribution grid that fills the card. -
Point at a day on the GitHub contribution grid to see its date and count.
-
The GitHub widget now follows the light and dark theme.
-
Redesign the digital clock as large overlapping hour and minute figures in the
analog clock's colours. -
Name a config export downloaded straight from the API
stackyard-config.json,
matching the Export button. -
The connections map places each country's dots on its most populated areas.
-
Widgets render sharp on 1x screens.
Removed
- The GitHub widget no longer offers an extra large size. Existing extra large
GitHub widgets become large.
Fixed
-
About link icons keep their colours after the pointer moves over the list.
-
System Summary reports a Beszel account that cannot read its systems as a
sign-in problem instead of an empty hub. -
The digital clock shows its digits in the right order on a Persian dashboard.
-
Remove the thin dark lines along the sides of the Now Playing widget.
-
Editing an app no longer drops a summed Live Activity badge's unit, colour and
minimum. -
Editing an app set up in an older version no longer drops its Live Activity
headers, including a stored API key. -
Every number listed by Fetch in Live Activity now shows on the badge,
including Prometheus metrics with labels, names containing dots or dashes,
nested lists and plain-number answers. -
The Live Activity poll interval is now used: each service is read once per
interval, however many dashboards are open. -
A badge whose service answers with an error now keeps its last value, marked
out of date, instead of showing 0 or a number from the error page. -
A badge reading a response too large to read in full now reports it instead of
showing a short count. -
A folder badge is now marked out of date when an app inside it fails its poll.
-
TrueNAS disk health no longer names TrueNAS 26 in its unsupported-version
message. -
The time since the last update, shown on a failed widget, now meets text
contrast in both themes. -
A widget built from the template no longer shows its previous items under
"Nothing here" when a refresh comes back empty. -
Changing a widget's display settings, such as Weather units or city, a GitHub
view or a slot colour, no longer asks for its API key or password again. -
Widgets no longer stay blank when the widget list fails to load once while the
dashboard starts. -
System Summary no longer shows Unraid's own error text when Unraid reports a
problem. -
A widget manifest whose options are not value and label pairs is now refused
at startup instead of showing "undefined" in its settings. -
Keep the warning that a stored credential must be entered again on screen
after a save. -
Restore settings from a backup, not only apps, folders and widgets.
-
Upgrade a backup from an older release when it is restored.
-
Show a credential as missing after a restore when it was not kept.
-
Keep the current wallpaper when a restored backup names an uploaded wallpaper
this install does not have. -
Refuse a config whose folder contents are not a list of item ids, instead of
saving it and breaking the dashboard. -
Import a link written as
host:portfrom Homepage or Dashy as a working
http://link. -
Drop a health-check address from Homepage or Dashy that only the other
dashboard can resolve, instead of importing a check that always fails. -
Refuse a Homepage or Dashy file whose merge keys expand too far, instead of
freezing the page. -
Read a Homepage or Dashy file with very long lines without freezing the page.
-
The connections map draws users from small countries such as Belgium,
Switzerland, Israel and Singapore. -
A second service in the same country no longer covers the first one's dots on
the connections map. -
The connections map key no longer runs over the map with many services or long
names. -
The settings navigation no longer jumps when the version number loads.
-
The settings page no longer shifts sideways when its scrollbar appears.
Security
-
Changing the port map now asks for stored API keys again instead of sending
them to the newly mapped host. -
Turning on Allow self-signed certificate for an app now asks for its stored
API key again before it is sent without certificate checking. -
Secrets in a widget setting that is declared more than once, one per provider,
are no longer sent to the browser or written to the config export. -
System Summary no longer reuses one Beszel account's login for a widget
configured with a different account or password.
1.16.0
Added
-
Add Allowed Addresses to Settings, General, to list extra host names
Stackyard answers on while no password is set. -
Add a Type to Search switch to Settings, so typing on the dashboard can stop
opening search.
Changed
-
Keep widget pages in the browser cache between dashboard loads, and check
translation files for changes instead of downloading them again in every
widget. -
Make typing in search faster when folders match, and show the dashboard sooner
on slow connections by sending its start-up requests together. -
Show the Clear app icon background as a checkerboard in the colour picker.
-
Show numbers in the digits of the language chosen in Settings, such as Persian
digits for Persian, instead of the browser's region. -
Show the Shahanshahi date with its year on the clock in Persian.
-
Draw the analog clock date at the same weight as the digital clock date.
Fixed
-
Translate the remaining English labels and hints in Settings, the colour
picker and the sign-in screen, and show failure reasons in the selected
language. -
Show counts, totals, badge values and other numbers on the dashboard, in
widgets and in Settings in the reader's digits. -
Mirror folder rows, the phone folder title and widget swipes in right-to-left
languages, and keep brackets around names in place. -
Read Prometheus series whose label values contain spaces.
-
Say why an address check got no answer, such as a refused connection, an
unknown host or an invalid address, instead of a certificate warning. -
Report a service that hangs up mid-reply at once, instead of as a timeout.
-
Answer an oversized icon upload or wallpaper link with an error instead of
dropping the connection. -
Refuse a Settings save that would overwrite dashboard changes made in another
tab or on another device. -
Keep both changes when two dashboard edits or two Appearance switches are
saved in quick succession. -
Keep the last saved wallpaper when a wallpaper link fails, or when another
setting is saved before a new upload. -
Stop a failed Unsplash key save from taking effect until the next config read.
-
Use a saved widget's or app's stored key, headers and parameters when its
Fetch button is pressed, and show the specific reason a Fetch failed. -
Show the Settings load-failure message and Retry button when the config cannot
be read, readable in both themes. -
Raise the contrast of text, badges, fields and icons in the light theme across
the dashboard, Settings, the sign-in screens and the DNS and Weather widgets. -
Show Settings controls, selected items, keyboard-selected results and text
field edges in Windows high contrast mode. -
Show focus rings on the search, header, poll interval and icon search fields,
the Cancel and Import buttons and the Settings sliders. -
Keep keyboard focus in place when Settings redraws or edits an item, inside
the sign-in screen, and off switched-off sections of the item editor. -
Name and announce Settings controls, Fetch and Test results, the current
section, group headings and folder app badges for screen readers. -
Open widget links from the keyboard in the DNS, Weather, GitHub, VPN and
Backup widgets, and fix Enter on the Now Playing arrows and Books spines. -
Fit Settings and the empty dashboard on narrow and short screens, at 400% zoom
and around the iPhone notch, and keep the Settings sidebar on screen. -
Make folder page dots and badges that open a value list easier to tap.
-
Blur the background behind the Settings sign-in and set-password screens on
Safari 17. -
Style the text field in the current password and New Folder dialogs like other
Settings fields. -
Stop extra dashboard and widget refreshes after the tab is hidden, the
dashboard page is swiped or a phone rotates. -
Mark badges and health as out of date when the dashboard is signed out,
instead of showing frozen values as current. -
Stop the Connections map from adding another animation loop on every refresh
and resize. -
Release the Pi-hole session when a DNS widget refresh fails, so repeated
failures no longer lock the widget out. -
Show an error instead of stale or empty data when the GitHub, Books, Weather,
Backup or System Stats source fails, or a Backup job is deleted. -
Make the widget template report failures as errors, so widgets copied from it
do not show them as empty data. -
Show a disk that failed its SMART check as failed on Disk Health, instead of
as a warning. -
Colour each System Stats value with its own slot colour, whatever the slot
order. -
Show "Unknown timezone" on the clock when its timezone name is not recognised,
instead of a blank or stopped clock. -
Show Persian and other joined-script dates correctly on the analog clock in
Safari. -
Show an emoji initial on an app with no icon.
-
Open Settings when the browser blocks site storage.
-
Stop the container cleanly on
docker stopinstead of killing the dashboard
mid-shutdown.
Security
-
Stop a widget provider set to an inherited object name from returning saved
API keys. -
Require the current password to change the password or turn off password
protection. -
Keep sign-in on and refuse saves when the config file is damaged or cannot be
read, and show how to fix it. -
Answer only IP addresses, local names and allowed addresses while no password
is set. Add each extra domain name in Settings, General, Allowed Addresses. -
End the session on the server at sign-out, so a copied session cookie stops
working. -
End every session 30 days after sign-in, even while it is in use.
-
Stop a crafted XML or Prometheus reply from a configured service from freezing
the API. -
Close health checks and refused redirects against a service that streams
without end, so they no longer pile up connections. -
Count the DNS lookup toward the time limit for addresses tested in Settings.
-
Keep malformed request bodies, such as a mistyped password, out of the server
log. -
Stop requests for unknown widget ids from growing the API's memory.
-
Refuse a Dashy or Homepage import file that expands to more than 5,000
entries, instead of freezing the page. -
Send a restrictive Content-Security-Policy on API responses.
-
Apply the Compose file's capability, privilege and resource limits to the
Unraid template.
1.15.0
Added
- Add swatches and hue, saturation and brightness sliders to the Solid color
background.
Changed
-
Restyle Settings to match iOS and iPadOS 27.
-
Restyle the home screen and app icons to match iOS and iPadOS 27.
-
Give widget cards the iOS 27 edge light and drop the uppercase widget
headings. -
Redraw the logo as exact geometry in the favicon, the app icons and Settings.
Fixed
-
Admin error messages for badge tests and widget option fetches are translated
instead of always English. -
A failed badge test reports why the request failed instead of always blaming a
missing API path. -
Status and error messages in Settings use the full width of their row instead
of wrapping in a narrow strip. -
A malformed background colour falls back to the default instead of painting an
unintended colour. -
Show a message in Settings when the Unsplash wallpaper cannot be loaded.
-
Hide the empty page indicator on the connection error screen.
-
Opening an app from search opens one tab, not two.
-
Dashboard switch names are readable in the light theme.
-
Show the whole logo on the empty dashboard in the light theme.
-
Fill the Android home screen icon to its edges instead of leaving transparent
corners. -
Turning off Allow Fullscreen on an iframe widget now stops the framed page
going fullscreen. -
Open folders no longer wash out the wallpaper in the light theme.
1.14.0
Added
-
Display Mode now applies to the dashboard and every widget, not only Settings.
-
App icon colours Auto, which follows the display mode, and Clear, a frosted
glass plate. -
Badge colours Accent, Success, Warning, Danger and Info.
-
Umami services can authenticate with an API key instead of a username and
password.
Changed
-
A new password is limited to 1024 characters.
-
Restyle app icon tiles with a top-lit edge and vertical shading.
-
App and dock tiles press in on click instead of lifting on hover.
-
Redraw the Settings icons, widget glyphs and Settings tile as one icon set.
-
Preset icon and badge colours adapt to the display mode; a custom colour stays
exact. -
Widget cards are opaque, white in light mode and near-black in dark mode.
-
The clock follows the display mode; its own Dark and Light option is removed.
-
The VPN and Connections maps are larger and easier to see.
Fixed
-
A settings change is no longer held in memory when writing it to disk fails.
-
Space on a focused tile or folder activates it instead of opening search.
-
Search keeps every letter typed to open it, including in Safari on a narrow
window. -
Disk Health no longer shows dark strips at its sides.
-
Settings keeps a choice made while the page is still loading, instead of
leaving Save greyed out. -
App labels stay readable over a dark wallpaper with increased contrast in
light mode. -
Settings sections start at the top on a phone instead of keeping the previous
section's scroll position. -
Renaming or recolouring a service no longer clears its stored credential.
-
Settings no longer reports a credential as stored after the one it described
was dropped.
1.13.1
Changed
-
Restyle the dock and folders as thin glass with smooth corners.
-
Restyle Settings as grouped lists with a tab bar, dropdown menus and type and
size pickers.
Removed
- Remove the Title and Description rows from General, which never saved.
Fixed
-
Fix the Add New type chooser closing after choosing Widget or a size.
-
Fix desktop tiles landing below the page when a wide widget leaves a gap.
-
Fix multi-select pickers closing after each choice.
-
Fix the loading spinner and the editor back button sitting off-side in
Persian. -
Announce the selected widget size to screen readers.
1.13.0
Added
- Add OpenWeather as a Weather widget provider.
Changed
- Redesign the Books widget shelf and name the book in progress under it.
Fixed
- Keep Save on screen in phone Settings headers with long names.
- Fix typing into widget settings text, number and API key fields.
1.12.0
Changed
-
The DNS widget flow chart spreads its outcomes apart and shows each count in
the headline when you point at or drag across the chart. -
Now Playing moves the player name and previous and next controls into a
coloured band on the label, and switches items without sliding the whole
cassette. -
Settings sections now expand and collapse instead of appearing at full height.
-
Settings Save buttons stay disabled until something changes, and leaving with
unsaved changes asks first.
Fixed
-
Fix settings dropdowns being clipped, covered by the tab bar, or running off
screen on a phone. -
Fix the Authentication rows staying hidden when a badge fetch reports that
credentials are needed. -
Fix folder, search and clock details: phone folders close on a click outside,
the Search pill is a button, folders show their icon grid in search, the
analog clock date shows through the hands, and the item editor names the item. -
Fix the page dots and dock covering the last row of apps on short desktop
windows. -
Dropdowns can be operated by keyboard: arrow keys, Home, End, type-ahead,
Enter and Escape. -
Fix missing gaps between cards in the app and widget editor.
-
Fix the phone layout not refitting a narrowed window, and the phone dock and
Search pill staying after widening to desktop. -
Fix tiles shrinking on a narrow desktop window, which now shows fewer columns,
and open folders growing past phone size on a wide phone-layout window.
1.11.0
Added
-
The System widget's Speedtest Tracker provider accepts an API token, and uses
the documented v1 API when one is set. -
The icon picker now searches dashboardicons, selfh.st, simple-icons and
lobehub together, matches a service by its alias or by any spelling of its
name, and offers an icon's light and dark file as a choice. -
The web app manifest declares the icon sizes, screenshots, identity and
Settings shortcut browsers use to offer an install.
Changed
-
The demo dashboard now shows the apps, icons, tile colours and widgets of the
dashboard pictured on the project site. -
The System widget draws its charts immediately on the demo, instead of
filling them one reading at a time. -
Lists and menus now carry a single highlight that glides between rows instead
of redrawing on each one. -
The settings navigation pill now travels between sections instead of fading in
place.
Fixed
-
The Disk Health widget now reads Scrutiny disks from builds that identify a
device byscrutiny_uuidorwwn, not onlydevice_id. -
Clients that ask for
/favicon.iconow get the app mark instead of a 404. -
The demo's dashboard switcher shows its keychain names instead of the
addresses behind them. -
The demo's network row shows a fabricated speed instead of the demo
container's own traffic. -
The dashboard and Settings now keep clear of a display's left and right safe
areas, which a device reserves for a hinge or for system controls. -
The hover highlight now follows the keyboard when you arrow through a list the
pointer is resting in. -
The dashboard grid no longer loses its outer columns on a device whose side
inset is wider than the page gutter. -
Correct Persian orthography and translation wording, and localise the
connections map label in every language. -
Icon suggestions work again. The catalogue index had moved, so typing a name
suggested nothing.