Why I built Aviato
I've used Plex for over a decade. I set up my first Plex server around 2012. I've always been a bit of a data hoarder and I enjoy cataloging my collections, so Plex was a natural fit. It organized media, fetched metadata, posters, and artwork, and let me share everything with friends and family from one place. I liked it enough that in 2014 I reached out, interviewed, and was swiftly hired to join the Plex development team. I've rebuilt my Plex server twice since then. Each time to add capacity and support transcoding for modern, high quality streams.
But Plex has been flagging. This isn't a sudden change. Plex has been getting steadily worse for many years, and I'm not the first to notice. Plex has been positioning itself as a streaming aggregator, adding its own content and surfacing third-party sources alongside your library. They've compromised on privacy and security to centralize more of their service around their own offerings.
I just want a media server for my own media collection. Maybe some media from a friend. I'm not interested in streaming from a cloud, and I don't want any third party to see the contents of my catalog. Plex continues in a direction I dislike, and on top of that, Plex has lagged on features and UX for years. I've been using Infuse as my primary video app and Prologue for audiobooks for a long time. I've given Plexamp a few honest attempts, but I've found Plex difficult enough with music that I stopped trying to stream my own music collection through it. It's time for a change.
I tried Jellyfin, several times
This isn't the first time I've had this thought. Years ago I hit the same point and tried Jellyfin, only to find the UX and ecosystem beyond rough around the edges. I share my media with friends and family, many of whom aren't technical, and if I was struggling to get streaming working from my Jellyfin server set up, I knew it would be even worse for them.
Earlier this year I gave it another good, honest chance. Setup was clunky: I had to discover plugins and install them one by one. Many are a simple "add the repository, give it a manifest.json" affair, but plenty have their own bespoke installation guides and require restarting the server frequently. I couldn't do all of it from the Jellyfin web app. It didn't feel polished. After getting Jellyfin running with intro-skipper and Jellyfin-Enhanced, indexing my media, and stitching it all together, I moved on to client apps and discovered the world of Jellyfin streaming apps is chaotic.
Infuse works with Jellyfin, so I was able to adapt without much effort in my own house. But the joy ended there. Sharing Jellyfin is not for the faint of heart. There are too many client options and platform support is spotty. I can't tell friends and family to just "install Jellyfin"; what they install depends entirely on their streaming devices. There's no good all-platform streaming app. The popular cross-platform clients still don't reach smart TVs, Roku, and similar devices. Even well-regarded apps like Fladder require sideloading on iOS. A lot of Jellyfin users end up relying on a web browser on an HTPC rather than apps on a streaming device, but I have multiple TVs and want to keep using streaming devices on each of them. Newer apps like Plezy are trying to expand support, but it's still early. Jellyfin has an incredible community around it; I just want to share my media with a few people, and I want it to be easy for them and for me.
So I built one
I decided to try my hand at building my own media server. I have a lot of experience with video streaming services, having built a video streaming service before YouTube existed and worked at Plex for a stretch. I also have a lot of experience building web applications. I've been self-hosting services for decades and I know what it's like to install services and tinker with new projects.
Over the last few months I've been at it. Yesterday I released the first public beta of Aviato: a media server that puts your media collections first, prioritizes your privacy and security, and is built to be incredibly easy to customize. I thought I'd write a bit about what led me here.
Everything is a plugin
The core idea in Aviato: everything is a plugin. I borrowed the plugin architecture from VS Code. Each plugin runs in its own process. It does not live inside the Aviato server process. Plugins communicate with the server over JSON-RPC 2.0. This means plugins can be built in any language or runtime, and they can do far more than what's possible inside Jellyfin's in-process plugin model. It also means better stability: a crashing plugin doesn't take Aviato down with it, and Aviato can monitor and restart plugins as needed.
Within Aviato, everything really is a plugin:
- Library types are plugins. A library plugin defines the media type it provides, how users are expected to browse it, the expected metadata for every item, and more.
- Filesystems are plugins, which lets remote and cloud filesystems integrate seamlessly. You can index media stored in SMB, S3, B2, Google Photos, Apple Photos, Dropbox, and more.
- Metadata providers are plugins. TMDB, MusicBrainz, Audible via audnex.us. Connect your library to your preferred provider and the plugin handles the automatic search and match process.
- Media scanners are plugins, so resource-heavy work like intro and credit detection, facial recognition, and audio analysis runs locally as a plugin you can swap or upgrade.
- There are hooks throughout Aviato for customization, including advanced metadata extraction, artwork providers, and subtitle providers.
With the first release, I've open-sourced many of the plugins I've built for Aviato in aviato-media/official-plugins to demonstrate some of what the plugin system can do.
When plugins aren't enough, Aviato provides a full REST API and webhooks for advanced integrations. The API is fully documented using OpenAPI 3.1. The Aviato Media Server has API keys and rate limiting built in.
Where things stand
Aviato Media Server is stable-ish. It's in beta. I haven't cut a 1.0.0 release yet. I'll continue refining it and working through feedback, and I expect to ship 1.0.0 as soon as it's practical. I'm also working on a suite of official Aviato apps to make it dead simple to use Aviato from all your streaming devices.
To make adoption easier in the meantime, Aviato ships adapter APIs for other servers. The first is a Jellyfin-compatible API, so you can point existing Jellyfin client apps at your Aviato server and they just work. Hopefully that helps the advanced early users give Aviato a real shot.
Aviato currently supports movies, TV, music, audiobooks, and ebooks, with photos, games, and podcasts on the roadmap.
Why closed source, and what does it cost?
I debated whether Aviato should be open source, and for now I've decided to keep the server itself closed source. I've open sourced a lot of the core plugins that make it up, and I may open the server up eventually. When I looked at the existing landscape (Plex, Emby, Jellyfin, Kodi, Calibre, Komga, Grimmory), I knew I had an ambitious project in mind. I want Aviato to offer more than what Plex Media Server offers today, and to do it better.
Better apps, better UX, better integrations, while keeping the privacy of users intact. Open source and donations alone simply don't allow for a project like Aviato to exist at the scope I want to build it at. So Aviato stays closed source for now. That may change someday.
On pricing: I've been a Plex Lifetime Pass holder for over a decade. As a customer I appreciate the lifetime model a lot, but I also know it's nearly impossible to support a project for ten plus years on lifetime purchases alone. I dislike subscriptions as much as anyone, but I've made the call to offer one because it's the model most likely to keep Aviato healthy long term.
The subscription is called Aviato Afterburner. The Aviato Media Server itself is free to use and should work well for anyone currently using Plex or Jellyfin who primarily streams their own content in their own home. Free usage includes a single remote stream and many of the features Plex and Emby charge for, including offline downloads and intros detection. Afterburner is designed for advanced users who want more from their server, or who simply want to help support Aviato.
| Feature | Aviato | Plex | Jellyfin | Emby |
|---|---|---|---|---|
| Streaming | ||||
| Local network streaming | Free | Free | Free | Free |
| Remote streaming | 1 stream free | Plex Pass, or Remote Watch Pass at $2.99/mo | Free | Free |
| Additional concurrent remote streams | Afterburner | Plex Pass $6.99/mo | Free | Free |
| Hardware accelerated transcoding | Free | Plex Pass | Free | Emby Premiere (1) |
| HDR tone mapping when transcoding | Free | Plex Pass | Free | Emby Premiere |
| Video optimization (pre-transcode / conversion) | Free | Plex Pass | Free | Emby Premiere |
| Skip intros and credits | Free | Plex Pass | intro-skipper plugin | Emby Premiere |
| Offline downloads and sync | Free | Plex Pass | In supported apps | Emby Premiere |
| Concurrent stream limits per user | Afterburner | Free | Not Available | Emby Premiere |
| Server | ||||
| Self-hosted auth, no external account required | Free | Requires plex.tv account | Free | Free |
| Multiple profiles per user | Free | Not Available | Not Available | Not Available |
| Parental controls | Free | Free | Free | Free |
| Multi-server client architecture | Free | Free | Limited | Limited |
| Plugin marketplace | Built-in | Not Available | Built-in (limited) | Built-in |
| Webhooks | Free | Not Available | Plugin available | Emby Premiere |
| API | OpenAPI 3.0 | Limited | Swagger only | Limited |
| Backup and restore | Free | Free | Free | Emby Premiere |
| Advanced | ||||
| Dynamic DNS | Afterburner | Free (plex.tv relay) | Not Available | Not Available |
| Tailscale integration | Afterburner | Not Available | Not Available | Not Available |
| Postgres support | Afterburner | Not Available | Not Available | Not Available |
| Server announcements | Afterburner | Not Available | Not Available | Not Available |
| SSO and LDAP support | Afterburner | Not Available | Plugin available | Emby Premiere (LDAP) |
| User groups with advanced permissions | Afterburner | Not Available | Not Available | Not Available |
| Hidden and private libraries | Afterburner | Not Available | Not Available | Not Available |
| Advanced analytics | Afterburner | Tautulli (third party) | Not Available | Not Available |
| Privacy proxy | Afterburner | Not Available | Not Available | Not Available |
(1) Emby Premiere is $4.99/month, $54/year, or $119 lifetime. Per Emby's matrix, hardware acceleration is free on Nvidia Shield and WD NAS devices.
Plex Pass is $6.99/month, $69.99/year, or $249.99 lifetime. Remote Watch Pass is a lighter add-on that covers only remote streaming.
Try it
If you've been feeling the same itch I have, wanting a media server that respects your collection and your privacy, that's easy to share with the non-technical people in your life, and that's built to be extended, give Aviato a try. It's early, and feedback right now matters a lot.