diff --git a/README.md b/README.md index d89e390..af4f395 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,149 @@ -# soundsonic +# SoundSonic -open subsonic api implementation \ No newline at end of file +A Rust-based music streaming server implementing the OpenSubsonic API protocol. + +## Overview + +SoundSonic is a lightweight music streaming server built with Rust that implements the [OpenSubsonic](https://opensubsonic.netlify.app/) API specification. It allows you to stream your music collection to any OpenSubsonic-compatible client. + +## Features + +- **OpenSubsonic API Support**: Compatible with any client supporting the OpenSubsonic protocol +- **User Management**: Role-based access control with customizable user permissions +- **SQLite Database**: Lightweight local storage with Diesel ORM +- **RESTful API**: Clean, well-structured API endpoints +- **Async Runtime**: Built on Tokio for high performance + +## Technologies + +- **Rust** (Edition 2024) +- **Axum** - Web framework +- **Tokio** - Async runtime +- **Diesel** - ORM with SQLite +- **Serde** - Serialization/deserialization + +## Prerequisites + +- Rust (latest stable version) +- SQLite +- Diesel CLI (for database migrations) + +## Installation + +1. Clone the repository: +```bash +git clone +cd soundsonic +``` + +2. Set up the database URL: +```bash +export DATABASE_URL=database.db +``` + +Or create a `.env` file: +``` +DATABASE_URL=database.db +``` + +3. Run database migrations: +```bash +diesel migration run +``` + +4. Build and run the server: +```bash +cargo run +``` + +The server will start on `http://0.0.0.0:3311` + +## API Endpoints + +### System + +- `GET/POST /rest/getOpenSubsonicExtensions` - Get supported OpenSubsonic extensions + +### User Management + +- `GET/POST /rest/createUser.view` - Create a new user with specified permissions + +### Request/Response Format + +All API responses follow the OpenSubsonic response format: + +```json +{ + "subsonic-response": { + "status": "ok", + "version": "1.16.1", + "type": "SoundSonic", + "serverVersion": "1.16.1", + "openSubsonic": true + } +} +``` + +## User Roles + +Users can have the following permissions: + +- `adminRole` - Administrative privileges +- `streamRole` - Stream music +- `downloadRole` - Download music +- `uploadRole` - Upload music +- `playlistRole` - Manage playlists +- `coverArtRole` - Manage cover art +- `commentRole` - Add comments +- `podcastRole` - Access podcasts +- `shareRole` - Share content +- `jukeboxRole` - Jukebox control +- `videoConversionRole` - Video conversion +- `settingsRole` - Change settings +- `ldapAuthenticated` - LDAP authentication + +## Configuration + +The server can be configured via environment variables: + +- `DATABASE_URL` - Path to the SQLite database file (required) + +## Development + +### Running in development mode: +```bash +cargo run +``` + +### Building for production: +```bash +cargo build --release +``` + +### Database schema changes: +```bash +diesel migration generate +diesel migration run +``` + +## Supported OpenSubsonic Extensions + +- `apiKeyAuthentication` - API key-based authentication +- `formPost` - Form-based POST requests +- `indexBasedQueue` - Index-based queue management +- `songLyrics` - Song lyrics support +- `transcodeOffset` - Transcoding offset support +- `transcoding` - Audio transcoding capabilities + +## License + +[Your License Here] + +## Contributing + +Contributions are welcome! Please feel free to submit a Pull Request. + +## Acknowledgments + +- [OpenSubsonic](https://opensubsonic.netlify.app/) - The API specification this server implements +- [Subsonic](http://www.subsonic.org/) - The original music streaming server