@jaywink jaywink released this Oct 1, 2017 · 484 commits to master since this release

Assets 2

0.5.0 (2017-10-01)

Python dependencies

Switched to pip-tools as the recommended way to install Python dependencies and cleaned the requirements files a bit. Now all the "base" dependencies, including production deployment dependencies are locked in requirements.txt. The new file dev-requirements.txt includes both the base and the extra development/testing related dependencies.

To use pip-tools, first install it:

pip install -U pip-tools

Then install dependencies:

# Production environment

# Development environment
pip-sync dev-requirements.txt

It is not mandatory to use pip-tools for running a production installation. For development it is mandatory. All dependencies should be placed (unlocked) in either requirements/requirements.in (base) or requirements/requirements-dev.in (development extras). Then execute ./compile-requirements.sh to update the locked dependency files after each change to the .in files. See pip-tools for more information.


  • GIF uploads are now possible when creating content or replies. (#125)

  • Content API has a new endpoint /api/content/<id>/replies/. This returns all the replies for the given content.

  • Shares made by followed contacts are now pulled up to the "Followed" stream.

    This happens only if the user has not already seen this content in their "Followed" stream. Each content should only appear once, either directly by following the author or a followed contact sharing the content. Multiple shares do not raise the content in the stream again.


  • Rendered link processing has been rewritten. This fixes issues with some links not being linkified when rendering. Additionally now all external links are made to open in a new tab or window. (#197)

  • Previously previews and oEmbed's for content used to only pick up "orphan" links from the content text. This meant that if there was a Markdown or HTML link, there would be no link preview or oEmbed fetched. This has now been changed. All links found in the content will be considered for preview and oEmbed. The first link to return a preview or oEmbed will be used.

  • Streams URL changes:

    • All streams will now be under /streams/ for a cleaner URL layout. So for example /public/ is now /streams/public/.
    • Tag stream URL has been changed from /streams/tags/<tag>/ to /streams/tag/<tag>/. This small change allows us to later map /stream/tags/ to the tags the user is following.

    Since lots of old content will point to the old URL's, there will be support for the legacy URL's until they are needed for something else in the future.

  • Breaking change. Profile API field changes:

    • Added:

      • url (Full URL of local profile)
      • home_url (Full URL of remote profile, if remote user)
      • is_local (Boolean, is user local)
      • visibility (Profile visibility setting, either public, limited, site or self. Editable to self)
    • Removed (internal attributes unnecessary for frontend rendering):

      • user
      • rsa_public_key
  • Breaking change. Content API field changes:

    • Added:

      • timestamp (ISO 8601 formatted timestamp of last save)
      • humanized_timestamp (For example "2 hours ago")
      • url (Full URL to content detail)
      • edited (Boolean whether content has been edited since creation)
      • user_following_author (Boolean whether current user is following content author)
      • user_is_author (Boolean whether current user is the author of the content)
      • user_has_shared (Boolean whether current user has shared the content)
    • Changed:

      • author is now a limited serialization of the author profile, containing the following keys: "guid", "handle", "home_url", "id", "image_url_small", "is_local", "name", "url".

        The reason for serializing the author information to content is related to privacy controls. A user who maintains a limited profile can still create public content, for example. A user who is able to view the content created by the user should also see some limited information about the creating profile. To get the full profile, the user needs to fetch the profile object by ID, which is subject to the visibility set by the profile owner.

    • Removed (internal attributes unnecessary for frontend rendering):

      • created
      • modified
      • oembed
      • opengraph
  • Refactoring for streams views to use new Stream classes which support pre-caching of content ID's. No visible changes to user experience except a faster "Followed users" stream.

    A stream class that is set as cached will store into Redis a list of content ID's for each user who would normally see that content in the stream. This allows pulling content out of the database very fast. If the stream is not cached or does not have cached content ID's, normal database lookups will be used.

    This refactoring enables creating more complex streams which require heavier calculations to decide whether a content item should be in a stream or not.


  • Cycling browser tabs with CTRL-TAB when focused on the editor no longer inserts a TAB character in the editor.
  • Don't federate shares to shared content local author. This caused unnecessary deliveries between the same host.