Released wojciechpolak/glifestream v2.0.0
[2.0.0] - 2026-09-30
Covers everything since the
v1.4 tag (March 2021). This is a large span of work, so only the significant changes are listed.Added
- Mastodon support, including OAuth 2.0 authentication, context cards with reply hydration, and video embeds.
- Bluesky/ATProto support, including native video embeds, reposts in the home timeline, context cards with reply hydration, and improved linkification and media expansion.
- PixelFed support.
- GitHub support, for a user's public activity or, with an OAuth 2.0 token or a personal access token, the activity they follow. Settings picks what to import: new repositories and releases by default, and stars, forks, pull requests, issues and pushes on request. Unchecking a kind hides its entries already imported. Releases published by automation are included.
- Dark Mode.
- Progressive Web App (PWA) support and Web Share integration.
- Mastodon and Bluesky in the share box. Mastodon goes through
share.joinmastodon.org, which asks for the reader's server. - Docker-based deployment: Dockerfile, Compose setup, a separate Nginx service, and a GitHub Actions workflow publishing container images with build attestations.
- Worker daemon that replaces cron-driven fetches, with a retry-capable fetch scheduler and improved fetch failure handling.
- Service status tab in user settings.
- Fetch retries with backoff. A temporary failure is retried after one minute, doubling on each further failure up to the service's interval, and a longer
Retry-Afterfrom the remote wins. A failure that retrying cannot fix waits at least a day. The status tab shows how many times in a row a service has failed.FETCH_RETRY_BASE_SECandFETCH_TERMINAL_DELAY_SECset the delays. - A fetch timeout,
FETCH_JOB_TIMEOUT_SEC(15 minutes by default). A service whose fetch hangs no longer stops the worker from fetching the others; it is recorded as timed out and retried with backoff. - Magic Link SSO as the new backend for the "Friends Only" mode.
--uploads-list-orphans(alsomanage.py worker_cleanup) reports uploaded files that no entry,Mediarow or template of the owner uses, such as the files of a deleted selfpost. It only lists them: gLifestream never moves or deletes an upload. The worker runs the report monthly and prints it to its log, with a warning when most uploads look unused, which points to a database that does not matchMEDIA_ROOT.docs/ARCHITECTURE.md, describing the module layers, what each module owns, and how requests, imports and WebSub pushes move through the code. The layers are checked withimport-linter(uv run lint-imports), in./scripts/checkand in CI.INSTALL.mdcovers backups, upgrades with and without Docker, systemd units for the web process and the worker, and the worker's maintenance schedule (WORKER_MAINTENANCE_JOBS), which replaces the crontab older versions needed.- Forced password change flow for initial admin accounts.
./scripts/bootstrap, a one-command local setup. It installs the dependencies, writes a.envwith random secrets, migrates the database, compiles translations, creates the media directories and the initial admin user. It is safe to run again and never overwrites an existing.env.- A welcome entry for new installations, with first steps and a video player, instead of a bare "Hello, World!".
manage.py load_initial_dataloads it with the starting services into an empty database, both in Docker and in./scripts/bootstrap;--no-welcomeleaves the entry out. A new installation also gets a starting About box and copyright footer (user-about.html,user-copyright.htmlinrun/templates/). In the Compose stackFEED_AUTHOR_NAMEdefaults to "gLifestream" instead of "YOUR NAME". - Test infrastructure: pytest suite, Playwright E2E coverage (including OAuth and Bluesky service flows), optional visual regression testing, and coverage