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-After from 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_SEC and FETCH_TERMINAL_DELAY_SEC set 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 (also manage.py worker_cleanup) reports uploaded files that no entry, Media row 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 match MEDIA_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 with import-linter (uv run lint-imports), in ./scripts/check and in CI.
  • INSTALL.md covers 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 .env with 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_data loads it with the starting services into an empty database, both in Docker and in ./scripts/bootstrap; --no-welcome leaves the entry out. A new installation also gets a starting About box and copyright footer (user-about.html, user-copyright.html in run/templates/). In the Compose stack FEED_AUTHOR_NAME defaults 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
Full release notes

Keyboard shortcuts

j
Next entry
k
Previous entry
?
Show or hide this list