{"id":34657446,"url":"https://github.com/debba/storytel-player","last_synced_at":"2026-02-25T15:20:50.250Z","repository":{"id":317568270,"uuid":"1064100004","full_name":"debba/storytel-player","owner":"debba","description":"Storytel Unofficial Player for Desktop","archived":false,"fork":false,"pushed_at":"2026-02-17T08:11:43.000Z","size":2461,"stargazers_count":36,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"develop","last_synced_at":"2026-02-17T13:51:02.605Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://debba.github.io/storytel-player/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/debba.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-09-25T14:38:39.000Z","updated_at":"2026-02-17T08:11:21.000Z","dependencies_parsed_at":"2025-10-01T19:19:36.707Z","dependency_job_id":null,"html_url":"https://github.com/debba/storytel-player","commit_stats":null,"previous_names":["debba/storytel-player"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/debba/storytel-player","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debba%2Fstorytel-player","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debba%2Fstorytel-player/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debba%2Fstorytel-player/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debba%2Fstorytel-player/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/debba","download_url":"https://codeload.github.com/debba/storytel-player/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debba%2Fstorytel-player/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29725309,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T19:57:12.410Z","status":"ssl_error","status_checked_at":"2026-02-22T19:54:50.710Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-12-24T18:33:10.893Z","updated_at":"2026-02-25T15:20:50.228Z","avatar_url":"https://github.com/debba.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Storytel Player for Desktop\n\n![](https://img.shields.io/github/release/debba/storytel-player.svg?style=flat)\n![](https://img.shields.io/github/downloads/debba/storytel-player/total.svg?style=flat)\n![Build \u0026 Release](https://github.com/debba/storytel-player/workflows/Build%20\u0026%20Release/badge.svg)\n[![Known Vulnerabilities](https://snyk.io//test/github/debba/storytel-player/badge.svg?targetFile=package.json)](https://snyk.io//test/github/debba/storytel-player?targetFile=package.json)\n[![Discord](https://img.shields.io/discord/1470772941296894128?color=5865F2\u0026logo=discord\u0026logoColor=white)](https://discord.gg/YrZPHAwMSG)\n![i18n](https://img.shields.io/badge/i18n-EN%20|%20IT%20|%20DE%20|%20ES%20|%20FR%20|%20SV-blue)\n\n**Unoffical Storytel Player for Desktop** — a cross-platform desktop application for playing Storytel audiobooks, built with TypeScript, React, Fastify, and Electron.\n\n**Discord** - [Join our discord server](https://discord.gg/YrZPHAwMSG) and chat with the maintainers.\n\n\u003cimg src=\"docs/assets/og_image.png\" width=\"90%\"\u003e\u003c/img\u003e\n\n## Release Download:\n[![Windows](https://img.shields.io/badge/Windows-Download-blue?logo=windows)](https://github.com/debba/storytel-player/releases/download/v1.2.11/Storytel-Player-Setup-1.2.11.exe) [![macOS](https://img.shields.io/badge/macOS-Download-black?logo=apple)](https://github.com/debba/storytel-player/releases/download/v1.2.11/Storytel-Player-1.2.11.dmg) [![Linux](https://img.shields.io/badge/Linux-Download-green?logo=linux)](https://github.com/debba/storytel-player/releases/download/v1.2.11/Storytel-Player-1.2.11.AppImage)\n\n✅ **Native Desktop App**: Cross-platform application with system tray integration and single instance lock\n\n✅ **Audiobook Library**: Browse your Storytel library with cover art and progress tracking\n\n✅ **Audio Player**: HTML5 audio player with playback controls and bookmarks\n\n✅ **Session Management**: Secure authentication with persistent storage via electron-store\n\n✅ **Internationalization**: Multi-language support (i18next) with automatic language detection\n\n✅ **Cross-Platform**: Available for Windows, macOS (x64/ARM64), and Linux (x64/ARM64/ARMv7)\n\n✅ **Action Logging**: Internal logging of HTTP requests, responses, and user actions, exportable for debugging\n\n✅ **Development Mode**: Hot reload for both client and server during development\n\n✅ **Offline Listening**: Download audiobooks for offline playback\n\n\u003e [!NOTE]\n\u003e This is an independent project, not affiliated with Storytel\n\n## Architecture\n\nThe application is built with TypeScript and follows a modular architecture:\n\n- **Frontend**: React 18 with TypeScript, Tailwind CSS, and Vite (port 3000 in dev mode)\n- **Backend**: Fastify server with TypeScript and RESTful API (port 8080)\n- **Desktop**: Electron 38+ with TypeScript\n  - Window Manager: Main window handling with development/production modes\n  - Tray Manager: System tray integration\n  - Server Manager: Embedded Fastify server management\n  - IPC Manager: Inter-process communication between Electron and React\n- **Authentication**: Session-based authentication with secure storage\n- **Audio Streaming**: Direct integration with Storytel's streaming API\n- **Logging**: In-memory and file-based (app.log in the config directory) logging of system events and HTTP traffic\n\n## Prerequisites\n\n- Node.js 22+ (see `.nvmrc` for the recommended version)\n- npm 7+\n\n## Installation\n\n### macOS\n\n#### Homebrew (Recommended)\n\nTo add our tap, run:\n\n```bash\nbrew tap debba/storytel-player\n```\n\nThen install:\n\n```bash\nbrew install --cask storytel-player\n```\n\n[![Homebrew](https://img.shields.io/badge/Homebrew-Repository-orange?logo=homebrew)](https://github.com/debba/homebrew-storytel-player)\n\n#### Direct Download\n\nWhen you install storytel-player on macOS, you need to allow accessibility access (Privacy \u0026 Security) to the storytel-player app.\n\nIf you are upgrading and you already have storytel-player on the allowed list you will need to manually remove them before accessibility access can be granted to the new version.\n\nmacOS users who download directly from releases may need to run:\n\n```bash\nxattr -c \"/Applications/Storytel Player.app\"\n```\n\nafter copying the app to the Applications directory.\n\n### Arch Linux (AUR)\n\n```bash\nyay -S storytel-player-bin\n```\n\n## Updates\n\n### Automatic Updates\n\nStorytel Player checks for updates automatically on startup. When a new version is available, a notification will appear, allowing you to download and install the update seamlessly.\n\n### Manual Updates\n\nYou can also manually check for updates or download the latest version directly from the [Releases page](https://github.com/debba/storytel-player/releases).\n```\n\n## Development\n\nStart the development environment with hot reload:\n\n```bash\nnpm run install-all\nnpm run dev\n```\n\nThis will:\n- Start the Fastify server on port 3001 (with tsx watch for auto-restart)\n- Start the Vite development server on port 3000\n- Both servers will reload automatically when files change\n\n### Individual Components\n\nYou can also run components separately:\n\n```bash\n# Start only the server (development mode)\nnpm run server:dev\n\n# Start only the client\nnpm run client\n\n# Start both (without hot reload)\nnpm start\n```\n\n### Electron Development\n\nTo run the Electron app in development mode:\n\n```bash\nnpm run electron:dev\n```\n\n## Building\n\n### Build for Production\n\nBuild all components for production:\n\n```bash\nnpm run build\n```\n\nThis command builds the React client with Vite (`client/build/`).\n\n### Build Electron App\n\nCreate distributable Electron packages:\n\n```bash\n# Build and create installer/distributable for current platform\nnpm run electron:dist\n\n# Platform-specific builds\nnpm run electron:dist:win           # Windows (x64)\nnpm run electron:dist:mac:x64       # macOS (Intel)\nnpm run electron:dist:mac:arm64     # macOS (Apple Silicon)\nnpm run electron:dist:linux         # Linux (all targets)\nnpm run electron:dist:linux:x64     # Linux x64 (tar.gz, deb, rpm, AppImage)\nnpm run electron:dist:linux:arm64   # Linux ARM64\nnpm run electron:dist:linux:arm     # Linux ARMv7\n```\n\nThe built applications will be available in the `dist/` directory.\n\n**Build targets:**\n- **Windows**: NSIS installer (.exe)\n- **macOS**: DMG package (.dmg)\n- **Linux**: AppImage, deb, rpm, Pacman packages\n\n## Scripts\n\n| Command | Description |\n|---------|-------------|\n| `npm start` | Start both client and server (production mode) |\n| `npm run dev` | Start development servers with hot reload |\n| `npm run build` | Build client with Vite |\n| `npm run build-win` | Build client for Windows |\n| `npm run server:build` | Build server with esbuild |\n| `npm run install-all` | Install dependencies for all components |\n| `npm run clean` | Clean all build directories |\n| `npm run electron:build` | Compile Electron TypeScript files |\n| `npm run electron` | Run Electron app (production) |\n| `npm run electron:dev` | Run Electron app (development mode) |\n| `npm run electron:pack` | Package Electron app without installer |\n| `npm run electron:dist` | Build and create installer for current platform |\n| `npm run electron:dist:win` | Build Windows installer (x64) |\n| `npm run electron:dist:linux` | Build all Linux packages |\n| `npm run electron:dist:linux:x64` | Build Linux x64 packages |\n| `npm run electron:dist:linux:arm64` | Build Linux ARM64 packages |\n| `npm run electron:dist:linux:arm` | Build Linux ARMv7 packages |\n| `npm run electron:dist:mac:x64` | Build macOS Intel package |\n| `npm run electron:dist:mac:arm64` | Build macOS Apple Silicon package |\n\n## Configuration\n\n### Environment Variables\n\nCreate a `.env` file in the `server/` directory:\n\n```env\n# Add your environment variables here\n# See server/.env.example for reference\n```\n\n### Electron Builder\n\nElectron Builder configuration is in `package.json` under the `build` key:\n\n- **App ID**: `com.storytel.player`\n- **Product Name**: `Storytel Player`\n- **Output Directory**: `dist/`\n\n## Development Notes\n\n- The Electron app features a compact UI (480x800 window size) optimized for desktop use\n- Single instance lock prevents multiple app instances from running simultaneously\n- In development mode, the app connects to local dev servers (React on port 3000, Fastify on port 3001)\n- In production mode, the app serves static files from `client/build/` and runs the bundled server\n- The embedded Fastify server is managed by the Electron main process\n- TypeScript is used throughout the project (Electron, React, and Fastify)\n- Certificate errors are ignored in development mode for local HTTPS testing\n\n## Technologies Used\n\n- **Frontend**: React 18, TypeScript, Tailwind CSS, Vite, i18next, Axios\n- **Backend**: Fastify 5, TypeScript, @fastify/cors, dotenv\n- **Desktop**: Electron 38+, electron-store\n- **Build Tools**: Vite, esbuild, electron-builder, TypeScript compiler\n- **Development**: Concurrently, tsx (for server watch mode)\n\n## 🌐 Website\nVisit our [official documentation](https://debba.github.io/storytel-player/)\n\n\n## License\n\nMIT License\n\n## Author\n\nAndrea Debernardi (andrea@debbaweb.it)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdebba%2Fstorytel-player","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdebba%2Fstorytel-player","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdebba%2Fstorytel-player/lists"}