- Code reformatted using Black
- Switch to Flask-Babel
- Support for merging user accounts in client apps.
- i18n using Flask-BabelEx (no UI-facing i18n yet, however).
- Switched to login sessions and cache management (optionally disabled).
- New helper methods owner_choices(), owner_of, member_of in UserBase.
- Login beacon endpoint and object availability as g.lastuser.
- Switch to g.lastuser_cookie for cross-domain login cookie.
- Support for team ownership of resources via helper methods (team, allowner, etc).
- Switch from ~username to @username.
- Support Coaster's auth framework.
- Set Cache-Control header to 'private' to prevent proxy caching of logged-in pages.
- requires_permission and has_permission now accept multiple permissions.
- Userinfo is now stored as a JSON column where available.
- User.phone now returns the primary verified phone number, if available.
- User.pickername returns "fullname (~username)" if username is present.
- Start of version history record.