Compare commits

..

6 Commits

Author SHA1 Message Date
Psychotoxical 00213085b8 chore: bump version to 0.1.2 and fix tauri capability build error 2026-03-09 19:51:57 +01:00
Psychotoxical 1cf71f51b5 fix(tauri): exit app on close and grant ipc permissions & update changelog 2026-03-09 19:39:13 +01:00
Psychotoxical 7cc90e2ab7 docs: add screenshot image 2026-03-09 19:17:23 +01:00
Psychotoxical 40e422b64e docs: add screenshot to README 2026-03-09 19:15:14 +01:00
Psychotoxical 30b6a86edc docs: add beta release warning to README 2026-03-09 19:12:29 +01:00
Psychotoxical 128e1de149 Add thorough README and CHANGELOG 2026-03-09 19:10:14 +01:00
10 changed files with 134 additions and 7 deletions
+26
View File
@@ -0,0 +1,26 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.1.1] - Beta Hotfix
### Fixed
- **App Termination Bug**: Fixed an issue where the application would hang in the background when the close button was clicked due to default Tauri tray icon handling. The `exit_app` event is now correctly triggered.
## [0.1.0] - Initial Release
### Added
- **Core Architecture**: Full transition to Tauri v2 with React front-end.
- **Subsonic API Integration**: Complete support for browsing albums, artists, playlists, and fetching streams.
- **Theming System**: Implementation of the Catppuccin Mocha (Dark) and Latte (Light) design systems with dynamic CSS variables.
- **Internationalization (i18n)**: Multi-language support structure established with English and German translations out of the box.
- **Player & Queue**: Fully functional persistent queue with drag-and-drop support, repeat modes, and volume state retention.
- **Live "Now Playing"**: Real-time dropdown to view active streams on the connected server.
- **Settings & Network**: Dual URL configuration (LAN/External) with ping-testing capabilities.
- **Full-Screen Player**: Immersive full-screen mode showing massive album art and track metadata.
- **Continuous Integration**: Automated GitHub Actions to compile native binaries for Linux, macOS, and Windows.
*Initial public release repository setup.*
+89
View File
@@ -0,0 +1,89 @@
<div align="center">
<img src="public/logo.png" alt="Psysonic Logo" width="200"/>
<h1>Psysonic</h1>
<p><strong>A modern, gorgeous, and blazing fast desktop client for Subsonic API compatible music servers (Navidrome, Gonic, etc.).</strong></p>
<p>
<a href="https://github.com/Psychotoxical/psysonic/releases/latest"><img alt="Latest Release" src="https://img.shields.io/github/v/release/Psychotoxical/psysonic?style=flat-square&color=8839ef"></a>
<a href="https://github.com/Psychotoxical/psysonic/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/github/license/Psychotoxical/psysonic?style=flat-square&color=cba6f7"></a>
<a href="https://tauri.app/"><img alt="Built with Tauri" src="https://img.shields.io/badge/Built%20with-Tauri-242938?style=flat-square&logo=tauri"></a>
</p>
</div>
---
> [!WARNING]
> **Beta Release (v0.1.0):** This is the very first public release. While fully usable, you might encounter bugs. Additionally, the English translation is currently incomplete in some areas.
Psysonic is a beautiful desktop music player built completely from the ground up for the modern era. Utilizing **Tauri v2** and **React**, it offers a native-feeling, lightweight, and incredibly fast experience with a stunning UI inspired by the [Catppuccin](https://github.com/catppuccin/catppuccin) aesthetic.
Designed specifically for users hosting their own music via Navidrome or other Subsonic API servers, Psysonic aims to be the best way to interact with your personal library.
![Psysonic Screenshot](public/screenshot.png)
## ✨ Features
- 🎨 **Gorgeous UI**: Deeply integrated Catppuccin themes (Mocha & Latte) with smooth glassmorphism effects and micro-animations.
-**Blazing Fast**: Built with Rust & Tauri, resulting in minimal RAM usage compared to typical Electron apps.
- 🌍 **Internationalization (i18n)**: Fully translated into English and German, with the architecture built to easily support more languages.
- 📻 **Live "Now Playing"**: See what other users on your server are currently listening to in real-time.
- 🎵 **Last.fm Scrobbling**: Full integration for scrobbling your tracks via the Navidrome server.
- 💾 **Local Caching**: Fast loading times with customizable image caching thresholds.
- 💿 **Album & Artist Views**: Beautiful grid displays and detailed artist pages with related albums.
- 🎛️ **Queue Management**: Drag & drop support, playlist saving, and loading directly built into the queue.
- 🖥️ **Cross-Platform**: Available natively for Windows, macOS, and Linux.
## 📥 Installation
Navigate to the [Releases](https://github.com/Psychotoxical/psysonic/releases) page and download the installer for your operating system.
- **Windows**: `.exe` or `.msi`
- **macOS**: `.dmg`
- **Linux**: `.AppImage` or `.deb`
## 🚀 Getting Started
1. Download and install Psysonic.
2. Open the app and enter your Subsonic/Navidrome server details (URL, Username, Password).
3. If applicable, you can provide both an external URL and a local LAN IP. Psysonic allows you to quickly toggle between them in the Settings.
4. Enjoy your music!
## 🛠️ Development
If you want to build Psysonic from source or contribute to the project:
### Prerequisites
- [Node.js](https://nodejs.org/) (v18+)
- [Rust](https://www.rust-lang.org/)
- OS-specific build dependencies for Tauri (see the [Tauri prerequisites guide](https://tauri.app/v1/guides/getting-started/prerequisites)).
### Setup
```bash
# Clone the repository
git clone https://github.com/Psychotoxical/psysonic.git
cd psysonic
# Install node dependencies
npm install
# Run in development mode
npm run tauri:dev
# Build for production
npm run tauri:build
```
## 🤝 Contributing
Contributions are completely welcome! Whether it is translating the app into a new language, fixing a bug, or proposing a new feature.
1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the Branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request
## 📄 License
Distributed under the MIT License. See `LICENSE` for more information.
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "psysonic",
"version": "0.1.0",
"version": "0.1.2",
"private": true,
"scripts": {
"dev": "vite",
Binary file not shown.

After

Width:  |  Height:  |  Size: 558 KiB

+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "psysonic"
version = "0.1.0"
version = "0.1.2"
description = "Psysonic Desktop Music Player"
authors = []
license = ""
+4 -1
View File
@@ -23,6 +23,9 @@
"fs:allow-mkdir",
"fs:scope-download-recursive",
"fs:scope-home-recursive",
"core:window:allow-set-title"
"core:window:allow-set-title",
"core:window:allow-close",
"core:window:allow-hide",
"core:window:allow-show"
]
}
+1 -1
View File
@@ -1 +1 @@
{"default":{"identifier":"default","description":"Default capabilities for Psysonic","local":true,"windows":["main"],"permissions":["core:default","shell:default","shell:allow-open","notification:default","global-shortcut:allow-register","global-shortcut:allow-unregister","store:default","store:allow-load","store:allow-set","store:allow-get","store:allow-save","dialog:default","dialog:allow-open","fs:default","fs:allow-write-file","fs:allow-mkdir","fs:scope-download-recursive","fs:scope-home-recursive","core:window:allow-set-title"],"platforms":["linux","macOS","windows"]}}
{"default":{"identifier":"default","description":"Default capabilities for Psysonic","local":true,"windows":["main"],"permissions":["core:default","shell:default","shell:allow-open","notification:default","global-shortcut:allow-register","global-shortcut:allow-unregister","store:default","store:allow-load","store:allow-set","store:allow-get","store:allow-save","dialog:default","dialog:allow-open","fs:default","fs:allow-write-file","fs:allow-mkdir","fs:scope-download-recursive","fs:scope-home-recursive","core:window:allow-set-title","core:window:allow-close","core:window:allow-hide","core:window:allow-show"],"platforms":["linux","macOS","windows"]}}
+7 -2
View File
@@ -12,6 +12,11 @@ fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}
#[tauri::command]
fn exit_app(app_handle: tauri::AppHandle) {
app_handle.exit(0);
}
pub fn run() {
tauri::Builder::default()
.plugin(tauri_plugin_shell::init())
@@ -54,7 +59,7 @@ pub fn run() {
}
}
"quit" => {
app.exit(0);
std::process::exit(0);
}
_ => {}
})
@@ -102,7 +107,7 @@ pub fn run() {
let _ = window.emit("window:close-requested", ());
}
})
.invoke_handler(tauri::generate_handler![greet])
.invoke_handler(tauri::generate_handler![greet, exit_app])
.run(tauri::generate_context!())
.expect("error while running Psysonic");
}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "Psysonic",
"version": "0.1.0",
"version": "0.1.2",
"identifier": "dev.psysonic.app",
"build": {
"beforeDevCommand": "npm run dev",
+4
View File
@@ -1,6 +1,7 @@
import React, { useEffect, useState, useCallback } from 'react';
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
import { listen } from '@tauri-apps/api/event';
import { invoke } from '@tauri-apps/api/core';
import { getCurrentWindow } from '@tauri-apps/api/window';
import Sidebar from './components/Sidebar';
import PlayerBar from './components/PlayerBar';
@@ -207,6 +208,9 @@ function TauriEventBridge() {
if (minimizeToTray) {
event.preventDefault();
await win.hide();
} else {
// If not minimizing to tray, we want to exit the app completely
await invoke('exit_app');
}
}).then(u => unlisten.push(u));