Kanka entity permission interface

v0.37: Negative Permissions, Yearly Subs, Performance

Today we are releasing a big update to Kanka that includes a feature that has been requested for ages: negative permissions! I always said that such a feature will be available once I work full time on Kanka. With that being just a few short weeks away, I figured the time is right to fulfil my promise.

Another big feature is regarding Subscriptions. We have added Giropay and SOFORT as payment methods as well as yearly subscriptions! Since Giropay and Sofort don’t allow monthly charges, these method payments are only available for Yearly subscription. As a thank you for those choosing yearly subs, you only pay for 11 months!

As a reminder, our previous update added Bulk Copy to Campaign and some small quality of life improvements, as well as releasing abilities for all campaigns.

As I re-read myself, I realize that I totally forgot to mention this, but welcome to our new blog! We have decided to migrate all our news over here, and this is where will be post all updates from now on. We’ll also be posting all sorts of content, so stay tuned and keep coming for more!

New Features

Yearly Subscriptions & Payment Options

NEW: Annual subscriptions!

NEW: SOFORT and Giropay as payment methods (only available on yearly subs). Please note that these currently don’t generate an invoice as credit card payments do, but if you want one, send us an email at [email protected] and we’ll generate one for you.

Negative Permissions BETA

REWORKED: Entity Permissions UI. A dropdown with Allow, Deny and Inherit is replacing the previous checkbox. Inherit has the same behaviour as previously not ticking the checkbox: it will look at the user’s roles’ permissions. Allow has the same behaviour as previously ticking the checkbox: gives explicit access. The new Deny option will explicitly deny that user that action on the entity, thus introducing the concept of negative permissions.

If a user has denied on one of their roles, but allow on their user, they will be allowed to perform that action. That way you can deny all users in a role from seeing an entity, but specifically allow one of those users to see it.

The new deny option will be in Beta for boosted campaigns only for the next month, but all users will experience the new dropdown menu.

Kanka negative permissions
Kanka’s new permission interface

Default Entity Images for Boosted Campaigns

Admins of a boosted campaign have a new interface to define custom entity images for entities that have no attached image to them. This image will show in the various lists.

The campaign default image entity interface for boosted campaigns.

Boosted campaigns can now also set to show an entity’s image in the tooltip. This setting is found in the campaign’s edit form.

Image Loading, Caching and Performance

A new “Thumbor” image server will now process images. This allows us to more dynamically call various image sizes on the fly, and offer optimisations for loading images on mobile.


Tag & Ability duplicate suggestion: when adding an entity to a tag, or adding abilities to an entity, the dropdown list will exclude already added content to avoid adding the same content twice.

Dashboard Widgets: added the ability to add tags to the “recent” dashboard widget, filtering results on entities with those tags.

General Speed Performance

This release prioritized performance improvements. As Kanka grows, so do our resource requirements to constantly calculate all the states of campaigns. The current code base has lead to the servers being slow during weekends and peak usage, and simply adding more ram only goes so far before costing stupid amounts of money.

The server now caches campaign information to recalculate on changes rather than requests. For example

  • Campaign users
  • Campaign roles
  • Campaign settings
  • Campaign entity count
  • Campaign followers
  • Entity type suggestions
  • User campaign list
  • User roles
  • User campaign follows
  • User admin status in a campaign
  • User name
  • Latest release

Database queries were improved by adding indexes to popular fields that filter or order results. Many old fields that are no longer used have also been removed from the database.

Entity mentions also received attention. Previously, it would make a request to the database for each mention found in an entity (while caching results so that mentioning the same entity several times wouldn’t lead to several calls). It now extracts all the relevant ids first and does a single query for all the entities.

All of these changes have a measurable impact. As an example, for the Thaelia campaign’s dashboard, these are the stats on my local development machine.

Old code: 940ms page load, 144 database calls, 38mb of ram

New code: 615ms page load, 56 database calls, 34mb of ram

56 database calls are still a lot (the calendar widget is especially resource intensive), but these changes should also result in the app being faster and lead to downtimes during peak hours.We are working on some tutorials regarding the new permission system soon, since our existing tutorials are no longer up to date.

Next Up

Our next update 0.38 will include some more performance improvements especially migrating to new servers that will have 4 times the power of the actual servers.

As always, thank you for using Kanka! If you haven’t yet, join us over on our Discord. And if you want to support us with these frequent updates, consider doing so with a Subscription.

Leave a Reply

Your email address will not be published. Required fields are marked *