Youlag: a FreshRSS extension that puts YouTube subscriptions into your feed reader
Youlag: Extension for FreshRSS, browse YouTube and article feeds through a modernized design
At a glance
- What is it?
- Youlag is a GPL-3.0 extension for FreshRSS that gives YouTube subscriptions a video focused interface inside the reader, with sponsor and chapter skipping, a miniplayer and a modern article view. It is installed by copying a folder into the FreshRSS server tree, which is the first thing to know about it.
- Who is it for?
- Youlag suits self-hosted FreshRSS users who subscribe to YouTube creators through RSS and want one reader for video and articles, with sponsor skipping and a readable article view. It does not suit anyone without shell access to the FreshRSS installation, since the extension is copied into the server's extensions folder, and it does not suit a hosted FreshRSS instance you cannot modify.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly JavaScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
YouTube subscriptions handled as RSS inside FreshRSS
Youlag extends FreshRSS, the self-hosted feed reader, so that YouTube channels appear as feeds in the same subscription list as articles. The project states the motivation directly: subscribe to creators via RSS without a Google account, stay free of recommendation algorithms, and reach the subscriptions from any device. Youlag also works as a plain article reader if that is all you need from it.
The design goal is stated as a distraction-free experience for people who want to be intentional about what they watch. That translates into concrete features rather than a general restyle. There is a video focused interface for YouTube subscriptions, a modern article reading experience, and the ability to browse and view articles side by side.
The extension is a front end and a set of integrations rather than a new feed engine. The attribution list names Korbak's freshrss-invidious, ajayyy's DeArrow and ajayyy's SponsorBlock as the integrations behind the project, which is a good indication of how the extra behaviour is built: rather than reimplementing sponsor detection or title rewriting, Youlag reuses existing services and presents their results inside FreshRSS.
The audience is therefore narrow and specific. It is for people running their own FreshRSS instance, since the extension needs to be installed on the server side, and for people who want a quiet, algorithm-free way to watch channel uploads.
Installation means copying a folder into the FreshRSS tree
Youlag requires FreshRSS version `1.30.0` or higher. The install procedure is four steps and none of them happen through the FreshRSS interface.
First, download the latest release archive from the project's releases page. Unzip it and you get a folder named `xExtension-Youlag`. That folder has to be moved into the FreshRSS installation, into the `freshrss/extensions/` path. Then, in FreshRSS, go to `Settings → Extensions` and enable the `Youlag` extension, where a gear icon opens the extension's settings.
The consequence is immediate for anyone evaluating this. An extension that lives in the server's extensions directory needs filesystem access to the FreshRSS installation, which means shell access, a self-hosted instance, or a host that lets you drop files into the container. There is no plugin marketplace entry to click here, and there is no way to try it against a hosted FreshRSS service you do not control.
Updating follows the same shape and is equally manual: delete the old version at `freshrss/extensions/xExtension-Youlag` and repeat the install steps. A server administrator with several extensions installed will find that a normal upgrade cycle, not an exception.
Sponsor skipping and chapter jumps come from outside the project
Several of the video features depend on third-party services, and the attribution section is where the project makes that explicit. Sponsored segments can be skipped automatically, and so can chapters you choose. Clickbait titles and thumbnails can be replaced with screencaps. Sponsored links in the video description intros can be hidden.
Those capabilities line up with the named integrations. SponsorBlock is the project that provides sponsored segment data for YouTube, and DeArrow is the project that rewrites clickbait titles and picks better thumbnails. The freshrss-invidious integration is what makes playing through Invidious possible, and the project lists playing via YouTube or via Invidious as a setting.
That is convenient and it is a dependency. Each feature inherits the availability, latency and failure modes of the service behind it, and the project itself does not claim to host any of it. The consequence for a reader is that a segment that is not in the database is not skipped, and a title is only replaced when the upstream service has an entry for that video. The behaviour is best effort by construction rather than by choice.
There is also a direct setting for the length of the experience itself. YouTube shorts can be blocked outright, and video mode can be applied to chosen categories only, so an article feed is not forced into the video interface. The miniplayer keeps a video in the corner while you read.
Keyboard and gestures, and why clicking the video changes them
In video mode the extension binds a set of shortcuts, and the documentation is unusually precise about when they apply. Clicking on the video hands the keyboard over to YouTube's own player, so to use the extension's shortcuts again you have to click somewhere outside the video.
The bindings themselves cover the usual transport controls. `Space` toggles play and pause, the left and right arrows seek five seconds, and `Ctrl` or `Option` with those arrows move to the previous or next chapter, with `Ctrl` on Windows and Linux and `Option` on macOS. `M` mutes, `I` opens the miniplayer, and `Esc` closes the video or the article, where the browser's own `Back` navigation also works.
Touch gestures cover the mobile case. Swiping down in an open video switches to the miniplayer, but only when the swipe starts outside the video itself, since swipes on the video are not recognized. From the left edge of the screen a rightward swipe opens the sidebar, and a leftward swipe on the sidebar closes it.
That last set of conditions is the kind of detail that decides whether a feature feels solid. Both gesture rules depend on the gesture starting in a specific region, and a user who does not know that will find the miniplayer unreachable on a first try.
Development runs through npm scripts and a file sync to the server
Contributing to Youlag means forking the `dev` branch rather than the default branch, installing dependencies with `npm i`, and then running `npm run watch` to compile files into `/static`. For local work, the `.env.example` file shows how to sync changes straight into the FreshRSS extensions folder. A production build goes to `/dist` with `npm run build`.
The manifest shows what sits behind those scripts:
"scripts": {
"build-css": "sass src/scss/theme.scss static/theme.min.css --no-source-map --style=compressed",
"build-js": "node scripts/build.js",
"watch": "node scripts/watch.js & sass --watch src/scss/theme.scss static/theme.min.css --no-source-map --style=compressed",
"build": "npm run build-js && npm run build-css"
},The styles are compiled from `src/scss/theme.scss` with sass, and the JavaScript is bundled by `node scripts/build.js`, with terser available for minification. The runtime dependencies are `archiver`, `chokidar` and `dotenv`, the last of which is what reads the environment file.
The environment file itself is short and tells you exactly what the sync does:
FRESHRSS_DEV_FOLDER=/local/folder/freshrss/extension/youlag
FRESHRSS_DEV_FOLDER_FILE_SYNC=truePointing `FRESHRSS_DEV_FOLDER` at a local FreshRSS tree and setting `FRESHRSS_DEV_FOLDER_FILE_SYNC` to true means the watch process copies the compiled output into the server's extension folder as you work. For a project that is otherwise installed by hand, that removes the most tedious part of the edit and test cycle, and it is the reason the extension ships its own `.env.example` rather than leaving the mechanism undocumented.
Version and licence details that do not line up
Two fields in the repository deserve a look before you put this on a server. The first is the licence. The README states GNU General Public License v3.0 and the repository carries a `LICENSE` file, while the `package.json` manifest records `"license": "ISC"`. Those are different licences with different obligations, and a GPL-3.0 component deployed alongside proprietary code has consequences that an ISC declaration would not. Since the project description and the README both say GPL-3.0, that is the term to plan around, but the discrepancy in the manifest is worth raising as an issue.
The second is the version. The published releases are numbered in the v4 range, with v4.5.0 on 2026-09-26, v4.4.3 on 2026-09-17 and v4.4.2 on 2026-05-21, while the manifest in the repository still reads `1.0.0`. The manifest version appears to be the package build tool's own version rather than the extension release, which is common in JavaScript projects, but it means the number in `package.json` is not a reliable indicator of which Youlag release you have installed.
The repository is not archived and the last push was on 2026-10-21, so the project is still being worked on. The extension itself is assembled from `extension.php`, `configure.phtml` and `metadata.json`, with `src/` holding the sources, `static/` the compiled output and `scripts/` the build tooling.
Editorial conclusion
Youlag suits self-hosted FreshRSS users who subscribe to YouTube creators through RSS and want one reader for video and articles, with sponsor skipping and a readable article view. It does not suit anyone without shell access to the FreshRSS installation, since the extension is copied into the server's extensions folder, and it does not suit a hosted FreshRSS instance you cannot modify. Check the licence file before deploying, because the README states GPL-3.0 while package.json declares ISC, and check the version you unpack, because the published releases are numbered v4.x while the manifest still reads 1.0.0.
Frequently asked questions
How do I install the Youlag extension in FreshRSS?
Download the latest release, unzip it, and move the `xExtension-Youlag` folder into the `freshrss/extensions/` directory of your installation. Then go to `Settings → Extensions` in FreshRSS and enable the `Youlag` extension. FreshRSS 1.30.0 or higher is required.
Can Youlag skip sponsored segments in YouTube videos?
Yes, sponsored segments and chosen chapters can be skipped automatically. That behaviour comes from the SponsorBlock and DeArrow integrations listed in the attribution section, so it depends on those services having data for the video.
Does Youlag need a Google account to subscribe to channels?
No. The project states that you can subscribe to creators via RSS without a Google account, and that playback can go through YouTube itself or through Invidious.
How do I update Youlag to a new release?
Delete the old version at `freshrss/extensions/xExtension-Youlag` and repeat the install steps with the new archive. There is no automatic update path for the extension.
How do I develop Youlag locally against my own FreshRSS?
Fork the `dev` branch, install dependencies with `npm i`, and run `npm run watch` to compile into `/static`. The `.env.example` file shows the `FRESHRSS_DEV_FOLDER` and `FRESHRSS_DEV_FOLDER_FILE_SYNC` settings that sync the compiled output into your local FreshRSS extension folder.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/civilblur-youlag)Was this useful?