Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,15 @@ updates:
- dependency-name: 'electron'
update-types:
- 'version-update:semver-major'
# Keep build-tool majors aligned with the peer ranges declared by
# electron-vite and vue-tsc; incompatible Vite 8 / TypeScript 7 bumps
# previously broke clean installs and type-checking.
- dependency-name: 'vite'
update-types:
- 'version-update:semver-major'
- dependency-name: 'typescript'
update-types:
- 'version-update:semver-major'
open-pull-requests-limit: 10

- package-ecosystem: 'github-actions'
Expand Down
35 changes: 33 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ permissions:
contents: write

concurrency:
group: release-${{ inputs.tag || github.ref }}
group: release-${{ inputs.tag || github.ref_name }}
cancel-in-progress: false

jobs:
Expand All @@ -29,12 +29,37 @@ jobs:
env:
REQUESTED_TAG: ${{ inputs.tag || github.ref_name }}
run: |
if [[ ! "$REQUESTED_TAG" =~ ^v[0-9] ]]; then
if [[ ! "$REQUESTED_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "A version tag such as v1.2.0 is required." >&2
exit 1
fi
echo "value=$REQUESTED_TAG" >> "$GITHUB_OUTPUT"

- name: Checkout repository
uses: actions/checkout@v7
with:
ref: ${{ steps.tag.outputs.value }}

- name: Install Node
uses: actions/setup-node@v7
with:
node-version: 24
cache: npm

- name: Validate release
env:
TAG: ${{ steps.tag.outputs.value }}
run: |
package_version="$(node -p "require('./package.json').version")"
if [[ "$TAG" != "v$package_version" ]]; then
echo "Tag $TAG does not match package.json version $package_version." >&2
exit 1
fi
npm ci
npm test
npm run build
npm audit --omit=dev

- name: Create a single draft release
env:
GH_TOKEN: ${{ github.token }}
Expand Down Expand Up @@ -141,6 +166,12 @@ jobs:
--repo "$GITHUB_REPOSITORY" \
--pattern '*' \
--skip-existing
for metadata in latest.yml latest-mac.yml latest-linux.yml latest-linux-arm64.yml; do
if [[ ! -f "$metadata" ]]; then
echo "Required updater metadata $metadata was not published." >&2
exit 1
fi
done
# Exclude any existing hashes file so re-runs don't hash themselves.
find . -maxdepth 1 -type f ! -name 'hashes.txt' -print0 \
| sort -z \
Expand Down
22 changes: 21 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,31 @@
# Changelog

## Unreleased
## 1.2.0 - 2026-07-26

### Added

- Automatic update checks on packaged-app startup, with native notifications
and tray actions to download/install supported packages or open the macOS
release downloads.

### Improved

- Release validation now requires the tag to match `package.json` and passes a
clean install, tests, build, and production dependency audit before creating
the draft release.
- Linux Snap packaging now uses electron-builder's supported `snapcraft`
configuration on the stable core22 base.

### Fixed

- Restored click-through overlays on Linux so effects no longer block the
configuration window or other applications.
- Restored clean installs and full type-checking by keeping Vite and TypeScript
on versions supported by the current Electron/Vue toolchain.
- Prevented package-manager-owned update flows from leaving the tray stuck in
the checking state.
- Avoided offering unsupported in-app installation from unsigned macOS builds;
update notifications now open the release-download handoff instead.

## 1.1.0 - 2026-07-26

Expand Down
17 changes: 11 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ click-through layer over your screens — scanlines, glitch bursts, a live
system-stats HUD, a Pomodoro timer, and a set of "ambient intelligence" effects
that quietly react to what's happening on your machine.

Everything runs **100% locally**. No accounts, no telemetry, no network calls,
no recordings — screen/audio analysis happens entirely in memory on your
computer and is never stored or sent anywhere.
Screen/audio analysis runs **100% locally**. There are no accounts, telemetry,
or recordings, and captured data is never stored or sent anywhere. Packaged
builds only contact GitHub Releases to check for app updates.

## Features

Expand All @@ -26,6 +26,9 @@ computer and is never stored or sent anywhere.
`MINIMAL`, `MAXIMUM`) that set a sensible baseline you can tweak from there.
- **Launch at login** — start the overlay automatically (background) on user
login.
- **Automatic updates** — packaged builds check GitHub Releases on startup;
update actions stay under your control through notifications and the tray
menu. Unsigned macOS builds open the release downloads for manual install.
- **Performance profiles** — choose `ECO`, `BALANCED`, or `SMOOTH` to trade
screen-analysis responsiveness and animation frame rate for lower resource use.
- **Global hotkeys** — toggle effects, switch themes, open config, and start a
Expand Down Expand Up @@ -101,9 +104,11 @@ Settings are stored per-display in the app's user-data folder

## Privacy

Hronomancer does not require an account and never connects to the internet.
Screen and audio analysis are performed locally for the visual effects only;
nothing is logged, saved, or transmitted.
Hronomancer does not require an account and sends no telemetry. Screen and audio
analysis are performed locally for the visual effects only; captured data is
never logged, saved, or transmitted. Packaged builds make a version-check
request to GitHub Releases on startup and only download an update after you
choose to do so.

## Support

Expand Down
6 changes: 4 additions & 2 deletions electron-builder.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,13 @@ linux:
category: Utility
appImage:
artifactName: ${productName}-${version}-${arch}.${ext}
snap:
snapcraft:
base: core22
artifactName: ${productName}-${version}-${arch}.${ext}
confinement: strict
publish:
- provider: github
core22:
confinement: strict
deb:
artifactName: ${productName}-${version}-${arch}.${ext}
rpm:
Expand Down
Loading