SubSonicMedia is a comprehensive .NET client library for the Subsonic API, supporting API version 1.16.1.
- (mostly) full implementation of Subsonic API v1.16.1
- Strongly-typed response models
- Interface-based architecture for easy testing and extensibility
- Async support throughout
- Comprehensive documentation
These Subsonic API methods aren’t exposed yet:
- scrobble
- getSimilarSongs
- getSimilarSongs2
- getTopSongs
- getNowPlaying
- getShares
- updateShare
- deleteShare
Full implementation status is detailed in the Implementation Status document.
dotnet add package SubSonicMediausing System;
using SubSonicMedia;
var connection = new SubsonicConnectionInfo(
serverUrl: "https://your-subsonic-server",
username: "username",
password: "password"
);
using var client = new SubsonicClient(connection);
// Ping the server
var pong = await client.PingAsync();
Console.WriteLine($"Server API version: {pong.Version}");The TestKit is a console application that validates the SubSonicMedia library against a real Subsonic-compatible server:
- Structured API tests with clear pass/fail results
- JSON output for test results
- JUnit XML output for integration with CI/CD systems
- Record server responses for future mocking
- Command-line interface for automation
- npm-style output with UTF-8 icons
- Detailed logging and error reporting
-
Navigate to the TestKit directory and copy the example environment file:
cd SubSonicMedia.TestKit cp .env.example .env -
Open
.envand set your server connection info:SUBSONIC_SERVER_URL=https://your-subsonic-server.com SUBSONIC_USERNAME=your-username SUBSONIC_PASSWORD=your-password API_VERSION=1.16.1 RECORD_TEST_RESULTS=true OUTPUT_DIRECTORY=./TestResults JUNIT_XML_OUTPUT=true
-
Run the TestKit application:
dotnet run
- Use
dotnet run -- --junit-xmlfor JUnit XML output. - Use
dotnet run listto list available tests. - Use
dotnet run helpfor full CLI options.
Explore the full documentation on SubSonicMedia Documentation.
This project is licensed under the GNU General Public License v3.0 or later.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request