Platform update - May 2025
Avatar

The last month has been very busy and fruitful. When working on the next fix or change, it’s easy to overlook just how many things have been improved, changed, or added overall. Only after compiling a list of all the fixes before writing this document did I truly realize how much had been done.

ActivityPub extensions (JSON+LD)

I decided to describe and somewhat standardize the additional data that different Vernissage instances can exchange with each other. Besides the standard ActivityPub fields, the communication includes other elements such as: country, EXIF data, GeoNames location ID, and category. After documenting these and posting a link on Mastodon, a few people reached out and pointed out that, in some cases, it’s possible to use existing extensions. After analyzing my needs, I adopted the addressCountry extension described at https://schema.org/, but I couldn’t find satisfying extensions for the other data. So I created extensions for the Vernissage protocol and documented them here: https://joinvernissage.org/ns#.

These new extensions include:

  • exif - metadata added to the photo by the camera,
  • geonamesId - an identifier for a location in the GeoNames system (used to indicate approximately where a photo was taken),
  • Category - used to assign a photo to a category.

What’s great is that these extensions can be used not only by Vernissage, but also by other applications in the Fediverse.

Fediverse Enhancement Proposals

While working on the ActivityPub extensions mentioned above, I was also pointed to another interesting topic: the FEDERATION.md file and the Fediverse Enhancement Proposals initiative (one of which is precisely the FEDERATION.md file). After reading about this file and reviewing other proposals on the project’s site, I have to say it’s fantastic. It’s an open process for standardizing and documenting extensions and proposed changes to the ActivityPub protocol and other technologies used in the Fediverse. It works similarly to RFC systems in other projects - allowing the community to create, discuss, and formalize improvement proposals that can later be implemented by various platforms (e.g., Mastodon, Pixelfed, Vernissage, etc.). The FEDERATION.md file itself is a declaration that a given app is part of the Fediverse and which components it supports. It has now been added to the Vernissage repository. In the future, I plan to explore more of the proposals there and will likely implement several of them in Vernissage.

S3 storage issue

Last week, we had to fix a bug in communication with S3 storage. It turned out that some S3 providers support HTTP/2 communication, whereas Amazon still does not, so the issue doesn’t occur when using AWS. The bug was reported in the AWS client on GitHub. As a temporary workaround, we’ve added the ability to force communication over HTTP/1. A new environment variable has been added to switch the communication (between the API and S3) to this mode. The variable is named s3Http1OnlyMode (VERNISSAGE_S3HTTP1ONLYMODE). I hope the bug in swift-server/async-http-client will be fixed, and we’ll be able to use HTTP/2 with providers that support it.

Postgres connection issue

Another fix related to connections was one that lets us define the TLS mode in the connection string used when connecting to the database. Previously, the connection configuration was parsed by Vernissage itself. There must have been another issue that led to this implementation. It now seems there are no more problems with the default connection configuration parsing by Vapor, so we reverted to that solution. It allows defining options in the query string like: ?tlsmode=require, with the following possible values:

  • disable – don’t use TLS, even if the server supports it,
  • prefer – use TLS if possible,
  • require – enforce TLS support.

Move image quality to system settings

Another small improvement was moving the image compression quality setting to the system settings. Thanks to this, each Vernissage instance administrator can define the compression level that the instance will use (default is JPEG 0.85).

Other fixes

Other fixes introduced in Vernissage over the past 30 days:

  • Fix bridgy webfinger.
  • Fix undo announce activity.
  • Stop downloading statuses for like activity from remote.
  • Add publishedAt to Person/Note (and UserDto and StatusDto).
  • Show correct file sizes in the system (MiB instead of MB, etc.).
  • Serve Google Fonts locally.
  • Show notification when a new version of the application is available.
  • User type support (Person/Service, etc.).
  • Add error dialog to error list page.

There’s still a lot of work ahead in the coming months. I want to add OAuth support and dynamic client registration, so that it becomes possible to create native clients for iOS and Android. Equally important is adding status update functionality, both for those posted via Vernissage and those coming from other Fediverse instances. And there are still many bugs to crush to further improve the quality of Vernissage.

5/26/25, 5:20 AM