[ol]
- [*] First list element
- [*] Second list element
+ [li] First list element
+ [li] Second list element
[/ol]
[list=1]
- [*] First list element
- [*] Second list element
+ [li] First list element
+ [li] Second list element
[/list]
@@ -404,8 +404,8 @@ code
[list=]
- [*] First list element
- [*] Second list element
+ [li] First list element
+ [li] Second list element
[/list]
@@ -416,8 +416,8 @@ code
[list=i]
- [*] First list element
- [*] Second list element
+ [li] First list element
+ [li] Second list element
[/list]
@@ -428,8 +428,8 @@ code
[list=I]
- [*] First list element
- [*] Second list element
+ [li] First list element
+ [li] Second list element
[/list]
@@ -440,8 +440,8 @@ code
[list=a]
- [*] First list element
- [*] Second list element
+ [li] First list element
+ [li] Second list element
[/list]
@@ -452,8 +452,8 @@ code
[list=A]
- [*] First list element
- [*] Second list element
+ [li] First list element
+ [li] Second list element
[/list]
diff --git a/doc/Channels.md b/doc/Channels.md
index de3f6718d8..63d2582170 100644
--- a/doc/Channels.md
+++ b/doc/Channels.md
@@ -23,12 +23,17 @@ Predefined Channels
* For you: Posts from contacts you interact with and who interact with you. In detail, it consists of:
* Posts from people you interact with on a more than average level.
- * Posts from the accounts that you follow with a more than average number of interactions-
+ * Posts from the accounts that you follow with a more than average number of interactions.
* Posts from accounts where you activated "notify on new posts" or where you have set the channel frequency accordingly.
+* Discover: Posts from contacts you don't follow, but that might be of interest for you to follow. In detail, it consists of:
+ * Posts from people you don't follow but you interact with on a more than average level.
+ * Posts from people you don't follow but that interact with you on a more than average level.
+ * Popular posts from people you don't follow but you interacted with or who interacted with you on any level.
* What's Hot: Posts with a more than average number of interactions.
* Language: Posts in your language.
* Followers: Posts from your followers that you don't follow.
* Sharers of sharers: Posts from accounts that are followed by accounts that you follow.
+* Quiet sharers: Posts from accounts that you follow but who don't post very often.
* Images: Posts with images.
* Audio: Posts with audio.
* Videos: Posts with videos.
@@ -43,43 +48,51 @@ Each channel is defined by these values:
* Label: This value is mandatory and is used for the menu label.
* Description: A short description of the content. This can help to keep the overview, when you have got a lot of channels.
* Access Key: When you want to access this channel via an access key, you can define it here. Pay attention to not use an already used one.
-* Circle: This defines the data source for this channel. By default it is set to the public timeline. There are some predefined values, like the accounts that you follow or the accounts that follow you. Also all of your circles can be selected.
+* Circle: This defines the data source for this channel. By default it is set to the public timeline. There are some predefined values, like the accounts that you follow or the accounts that follow you. Also all of your circles can be selected.
* Include Tags: Comma separated list of tags. A post will be used when it contains any of the listed tags.
-* Exclude Tags: Comma separated list of tags. If a post contain any of these tags, then it will not be part of nthis channel.
+* Exclude Tags: Comma separated list of tags. If a post contain any of these tags, then it will not be part of this channel.
* Full Text Search: This can be used to include or exclude content, based on the content and some additional keywords. It uses the "boolean mode" operators from MariaDB: https://mariadb.com/kb/en/full-text-index-overview/#in-boolean-mode
-* Images, Videos, Audio: When selected, you will see content with the selected media type. This can be combined. If none of these fields are checked, you will see any content, with or without attacked media.
+* Images, Videos, Audio: When selected, you will see content with the selected media type. This can be combined. If none of these fields are checked, you will see any content, with or without attached media.
Additional keywords for the full text search
---
-Additionally to the search for content, there are additional keywords that can be used in the full text search:
+Additionally to the search for content, there are keywords that can be used in the full text search.
+Alternatives are presented with "|".
* from - Use "from:nickname" or "from:nickname@domain.tld" to search for posts from a specific author.
-* to - Use "from:nickname" or "from:nickname@domain.tld" to search for posts with the given contact as receiver.
-* group - Use "from:nickname" or "from:nickname@domain.tld" to search for group post of the given group.
+* to - Use "to:nickname" or "to:nickname@domain.tld" to search for posts with the given contact as receiver.
+* group - Use "group:nickname" or "group:nickname@domain.tld" to search for posts of the given group.
+* application | relay - Use "application:nickname" or "application:nickname@domain.tld" to search for posts that had been reshared by the given relay application.
* server - Use "server:hostname" to search for posts from a specific server. In the case of group postings, the search text contains both the hostname of the group server and the author's hostname.
* source - The ActivityPub type of the post source. Use this for example to include or exclude group posts or posts from services (aka bots).
* source:person - The post is created by a regular user account.
* source:organization - The post is created by an organisation.
* source:group - The post is created by or distributed via a group.
- * source:service - The posts originates from a service account. This source type is often used to mark bot accounts.
- * source:application - The post is created by an application. This is most likely unused in the fediverse for post creation.
+ * source:service | source:news - The posts originates from a service account. This source type is often used to mark bot accounts.
+ * source:application | source:relay - The post is created by an application. This is most likely unused in the fediverse for post creation.
* tag - Use "tag:tagname" to search for a specific tag.
-* network - Use this to include or exclude some networks from your channel.
- * network:apub - ActivityPub (Used by the systems in the Fediverse)
- * network:dfrn - Legacy Friendica protocol. Nowayday Friendica mostly uses ActivityPub.
- * network:dspr - The Diaspora protocol is mainly used by Diaspora itself. Some other systems support the protocol as well like Hubzilla, Socialhome or Ganggo.
+* media - With this keyword you can search for attached media.
+ * media:image | media:photo | media:picture - The post contains an image
+ * media:video - The post contains a video
+ * media:audio - The post contains audio
+ * media:card - The post contains a link preview card
+ * media:post - The post links another post, means it is a quoted post
+* network | net - Use this to include or exclude some networks from your channel.
+ * network:apub | network:activitypub - ActivityPub (Used by the systems in the Fediverse)
+ * network:dfrn | network:friendica - Legacy Friendica protocol. Nowayday Friendica mostly uses ActivityPub.
+ * network:dspr | network:diaspora - The Diaspora protocol is mainly used by Diaspora itself. Some other systems support the protocol as well like Hubzilla, Socialhome or Ganggo.
* network:feed - RSS/Atom feeds
* network:mail - Mails that had been imported via IMAP.
- * network:stat - The OStatus protocol is mainly used by old GNU Social installations.
- * network:dscs - Posts that are received by the Discourse connector.
- * network:tmbl - Posts that are received by the Tumblr connector.
- * network:bsky - Posts that are received by the Bluesky connector.
+ * network:dscs | network:discourse - Posts that are received by the Discourse connector.
+ * network:tmbl | network:tumblr - Posts that are received by the Tumblr connector.
+ * network:bsky | network:bluesky - Posts that are received by the Bluesky connector.
* platform - Use this to include or exclude some platforms from your channel, e.g. "+platform:friendica". In the case of group postings, the search text contains both the platform of the group server and the author's platform.
* visibility - You have the choice between different visibilities. You can only see unlisted or private posts that you have the access for.
* visibility:public
* visibility:unlisted
* visibility:private
+* language | lang - Use "language:code" to search for posts with the given language in the [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) format.
-Remember that you can combine these kerywords.
-So for example you can create a channel with all posts that talk about the Fediverse - that aren't posted in the Fediverse with the search terms: "fediverse -network:apub -network:dfrn"
\ No newline at end of file
+Remember that you can combine these keywords.
+So for example you can create a channel with all posts that talk about the Fediverse - that aren't posted in the Fediverse with the search terms: "fediverse -network:apub -network:dfrn"
diff --git a/doc/Circles-and-Privacy.md b/doc/Circles-and-Privacy.md
index d701173c07..abec72f15a 100644
--- a/doc/Circles-and-Privacy.md
+++ b/doc/Circles-and-Privacy.md
@@ -95,14 +95,6 @@ However we take privacy seriously and don't behave like some networks that __pre
Your profile and "wall" may also be visited by your friends from other networks, and you can block access to these by web visitors that Friendica doesn't know.
Be aware that this could include some of your friends on other networks.
-This may produce undesired results when posting a long status message to (for instance) Twitter.
-When Friendica sends a post to these networks which exceeds the service length limit, we truncate it and provide a link to the original.
-The original is a link back to your Friendica profile.
-As Friendica cannot prove who they are, it may not be possible for these people to view your post in full.
-
-For people in this situation we would recommend providing a "Twitter-length" summary, with more detail for friends that can see the post in full.
-You can do so by including the BBCode tag *abstract* in your posting.
-
Blocking your profile or entire Friendica site from unknown web visitors also has serious implications for communicating with GNU Social members.
These networks communicate with others via public protocols that are not authenticated.
In order to view your posts, these networks have to access them as an "unknown web visitor".
diff --git a/doc/Config.md b/doc/Config.md
index 3e0459f9c8..afd4e65277 100644
--- a/doc/Config.md
+++ b/doc/Config.md
@@ -43,7 +43,7 @@ Some examples of common known configuration files:
Addons can define their own default configuration values in `addon/[addon]/config/[addon].config.php` which is loaded when the addon is activated.
If needed, an alternative `config` path can be used by using the `FRIENDICA_CONFIG_DIR` environment variable (full path required!).
-This is useful in case of hardening the system by separating configuration from program binaries.
+This is useful in case of hardening the system by separating configuration from program binaries.
### Static Configuration location
@@ -160,16 +160,6 @@ $a->config['register_policy'] = REGISTER_CLOSED;
-$a->path = "value";
-
-
-'system' => [
- 'urlpath' => 'value',
-],
-
-
-
-
$default_timezone = "value";
@@ -313,7 +303,7 @@ Enabling the admin panel for an account, and thus making the account holder admi
'config' => [
'admin_email' => 'someone@example.com',
]
-
+
Where you have to match the email address used for the account with the one you enter to the `config/local.config.php` file.
If more than one account should be able to access the admin panel, separate the email addresses with a comma.
diff --git a/doc/Connectors.md b/doc/Connectors.md
index 992e83bba9..77d44e909f 100644
--- a/doc/Connectors.md
+++ b/doc/Connectors.md
@@ -4,15 +4,10 @@ Connectors
* [Home](help)
Connectors allow you to connect with external social networks and services.
-They are only required for posting to existing accounts on Twitter or GNU Social.
+They are only required for posting to existing accounts on for example Bluesky, Tumblr or Twitter.
+For Bluesky and Tumblr you can also enable a bidirectional synchronisation, so that you can use Friendica to read your timeline from Tumblr or Bluesky.
There is also a connector for accessing your email INBOX.
-If the following network connectors are installed on your system, select the following links to visit the appropriate settings page and configure them for your account:
-
-* [Twitter](/settings/addons)
-* [GNU Social](/settings/addons)
-* [Email](/settings)
-
Instructions For Connecting To People On Specific Services
==========================================================
@@ -28,23 +23,6 @@ Diaspora
Add the Diaspora 'handle' to the 'Connect/Follow' text box on your [Contacts](contacts) page.
-
-GNU Social
----
-
-This is described as the "federated social web" or OStatus contacts.
-
-Please note that there are **no** privacy provisions on the OStatus network.
-Any message which is delivered to **any** OStatus member is visible to anybody in the world and will negate any privacy settings that you have in effect.
-These messages will also turn up in public searches.
-
-Since OStatus communications do not use authentication, if you select the profile privacy option to hide your profile and messages from unknown viewers, OStatus members will **not** be able to receive your communications.
-
-To connect with an OStatus member insert their profile URL or Identity address into the Connect box on your [Contacts](contacts) page.
-
-The GNU Social connector may be used if you wish posts to appear on an OStatus site using an existing OStatus account.
-It is not necessary to do this, as you may 'follow' OStatus members from Friendica and they may follow you (by placing their own Identity Address into your 'Connect' page).
-
Blogger, Wordpress, RSS feeds, arbitrary web pages
---
@@ -54,14 +32,6 @@ PLease note that you will not be able to reply to these contacts.
This feed reader feature will allow you to _connect_ with millions of pages on the internet.
All that the pages need to have is a discoverable feed using either the RSS or Atom syndication format, and which provides an author name and a site image in a form which we can extract.
-Twitter
----
-
-To follow a Twitter member, the Twitter-Connector (Addon) needs to be configured on your node.
-If this is the case put the URL of the Twitter member's main page into the Connect box on your [Contacts](contacts) page.
-To reply, you must have the Twitter connector installed, and reply using your own status editor.
-Begin the message with @twitterperson replacing with the Twitter username.
-
Email
---
diff --git a/doc/Developers-Intro.md b/doc/Developers-Intro.md
index c500b27741..5dbf1def4a 100644
--- a/doc/Developers-Intro.md
+++ b/doc/Developers-Intro.md
@@ -62,7 +62,7 @@ If you want to have git automatically update the dependencies with composer, you
}
# `composer install` if the `composer.lock` file gets changed
# to update all the php dependencies
- check_run composer.lock "bin/composer.phar install --no-dev"
+ check_run composer.lock "bin/composer.phar install"
just place it into `.git/hooks/post-merge` and make it executable.
@@ -156,3 +156,98 @@ If you are interested in improving those clients, please contact the developers
* iOS: *currently no client*
* SailfishOS: **Friendiy** [src](https://kirgroup.com/projects/fabrixxm/harbour-friendly) - developed by [Fabio](https://kirgroup.com/profile/fabrixxm/profile)
* Windows: **Friendica Mobile** for Windows versions [before 8.1](http://windowsphone.com/s?appid=e3257730-c9cf-4935-9620-5261e3505c67) and [Windows 10](https://www.microsoft.com/store/apps/9nblggh0fhmn) - developed by [Gerhard Seeber](http://mozartweg.dyndns.org/friendica/profile/gerhard/profile)
+
+## Backward compatibility
+
+### Backward Compatibility Promise
+
+Friendica can be extended by addons.
+These addons relies on many classes and conventions from Friendica.
+As developers our work on Friendica should not break things in the addons without giving the addon maintainers a chance to fix their addons.
+Our goal is to build trust for the addon maintainers but also allow Friendica developers to move on.
+This is called the Backward Compatibility Promise.
+
+Inspired by the [Symonfy BC promise](https://symfony.com/doc/current/contributing/code/bc.html) we promise BC for every class, interface, trait, enum, function, constant, etc., but with the exception of:
+
+- Classes, interfaces, traits, enums, functions, methods, properties and constants marked as `@internal` or `@private`
+- Extending or modifying any non-abstract class or method in any way
+- Extending or modifying a `final` class or method in any way
+- Calling `private` methods (via Reflection)
+- Accessing `private` properties (via Reflection)
+- Accessing `private` methods (via Reflection)
+- Accessing `private` constants (via Reflection)
+- New properties on overridden `protected` methods
+- Possible name collisions with new methods in an extended class (addon developers should prefix their custom methods in the extending classes in an appropriate way)
+- Dropping support for every PHP version that has reached end of life
+
+### Deprecation and removing features
+
+As the development goes by Friendica needs to get rid of old code and concepts.
+This will be done in 3 steps to give addon maintainers a chance to adjust their addons.
+
+**1. Label deprecation**
+
+If we as the Friendica maintainers decide to remove some functions, classes, interface, etc. we start this by adding a `@deprecated` PHPDoc note on the code.
+For instance the class `Friendica\Core\Logger` should be removed, so we add the following note with a possible replacement:
+
+```php
+/**
+ * Logger functions
+ *
+ * @deprecated 2025.02 Use constructor injection or `DI::logger()` instead
+ */
+class Logger {/* ... */}
+```
+
+This way addon developers might be notified early by their IDE or other tools that the usage of the class is deprecated.
+In Friendica we can now start to replace all occurrences and usage of this class with the alternative.
+
+The deprecation label COULD be remain over multiple releases.
+As long as the code that is labeled with `@deprecated` is used inside Friendica or the official addon repository, it SHOULD NOT be hard deprecated.
+
+**2. Hard deprecation**
+
+If the deprecated code is no longer used inside Friendica or the official addons it MUST be hard deprecated.
+The code MUST NOT be deleted.
+Starting from the next release, it MUST be stay for at least 5 months.
+Hard deprecated code COULD remain longer than 5 months, depending on when a release appears.
+Addon developer SHOULD NOT consider that they have more than 5 months to adjust their code.
+
+Hard deprecation code means that the code triggers a muted `E_USER_DEPRECATION` error if it is called.
+For instance with the deprecated class `Friendica\Core\Logger` the call of every method should trigger an error:
+
+```php
+/**
+ * Logger functions
+ *
+ * @deprecated 2025.02 Use constructor injection or `DI::logger()` instead
+ */
+class Logger {
+ public static function info(string $message, array $context = [])
+ {
+ @trigger_error('Class `' . __CLASS__ . '` is deprecated since 2025.05 and will be removed after 5 months, use constructor injection or `DI::logger()` instead.', E_USER_DEPRECATED);
+
+ self::getInstance()->info($message, $context);
+ }
+
+ /* ... */
+}
+```
+
+This way the maintainer or users of addons will be notified in the logs that the addon will stop working in one of the next releases.
+The addon maintainer now has at least 5 months or at least one release to fix the deprecations.
+
+Please note that the deprecation message contains the release that will be released next.
+In the example the code was hard deprecated with release `2025.05`, so it COULD be removed earliest with the `2025.11` release.
+
+**3. Code Removing**
+
+We promise BC for deprecated code for at least 5 months, starting from the release the deprecation was announced.
+After this time the deprecated code COULD be remove within the next release.
+
+Breaking changes MUST be happen only in a new release but MUST be hard deprecated first.
+The BC promise refers only to releases, respective the `stable` branch.
+Deprecated code on other branches like `develop` or RC branches could be removed earlier.
+This is not a BC break as long as the release will be published 5 months after the hard deprecation.
+
+If a release breaks BC without deprecation or earlier than 5 months, this SHOULD considered as a bug and BC SHOULD be restored in a bugfix release.
diff --git a/doc/Export-Import-Contacts.md b/doc/Export-Import-Contacts.md
index 95b33f380c..824c9e2ebb 100644
--- a/doc/Export-Import-Contacts.md
+++ b/doc/Export-Import-Contacts.md
@@ -11,8 +11,7 @@ To export the list of accounts that you follow, go to the [Settings Export perso
## Import of followed Contacts
-To import contacts from a CSV file, go to the [Settings page](settings).
-At the bottom of the *account settings* page you'll find the *import contacts* section.
+To import contacts from a CSV file, go to the [import contacts](settings/importcontacts).
Upload the CSV file there.
### Supported File Format
diff --git a/doc/FAQ.md b/doc/FAQ.md
index ebb8c041b5..4e8d9b19eb 100644
--- a/doc/FAQ.md
+++ b/doc/FAQ.md
@@ -103,6 +103,9 @@ When a certain language is forced, the language remains until session is closed.
### How do blocked, ignored, archived and hidden contacts behave?
+These are various categories of contacts that are restricted in some way.
+Many of these types are related to [Safety](help/Safety).
+
##### Blocked
Direct communication will be blocked.
@@ -126,7 +129,7 @@ However, unlike blocking, existing posts this person made before being archived
##### Hidden
-Contact not be displayed in your public friend list.
+The contact not be displayed in your public friend list.
However, a hidden contact will appear normally in conversations and this may expose their hidden status to anybody who can see the conversation.
@@ -174,16 +177,19 @@ Example: Friendica Support
Friendica supports [Mastodon API](help/API-Mastodon) and [Twitter API | gnusocial](help/api).
This means you can use some of the Mastodon and Twitter clients for Friendica.
The available features are client specific and may differ.
+Clients dedicated to Friendica are marked in **bold**.
#### Android
* [AndStatus](http://andstatus.org) ([F-Droid](https://f-droid.org/repository/browse/?fdid=org.andstatus.app), [Google Play](https://play.google.com/store/apps/details?id=org.andstatus.app))
-* [Fedi](https://github.com/Big-Fig/Fediverse.app) ([Google Play](https://play.google.com/store/apps/details?id=com.fediverse.app))
* [Fedilab](https://fedilab.app) ([F-Droid](https://f-droid.org/app/fr.gouv.etalab.mastodon), [Google Play](https://play.google.com/store/apps/details?id=app.fedilab.android))
-* [Friendiqa](https://git.friendi.ca/lubuwest/Friendiqa) ([F-Droid](https://git.friendi.ca/lubuwest/Friendiqa#install), [Google Play](https://play.google.com/store/apps/details?id=org.qtproject.friendiqa))
-* [Husky](https://git.sr.ht/~captainepoch/husky) ([F-Droid](https://f-droid.org/repository/browse/?fdid=su.xash.husky), [Google Play](https://play.google.com/store/apps/details?id=su.xash.husky))
+* **[Friendiqa](https://git.friendi.ca/lubuwest/Friendiqa)** ([F-Droid](https://git.friendi.ca/lubuwest/Friendiqa#install), [Google Play](https://play.google.com/store/apps/details?id=org.qtproject.friendiqa))
+* [Husky](https://codeberg.org/husky/husky) ([F-Droid](https://f-droid.org/repository/browse/?fdid=su.xash.husky), [Google Play](https://play.google.com/store/apps/details?id=su.xash.husky))
* [Mastodon](https://github.com/mastodon/mastodon-android) ([F-Droid](https://f-droid.org/en/packages/org.joinmastodon.android/), [Google Play](https://play.google.com/store/apps/details?id=org.joinmastodon.android))
-* [Subway Tooter](https://github.com/tateisu/SubwayTooter) ([F-Droid](https://android.izzysoft.de/repo/apk/jp.juggler.subwaytooter))
+* [Pachli](https://pachli.app/) ([F-Droid](https://f-droid.org/en/packages/app.pachli/), [Google Play](https://play.google.com/store/apps/details?id=app.pachli))
+* **[Raccoon for Friendica](https://github.com/LiveFastEatTrashRaccoon/RaccoonForFriendica)** ([F-Droid](https://f-droid.org/packages/com.livefast.eattrash.raccoonforfriendica), [Google Play](https://play.google.com/apps/testing/com.livefast.eattrash.raccoonforfriendica))
+* **[Relatica](https://gitlab.com/mysocialportal/relatica)**
+* [Subway Tooter](https://github.com/tateisu/SubwayTooter) ([F-Droid via Izzy](https://android.izzysoft.de/repo/apk/jp.juggler.subwaytooter.noFcm))
* [Tooot](https://tooot.app/) ([Google Play](https://play.google.com/store/apps/details?id=com.xmflsct.app.tooot))
* [Tusky](https://tusky.app) ([F-Droid](https://f-droid.org/repository/browse/?fdid=com.keylesspalace.tusky), [Google Play](https://play.google.com/store/apps/details?id=com.keylesspalace.tusky))
* [TwidereX](https://github.com/TwidereProject/TwidereX-Android) ([F-Droid](https://f-droid.org/en/packages/com.twidere.twiderex/), [Google Play](https://play.google.com/store/apps/details?id=com.twidere.twiderex))
@@ -192,26 +198,30 @@ The available features are client specific and may differ.
#### iOS
* [Mastodon](https://joinmastodon.org/apps) ([App Store](https://apps.apple.com/us/app/mastodon-for-iphone/id1571998974))
+* **[Relatica](https://gitlab.com/mysocialportal/relatica)**
* [Stella*](https://www.stella-app.net/) ([App Store](https://apps.apple.com/us/app/stella-for-mastodon-twitter/id921372048))
-* [Tooot](https://github.com/tooot-app) ([App Store](https://apps.apple.com/app/id1549772269)
+* [Tooot](https://github.com/tooot-app) ([App Store](https://apps.apple.com/app/id1549772269))
* [TwidereX](https://github.com/TwidereProject/TwidereX-iOS) ([App Store](https://apps.apple.com/app/twidere-x/id1530314034))
#### Linux
* [Choqok](https://choqok.kde.org)
-* [Whalebird](https://whalebird.social/en/desktop/contents) ([GitHub](https://github.com/h3poteto/whalebird-desktop))
+* **[Relatica](https://gitlab.com/mysocialportal/relatica)**
* [TheDesk](https://thedesk.top/en/) ([GitHub](https://github.com/cutls/TheDesk))
* [Toot](https://toot.readthedocs.io/en/latest/)
+* [Whalebird](https://whalebird.social/en/desktop/contents) ([GitHub](https://github.com/h3poteto/whalebird-desktop))
#### macOS
+* **[Relatica](https://gitlab.com/mysocialportal/relatica)**
* [TheDesk](https://thedesk.top/en/) ([GitHub](https://github.com/cutls/TheDesk))
* [Whalebird](https://whalebird.social/en/desktop/contents) ([App Store](https://apps.apple.com/de/app/whalebird/id1378283354), [GitHub](https://github.com/h3poteto/whalebird-desktop))
#### Windows
+* **[Relatica](https://gitlab.com/mysocialportal/relatica)**
* [TheDesk](https://thedesk.top/en/) ([GitHub](https://github.com/cutls/TheDesk))
-* [Whalebird](https://whalebird.social/en/desktop/contents) ([Website Download](https://whalebird.social/en/desktop/contents/downloads#windows), [GitHub](https://github.com/h3poteto/whalebird-desktop))
+* [Whalebird](https://whalebird.social/en/desktop/contents) ([Microsoft Store](https://apps.microsoft.com/detail/9nbw4csdv5hc), [GitHub](https://github.com/h3poteto/whalebird-desktop))
#### Web Frontend
diff --git a/doc/Home.md b/doc/Home.md
index 33ed640746..b8b3517a45 100644
--- a/doc/Home.md
+++ b/doc/Home.md
@@ -1,5 +1,5 @@
-Friendica Documentation and Resources
-=====================================
+Help
+====
**User Manual**
@@ -14,6 +14,7 @@ Friendica Documentation and Resources
* You and other users
* [Connectors](help/Connectors)
* [Making Friends](help/Making-Friends)
+ * [Safety](help/Safety)
* [Circles and Privacy](help/Circles-and-Privacy)
* [Tags and Mentions](help/Tags-and-Mentions)
* [Community Groups](help/Groups)
@@ -30,7 +31,7 @@ Friendica Documentation and Resources
* [Install](help/Install)
* [Update](help/Update)
* [Settings & Admin Panel](help/Settings)
-* [Installing Connectors (Twitter/GNU Social)](help/Installing-Connectors)
+* [Installing Connectors](help/Installing-Connectors)
* [Install an ejabberd server (XMPP chat) with synchronized credentials](help/install-ejabberd)
* [Using SSL with Friendica](help/SSL)
* [Config values that can only be set in config/local.config.php](help/Config)
@@ -64,18 +65,18 @@ Friendica Documentation and Resources
* [Database schema documentation](help/database)
* [Class Autoloading](help/autoloader)
-**External Resources**
+**Links**
+
+* Website: [https://friendi.ca](https://friendi.ca)
+* Help Group: [@helpers@forum.friendi.ca](https://forum.friendi.ca/~helpers)
+* XMPP: [support@forum.friendi.ca](xmpp:support@forum.friendi.ca?join)
+* IRC: [https://web.libera.chat/?channels=#friendica](https://web.libera.chat/?channels=#friendica)
+* Matrix: [https://matrix.to/#/#friendi.ca:matrix.org](https://matrix.to/#/#friendi.ca:matrix.org)
+* Mailing List: [https://mailman.friendi.ca/mailman/listinfo/support-friendi.ca](http://mailman.friendi.ca/mailman/listinfo/support-friendi.ca)
-* [Main Website](https://friendi.ca)
-* Ways to get Support
- * Friendica Support Group: [@helpers@forum.friendi.ca](https://forum.friendi.ca/~helpers)
- * [Mailing List Archive](http://mailman.friendi.ca/mailman/listinfo/support-friendi.ca) you can subscribe to the list by sending an email to ``support-request(at)friendi.ca?subject=subscribe``
- * Community chat rooms (the IRC, Matrix and XMPP rooms are bridged) these public chats are logged [from IRC](https://gnusociarg.nsupdate.info/2021/%23friendica/) and [Matrix](https://view.matrix.org/alias/%23friendi.ca:matrix.org/)
- * XMPP/Jabber MUC: support(at)forum.friendi.ca
- * IRC: #friendica at [libera.chat](https://web.libera.chat/?channels=#friendica)
- * Matrix: [#friendi.ca](https://matrix.to/#/#friendi.ca:matrix.org) or [#friendica-en](https://matrix.to/#/#friendica-en:matrix.org) at matrix.org
**About**
-* [Site/Version Info](friendica)
-* [Friendica Credits](credits)
+* [Server Information](friendica)
+* [Terms of Service](tos)
+* [Credits](credits)
diff --git a/doc/Improve-Performance.md b/doc/Improve-Performance.md
index 727fa104be..9134cb6c74 100644
--- a/doc/Improve-Performance.md
+++ b/doc/Improve-Performance.md
@@ -14,10 +14,6 @@ Please go to /admin/site/ on your system and change the following values:
This value reduces the data that is send from the server to the client. 50 is a value that doesn't influences image quality too much.
- Set "OStatus conversation completion interval" to "never".
-
-If you have many OStatus contacts then completing of conversations can take some time. Since you will miss several comments in OStatus threads, you maybe should consider the option "At post arrival" instead.
-
Enable "Use MySQL full text engine"
When using MyISAM (default) or InnoDB on MariaDB 10 this speeds up search.
diff --git a/doc/Install.md b/doc/Install.md
index 4715c27233..3c162d519b 100644
--- a/doc/Install.md
+++ b/doc/Install.md
@@ -27,10 +27,10 @@ Due to the large variety of operating systems and PHP platforms in existence we
### Requirements
-* Apache with mod-rewrite enabled and "Options All" so you can use a local `.htaccess` file
+* Apache with mod_rewrite enabled and "[AllowOverride All](https://httpd.apache.org/docs/2.4/mod/core.html#allowoverride)" so you can use a local `.htaccess` file
* PHP 7.4+
* PHP *command line* access with register_argc_argv set to true in the php.ini file
- * Curl, GD, GMP, PDO, mbstrings, MySQLi, hash, xml, zip, IntlChar and OpenSSL extensions
+ * Curl, GD, GMP, PDO, mbstring, MySQLi, xml, zip, IntlChar, IDN and OpenSSL extensions
* The POSIX module of PHP needs to be activated (e.g. [RHEL, CentOS](http://www.bigsoft.co.uk/blog/index.php/2014/12/08/posix-php-commands-not-working-under-centos-7) have disabled it)
* Some form of email server or email gateway such that PHP mail() works.
If you cannot set up your own email server, you can use the [phpmailer](https://github.com/friendica/friendica-addons/tree/develop/phpmailer) addon and use a remote SMTP server.
@@ -44,7 +44,7 @@ For alternative server configurations (such as Nginx server and MariaDB database
### Optional
-* PHP ImageMagick extension (php-imagick) for animated GIF support.
+* PHP ImageMagick extension (php-imagick) for animated GIF and animated WebP support.
## Installation procedure
@@ -58,6 +58,7 @@ If this is nothing for you, you might be interested in the following:
* [Tutorial: Creating a Friendica Server with Ubuntu 22.04](https://nequalsonelifestyle.com/2022/07/30/creating-friendica-server-ubuntu/)
* [Setting Up Friendica Daemon as a Systemd Service Tutorial](https://nequalsonelifestyle.com/2022/08/04/setting-up-friendica-daemon-systemd-service/)
* [Setting up Friendica on Unraid](https://www.jenovarain.com/2023/03/setting-up-friendica-on-unraid/) (NAS)
+* [Installing Friendica with Elastio](https://elest.io/open-source/friendica)
### Get Friendica
@@ -75,14 +76,6 @@ This makes the software much easier to update.
The Linux commands to clone the repository into a directory "mywebsite" would be
git clone https://github.com/friendica/friendica.git -b stable mywebsite
- cd mywebsite
- bin/composer.phar install --no-dev
-
-Make sure the folder *view/smarty3* exists and is writable by the webserver user, in this case *www-data*
-
- mkdir -p view/smarty3
- chown www-data:www-data view/smarty3
- chmod 775 view/smarty3
Get the addons by going into your website folder.
@@ -90,12 +83,22 @@ Get the addons by going into your website folder.
Clone the addon repository (separately):
- git clone https://github.com/friendica/friendica-addons.git -b stable addon
+ git clone https://github.com/friendica/friendica-addons.git -b stable addon
+
+Install the dependencies:
+
+ bin/composer.phar run install:prod
+
+Make sure the folder *view/smarty3* exists and is writable by the webserver user, in this case *www-data*
+
+ mkdir -p view/smarty3
+ chown www-data:www-data view/smarty3
+ chmod 775 view/smarty3
If you want to use the development version of Friendica you can switch to the develop branch in the repository by running
git checkout develop
- bin/composer.phar install
+ bin/composer.phar run install:prod
cd addon
git checkout develop
@@ -215,7 +218,6 @@ All options will be saved in the `config/local.config.php` and are overruling th
- `-U|--dbuser ` The username of the mysql/mariadb database login (env `MYSQL_USER` or `MYSQL_USERNAME`)
- `-P|--dbpass ` The password of the mysql/mariadb database login (env `MYSQL_PASSWORD`)
- `-d|--dbdata ` The name of the mysql/mariadb database (env `MYSQL_DATABASE`)
-- `-u|--urlpath ` The URL path of Friendica - f.e. '/friendica' (env `FRIENDICA_URL_PATH`)
- `-b|--phppath ` The path of the PHP binary (env `FRIENDICA_PHP_PATH`)
- `-A|--admin ` The admin email address of Friendica (env `FRIENDICA_ADMIN_MAIL`)
- `-T|--tz ` The timezone of Friendica (env `FRIENDICA_TZ`)
@@ -267,7 +269,7 @@ You might wish to delete/rename `config/local.config.php` to another name and dr
Set up a cron job or scheduled task to run the worker once every 5-10 minutes in order to perform background processing.
Example:
- cd /base/directory; /path/to/php bin/worker.php
+ cd /base/directory; /path/to/php bin/console.php worker
Change "/base/directory", and "/path/to/php" as appropriate for your situation.
@@ -276,7 +278,7 @@ Change "/base/directory", and "/path/to/php" as appropriate for your situation.
If you are using a Linux server, run "crontab -e" and add a line like the
one shown, substituting for your unique paths and settings:
- */10 * * * * cd /home/myname/mywebsite; /usr/bin/php bin/worker.php
+ */10 * * * * cd /home/myname/mywebsite; /usr/bin/php bin/console.php worker
You can generally find the location of PHP by executing "which php".
If you run into trouble with this section please contact your hosting provider for assistance.
@@ -289,11 +291,11 @@ Once you have installed Friendica and created an admin account as part of the pr
#### worker alternative: daemon
Otherwise, you’ll need to use the command line on your remote server and start the Friendica daemon (background task) using the following command:
- cd /path/to/friendica; php bin/daemon.php start
+ cd /path/to/friendica; php bin/console.php daemon start
Once started, you can check the daemon status using the following command:
- cd /path/to/friendica; php bin/daemon.php status
+ cd /path/to/friendica; php bin/console.php daemon status
After a server restart or any other failure, the daemon needs to be restarted.
This could be achieved by a cronjob.
@@ -425,7 +427,7 @@ provided by one of our members.
>
> */10 * * * * cd /var/www/friendica/friendica/ && sudo -u www-data /usr/bin/php \
> -d suhosin.executor.func.blacklist=none \
-> -d suhosin.executor.eval.blacklist=none -f bin/worker.php
+> -d suhosin.executor.eval.blacklist=none -f bin/console.php
>
> This worked well for simple test cases, but the friendica-cron still failed
> with a fatal error:
@@ -434,7 +436,7 @@ provided by one of our members.
> (attacker 'REMOTE_ADDR not set', file '/var/www/friendica/friendica/boot.php',
> line 1341)
>
-> After a while I noticed, that `bin/worker.php` calls further PHP script via `proc_open`.
+> After a while I noticed, that `bin/console.php worker` calls further PHP script via `proc_open`.
> These scripts themselves also use `proc_open` and fail, because they are NOT
> called with `-d suhosin.executor.func.blacklist=none`.
>
diff --git a/doc/Installing-Connectors.md b/doc/Installing-Connectors.md
index d63d2c2e1c..bd564eb466 100644
--- a/doc/Installing-Connectors.md
+++ b/doc/Installing-Connectors.md
@@ -1,89 +1,34 @@
-Installing Connectors (Twitter/GNU Social)
+Installing Connectors
==================================================
* [Home](help)
+Friendica uses add-ons to connect to some networks, such as Tumblr or Bluesky.
-Friendica uses addons to provide connectivity to some networks, such as Twitter.
+All of these add-ons require an account on the target network.
+In addition, you (or usually the server administrator) will need to obtain an API key to allow authenticated access to your Friendica server.
-There is also a addon to post through to an existing account on a GNU Social service.
-You only need this to post to an already existing GNU Social account, but not to communicate with GNU Social members in general.
-
-All three addons require an account on the target network.
-In addition you (or typically the server administrator) will need to obtain an API key to provide authenticated access to your Friendica server.
-
-Site Configuration
+Site configuration
---
-Addons must be installed by the site administrator before they can be used.
-This is accomplished through the site administration panel.
+Addons need to be installed by the site administrator before they can be used.
+This is done through the site administration panel.
-Each of the connectors also requires an "API key" from the service you wish to connect with.
-Some addons allow you to enter this information in the site administration pages, while others may require you to edit your configuration file (config/local.config.php).
-The ways to obtain these keys vary between the services, but they all require an existing account on the target service.
-Once installed, these API keys can usually be shared by all site members.
+Some of the connectors also require an "API key" from the service you wish to connect to.
+For Tumblr, this information can be found in the site administration pages, while for Twitter (X) each user has to create their own API key.
+Other connectors, such as Bluesky, don't require an API key at all.
-The details of configuring each service follow (much of this information comes directly from the addon source files):
+You can find more information about specific requirements on each addon's settings page, either on the admin page or the user page.
-Twitter Addon for Friendica
+Bluesky Jetstream
---
-* Author: Tobias Diekershoff
-* tobias.diekershoff@gmx.net
-* License: 3-clause BSD license
+To further improve connectivity to Bluesky, Admins can choose to enable 'Jetstream' connectivity.
+Jetstream is a service that connects to the Bluesky firehose.
+With Jetstream, messages arrive in real time rather than having to be polled.
+It also enables real-time processing of blocks or tracking activities performed by the user via the Bluesky website or application.
-### Configuration
-To use this addon you need a OAuth Consumer key pair (key & secret).
-You can get it from [Twitter](https://twitter.com/apps).
+To enable Jetstream processing, run `bin/console.php jetstream' from the command line.
+You will need to define the process id file in local.config.php in the 'jetstream' section using the key 'pidfile'.
-Register your Friendica site as "Client" application with "Read & Write" access.
-We do not need "Twitter as login".
-When you've registered the app you get a key pair with an OAuth Consumer key and a secret key for your application/site.
-Add this key pair to your config/local.config.php:
-
- [twitter]
- consumerkey = your consumer_key here
- consumersecret = your consumer_secret here
-
-After this, your users can configure their Twitter account settings from "Settings -> Connector Settings".
-
-### More documentation
-
-Find the author's documentation here: [http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Twitter_Plugin](http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Twitter_Plugin)
-
-
-GNU Social Addon for Friendica
----
-
-* Author: Tobias Diekershoff
-* tobias.diekershoff@gmx.net
-* License: 3-clause BSD license
-
-### Configuration
-
-When the addon is activated the user has to acquire the following in order to connect to the GNU Social account of choice.
-
-* The base URL for the GNU Social API, for quitter.se this is https://quitter.se/api/
-* OAuth Consumer key & secret
-
-To get the OAuth Consumer key pair the user has to
-
-1 ask her Friendica admin if a pair already exists or
-2 has to register the Friendica server as a client application on the GNU Social server.
-
-This can be done from the account settings under "Settings -> Connections -> Register an OAuth client application -> Register a new application" on the GNU Social server.
-
-During the registration of the OAuth client remember the following:
-
-* Application names must be unique on the GNU Social site, so we recommend a Name of 'friendica-nnnn', replace 'nnnn' with a random number or your website name.
-* there is no callback url
-* register a desktop client
-* with read & write access
-* the Source URL should be the URL of your Friendica server
-
-After the required credentials for the application are stored in the configuration you have to actually connect your Friendica account with GNU Social.
-This is done from the Settings -> Connector Settings page.
-Follow the Sign in with GNU Social button, allow access and then copy the security code into the box provided.
-Friendica will then try to acquire the final OAuth credentials from the API.
-
-If successful, the addon settings will allow you to select to post your public messages to your GNU Social account (have a look behind the little lock symbol beneath the status "editor" on your Home or Network pages).
+To keep track of the messages processed and the drift (the time difference between the date of the message and the date the system processed that message), some fields are added to the statistics endpoint.
diff --git a/doc/Making-Friends.md b/doc/Making-Friends.md
index d928995865..85d4044cef 100644
--- a/doc/Making-Friends.md
+++ b/doc/Making-Friends.md
@@ -98,14 +98,19 @@ As a friend, you can both communicate with each other.
diaspora* uses a different terminology, and you are given the option of allowing them to "share with you", or being full friends.
-Ignoring, blocking and deleting contacts
+Deleting
---
-Once you have become friends, if you find the person constantly sends you spam or worthless information, you can "Ignore" them - without breaking off the friendship or even alerting them to the fact that you aren't interested in anything they are saying.
-In many ways they are like a "follower" - but they don't know this.
-They think they are a friend.
-You can also "block" a person.
-This completely blocks communications with that person.
-They may still be able to see your public posts, as can anybody in the world, but they cannot communicate with you directly.
+You can delete a friend no matter what the friendship status - which completely removes everything relating to that person from your website.
-You can also delete a friend no matter what the friendship status - which completely removes everything relating to that person from your website.
+Unwanted Behaviour
+---
+
+If a contact engages in abuse, harrassment, or other unwanted behaviour, there are various actions you can take.
+These include:
+
+* Reporting them to your administrator, optionally also their administrator
+* Ignoring the contact, so that you will not see their posts
+* Blocking the contact from receiving your posts
+
+For more information, see [Safety](help/Safety).
diff --git a/doc/Migrate.md b/doc/Migrate.md
index e116d029f6..ca0e0d0d95 100644
--- a/doc/Migrate.md
+++ b/doc/Migrate.md
@@ -55,9 +55,9 @@ You should see an output like this:
Finally, you may also want to optimise your database with the following command: ``mysqloptimize -p friendica-db``
-### Going offline
+### Going offline
Stop background tasks and put your server in maintenance mode.
-1. If you had set up a worker cron job like this ``*/10 * * * * cd /var/www/friendica; /usr/bin/php bin/worker.php`` run ``crontab -e`` and comment out this line. Alternatively if you deploy a worker daemon, disable this instead.
+1. If you had set up a worker cron job like this ``*/10 * * * * cd /var/www/friendica; /usr/bin/php bin/console.php worker`` run ``crontab -e`` and comment out this line. Alternatively if you deploy a worker daemon, disable this instead.
2. Put your server into maintenance mode: ``bin/console maintenance 1 "We are currently upgrading our system and will be back soon."``
## Dumping DB
@@ -73,12 +73,12 @@ Import your database on your new server: ``mysql -p friendica_db < your-friendic
### Configuration file
Copy your old server's configuration file to ``config/local.config.php``.
-Ensure the newly created database credentials are identical to the setting in the configuration file; otherwise update them accordingly.
+Ensure the newly created database credentials are identical to the setting in the configuration file; otherwise update them accordingly.
### Cron job for worker
Set up the required daily cron job.
Run ``crontab -e`` and add the following line according to your system specification
-``*/10 * * * * cd /var/www/friendica; /usr/bin/php bin/worker.php``
+``*/10 * * * * cd /var/www/friendica; /usr/bin/php bin/console.php worker``
### DNS settings
Adjust your DNS records by pointing them to your new server.
diff --git a/doc/Move-Account.md b/doc/Move-Account.md
index 2983184be6..9e13d7cad8 100644
--- a/doc/Move-Account.md
+++ b/doc/Move-Account.md
@@ -21,11 +21,6 @@ Friendica will recreate your account on the new server, with your contacts and c
A message is sent to Friendica contacts, to inform them about your move:
If your contacts are running on an updated server, your details on their side will be automatically updated.
-GNU Social contacts
----
-Contacts on GNU Social will be archived, as we can't inform them about your move.
-You should ask them to remove your contact from their lists and re-add you, and you should do the same with their contact.
-
Diaspora contacts
---
Newer Diaspora servers are able to process "account migration" messages.
diff --git a/doc/Protocol.md b/doc/Protocol.md
index 85fe09a5f1..af0002472c 100644
--- a/doc/Protocol.md
+++ b/doc/Protocol.md
@@ -20,23 +20,9 @@ Additional types are used for non standard activities.
* [Link to the specification](http://activitystrea.ms/head/activity-schema.html)
* [List of used ActivityStreams verbs and object types.](https://github.com/friendica/friendica/wiki/ActivityStreams)
-Salmon
----
-
-Salmon is used as a message exchange protocol for replies and mentions.
-
-* [Link to the protocol summary](http://www.salmon-protocol.org/salmon-protocol-summary)
-
Portable Contacts
---
Portable Contacts is used for friends lists.
* [Link to the specification](https://web.archive.org/web/20160426223008/http://portablecontacts.net/draft-spec.html) (Link to archive.org)
-
-pubsubhubbub
----
-
-pubsubhubbub is used for OStatus.
-
-* [Link to the specification](https://pubsubhubbub.github.io/PubSubHubbub/pubsubhubbub-core-0.4.html)
diff --git a/doc/Quick-Start-makingnewfriends.md b/doc/Quick-Start-makingnewfriends.md
index 39edd19b41..d642905698 100644
--- a/doc/Quick-Start-makingnewfriends.md
+++ b/doc/Quick-Start-makingnewfriends.md
@@ -1,5 +1,5 @@
This is your Suggested Friends page.
-If you get lost, you can click this link to bring yourself back here.
+If you get lost, you can click this link to bring yourself back here.
This is a bit like the Friend Suggestions page of Facebook.
Everybody on this list has agreed that they may be suggested as a friend.
@@ -16,6 +16,6 @@ Click the link at the top of this page to go back to the suggested friends list
Feel uncomfortable adding people you don't know?
Don't worry - that's where Groups and Pages come in!
-
+
diff --git a/doc/Safety.md b/doc/Safety.md
new file mode 100644
index 0000000000..4ecd927e87
--- /dev/null
+++ b/doc/Safety.md
@@ -0,0 +1,73 @@
+Safety
+======
+
+* [Home](help)
+
+Each Friendica instance is linked together with a global network of other servers, some running Friendica and some running other software.
+These servers support a diverse global community of millions of users.
+Inevitably, some of these users are malicious.
+Friendica provides several features to keep you safe from abuse and harrassment.
+
+Terms of Service
+---
+
+Each instance is entitled to define its own Terms of Service, also often called a Code of Conduct.
+These terms include rules for behaviour.
+These Terms of Service are visible when creating an account.
+By creating an account on a server, you agree to be bound by these Terms of Service.
+Users who violate the terms of service of their instance may face sanctions including being suspended or banned from their instance.
+
+Remember that conversations frequently involve participants from different instances with different rules.
+Participants are only bound by the rules of the server where they have an account, not by the rules of your server.
+Terms of Service may even be completely incompatible.
+
+Reporting
+---
+
+Your local administrators are responsible for ensuring a safe online environment for all users on your server.
+They rely on reports from users to highlight behaviour that puts other users at risk.
+If you see problematic behaviour from a user, whether they are from another server or are local to your server, you can report that behaviour to your administrator.
+You can also choose to send that report to their administrator at the same time.
+You will be given an opportunity to select the type of problem you are seeing.
+Your local administrator then has the option of blocking that user for all users on your local instance.
+If a remote server is a constant source of abuse and their administrators are unable or unwilling to control their users behaviour, your administrator can even block the entire remote server.
+
+Ignoring
+---
+
+Once you have become friends, if you find the person constantly sends you spam or worthless information, you can "Ignore" them - without breaking off the friendship or even alerting them to the fact that you aren't interested in anything they are saying.
+In many ways they are like a "follower" - but they don't know this.
+They think they are a friend.
+Your own posts will still be delivered to them.
+Other people will see their replies to you normally.
+
+Some servers are frequent sources of abusive or other unwanted behaviour.
+For this reason you can also choose to ignore entire servers.
+Users on that server can still follow you as normal.
+
+Blocking
+---
+
+You can also "block" a person.
+This completely blocks communications with that person.
+Your public comments will no longer be sent to them. Their own public posts will not be visible in your stream.
+If they participate in other conversations you are following, their replies will still be part of the thread.
+However, their replies will be collapsed by default, and only visible if you open the reply.
+Other people will see their replies normally.
+
+A blocked contact will still believe that they are following you.
+If they delete you as a contact and then add you again, they will return to apparently following you but in fact still being blocked.
+You will not be notified when this happens.
+
+When you block a person, your server will notify their server that the block has occurred.
+This is so that if, for example, Alice and Bob follow you from the same server, and you want to block Alice but not Bob, their server can decide which accounts should see your post.
+This does mean that the administrator of their server can see that you have applied the block, and may inform the blocked person.
+In some cases this could lead to retaliation.
+There are several other ways someone can determine that you have blocked them, and see your public posts despite the block.
+For example, they can simply log out and view your posts.
+
+Archiving
+---
+
+Archiving is similar to blocking.
+However, existing posts this person made before being archived will be visible in your stream.
diff --git a/doc/Settings.md b/doc/Settings.md
index 00c8be2c2e..7ca0e22286 100644
--- a/doc/Settings.md
+++ b/doc/Settings.md
@@ -419,7 +419,7 @@ We strongly discourage you from doing so, as this will break federation to other
Say you have a subdirectory for tests and put Friendica into a further subdirectory, the config would be:
'system' => [
- 'urlpath' => 'tests/friendica',
+ 'url' => 'https://example.com/tests/friendica',
],
## Other exceptions
diff --git a/doc/StrategyHooks.md b/doc/StrategyHooks.md
index 2960ceeaad..440728783c 100644
--- a/doc/StrategyHooks.md
+++ b/doc/StrategyHooks.md
@@ -83,6 +83,8 @@ return [
## Addons
+> ⚠️ Since Friendica 2025.02 the strategy hooks for addons are deprecated, please use PHP hooks instead.
+
The hook logic is useful for decoupling the Friendica core logic, but its primary goal is to modularize Friendica in creating addons.
Therefor you can either use the interfaces directly as shown above, or you can place your own `hooks.config.php` file inside a `static` directory directly under your addon core directory.
diff --git a/doc/Update.md b/doc/Update.md
index 40de14082c..b6c5c53e19 100644
--- a/doc/Update.md
+++ b/doc/Update.md
@@ -14,7 +14,7 @@ If you installed Friendica in the ``path/to/friendica`` folder:
* ``.htaccess`` if using Apache web server
The following items only need to be copied if they are located inside your friendica path:
- * your storage folder as set in **Admin -> Site -> File Upload -> Storage base path**
+ * your storage folder as set in **Admin -> Site -> File Upload -> Storage base path**
* your item cache as set in **Admin -> Site -> Performance -> Path to item cache**
* your temp folder as set in **Admin -> Site -> Advanced -> Temp path**
3. Rename the ``path/to/friendica`` folder to ``path/to/friendica_old``.
@@ -30,7 +30,7 @@ You can get the latest changes at any time with
cd path/to/friendica
git pull
- bin/composer.phar install --no-dev
+ bin/composer.phar run install:prod
The addon tree has to be updated separately like so:
@@ -89,7 +89,7 @@ Some of the updates include the use of foreign keys now that will bump into issu
```
Error 1452 occurred during database update:
Cannot add or update a child row: a foreign key constraint fails (`friendica`.`#sql-10ea6_5a6d`, CONSTRAINT `#sql-10ea6_5a6d_ibfk_1` FOREIGN KEY (`contact-id`) REFERENCES `contact` (`id`))
-ALTER TABLE `thread` ADD FOREIGN KEY (`iid`) REFERENCES `item` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE;
+ALTER TABLE `thread` ADD FOREIGN KEY (`iid`) REFERENCES `item` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE;
```
All current known fixes for possible items that can go wrong are as below.
diff --git a/doc/Vagrant.md b/doc/Vagrant.md
index 16088cd37e..29a2871bd8 100644
--- a/doc/Vagrant.md
+++ b/doc/Vagrant.md
@@ -18,7 +18,7 @@ What you need to do:
Please use an up-to-date vagrant version from https://www.vagrantup.com/downloads.html.
2. Git clone your Friendica repository.
Inside, you'll find a `Vagrantfile` and some scripts in the `bin/dev` folder.
-Pull the PHP requirements with `bin/composer install`.
+Pull the PHP requirements with `bin/composer.phar install`.
3. Run `vagrant up` from inside the friendica clone.
This will start the virtual machine.
Be patient: When it runs for the first time, it downloads a Debian Server image and installs Friendica.
@@ -60,7 +60,7 @@ Trouble Shooting
If you see a version mis-match for the _VirtualBox Guest Additions_ between host and guest during the initial setup of the Vagrant VM, you will need to install an addon to Vagrant (ref. [Stack Overflow](https://stackoverflow.com/a/38010683)).
Stop the Vagrant VM and run the following command:
- $> vagrant plugin install vagrant-vbguest
+ $> vagrant plugin install vagrant-vbguest
On the next Vagrant up, the version problem should be fixed.
diff --git a/doc/autoloader.md b/doc/autoloader.md
index 954c28813c..5bc0bfe9b3 100644
--- a/doc/autoloader.md
+++ b/doc/autoloader.md
@@ -46,9 +46,9 @@ The code will be something like:
// mod/network.php
getAll();
diff --git a/doc/database.md b/doc/database.md
index 26519ccfb4..4036b7ec14 100644
--- a/doc/database.md
+++ b/doc/database.md
@@ -61,14 +61,17 @@ Database Tables
| [post-category](help/database/db_post-category) | post relation to categories |
| [post-collection](help/database/db_post-collection) | Collection of posts |
| [post-content](help/database/db_post-content) | Content for all posts |
+| [post-counts](help/database/db_post-counts) | Original remote activity |
| [post-delivery](help/database/db_post-delivery) | Delivery data for posts for the batch processing |
| [post-delivery-data](help/database/db_post-delivery-data) | Delivery data for items |
| [post-engagement](help/database/db_post-engagement) | Engagement data per post |
| [post-history](help/database/db_post-history) | Post history |
| [post-link](help/database/db_post-link) | Post related external links |
| [post-media](help/database/db_post-media) | Attached media |
+| [post-origin](help/database/db_post-origin) | Posts from local users |
| [post-question](help/database/db_post-question) | Question |
| [post-question-option](help/database/db_post-question-option) | Question option |
+| [post-searchindex](help/database/db_post-searchindex) | Content for all posts |
| [post-tag](help/database/db_post-tag) | post relation to tags |
| [post-thread](help/database/db_post-thread) | Thread related data |
| [post-thread-user](help/database/db_post-thread-user) | Thread related data per user |
@@ -77,7 +80,6 @@ Database Tables
| [process](help/database/db_process) | Currently running system processes |
| [profile](help/database/db_profile) | user profiles data |
| [profile_field](help/database/db_profile_field) | Custom profile fields |
-| [push_subscriber](help/database/db_push_subscriber) | Used for OStatus: Contains feed subscribers |
| [register](help/database/db_register) | registrations requiring admin approval |
| [report](help/database/db_report) | |
| [report-post](help/database/db_report-post) | Individual posts attached to a moderation report |
diff --git a/doc/database/db_apcontact.md b/doc/database/db_apcontact.md
index 1632378ea8..902d41ae6b 100644
--- a/doc/database/db_apcontact.md
+++ b/doc/database/db_apcontact.md
@@ -6,40 +6,41 @@ ActivityPub compatible contacts - used in the ActivityPub implementation
Fields
------
-| Field | Description | Type | Null | Key | Default | Extra |
-| ---------------- | ------------------------------------------------------------------- | -------------- | ---- | --- | ------------------- | ----- |
-| url | URL of the contact | varbinary(383) | NO | PRI | NULL | |
-| uri-id | Id of the item-uri table entry that contains the apcontact url | int unsigned | YES | | NULL | |
-| uuid | | varbinary(255) | YES | | NULL | |
-| type | | varchar(20) | NO | | NULL | |
-| following | | varbinary(383) | YES | | NULL | |
-| followers | | varbinary(383) | YES | | NULL | |
-| inbox | | varbinary(383) | NO | | NULL | |
-| outbox | | varbinary(383) | YES | | NULL | |
-| sharedinbox | | varbinary(383) | YES | | NULL | |
-| featured | Address for the collection of featured posts | varbinary(383) | YES | | NULL | |
-| featured-tags | Address for the collection of featured tags | varbinary(383) | YES | | NULL | |
-| manually-approve | | boolean | YES | | NULL | |
-| discoverable | Mastodon extension: true if profile is published in their directory | boolean | YES | | NULL | |
-| suspended | Mastodon extension: true if profile is suspended | boolean | YES | | NULL | |
-| nick | | varchar(255) | NO | | | |
-| name | | varchar(255) | YES | | NULL | |
-| about | | text | YES | | NULL | |
-| xmpp | XMPP address | varchar(255) | YES | | NULL | |
-| matrix | Matrix address | varchar(255) | YES | | NULL | |
-| photo | | varbinary(383) | YES | | NULL | |
-| header | Header picture | varbinary(383) | YES | | NULL | |
-| addr | | varchar(255) | YES | | NULL | |
-| alias | | varbinary(383) | YES | | NULL | |
-| pubkey | | text | YES | | NULL | |
-| subscribe | | varbinary(383) | YES | | NULL | |
-| baseurl | baseurl of the ap contact | varbinary(383) | YES | | NULL | |
-| gsid | Global Server ID | int unsigned | YES | | NULL | |
-| generator | Name of the contact's system | varchar(255) | YES | | NULL | |
-| following_count | Number of following contacts | int unsigned | YES | | 0 | |
-| followers_count | Number of followers | int unsigned | YES | | 0 | |
-| statuses_count | Number of posts | int unsigned | YES | | 0 | |
-| updated | | datetime | NO | | 0001-01-01 00:00:00 | |
+| Field | Description | Type | Null | Key | Default | Extra |
+| ------------------ | ------------------------------------------------------------------- | -------------- | ---- | --- | ------------------- | ----- |
+| url | URL of the contact | varbinary(383) | NO | PRI | NULL | |
+| uri-id | Id of the item-uri table entry that contains the apcontact url | int unsigned | YES | | NULL | |
+| uuid | | varbinary(255) | YES | | NULL | |
+| type | | varchar(20) | NO | | NULL | |
+| following | | varbinary(383) | YES | | NULL | |
+| followers | | varbinary(383) | YES | | NULL | |
+| inbox | | varbinary(383) | NO | | NULL | |
+| outbox | | varbinary(383) | YES | | NULL | |
+| sharedinbox | | varbinary(383) | YES | | NULL | |
+| featured | Address for the collection of featured posts | varbinary(383) | YES | | NULL | |
+| featured-tags | Address for the collection of featured tags | varbinary(383) | YES | | NULL | |
+| manually-approve | | boolean | YES | | NULL | |
+| discoverable | Mastodon extension: true if profile is published in their directory | boolean | YES | | NULL | |
+| suspended | Mastodon extension: true if profile is suspended | boolean | YES | | NULL | |
+| posting-restricted | lemmy:postingRestrictedToMods | boolean | YES | | NULL | |
+| nick | | varchar(255) | NO | | | |
+| name | | varchar(255) | YES | | NULL | |
+| about | | text | YES | | NULL | |
+| xmpp | XMPP address | varchar(255) | YES | | NULL | |
+| matrix | Matrix address | varchar(255) | YES | | NULL | |
+| photo | | varbinary(383) | YES | | NULL | |
+| header | Header picture | varbinary(383) | YES | | NULL | |
+| addr | | varchar(255) | YES | | NULL | |
+| alias | | varbinary(383) | YES | | NULL | |
+| pubkey | | text | YES | | NULL | |
+| subscribe | | varbinary(383) | YES | | NULL | |
+| baseurl | baseurl of the ap contact | varbinary(383) | YES | | NULL | |
+| gsid | Global Server ID | int unsigned | YES | | NULL | |
+| generator | Name of the contact's system | varchar(255) | YES | | NULL | |
+| following_count | Number of following contacts | int unsigned | YES | | 0 | |
+| followers_count | Number of followers | int unsigned | YES | | 0 | |
+| statuses_count | Number of posts | int unsigned | YES | | 0 | |
+| updated | | datetime | NO | | 0001-01-01 00:00:00 | |
Indexes
------------
diff --git a/doc/database/db_channel.md b/doc/database/db_channel.md
index 9b9486fa32..4a469b4ee3 100644
--- a/doc/database/db_channel.md
+++ b/doc/database/db_channel.md
@@ -16,8 +16,13 @@ Fields
| access-key | Access key | varchar(1) | YES | | NULL | |
| include-tags | Comma separated list of tags that will be included in the channel | varchar(1023) | YES | | NULL | |
| exclude-tags | Comma separated list of tags that aren't allowed in the channel | varchar(1023) | YES | | NULL | |
+| min-size | Minimum post size | int unsigned | YES | | NULL | |
+| max-size | Maximum post size | int unsigned | YES | | NULL | |
| full-text-search | Full text search pattern, see https://mariadb.com/kb/en/full-text-index-overview/#in-boolean-mode | varchar(1023) | YES | | NULL | |
| media-type | Filtered media types | smallint unsigned | YES | | NULL | |
+| languages | Desired languages | mediumtext | YES | | NULL | |
+| publish | publish channel content | boolean | YES | | NULL | |
+| valid | Set, when the full-text-search is valid | boolean | YES | | NULL | |
Indexes
------------
diff --git a/doc/database/db_contact-relation.md b/doc/database/db_contact-relation.md
index f11fd95a0f..c83c9b8326 100644
--- a/doc/database/db_contact-relation.md
+++ b/doc/database/db_contact-relation.md
@@ -6,17 +6,18 @@ Contact relations
Fields
------
-| Field | Description | Type | Null | Key | Default | Extra |
-| --------------------- | -------------------------------------------------------- | ----------------- | ---- | --- | ------------------- | ----- |
-| cid | contact the related contact had interacted with | int unsigned | NO | PRI | 0 | |
-| relation-cid | related contact who had interacted with the contact | int unsigned | NO | PRI | 0 | |
-| last-interaction | Date of the last interaction by relation-cid on cid | datetime | NO | | 0001-01-01 00:00:00 | |
-| follow-updated | Date of the last update of the contact relationship | datetime | NO | | 0001-01-01 00:00:00 | |
-| follows | if true, relation-cid follows cid | boolean | NO | | 0 | |
-| score | score for interactions of cid on relation-cid | smallint unsigned | YES | | NULL | |
-| relation-score | score for interactions of relation-cid on cid | smallint unsigned | YES | | NULL | |
-| thread-score | score for interactions of cid on threads of relation-cid | smallint unsigned | YES | | NULL | |
-| relation-thread-score | score for interactions of relation-cid on threads of cid | smallint unsigned | YES | | NULL | |
+| Field | Description | Type | Null | Key | Default | Extra |
+| --------------------- | ----------------------------------------------------------------------- | ----------------- | ---- | --- | ------------------- | ----- |
+| cid | contact the related contact had interacted with | int unsigned | NO | PRI | 0 | |
+| relation-cid | related contact who had interacted with the contact | int unsigned | NO | PRI | 0 | |
+| last-interaction | Date of the last interaction by relation-cid on cid | datetime | NO | | 0001-01-01 00:00:00 | |
+| follow-updated | Date of the last update of the contact relationship | datetime | NO | | 0001-01-01 00:00:00 | |
+| follows | if true, relation-cid follows cid | boolean | NO | | 0 | |
+| score | score for interactions of cid on relation-cid | smallint unsigned | YES | | NULL | |
+| relation-score | score for interactions of relation-cid on cid | smallint unsigned | YES | | NULL | |
+| thread-score | score for interactions of cid on threads of relation-cid | smallint unsigned | YES | | NULL | |
+| relation-thread-score | score for interactions of relation-cid on threads of cid | smallint unsigned | YES | | NULL | |
+| post-score | score for the amount of posts from cid that can be seen by relation-cid | smallint unsigned | YES | | NULL | |
Indexes
------------
diff --git a/doc/database/db_contact.md b/doc/database/db_contact.md
index 8221f279e2..cd66ce12de 100644
--- a/doc/database/db_contact.md
+++ b/doc/database/db_contact.md
@@ -59,7 +59,6 @@ Fields
| remote_self | | boolean | NO | | 0 | |
| rel | The kind of the relation between the user and the contact | tinyint unsigned | NO | | 0 | |
| protocol | Protocol of the contact | char(4) | NO | | | |
-| subhub | | boolean | NO | | 0 | |
| hub-verify | | varbinary(383) | NO | | | |
| rating | Automatically detected feed poll frequency | tinyint | NO | | 0 | |
| priority | Feed poll priority | tinyint unsigned | NO | | 0 | |
diff --git a/doc/database/db_gserver.md b/doc/database/db_gserver.md
index 8ba9e3d9b1..22939ec2bc 100644
--- a/doc/database/db_gserver.md
+++ b/doc/database/db_gserver.md
@@ -6,47 +6,59 @@ Global servers
Fields
------
-| Field | Description | Type | Null | Key | Default | Extra |
-| --------------------- | -------------------------------------------------- | ---------------- | ---- | --- | ------------------- | -------------- |
-| id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment |
-| url | | varbinary(383) | NO | | | |
-| nurl | | varbinary(383) | NO | | | |
-| version | | varchar(255) | NO | | | |
-| site_name | | varchar(255) | NO | | | |
-| info | | text | YES | | NULL | |
-| register_policy | | tinyint | NO | | 0 | |
-| registered-users | Number of registered users | int unsigned | NO | | 0 | |
-| active-week-users | Number of active users in the last week | int unsigned | YES | | NULL | |
-| active-month-users | Number of active users in the last month | int unsigned | YES | | NULL | |
-| active-halfyear-users | Number of active users in the last six month | int unsigned | YES | | NULL | |
-| local-posts | Number of local posts | int unsigned | YES | | NULL | |
-| local-comments | Number of local comments | int unsigned | YES | | NULL | |
-| directory-type | Type of directory service (Poco, Mastodon) | tinyint | YES | | 0 | |
-| poco | | varbinary(383) | NO | | | |
-| noscrape | | varbinary(383) | NO | | | |
-| network | | char(4) | NO | | | |
-| protocol | The protocol of the server | tinyint unsigned | YES | | NULL | |
-| platform | | varchar(255) | NO | | | |
-| relay-subscribe | Has the server subscribed to the relay system | boolean | NO | | 0 | |
-| relay-scope | The scope of messages that the server wants to get | varchar(10) | NO | | | |
-| detection-method | Method that had been used to detect that server | tinyint unsigned | YES | | NULL | |
-| created | | datetime | NO | | 0001-01-01 00:00:00 | |
-| last_poco_query | | datetime | YES | | 0001-01-01 00:00:00 | |
-| last_contact | Last successful connection request | datetime | YES | | 0001-01-01 00:00:00 | |
-| last_failure | Last failed connection request | datetime | YES | | 0001-01-01 00:00:00 | |
-| blocked | Server is blocked | boolean | YES | | NULL | |
-| failed | Connection failed | boolean | YES | | NULL | |
-| next_contact | Next connection request | datetime | YES | | 0001-01-01 00:00:00 | |
+| Field | Description | Type | Null | Key | Default | Extra |
+| --------------------- | -------------------------------------------------------------- | ---------------- | ---- | --- | ------------------- | -------------- |
+| id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment |
+| url | | varbinary(383) | NO | | | |
+| nurl | | varbinary(383) | NO | | | |
+| version | The version of this server software. | varchar(255) | NO | | | |
+| site_name | | varchar(255) | NO | | | |
+| info | | text | YES | | NULL | |
+| register_policy | | tinyint | NO | | 0 | |
+| registered-users | Number of registered users | int unsigned | NO | | 0 | |
+| active-week-users | Number of active users in the last week | int unsigned | YES | | NULL | |
+| active-month-users | Number of active users in the last month | int unsigned | YES | | NULL | |
+| active-halfyear-users | Number of active users in the last six month | int unsigned | YES | | NULL | |
+| local-posts | Number of local posts | int unsigned | YES | | NULL | |
+| local-comments | Number of local comments | int unsigned | YES | | NULL | |
+| directory-type | Type of directory service (Poco, Mastodon) | tinyint | YES | | 0 | |
+| poco | | varbinary(383) | NO | | | |
+| openwebauth | Path to the OpenWebAuth endpoint | varbinary(383) | YES | | NULL | |
+| authredirect | Path to the authRedirect endpoint | varbinary(383) | YES | | NULL | |
+| noscrape | | varbinary(383) | NO | | | |
+| network | | char(4) | NO | | | |
+| protocol | The protocol of the server | tinyint unsigned | YES | | NULL | |
+| platform | The canonical name of this server software. | varchar(255) | NO | | | |
+| repository | The url of the source code repository of this server software. | varbinary(383) | YES | | NULL | |
+| homepage | The url of the homepage of this server software. | varbinary(383) | YES | | NULL | |
+| relay-subscribe | Has the server subscribed to the relay system | boolean | NO | | 0 | |
+| relay-scope | The scope of messages that the server wants to get | varchar(10) | NO | | | |
+| detection-method | Method that had been used to detect that server | tinyint unsigned | YES | | NULL | |
+| created | | datetime | NO | | 0001-01-01 00:00:00 | |
+| last_poco_query | | datetime | YES | | 0001-01-01 00:00:00 | |
+| last_contact | Last successful connection request | datetime | YES | | 0001-01-01 00:00:00 | |
+| last_failure | Last failed connection request | datetime | YES | | 0001-01-01 00:00:00 | |
+| blocked | Server is blocked | boolean | YES | | NULL | |
+| failed | Connection failed | boolean | YES | | NULL | |
+| next_contact | Next connection request | datetime | YES | | 0001-01-01 00:00:00 | |
+| redirect-gsid | Target Gserver id in case of a redirect | int unsigned | YES | | NULL | |
Indexes
------------
-| Name | Fields |
-| ------------ | ----------------- |
-| PRIMARY | id |
-| nurl | UNIQUE, nurl(190) |
-| next_contact | next_contact |
-| network | network |
+| Name | Fields |
+| ------------- | ----------------- |
+| PRIMARY | id |
+| nurl | UNIQUE, nurl(190) |
+| next_contact | next_contact |
+| network | network |
+| redirect-gsid | redirect-gsid |
+Foreign Keys
+------------
+
+| Field | Target Table | Target Field |
+|-------|--------------|--------------|
+| redirect-gsid | [gserver](help/database/db_gserver) | id |
Return to [database documentation](help/database)
diff --git a/doc/database/db_inbox-entry.md b/doc/database/db_inbox-entry.md
index 834d4bfd64..e18e66f240 100644
--- a/doc/database/db_inbox-entry.md
+++ b/doc/database/db_inbox-entry.md
@@ -6,22 +6,24 @@ Incoming activity
Fields
------
-| Field | Description | Type | Null | Key | Default | Extra |
-| ------------------ | -------------------------------------- | -------------- | ---- | --- | ------- | -------------- |
-| id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment |
-| activity-id | id of the incoming activity | varbinary(383) | YES | | NULL | |
-| object-id | | varbinary(383) | YES | | NULL | |
-| in-reply-to-id | | varbinary(383) | YES | | NULL | |
-| conversation | | varbinary(383) | YES | | NULL | |
-| type | Type of the activity | varchar(64) | YES | | NULL | |
-| object-type | Type of the object activity | varchar(64) | YES | | NULL | |
-| object-object-type | Type of the object's object activity | varchar(64) | YES | | NULL | |
-| received | Receiving date | datetime | YES | | NULL | |
-| activity | The JSON activity | mediumtext | YES | | NULL | |
-| signer | | varchar(255) | YES | | NULL | |
-| push | Is the entry pushed or have pulled it? | boolean | YES | | NULL | |
-| trust | Do we trust this entry? | boolean | YES | | NULL | |
-| wid | Workerqueue id | int unsigned | YES | | NULL | |
+| Field | Description | Type | Null | Key | Default | Extra |
+| ------------------ | -------------------------------------- | ---------------- | ---- | --- | ------- | -------------- |
+| id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment |
+| activity-id | id of the incoming activity | varbinary(383) | YES | | NULL | |
+| object-id | | varbinary(383) | YES | | NULL | |
+| in-reply-to-id | | varbinary(383) | YES | | NULL | |
+| context | | varbinary(383) | YES | | NULL | |
+| conversation | | varbinary(383) | YES | | NULL | |
+| type | Type of the activity | varchar(64) | YES | | NULL | |
+| object-type | Type of the object activity | varchar(64) | YES | | NULL | |
+| object-object-type | Type of the object's object activity | varchar(64) | YES | | NULL | |
+| received | Receiving date | datetime | YES | | NULL | |
+| activity | The JSON activity | mediumtext | YES | | NULL | |
+| signer | | varchar(255) | YES | | NULL | |
+| push | Is the entry pushed or have pulled it? | boolean | YES | | NULL | |
+| trust | Do we trust this entry? | boolean | YES | | NULL | |
+| wid | Workerqueue id | int unsigned | YES | | NULL | |
+| retrial | Retrial counter | tinyint unsigned | YES | | 0 | |
Indexes
------------
diff --git a/doc/database/db_post-content.md b/doc/database/db_post-content.md
index 27b372093a..d1ae90f278 100644
--- a/doc/database/db_post-content.md
+++ b/doc/database/db_post-content.md
@@ -17,6 +17,7 @@ Fields
| location | text location where this item originated | varchar(255) | NO | | | |
| coord | longitude/latitude pair representing location where this item originated | varchar(255) | NO | | | |
| language | Language information about this post | text | YES | | NULL | |
+| sensitive | If true, this post contains sensitive content | boolean | YES | | NULL | |
| app | application which generated this item | varchar(255) | NO | | | |
| rendered-hash | | varchar(32) | NO | | | |
| rendered-html | item.body converted to html | mediumtext | YES | | NULL | |
@@ -30,13 +31,12 @@ Fields
Indexes
------------
-| Name | Fields |
-| -------------------------- | -------------------------------------- |
-| PRIMARY | uri-id |
-| plink | plink(191) |
-| resource-id | resource-id |
-| title-content-warning-body | FULLTEXT, title, content-warning, body |
-| quote-uri-id | quote-uri-id |
+| Name | Fields |
+| ------------ | ------------ |
+| PRIMARY | uri-id |
+| plink | plink(191) |
+| resource-id | resource-id |
+| quote-uri-id | quote-uri-id |
Foreign Keys
------------
diff --git a/doc/database/db_post-counts.md b/doc/database/db_post-counts.md
new file mode 100644
index 0000000000..db2a8fd36d
--- /dev/null
+++ b/doc/database/db_post-counts.md
@@ -0,0 +1,35 @@
+Table post-counts
+===========
+
+Original remote activity
+
+Fields
+------
+
+| Field | Description | Type | Null | Key | Default | Extra |
+| ------------- | ----------------------------------------------------------- | ----------------- | ---- | --- | ------- | ----- |
+| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | PRI | NULL | |
+| vid | Id of the verb table entry that contains the activity verbs | smallint unsigned | NO | PRI | NULL | |
+| reaction | Emoji Reaction | varchar(4) | NO | PRI | NULL | |
+| parent-uri-id | Id of the item-uri table that contains the parent uri | int unsigned | YES | | NULL | |
+| count | Number of activities | int unsigned | YES | | 0 | |
+
+Indexes
+------------
+
+| Name | Fields |
+| ------------- | --------------------- |
+| PRIMARY | uri-id, vid, reaction |
+| vid | vid |
+| parent-uri-id | parent-uri-id |
+
+Foreign Keys
+------------
+
+| Field | Target Table | Target Field |
+|-------|--------------|--------------|
+| uri-id | [item-uri](help/database/db_item-uri) | id |
+| vid | [verb](help/database/db_verb) | id |
+| parent-uri-id | [item-uri](help/database/db_item-uri) | id |
+
+Return to [database documentation](help/database)
diff --git a/doc/database/db_post-delivery-data.md b/doc/database/db_post-delivery-data.md
index ad4ca6af32..332cfbcb3b 100644
--- a/doc/database/db_post-delivery-data.md
+++ b/doc/database/db_post-delivery-data.md
@@ -18,7 +18,6 @@ Fields
| dfrn | Number of successful deliveries via DFRN | mediumint | NO | | 0 | |
| legacy_dfrn | Number of successful deliveries via legacy DFRN | mediumint | NO | | 0 | |
| diaspora | Number of successful deliveries via Diaspora | mediumint | NO | | 0 | |
-| ostatus | Number of successful deliveries via OStatus | mediumint | NO | | 0 | |
Indexes
------------
diff --git a/doc/database/db_post-engagement.md b/doc/database/db_post-engagement.md
index edca447f3d..31ae5e4e41 100644
--- a/doc/database/db_post-engagement.md
+++ b/doc/database/db_post-engagement.md
@@ -11,10 +11,12 @@ Fields
| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | PRI | NULL | |
| owner-id | Item owner | int unsigned | NO | | 0 | |
| contact-type | Person, organisation, news, community, relay | tinyint | NO | | 0 | |
-| media-type | Type of media in a bit array (1 = image, 2 = video, 4 = audio | tinyint | NO | | 0 | |
-| language | Language information about this post | varbinary(128) | YES | | NULL | |
+| media-type | Type of media in a bit array (1 = image, 2 = video, 4 = audio) | tinyint | NO | | 0 | |
+| language | Language information about this post in the ISO 639-1 format | char(2) | YES | | NULL | |
| searchtext | Simplified text for the full text search | mediumtext | YES | | NULL | |
+| size | Body size | int unsigned | YES | | NULL | |
| created | | datetime | YES | | NULL | |
+| network | | char(4) | YES | | NULL | |
| restricted | If true, this post is either unlisted or not from a federated network | boolean | NO | | 0 | |
| comments | Number of comments | mediumint unsigned | YES | | NULL | |
| activities | Number of activities (like, dislike, ...) | mediumint unsigned | YES | | NULL | |
diff --git a/doc/database/db_post-media.md b/doc/database/db_post-media.md
index 2d73a39cfc..acbd1f75cb 100644
--- a/doc/database/db_post-media.md
+++ b/doc/database/db_post-media.md
@@ -6,29 +6,33 @@ Attached media
Fields
------
-| Field | Description | Type | Null | Key | Default | Extra |
-| --------------- | ------------------------------------------------------------------ | ----------------- | ---- | --- | ------- | -------------- |
-| id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment |
-| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | | NULL | |
-| url | Media URL | varbinary(1024) | NO | | NULL | |
-| media-uri-id | Id of the item-uri table entry that contains the activities uri-id | int unsigned | YES | | NULL | |
-| type | Media type | tinyint unsigned | NO | | 0 | |
-| mimetype | | varchar(60) | YES | | NULL | |
-| height | Height of the media | smallint unsigned | YES | | NULL | |
-| width | Width of the media | smallint unsigned | YES | | NULL | |
-| size | Media size | bigint unsigned | YES | | NULL | |
-| blurhash | BlurHash representation of the image | varbinary(255) | YES | | NULL | |
-| preview | Preview URL | varbinary(512) | YES | | NULL | |
-| preview-height | Height of the preview picture | smallint unsigned | YES | | NULL | |
-| preview-width | Width of the preview picture | smallint unsigned | YES | | NULL | |
-| description | | text | YES | | NULL | |
-| name | Name of the media | varchar(255) | YES | | NULL | |
-| author-url | URL of the author of the media | varbinary(383) | YES | | NULL | |
-| author-name | Name of the author of the media | varchar(255) | YES | | NULL | |
-| author-image | Image of the author of the media | varbinary(383) | YES | | NULL | |
-| publisher-url | URL of the publisher of the media | varbinary(383) | YES | | NULL | |
-| publisher-name | Name of the publisher of the media | varchar(255) | YES | | NULL | |
-| publisher-image | Image of the publisher of the media | varbinary(383) | YES | | NULL | |
+| Field | Description | Type | Null | Key | Default | Extra |
+| --------------- | ----------------------------------------------------------------------------------- | ----------------- | ---- | --- | ------- | -------------- |
+| id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment |
+| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | | NULL | |
+| url | Media URL | varbinary(1024) | NO | | NULL | |
+| media-uri-id | Id of the item-uri table entry that contains the activities uri-id | int unsigned | YES | | NULL | |
+| attach-id | In case of a local attachment, this field is filled with the id in the attach table | int unsigned | YES | | NULL | |
+| type | Media type | tinyint unsigned | NO | | 0 | |
+| mimetype | | varchar(60) | YES | | NULL | |
+| height | Height of the media | smallint unsigned | YES | | NULL | |
+| width | Width of the media | smallint unsigned | YES | | NULL | |
+| size | Media size | bigint unsigned | YES | | NULL | |
+| blurhash | BlurHash representation of the image | varbinary(255) | YES | | NULL | |
+| preview | Preview URL | varbinary(512) | YES | | NULL | |
+| preview-height | Height of the preview picture | smallint unsigned | YES | | NULL | |
+| preview-width | Width of the preview picture | smallint unsigned | YES | | NULL | |
+| description | | text | YES | | NULL | |
+| name | Name of the media | varchar(255) | YES | | NULL | |
+| author-url | URL of the author of the media | varbinary(383) | YES | | NULL | |
+| author-name | Name of the author of the media | varchar(255) | YES | | NULL | |
+| author-image | Image of the author of the media | varbinary(383) | YES | | NULL | |
+| publisher-url | URL of the publisher of the media | varbinary(383) | YES | | NULL | |
+| publisher-name | Name of the publisher of the media | varchar(255) | YES | | NULL | |
+| publisher-image | Image of the publisher of the media | varbinary(383) | YES | | NULL | |
+| language | Language information about this media in the ISO 639 format | char(3) | YES | | NULL | |
+| published | Publification date of this media | datetime | YES | | NULL | |
+| modified | Modification date of this media | datetime | YES | | NULL | |
Indexes
------------
@@ -39,6 +43,7 @@ Indexes
| uri-id-url | UNIQUE, uri-id, url(512) |
| uri-id-id | uri-id, id |
| media-uri-id | media-uri-id |
+| attach-id | attach-id |
Foreign Keys
------------
@@ -47,5 +52,6 @@ Foreign Keys
|-------|--------------|--------------|
| uri-id | [item-uri](help/database/db_item-uri) | id |
| media-uri-id | [item-uri](help/database/db_item-uri) | id |
+| attach-id | [attach](help/database/db_attach) | id |
Return to [database documentation](help/database)
diff --git a/doc/database/db_post-origin.md b/doc/database/db_post-origin.md
new file mode 100644
index 0000000000..dc72b0134f
--- /dev/null
+++ b/doc/database/db_post-origin.md
@@ -0,0 +1,48 @@
+Table post-origin
+===========
+
+Posts from local users
+
+Fields
+------
+
+| Field | Description | Type | Null | Key | Default | Extra |
+| ------------- | ------------------------------------------------------------ | ------------------ | ---- | --- | ------------------- | ----- |
+| id | | int unsigned | NO | PRI | NULL | |
+| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | | NULL | |
+| uid | Owner id which owns this copy of the item | mediumint unsigned | NO | | NULL | |
+| parent-uri-id | Id of the item-uri table that contains the parent uri | int unsigned | YES | | NULL | |
+| thr-parent-id | Id of the item-uri table that contains the thread parent uri | int unsigned | YES | | NULL | |
+| created | Creation timestamp. | datetime | NO | | 0001-01-01 00:00:00 | |
+| received | datetime | datetime | NO | | 0001-01-01 00:00:00 | |
+| gravity | | tinyint unsigned | NO | | 0 | |
+| vid | Id of the verb table entry that contains the activity verbs | smallint unsigned | YES | | NULL | |
+| private | 0=public, 1=private, 2=unlisted | tinyint unsigned | NO | | 0 | |
+| wall | This item was posted to the wall of uid | boolean | NO | | 0 | |
+
+Indexes
+------------
+
+| Name | Fields |
+| ----------------- | ------------------- |
+| PRIMARY | id |
+| uid_uri-id | UNIQUE, uid, uri-id |
+| uri-id | uri-id |
+| parent-uri-id | parent-uri-id |
+| thr-parent-id | thr-parent-id |
+| vid | vid |
+| parent-uri-id_uid | parent-uri-id, uid |
+| uid_wall_received | uid, wall, received |
+
+Foreign Keys
+------------
+
+| Field | Target Table | Target Field |
+|-------|--------------|--------------|
+| uri-id | [item-uri](help/database/db_item-uri) | id |
+| uid | [user](help/database/db_user) | uid |
+| parent-uri-id | [item-uri](help/database/db_item-uri) | id |
+| thr-parent-id | [item-uri](help/database/db_item-uri) | id |
+| vid | [verb](help/database/db_verb) | id |
+
+Return to [database documentation](help/database)
diff --git a/doc/database/db_post-searchindex.md b/doc/database/db_post-searchindex.md
new file mode 100644
index 0000000000..203a2dbab3
--- /dev/null
+++ b/doc/database/db_post-searchindex.md
@@ -0,0 +1,38 @@
+Table post-searchindex
+===========
+
+Content for all posts
+
+Fields
+------
+
+| Field | Description | Type | Null | Key | Default | Extra |
+| ---------- | --------------------------------------------------------------------- | ------------ | ---- | --- | ------- | ----- |
+| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | PRI | NULL | |
+| owner-id | Item owner | int unsigned | NO | | 0 | |
+| media-type | Type of media in a bit array (1 = image, 2 = video, 4 = audio) | tinyint | NO | | 0 | |
+| language | Language information about this post in the ISO 639-1 format | char(2) | YES | | NULL | |
+| searchtext | Simplified text for the full text search | mediumtext | YES | | NULL | |
+| size | Body size | int unsigned | YES | | NULL | |
+| created | | datetime | YES | | NULL | |
+| restricted | If true, this post is either unlisted or not from a federated network | boolean | NO | | 0 | |
+
+Indexes
+------------
+
+| Name | Fields |
+| ---------- | -------------------- |
+| PRIMARY | uri-id |
+| owner-id | owner-id |
+| created | created |
+| searchtext | FULLTEXT, searchtext |
+
+Foreign Keys
+------------
+
+| Field | Target Table | Target Field |
+|-------|--------------|--------------|
+| uri-id | [item-uri](help/database/db_item-uri) | id |
+| owner-id | [contact](help/database/db_contact) | id |
+
+Return to [database documentation](help/database)
diff --git a/doc/database/db_post-thread-user.md b/doc/database/db_post-thread-user.md
index a89d94c96f..d00e852547 100644
--- a/doc/database/db_post-thread-user.md
+++ b/doc/database/db_post-thread-user.md
@@ -9,6 +9,7 @@ Fields
| Field | Description | Type | Null | Key | Default | Extra |
| --------------- | ------------------------------------------------------------------------------------------------------- | ------------------ | ---- | --- | ------------------- | ----- |
| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | PRI | NULL | |
+| context-id | Id of the item-uri table entry that contains the endpoint for the context collection | int unsigned | YES | | NULL | |
| conversation-id | Id of the item-uri table entry that contains the conversation uri | int unsigned | YES | | NULL | |
| owner-id | Item owner | int unsigned | NO | | 0 | |
| author-id | Item author | int unsigned | NO | | 0 | |
@@ -40,6 +41,7 @@ Indexes
| -------------------- | --------------------- |
| PRIMARY | uid, uri-id |
| uri-id | uri-id |
+| context-id | context-id |
| conversation-id | conversation-id |
| owner-id | owner-id |
| author-id | author-id |
@@ -68,6 +70,7 @@ Foreign Keys
| Field | Target Table | Target Field |
|-------|--------------|--------------|
| uri-id | [item-uri](help/database/db_item-uri) | id |
+| context-id | [item-uri](help/database/db_item-uri) | id |
| conversation-id | [item-uri](help/database/db_item-uri) | id |
| owner-id | [contact](help/database/db_contact) | id |
| author-id | [contact](help/database/db_contact) | id |
diff --git a/doc/database/db_post-thread.md b/doc/database/db_post-thread.md
index b90fb2ab55..959927a468 100644
--- a/doc/database/db_post-thread.md
+++ b/doc/database/db_post-thread.md
@@ -9,6 +9,7 @@ Fields
| Field | Description | Type | Null | Key | Default | Extra |
| --------------- | ------------------------------------------------------------------------------------------------------- | ------------ | ---- | --- | ------------------- | ----- |
| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | PRI | NULL | |
+| context-id | Id of the item-uri table entry that contains the endpoint for the context collection | int unsigned | YES | | NULL | |
| conversation-id | Id of the item-uri table entry that contains the conversation uri | int unsigned | YES | | NULL | |
| owner-id | Item owner | int unsigned | NO | | 0 | |
| author-id | Item author | int unsigned | NO | | 0 | |
@@ -25,6 +26,7 @@ Indexes
| Name | Fields |
| --------------- | --------------- |
| PRIMARY | uri-id |
+| context-id | context-id |
| conversation-id | conversation-id |
| owner-id | owner-id |
| author-id | author-id |
@@ -38,6 +40,7 @@ Foreign Keys
| Field | Target Table | Target Field |
|-------|--------------|--------------|
| uri-id | [item-uri](help/database/db_item-uri) | id |
+| context-id | [item-uri](help/database/db_item-uri) | id |
| conversation-id | [item-uri](help/database/db_item-uri) | id |
| owner-id | [contact](help/database/db_contact) | id |
| author-id | [contact](help/database/db_contact) | id |
diff --git a/doc/database/db_post-user.md b/doc/database/db_post-user.md
index 2823391d47..502c49c3ac 100644
--- a/doc/database/db_post-user.md
+++ b/doc/database/db_post-user.md
@@ -6,66 +6,69 @@ User specific post data
Fields
------
-| Field | Description | Type | Null | Key | Default | Extra |
-| ----------------- | --------------------------------------------------------------------------------- | ------------------ | ---- | --- | ------------------- | -------------- |
-| id | | int unsigned | NO | PRI | NULL | auto_increment |
-| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | | NULL | |
-| parent-uri-id | Id of the item-uri table that contains the parent uri | int unsigned | YES | | NULL | |
-| thr-parent-id | Id of the item-uri table that contains the thread parent uri | int unsigned | YES | | NULL | |
-| external-id | Id of the item-uri table entry that contains the external uri | int unsigned | YES | | NULL | |
-| created | Creation timestamp. | datetime | NO | | 0001-01-01 00:00:00 | |
-| edited | Date of last edit (default is created) | datetime | NO | | 0001-01-01 00:00:00 | |
-| received | datetime | datetime | NO | | 0001-01-01 00:00:00 | |
-| gravity | | tinyint unsigned | NO | | 0 | |
-| network | Network from where the item comes from | char(4) | NO | | | |
-| owner-id | Link to the contact table with uid=0 of the owner of this item | int unsigned | NO | | 0 | |
-| author-id | Link to the contact table with uid=0 of the author of this item | int unsigned | NO | | 0 | |
-| causer-id | Link to the contact table with uid=0 of the contact that caused the item creation | int unsigned | YES | | NULL | |
-| post-type | Post type (personal note, image, article, ...) | tinyint unsigned | NO | | 0 | |
-| post-reason | Reason why the post arrived at the user | tinyint unsigned | NO | | 0 | |
-| vid | Id of the verb table entry that contains the activity verbs | smallint unsigned | YES | | NULL | |
-| private | 0=public, 1=private, 2=unlisted | tinyint unsigned | NO | | 0 | |
-| global | | boolean | NO | | 0 | |
-| visible | | boolean | NO | | 0 | |
-| deleted | item has been marked for deletion | boolean | NO | | 0 | |
-| uid | Owner id which owns this copy of the item | mediumint unsigned | NO | | NULL | |
-| protocol | Protocol used to deliver the item for this user | tinyint unsigned | YES | | NULL | |
-| contact-id | contact.id | int unsigned | NO | | 0 | |
-| event-id | Used to link to the event.id | int unsigned | YES | | NULL | |
-| unseen | post has not been seen | boolean | NO | | 1 | |
-| hidden | Marker to hide the post from the user | boolean | NO | | 0 | |
-| notification-type | | smallint unsigned | NO | | 0 | |
-| wall | This item was posted to the wall of uid | boolean | NO | | 0 | |
-| origin | item originated at this site | boolean | NO | | 0 | |
-| psid | ID of the permission set of this post | int unsigned | YES | | NULL | |
+| Field | Description | Type | Null | Key | Default | Extra |
+| ----------------- | ------------------------------------------------------------------------------------ | ------------------ | ---- | --- | ------------------- | -------------- |
+| id | | int unsigned | NO | PRI | NULL | auto_increment |
+| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | | NULL | |
+| parent-uri-id | Id of the item-uri table that contains the parent uri | int unsigned | YES | | NULL | |
+| thr-parent-id | Id of the item-uri table that contains the thread parent uri | int unsigned | YES | | NULL | |
+| external-id | Id of the item-uri table entry that contains the external uri | int unsigned | YES | | NULL | |
+| replies-id | Id of the item-uri table entry that contains the endpoint for the replies collection | int unsigned | YES | | NULL | |
+| created | Creation timestamp. | datetime | NO | | 0001-01-01 00:00:00 | |
+| edited | Date of last edit (default is created) | datetime | NO | | 0001-01-01 00:00:00 | |
+| received | datetime | datetime | NO | | 0001-01-01 00:00:00 | |
+| gravity | | tinyint unsigned | NO | | 0 | |
+| network | Network from where the item comes from | char(4) | NO | | | |
+| owner-id | Link to the contact table with uid=0 of the owner of this item | int unsigned | NO | | 0 | |
+| author-id | Link to the contact table with uid=0 of the author of this item | int unsigned | NO | | 0 | |
+| causer-id | Link to the contact table with uid=0 of the contact that caused the item creation | int unsigned | YES | | NULL | |
+| post-type | Post type (personal note, image, article, ...) | tinyint unsigned | NO | | 0 | |
+| post-reason | Reason why the post arrived at the user | tinyint unsigned | NO | | 0 | |
+| vid | Id of the verb table entry that contains the activity verbs | smallint unsigned | YES | | NULL | |
+| private | 0=public, 1=private, 2=unlisted | tinyint unsigned | NO | | 0 | |
+| restrictions | Bit array of post restrictions (1 = Reply, 2 = Like, 4 = Announce) | tinyint unsigned | YES | | NULL | |
+| global | | boolean | NO | | 0 | |
+| visible | | boolean | NO | | 0 | |
+| deleted | item has been marked for deletion | boolean | NO | | 0 | |
+| uid | Owner id which owns this copy of the item | mediumint unsigned | NO | | NULL | |
+| protocol | Protocol used to deliver the item for this user | tinyint unsigned | YES | | NULL | |
+| contact-id | contact.id | int unsigned | NO | | 0 | |
+| event-id | Used to link to the event.id | int unsigned | YES | | NULL | |
+| unseen | post has not been seen | boolean | NO | | 1 | |
+| hidden | Marker to hide the post from the user | boolean | NO | | 0 | |
+| notification-type | | smallint unsigned | NO | | 0 | |
+| wall | This item was posted to the wall of uid | boolean | NO | | 0 | |
+| origin | item originated at this site | boolean | NO | | 0 | |
+| psid | ID of the permission set of this post | int unsigned | YES | | NULL | |
Indexes
------------
-| Name | Fields |
-| -------------------- | ----------------------- |
-| PRIMARY | id |
-| uid_uri-id | UNIQUE, uid, uri-id |
-| uri-id | uri-id |
-| parent-uri-id | parent-uri-id |
-| thr-parent-id | thr-parent-id |
-| external-id | external-id |
-| owner-id | owner-id |
-| author-id | author-id |
-| causer-id | causer-id |
-| vid | vid |
-| contact-id | contact-id |
-| event-id | event-id |
-| psid | psid |
-| author-id_uid | author-id, uid |
-| author-id_created | author-id, created |
-| owner-id_created | owner-id, created |
-| parent-uri-id_uid | parent-uri-id, uid |
-| uid_wall_received | uid, wall, received |
-| uid_contactid | uid, contact-id |
-| uid_unseen_contactid | uid, unseen, contact-id |
-| uid_unseen | uid, unseen |
-| uid_hidden_uri-id | uid, hidden, uri-id |
+| Name | Fields |
+| --------------------- | ----------------------- |
+| PRIMARY | id |
+| uid_uri-id | UNIQUE, uid, uri-id |
+| uri-id_origin_deleted | uri-id, origin, deleted |
+| parent-uri-id | parent-uri-id |
+| thr-parent-id | thr-parent-id |
+| external-id | external-id |
+| replies-id | replies-id |
+| owner-id | owner-id |
+| author-id | author-id |
+| causer-id | causer-id |
+| vid | vid |
+| contact-id | contact-id |
+| event-id | event-id |
+| psid | psid |
+| author-id_uid | author-id, uid |
+| author-id_created | author-id, created |
+| owner-id_created | owner-id, created |
+| parent-uri-id_uid | parent-uri-id, uid |
+| uid_wall_received | uid, wall, received |
+| uid_contactid | uid, contact-id |
+| uid_unseen_contactid | uid, unseen, contact-id |
+| uid_unseen | uid, unseen |
+| uid_hidden_uri-id | uid, hidden, uri-id |
Foreign Keys
------------
@@ -76,6 +79,7 @@ Foreign Keys
| parent-uri-id | [item-uri](help/database/db_item-uri) | id |
| thr-parent-id | [item-uri](help/database/db_item-uri) | id |
| external-id | [item-uri](help/database/db_item-uri) | id |
+| replies-id | [item-uri](help/database/db_item-uri) | id |
| owner-id | [contact](help/database/db_contact) | id |
| author-id | [contact](help/database/db_contact) | id |
| causer-id | [contact](help/database/db_contact) | id |
diff --git a/doc/database/db_post.md b/doc/database/db_post.md
index 303269b1c6..8f6690be06 100644
--- a/doc/database/db_post.md
+++ b/doc/database/db_post.md
@@ -6,26 +6,27 @@ Structure for all posts
Fields
------
-| Field | Description | Type | Null | Key | Default | Extra |
-| ------------- | --------------------------------------------------------------------------------- | ----------------- | ---- | --- | ------------------- | ----- |
-| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | PRI | NULL | |
-| parent-uri-id | Id of the item-uri table that contains the parent uri | int unsigned | YES | | NULL | |
-| thr-parent-id | Id of the item-uri table that contains the thread parent uri | int unsigned | YES | | NULL | |
-| external-id | Id of the item-uri table entry that contains the external uri | int unsigned | YES | | NULL | |
-| created | Creation timestamp. | datetime | NO | | 0001-01-01 00:00:00 | |
-| edited | Date of last edit (default is created) | datetime | NO | | 0001-01-01 00:00:00 | |
-| received | datetime | datetime | NO | | 0001-01-01 00:00:00 | |
-| gravity | | tinyint unsigned | NO | | 0 | |
-| network | Network from where the item comes from | char(4) | NO | | | |
-| owner-id | Link to the contact table with uid=0 of the owner of this item | int unsigned | NO | | 0 | |
-| author-id | Link to the contact table with uid=0 of the author of this item | int unsigned | NO | | 0 | |
-| causer-id | Link to the contact table with uid=0 of the contact that caused the item creation | int unsigned | YES | | NULL | |
-| post-type | Post type (personal note, image, article, ...) | tinyint unsigned | NO | | 0 | |
-| vid | Id of the verb table entry that contains the activity verbs | smallint unsigned | YES | | NULL | |
-| private | 0=public, 1=private, 2=unlisted | tinyint unsigned | NO | | 0 | |
-| global | | boolean | NO | | 0 | |
-| visible | | boolean | NO | | 0 | |
-| deleted | item has been marked for deletion | boolean | NO | | 0 | |
+| Field | Description | Type | Null | Key | Default | Extra |
+| ------------- | ------------------------------------------------------------------------------------ | ----------------- | ---- | --- | ------------------- | ----- |
+| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | PRI | NULL | |
+| parent-uri-id | Id of the item-uri table that contains the parent uri | int unsigned | YES | | NULL | |
+| thr-parent-id | Id of the item-uri table that contains the thread parent uri | int unsigned | YES | | NULL | |
+| external-id | Id of the item-uri table entry that contains the external uri | int unsigned | YES | | NULL | |
+| replies-id | Id of the item-uri table entry that contains the endpoint for the replies collection | int unsigned | YES | | NULL | |
+| created | Creation timestamp. | datetime | NO | | 0001-01-01 00:00:00 | |
+| edited | Date of last edit (default is created) | datetime | NO | | 0001-01-01 00:00:00 | |
+| received | datetime | datetime | NO | | 0001-01-01 00:00:00 | |
+| gravity | | tinyint unsigned | NO | | 0 | |
+| network | Network from where the item comes from | char(4) | NO | | | |
+| owner-id | Link to the contact table with uid=0 of the owner of this item | int unsigned | NO | | 0 | |
+| author-id | Link to the contact table with uid=0 of the author of this item | int unsigned | NO | | 0 | |
+| causer-id | Link to the contact table with uid=0 of the contact that caused the item creation | int unsigned | YES | | NULL | |
+| post-type | Post type (personal note, image, article, ...) | tinyint unsigned | NO | | 0 | |
+| vid | Id of the verb table entry that contains the activity verbs | smallint unsigned | YES | | NULL | |
+| private | 0=public, 1=private, 2=unlisted | tinyint unsigned | NO | | 0 | |
+| global | | boolean | NO | | 0 | |
+| visible | | boolean | NO | | 0 | |
+| deleted | item has been marked for deletion | boolean | NO | | 0 | |
Indexes
------------
@@ -36,6 +37,7 @@ Indexes
| parent-uri-id | parent-uri-id |
| thr-parent-id | thr-parent-id |
| external-id | external-id |
+| replies-id | replies-id |
| owner-id | owner-id |
| author-id | author-id |
| causer-id | causer-id |
@@ -50,6 +52,7 @@ Foreign Keys
| parent-uri-id | [item-uri](help/database/db_item-uri) | id |
| thr-parent-id | [item-uri](help/database/db_item-uri) | id |
| external-id | [item-uri](help/database/db_item-uri) | id |
+| replies-id | [item-uri](help/database/db_item-uri) | id |
| owner-id | [contact](help/database/db_contact) | id |
| author-id | [contact](help/database/db_contact) | id |
| causer-id | [contact](help/database/db_contact) | id |
diff --git a/doc/database/db_profile.md b/doc/database/db_profile.md
index c4a8b01709..09f10770be 100644
--- a/doc/database/db_profile.md
+++ b/doc/database/db_profile.md
@@ -56,11 +56,10 @@ Fields
Indexes
------------
-| Name | Fields |
-| -------------- | ---------------------- |
-| PRIMARY | id |
-| uid_is-default | uid, is-default |
-| pub_keywords | FULLTEXT, pub_keywords |
+| Name | Fields |
+| -------------- | --------------- |
+| PRIMARY | id |
+| uid_is-default | uid, is-default |
Foreign Keys
------------
diff --git a/doc/database/db_push_subscriber.md b/doc/database/db_push_subscriber.md
deleted file mode 100644
index fbb2ebba47..0000000000
--- a/doc/database/db_push_subscriber.md
+++ /dev/null
@@ -1,38 +0,0 @@
-Table push_subscriber
-===========
-
-Used for OStatus: Contains feed subscribers
-
-Fields
-------
-
-| Field | Description | Type | Null | Key | Default | Extra |
-| ------------ | --------------------------------- | ------------------ | ---- | --- | ------------------- | -------------- |
-| id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment |
-| uid | User id | mediumint unsigned | NO | | 0 | |
-| callback_url | | varbinary(383) | NO | | | |
-| topic | | varchar(255) | NO | | | |
-| nickname | | varchar(255) | NO | | | |
-| push | Retrial counter | tinyint | NO | | 0 | |
-| last_update | Date of last successful trial | datetime | NO | | 0001-01-01 00:00:00 | |
-| next_try | Next retrial date | datetime | NO | | 0001-01-01 00:00:00 | |
-| renewed | Date of last subscription renewal | datetime | NO | | 0001-01-01 00:00:00 | |
-| secret | | varchar(255) | NO | | | |
-
-Indexes
-------------
-
-| Name | Fields |
-| -------- | -------- |
-| PRIMARY | id |
-| next_try | next_try |
-| uid | uid |
-
-Foreign Keys
-------------
-
-| Field | Target Table | Target Field |
-|-------|--------------|--------------|
-| uid | [user](help/database/db_user) | uid |
-
-Return to [database documentation](help/database)
diff --git a/doc/database/db_user-contact.md b/doc/database/db_user-contact.md
index bfba9cb651..e52d8d495c 100644
--- a/doc/database/db_user-contact.md
+++ b/doc/database/db_user-contact.md
@@ -6,29 +6,29 @@ User specific public contact data
Fields
------
-| Field | Description | Type | Null | Key | Default | Extra |
-| ------------------------- | ----------------------------------------------------------------------- | ------------------ | ---- | --- | ------- | ----- |
-| cid | Contact id of the linked public contact | int unsigned | NO | PRI | 0 | |
-| uid | User id | mediumint unsigned | NO | PRI | 0 | |
-| uri-id | Id of the item-uri table entry that contains the contact url | int unsigned | YES | | NULL | |
-| blocked | Contact is completely blocked for this user | boolean | YES | | NULL | |
-| ignored | Posts from this contact are ignored | boolean | YES | | NULL | |
-| collapsed | Posts from this contact are collapsed | boolean | YES | | NULL | |
-| hidden | This contact is hidden from the others | boolean | YES | | NULL | |
-| is-blocked | User is blocked by this contact | boolean | YES | | NULL | |
-| channel-frequency | Controls the frequency of the appearance of this contact in channels | tinyint unsigned | YES | | NULL | |
-| pending | | boolean | YES | | NULL | |
-| rel | The kind of the relation between the user and the contact | tinyint unsigned | YES | | NULL | |
-| info | | mediumtext | YES | | NULL | |
-| notify_new_posts | | boolean | YES | | NULL | |
-| remote_self | 0 => No mirroring, 1-2 => Mirror as own post, 3 => Mirror as reshare | tinyint unsigned | YES | | NULL | |
-| fetch_further_information | 0 => None, 1 => Fetch information, 3 => Fetch keywords, 2 => Fetch both | tinyint unsigned | YES | | NULL | |
-| ffi_keyword_denylist | | text | YES | | NULL | |
-| subhub | | boolean | YES | | NULL | |
-| hub-verify | | varbinary(383) | YES | | NULL | |
-| protocol | Protocol of the contact | char(4) | YES | | NULL | |
-| rating | Automatically detected feed poll frequency | tinyint | YES | | NULL | |
-| priority | Feed poll priority | tinyint unsigned | YES | | NULL | |
+| Field | Description | Type | Null | Key | Default | Extra |
+| ------------------------- | -------------------------------------------------------------------------- | ------------------ | ---- | --- | ------- | ----- |
+| cid | Contact id of the linked public contact | int unsigned | NO | PRI | 0 | |
+| uid | User id | mediumint unsigned | NO | PRI | 0 | |
+| uri-id | Id of the item-uri table entry that contains the contact url | int unsigned | YES | | NULL | |
+| blocked | Contact is completely blocked for this user | boolean | YES | | NULL | |
+| ignored | Posts from this contact are ignored | boolean | YES | | NULL | |
+| collapsed | Posts from this contact are collapsed | boolean | YES | | NULL | |
+| hidden | This contact is hidden from the others | boolean | YES | | NULL | |
+| channel-only | This contact is displayed only in channels, but not in the network stream. | boolean | YES | | NULL | |
+| is-blocked | User is blocked by this contact | boolean | YES | | NULL | |
+| channel-frequency | Controls the frequency of the appearance of this contact in channels | tinyint unsigned | YES | | NULL | |
+| pending | | boolean | YES | | NULL | |
+| rel | The kind of the relation between the user and the contact | tinyint unsigned | YES | | NULL | |
+| info | | mediumtext | YES | | NULL | |
+| notify_new_posts | | boolean | YES | | NULL | |
+| remote_self | 0 => No mirroring, 1-2 => Mirror as own post, 3 => Mirror as reshare | tinyint unsigned | YES | | NULL | |
+| fetch_further_information | 0 => None, 1 => Fetch information, 3 => Fetch keywords, 2 => Fetch both | tinyint unsigned | YES | | NULL | |
+| ffi_keyword_denylist | | text | YES | | NULL | |
+| hub-verify | | varbinary(383) | YES | | NULL | |
+| protocol | Protocol of the contact | char(4) | YES | | NULL | |
+| rating | Automatically detected feed poll frequency | tinyint | YES | | NULL | |
+| priority | Feed poll priority | tinyint unsigned | YES | | NULL | |
Indexes
------------
diff --git a/doc/database/db_user.md b/doc/database/db_user.md
index c1aefd6bee..eb8ed06532 100644
--- a/doc/database/db_user.md
+++ b/doc/database/db_user.md
@@ -27,15 +27,11 @@ Fields
| theme | user theme preference | varchar(255) | NO | | | |
| pubkey | RSA public key 4096 bit | text | YES | | NULL | |
| prvkey | RSA private key 4096 bit | text | YES | | NULL | |
-| spubkey | | text | YES | | NULL | |
-| sprvkey | | text | YES | | NULL | |
| verified | user is verified through email | boolean | NO | | 0 | |
| blocked | 1 for user is blocked | boolean | NO | | 0 | |
| blockwall | Prohibit contacts to post to the profile page of the user | boolean | NO | | 0 | |
| hidewall | Hide profile details from unknown viewers | boolean | NO | | 0 | |
| blocktags | Prohibit contacts to tag the post of this user | boolean | NO | | 0 | |
-| unkmail | Permit unknown people to send private mails to this user | boolean | NO | | 0 | |
-| cntunkmail | | int unsigned | NO | | 10 | |
| notify-flags | email notification options | smallint unsigned | NO | | 65535 | |
| page-flags | page/profile type | tinyint unsigned | NO | | 0 | |
| account-type | | tinyint unsigned | NO | | 0 | |
diff --git a/doc/de/Addons.md b/doc/de/Addons.md
index 0843c103ab..bfc0107528 100644
--- a/doc/de/Addons.md
+++ b/doc/de/Addons.md
@@ -359,10 +359,10 @@ Eine komplette Liste aller Hook-Callbacks mit den zugehörigen Dateien (am 01-Ap
Hook::callAll('register_account', $uid);
Hook::callAll('remove_user', $user);
-
+
### src/Content/ContactBlock.php
- Hook::callAll('contact_block_end', $arr);
+ Hook::callAll('contact_block_end', $text);
### src/Content/Text/BBCode.php
@@ -418,10 +418,6 @@ Eine komplette Liste aller Hook-Callbacks mit den zugehörigen Dateien (am 01-Ap
Hook::callAll('storage_instance', $data);
Hook::callAll('storage_config', $data);
-### src/Module/Notifications/Ping.php
-
- Hook::callAll('network_ping', $arr);
-
### src/Module/PermissionTooltip.php
Hook::callAll('lockview_content', $item);
diff --git a/doc/de/BBCode.md b/doc/de/BBCode.md
index a6df8b67b9..068af666d1 100644
--- a/doc/de/BBCode.md
+++ b/doc/de/BBCode.md
@@ -356,8 +356,8 @@ Zeilen
diff --git a/doc/de/Channels.md b/doc/de/Channels.md
new file mode 100644
index 0000000000..686fd129b1
--- /dev/null
+++ b/doc/de/Channels.md
@@ -0,0 +1,98 @@
+Kanäle (Channels)
+=====
+
+* [Home](help)
+
+Kanäle sind eine Möglichkeit neue Inhalte zu finden, oder Inhalte anzuzeigen, die du sonst möglicherweise verpasst hättest.
+Es gibt mehrere vordefinierte Kanäle und zusätzlich kannst du deine eigenen, basierend auf ein paar Regeln, erstellen.
+Kanäle zeigen nur Beiträge aus den letzten 24 Stunden an. (Dieser Wert kann vom Administrator geändert werden.)
+
+In den Anzeige-Einstellungen, im Bereich "Timelines", kannst du definieren, welche Kanäle und andere Timelines du im "Kanäle"-Widget auf der "Network"-Seite sehen möchtest und welche Kanäle in der Menüleiste oben auf der Seite erscheinen sollen.
+
+Ebenfalls in den Anzeige-Einstellungen, im Bereich "Kanäle", kannst du alle die Sprachen einstellen, die du in deinen Kanälen sehen möchtest. Hier kannst du mehr als eine Sprache auswählen.
+
+Auf der Profilseite kannst du die Kanal-Frequenz für jeden Kontakt definieren. Die Optionen sind:
+
+* Standardhäufigkeit: Beiträge dieses Kontakts werden im "Für Dich"-Kanal angezeigt, wenn du häufig mit diesem Kontakt interagiert hast oder wenn ein Beitrag ein gewisses Maß an Interaktion erreicht hat.
+* Alle Beiträge dieses Kontakts anzeigen: Alle Beiträge dieses Kontakts werden auf dem Kanal "Für Dich" erscheinen
+* Zeige nur einige Beiträge an: Wenn ein Kontakt viele Beiträge in einem kurzen Zeitraum erstellt, reduziert diese Einstellung die Anzahl der angezeigten Beiträge in jedem Kanal.
+* Zeige keine Beiträge an: Beiträge von diesem Kontakt werden in keinem Kanal angezeigt.
+
+Voreingestellte Kanäle
+---
+
+* Für Dich: Beiträge von Kontakten mit denen du interagierst und die mit dir interagieren. Im Detail bestehend aus:
+ * Beiträge von Leuten, mit denen du überdurchschnittlich viel interagierst.
+ * Beiträge von Kontakten, denen du folgst und mit denen du überdurchschnittlich viel interagierst.
+ * Beiträge von Kontakten, bei denen du "Benachrichtigung bei neuen Beiträgen" aktiviert hast oder wo du die Kanalfrequenz entsprechend eingestellt hast.
+* Entdecken: Beiträge von Kontakten denen du nicht folgst, aber denen zu folgen für dich interessant sein könnte. Im Detail bestehend aus:
+ * Beiträge von Leuten denen du nicht folgst, aber mit denen du überdurchschnittlich viel interagierst.
+ * Beiträge von Leuten denen du nicht folgst, aber die mit dir überdurchschnittlich viel interagieren.
+ * Beliebte Beiträge von Leuten denen du nicht folgst, aber mit denen du interagiert hast oder die mit dir interagiert haben.
+* Angesagt: Beiträge mit überdurchschnittlich hoher Anzahl von Interaktionen.
+* Sprache: Beiträge in deiner Sprache.
+* Folgende: Beiträge von Leuten die dir folgen, aber denen du nicht folgst.
+* Geteilt von teilenden: Beiträge von Kontakten denen die Leute folgen, denen du folgst.
+* Ruhige teilende: Beiträge von Konten denen du folgst, aber die nicht sehr oft posten.
+* Bilder: Beiträge mit Bildern.
+* Audio: Beiträge mit Audio.
+* Videos: Beiträge mit Videos.
+
+Vom Benutzer eingestellte Kanäle
+---
+
+In den Einstellungen, unter "Kanäle", kannst du deine eigenen Kanäle erstellen.
+
+Jeder Kanal wird durch diese Werte definiert:
+
+* Bezeichnung: Dieses Feld ist notwendig und wird für die Kanalbezeichnung verwendet.
+* Beschreibung: Eine kurze Beschreibung des Inhalts. Dies kann helfen den Überblick zu behalten, wenn du viele Kanäle hast.
+* Zugriffsschlüssel: Wenn du auf diesen Kanal über einen Zugriffsschlüssel zugreifen willst, kannst du ihn hier festlegen. Achte darauf, dass du nicht einen bereits verwendeten Schlüssel benutzt.
+* Circle/Kanal: Dies definiert die Datenquelle für diesen Kanal. Voreingestellt ist die Globale Gemeinschaft. Es gibt ein paar vorgegebene Werte, wie die Konten denen du folgst, oder die Kontakte, die dir folgen. Außerdem können alle deine Circles ausgewählt werden.
+* Tags einschließen: Durch Kommata getrennte Liste von Tags. Ein Beitrag wird verwendet, wenn er eines der aufgeführten Tags enthält.
+* Tags ausschließen: Durch Kommata getrennte Liste von Tags. Wenn ein Beitrag eines dieser Tags enthält, wird er nicht Teil dieses Kanals sein.
+* Volltextsuche: Dies kann genutzt werden um Inhalte, basierend auf dem Inhalt und ein paar zusätzlichen Schlüsselwörtern, ein- oder auszuschließen. Es nutzt die "boolean mode"-Operatoren von MariaDB: https://mariadb.com/kb/en/full-text-index-overview/#in-boolean-mode
+* Bilder, Videos, Audio: Wenn ausgewählt, wirst du Inhalte mit dem gewählten Medientyp sehen. Diese Optionen können kombiniert werden. Wenn keines dieser Felder ausgewählt wurde, wirst du alle Inhalte, mit oder ohne angefügten Medien, sehen.
+
+Zusätzliche Schlüsselwörter für die Volltextsuche
+---
+
+Zusätzlich zu der Suche nach Inhalten, gibt es Schlüsselwörter, die in der Volltextsuche genutzt werden können.
+Alternativen werden durch "|" dargestellt.
+
+* from - Verwende "from:nickname" oder "from:nickname@domain.tld" um nach Beiträgen von einem bestimmten Autor zu suchen.
+* to - Verwende "to:nickname" oder "to:nickname@domain.tld" um nach Beiträgen mit dem gegebenen Empfänger zu suchen.
+* group - Verwende "group:nickname" oder "group:nickname@domain.tld" um nach Beiträgen aus der gegebenen Gruppe zu suchen.
+* application | relay - Nutze "application:nickname" oder "application:nickname@domain.tld" um Beiträge zu finden, die von der gegebenen relay application geteilt wurden.
+* server - Verwende "server:hostname" um Beiträge von einem bestimmten Server zu suchen. Im Falle eine Gruppen-Postings enthält der Suchtext beides, den Hostname des Gruppen-Servers und den Hostname des Autors.
+* source - Der ActivityPub-Typ der Beitragsquelle. Nutze dies um beispielsweise Gruppenpostings oder Beiträge von Services (aka Bots) ein- oder auszuschließen.
+ * source:person - Der Beitrag wurde von einem regulären Nutzerkonto erstellt.
+ * source:organization - Der Beitrag wurde von einer Organisation erstellt.
+ * source:group - Dieser Beitrag wurde über eine Gruppe erstellt oder verteilt.
+ * source:service | source:news - Dieser Beitrag stammt aus einem 'service' Account. Dieser Quellen(source)-Typ wird oft genutzt um Bot Accounts zu markieren.
+ * source:application | source:relay - Dieser Beitrag wurde von einer Anwendung (application) erstellt. Dies wird im Fediverse höchstwahrscheinlich für die Beitragserstellung nicht genutzt.
+* tag - Nutze "tag:tagname" um nach einem bestimmten tag (Schlagwort) zu suchen.
+* media - Mit diesem Schlüsselwort kannst du nach angefügten Medien suchen.
+ * media:image | media:photo | media:picture - Dieser Beitrag enthält ein Bild
+ * media:video - Dieser Beitrag enthält ein Video
+ * media:audio - Dieser Beitrag enthält Audio
+ * media:card - Dieser Beitrag enthält eine Linkvorschau-'card'
+ * media:post - Dieser Beitrag verweist auf einen anderen Beitrag, was bedeutet, es ist ein zitierter Beitrag
+* network | net - Verwende dies um Netzwerke in deinen Kanal einzuschließen oder von ihm auszuschließen.
+ * network:apub | network:activitypub - ActivityPub (verwendet von den Systemen im Fediverse)
+ * network:dfrn | network:friendica - altes Friendica-Protokoll. Heutzutage nutzt Friendica meist ActivityPub.
+ * network:dspr | network:diaspora - Das Diaspora-Protokoll wird hauptsächlich von Diaspora selbst genutzt. Ein paar andere Systeme unterstützen dieses Protokoll ebenfalls, wie Hubzilla, Socialhome or Ganggo.
+ * network:feed - RSS/Atom feeds
+ * network:mail - Mails die via IMAP importiert worden sind.
+ * network:dscs | network:discourse - Beiträge, die über den Discourse connector empfangen werden.
+ * network:tmbl | network:tumblr - Beiträge, die über den Tumblr connector empfangen werden.
+ * network:bsky | network:bluesky - Beiträge, die über den Bluesky connector empfangen werden.
+* platform - Benutze dies, um Plattformen in deinen Kanal einzuschließen, oder von ihm auszuschließen, d.h. "+platform:friendica". Im Falle eines Gruppen-Postings enthält der Suchtext beides, die Plattform des Gruppen-Servers und die Plattform des Autors.
+* visibility - Du hast die Wahl zwischen verschiedenen Sichtbarkeiten. Du kannst nur die ungelisteten oder privaten Beiträge sehen, zu denen du Zugang hast.
+ * visibility:public - (öffentlich)
+ * visibility:unlisted - (ungelistet)
+ * visibility:private - (privat)
+* language | lang - Verwende "language:code" um nach Beiträgen in der gewünschten Sprache (im [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) format) zu suchen.
+
+Denke daran, dass du diese Schlüsselwörter kombinieren kannst.
+So kannst du zum Beispiel einen Kanal erstellen, mit allen Beiträgen, die über das Fediverse sprechen, aber nicht im Fediverse veröffentlich wurden, mit diesen Suchbegriffen: "fediverse -network:apub -network:dfrn".
diff --git a/doc/de/Circles-and-Privacy.md b/doc/de/Circles-and-Privacy.md
index aebaff8715..dcb5f3259f 100644
--- a/doc/de/Circles-and-Privacy.md
+++ b/doc/de/Circles-and-Privacy.md
@@ -97,13 +97,6 @@ Wir nehmen hingegen Privatsphäre ernst und agieren nicht wie andere Netzwerke,
Dein Profil und deine "Wall" sollen vielleicht auch von Freunden anderer Netzwerke besucht werden können.
Wenn du diese Seiten allerdings für Webbesucher sperrst, die Friendica nicht kennt, kann das auch Freunde anderer Netzwerke blockieren.
-Das kann möglicherweise ungewollte Ergebnisse produzieren, wenn du lange Statusbeiträge z.B. für Twitter oder Facebook schreibst.
-Wenn Friendica einen Beitrag an diese Netzwerke schickt und nur eine bestimmte Nachrichtenlänge erlaubt ist, dann verkürzen wir diesen und erstellen einen Link, der zum Originalbeitrag führt.
-Der Originallink führt zurück zu deinem Friendica-Profil.
-Da Friendica nicht bestätigen kann, um wen es sich handelt, kann es passieren, dass diese Leute den Beitrag nicht komplett lesen können.
-
-Für Leute, die davon betroffen sind, schlagen wir vor, eine Zusammenfassung in Twitter-Länge zu erstellen mit mehr Details für Freunde, die den ganzen Beitrag sehen können.
-
Dein Profil oder deine gesamte Friendica-Seite zu blockieren, hat außerdem ernsthafte Einflüsse auf deine Kommunikation mit GNU Social-Nutzern.
Diese Netzwerke kommunizieren mit anderen über öffentliche Protokolle, die nicht authentifiziert werden.
Um deine Beiträge zu sehen, müssen diese Netzwerke deine Beiträge als "unbekannte Webbesucher" ansehen.
diff --git a/doc/de/Connectors.md b/doc/de/Connectors.md
index 7247124ef3..fe2d739fd5 100644
--- a/doc/de/Connectors.md
+++ b/doc/de/Connectors.md
@@ -4,15 +4,10 @@ Konnektoren (Connectors)
* [Zur Startseite der Hilfe](help)
Konnektoren erlauben es Dir, Dich mit anderen sozialen Netzwerken zu verbinden.
-Konnektoren werden nur bei bestehenden Twitter und GNU Social-Accounts benötigt.
+Mit diesen Konnektoren kannst Du z.B. zu Bluesky, Tumblr oder Twitter posten.
+Für Bluesky und Tumblr gibt es eine bidirektionale Verbindung, d.h. du kannst Friendica nutzen, um deine Timeline von diesen Diensten zu lesen.
Außerdem gibt es einen Konnektor, um Deinen Email-Posteingang zu nutzen.
-Wenn Du keinen eigenen Knoten betreibst und wissen willst, ob der server Deiner Wahl diese Konnektoren installiert hat, kannst Du Dich darüber auf der Seite '<domain_des_friendica-servers>/friendica' informieren.
-
-Sind die Netzwerk-Konnektoren auf Deinem System installiert sind, kannst Du mit den folgenden Links die Einstellungsseiten besuchen und für Deinen Account konfigurieren:
-
-* [Twitter](/settings/connectors)
-* [GNU Social](/settings/connectors)
-* [Email](/settings/connectors)
+Wenn Du keinen eigenen Knoten betreibst und wissen willst, ob der Server Deiner Wahl diese Konnektoren installiert hat, kannst Du Dich darüber auf der Seite '<domain_des_friendica-servers>/friendica' informieren.
Anleitung, um sich mit Personen in bestimmten Netzwerken zu verbinden
==========================================================
@@ -27,24 +22,6 @@ Ebenso kannst Du deren Identitäts-Adresse in der "Verbinden"-Box auf Deiner ["K
Füge die Diaspora-Identitäts-Adresse (z.B. name@diasporapod.com)auf Deiner ["Kontakte"-Seite](contacts) in das Feld "Neuen Kontakt hinzufügen" ein.
-
-**GNU Social**
-
-Dieses Netzwerk wird als "federated social web" bzw. "OStatus"-Kontakte bezeichnet.
-
-Bitte beachte, dass es **keine** Einstellungen zur Privatssphäre im OStatus-Netzwerk gibt.
-**Jede** Nachricht, die an eines dieser OStatus-Mitglieder verschickt wird, ist für jeden auf der Welt sichtbar; alle Privatssphäreneinstellungen verlieren ihre Wirkung.
-Diese Nachrichten erscheinen ebenfalls in öffentlichen Suchergebnissen.
-
-Da die OStatus-Kommunikation keine Authentifizierung benutzt, können OStatus-Nutzer *keine* Nachrichten empfangen, wenn Du in Deinen Privatssphäreneinstellungen "Profil und Nachrichten vor Unbekannten verbergen" wählst.
-
-Um Dich mit einem OStatus-Mitglied zu verbinden, trage deren Profil-URL oder Identitäts-Adresse auf Deiner ["Kontakte"-Seite](contacts) in das Feld "Neuen Kontakt hinzufügen" ein.
-
-Der GNU Social-Konnektor kann genutzt werden, wenn Du Beiträge schreiben willst, die auf einer OStatus-Seite über einen existierenden OStatus-Account erscheinen sollen.
-
-Das ist nicht notwendig, wenn Du OStatus-Mitgliedern von Friendica aus folgst und diese Dir auch folgen, indem sie auf Deiner Kontaktseite ihre eigene Identitäts-Adresse eingeben.
-
-
**Blogger, Wordpress, RSS feeds, andere Webseiten**
Trage die URL auf Deiner ["Kontakte"-Seite](contacts) in das Feld "Neuen Kontakt hinzufügen" ein.
@@ -53,14 +30,6 @@ Du hast keine Möglichkeit, diesen Kontakten zu antworten.
Das erlaubt Dir, Dich mit Millionen von Seiten im Internet zu _verbinden_.
Alles, was dafür nötig ist, ist dass die Seite einen Feed im RSS- oder Atom Syndication-Format nutzt und welches einen Autoren und ein Bild zur Seite liefert.
-
-**Twitter**
-
-Um einem Twitter-Nutzer zu folgen, trage die URL der Hauptseite des Twitter-Accounts auf Deiner ["Kontakte"-Seite](contacts) in das Feld "Neuen Kontakt hinzufügen" ein.
-Um zu antworten, musst Du den Twitter-Konnektor installieren und über Deinen eigenen Status-Editor antworten.
-Beginne Deine Nachricht mit @twitternutzer, ersetze das aber durch den richtigen Twitter-Namen.
-
-
**Email**
Konfiguriere den Email-Konnektor auf Deiner [Einstellungsseite](settings).
diff --git a/doc/de/Export-Import-Contacts.md b/doc/de/Export-Import-Contacts.md
index 6d814edcb4..b58752c9be 100644
--- a/doc/de/Export-Import-Contacts.md
+++ b/doc/de/Export-Import-Contacts.md
@@ -11,8 +11,7 @@ Um die Liste der Kontakte *denen du folgst* zu exportieren, geht die [Einstellun
## Import der gefolgten Kontakte
-Um die Kontakt CSV Datei zu importieren, gehe in die [Einstellungen](settings).
-Am Ende der Einstellungen zum Nutzerkonto findest du den Abschnitt "Kontakte Importieren".
+Um die Kontakt CSV Datei zu importieren, gehe zu [Kontakte Importieren](settings/importcontacts).
Hier kannst du die CSV Datei auswählen und hoch laden.
### Unterstütztes Datei Format
diff --git a/doc/de/Home.md b/doc/de/Home.md
index 6cd6e5ea87..6ea7937ea3 100644
--- a/doc/de/Home.md
+++ b/doc/de/Home.md
@@ -1,7 +1,7 @@
-Friendica - Dokumentation und Ressourcen
-=====================================
+Hilfe
+=====
-**Inhalte**
+**Dokumentation für Benutzer**
* Allgemeine Funktionen - Erste Schritte
* [Account - Basics](help/Account-Basics)
@@ -17,7 +17,7 @@ Friendica - Dokumentation und Ressourcen
* [Circles und Privatsphäre](help/Circles-and-Privacy)
* [Tags und Erwähnungen](help/Tags-and-Mentions)
* [Community-Gruppen](help/Groups)
- * [Channels](help/Channels)
+ * [Kanäle (Channels)](help/Channels)
* [Chats](help/Chats)
* Weiterführende Informationen
* [Account umziehen](help/Move-Account)
@@ -32,7 +32,7 @@ Friendica - Dokumentation und Ressourcen
* [Update](help/Update) (EN)
* [Konfigurationen & Admin-Panel](help/Settings)
* [Addons](help/Addons)
-* [Konnektoren (Connectors) installieren (Twitter/GNU Social)](help/Installing-Connectors)
+* [Konnektoren (Connectors) installieren](help/Installing-Connectors)
* [Installation eines ejabberd Servers (XMPP-Chat) mit synchronisierten Anmeldedaten](help/install-ejabberd) (EN)
* [Betreibe deine Seite mit einem SSL-Zertifikat](help/SSL)
* [Konfigurationswerte, die nur in der config/local.config.php gesetzt werden können](help/Config) (EN)
@@ -60,18 +60,17 @@ Friendica - Dokumentation und Ressourcen
* [Translation of Friendica](help/translations) (EN)
* [Run tests](help/Tests) (EN)
-**Externe Ressourcen**
+**Links**
-* [Haupt-Webseite](https://friendi.ca)
-* Support Kanäle
- * Friendica Support Gruppe: [@helpers@forum.friendi.ca](https://forum.friendi.ca/~helpers)
- * [Mailing Listen Archiv](http://mailman.friendi.ca/mailman/listinfo/support-friendi.ca) zum Abonnieren der Liste eine E-Mail an ``support-request(at)friendi.ca?subject=subscribe`` senden
- * Chats der Friendica Community (die IRC, Matrix und XMPP Räume sind mit einer Brücke verbunden) Logs dieser öffentlichen Chaträume können [hier aus dem IRC](https://gnusociarg.nsupdate.info/2021/%23frie) und [hier aus der Matrix](https://view.matrix.org/alias/%23friendi.ca:matrix.org/) gefunden werden.
- * XMPP/Jabber MUC: support(at)forum.friendi.ca
- * IRC: #friendica auf [libera.chat](https://web.libera.chat/?channels=#friendica)
- * Matrix: [#friendi.ca](https://matrix.to/#/#friendi.ca:matrix.org) oder [#friendica-en](https://matrix.to/#/#friendica-en:matrix.org) auf matrix.org
+* Website: [https://friendi.ca](https://friendi.ca)
+* Help Group: [@helpers@forum.friendi.ca](https://forum.friendi.ca/~helpers)
+* XMPP: [support@forum.friendi.ca](xmpp:support@forum.friendi.ca?join)
+* IRC: [https://web.libera.chat/?channels=#friendica](https://web.libera.chat/?channels=#friendica)
+* Matrix: [https://matrix.to/#/#friendi.ca:matrix.org](https://matrix.to/#/#friendi.ca:matrix.org)
+* Mailing List: [https://mailman.friendi.ca/mailman/listinfo/support-friendi.ca](http://mailman.friendi.ca/mailman/listinfo/support-friendi.ca)
-**Über diese Seite**
+**Über**
-* [Seite/Friendica-Version](friendica)
-* [Mitwirkenden bei Friendica](credits)
+* [Server Information](friendica)
+* [Nutzungsbedingungen](tos)
+* [Mitwirkende](credits)
diff --git a/doc/de/Install.md b/doc/de/Install.md
index 0122988c59..205127e34e 100644
--- a/doc/de/Install.md
+++ b/doc/de/Install.md
@@ -27,7 +27,7 @@ Requirements
* Apache mit einer aktiverten mod-rewrite-Funktion und dem Eintrag "Options All", so dass du die lokale .htaccess-Datei nutzen kannst
* PHP 7.4+
* PHP *Kommandozeilen*-Zugang mit register_argc_argv auf "true" gesetzt in der php.ini-Datei
- * Curl, GD, GMP, PDO, mbstrings, MySQLi, hash, xml, zip, IntlChar and OpenSSL-Erweiterung
+ * Curl, GD, GMP, PDO, mbstrings, MySQLi, hash, xml, zip, IntlChar, IDN und OpenSSL-Erweiterung
* Das POSIX Modul muss aktiviert sein ([CentOS, RHEL](http://www.bigsoft.co.uk/blog/index.php/2014/12/08/posix-php-commands-not-working-under-centos-7http://www.bigsoft.co.uk/blog/index.php/2014/12/08/posix-php-commands-not-working-under-centos-7) haben dies z.B. deaktiviert)
* Einen E-Mail Server, so dass PHP `mail()` funktioniert.
Wenn kein eigener E-Mail Server zur Verfügung steht, kann alternativ das [phpmailer](https://github.com/friendica/friendica-addons/tree/develop/phpmailer) Addon mit einem externen SMTP Account verwendet werden.
@@ -45,6 +45,10 @@ Falls du an automatischen Möglichkeiten interesse hast, wirf doch einen Blick a
* das [Docker image für Friendica](https://github.com/friendica/docker) oder
* die [Installation von Friendica auf YunoHost](https://github.com/YunoHost-Apps/friendica_ynh).
+* [Tutorial: Creating a Friendica Server with Ubuntu 22.04](https://nequalsonelifestyle.com/2022/07/30/creating-friendica-server-ubuntu/)
+ * [Setting Up Friendica Daemon as a Systemd Service Tutorial](https://nequalsonelifestyle.com/2022/08/04/setting-up-friendica-daemon-systemd-service/)
+* [Setting up Friendica on Unraid](https://www.jenovarain.com/2023/03/setting-up-friendica-on-unraid/) (NAS)
+* [Installing Friendica with Elastio](https://elest.io/open-source/friendica)
### Friendica
@@ -55,7 +59,7 @@ Der Linux-Code, mit dem man die Dateien direkt in ein Verzeichnis wie "meinewebs
git clone https://github.com/friendica/friendica.git -b stable mywebsite
cd mywebsite
- bin/composer.phar install
+ bin/composer.phar run install:prod
Stelle sicher, dass der Ordner *view/smarty3* existiert and von dem Webserver-Benutzer beschreibbar ist
@@ -81,7 +85,7 @@ Wenn du die Entwickler Version von Friendica verwenden möchtest kannst du auf d
Dies tust du mit den folgenden Befehlen
git checkout develop
- bin/composer.phar install
+ bin/composer.phar run install:prod
cd addon
git checkout develop
@@ -206,13 +210,13 @@ Gehe in den Friendica-Hauptordner und führe den Kommandozeilen Befehl aus:
Erstelle einen Cron job oder einen regelmäßigen Task, um den Poller alle 5-10 Minuten im Hintergrund ablaufen zu lassen.
Beispiel:
- cd /base/directory; /path/to/php bin/worker.php
+ cd /base/directory; /path/to/php bin/console.php worker
Ändere "/base/directory" und "/path/to/php" auf deine Systemvorgaben.
Wenn du einen Linux-Server nutzt, benutze den Befehl "crontab -e" und ergänze eine Zeile wie die Folgende; angepasst an dein System
-`*/10 * * * * cd /home/myname/mywebsite; /usr/bin/php bin/worker.php`
+`*/10 * * * * cd /home/myname/mywebsite; /usr/bin/php bin/console.php worker`
Du kannst den PHP-Pfad finden, indem du den Befehl „which php“ ausführst.
Wenn du Schwierigkeiten mit diesem Schritt hast, kannst du deinen Hosting-Anbieter kontaktieren.
diff --git a/doc/de/Installing-Connectors.md b/doc/de/Installing-Connectors.md
index 9025d3d73b..7d378e2374 100644
--- a/doc/de/Installing-Connectors.md
+++ b/doc/de/Installing-Connectors.md
@@ -1,85 +1,33 @@
-Konnektoren installieren (Twitter/GNU Social)
+Konnektoren installieren
==================================================
* [Zur Startseite der Hilfe](help)
-Friendica nutzt Erweiterung, um die Verbindung zu anderen Netzwerken wie Twitter oder App.net zu gewährleisten.
-
-Es gibt außerdem ein Erweiterung, um über einen bestehenden GNU Social-Account diesen Service zu nutzen.
-Du brauchst dieses Erweiterung aber nicht, um mit GNU Social-Mitgliedern von Friendica aus zu kommunizieren - es sei denn, du wünschst es, über einen existierenden Account einen Beitrag zu schreiben.
-
-Alle drei Erweiterung benötigen einen Account im gewünschten Netzwerk.
-Zusätzlich musst du (bzw. der Administrator der Seite) einen API-Schlüssel holen, um einen authentifizierten Zugriff zu deinem Friendica-Server herstellen zu lassen.
+Friendica verwendet Konnektoren, um sich mit einigen Netzwerken zu verbinden, wie Tumblr oder Bluesky.
+Alle diese Konnektoren erfordern einen Account im Zielnetzwerk.
+Außerdem musst du (oder die Server-Administration) in der Regel einen API-Schlüssel erhalten, um die Verbindung zu ermöglichen.
**Seitenkonfiguration**
-Erweiterung müssen vom Administrator installiert werden, bevor sie genutzt werden können.
-Dieses kann über das Administrationsmenü erstellt werden.
+Konnektoren müssen von der Server-Administration installiert werden, bevor sie verwendet werden können.
+Dies geschieht über die Server-Verwaltung.
-Jeder der Konnektoren benötigt zudem einen API-Schlüssel vom Service, der verbunden werden soll.
-Einige Erweiterung erlaube es, diese Informationen auf den Administrationsseiten einzustellen, wohingegen andere eine direkte Bearbeitung der Konfigurationsdatei "config/local.config.php" erfordern.
-Der Weg, um diese Schlüssel zu erhalten, variiert stark, jedoch brauchen fast alle einen bestehenden Account im gewünschten Service.
-Einmal installiert, können diese Schlüssel von allen Seitennutzern genutzt werden.
+Einige der Konnektoren erfordern auch einen „API-Schlüssel“ des Dienstes, mit dem du dich verbinden möchtest.
+Für Tumblr findet man diese Informationen auf den Seiten der Server-Verwaltung, während für Twitter (X) jede Person einen eigenen API-Schlüssel erstellen muss.
+Andere Konnektoren, wie Bluesky, benötigen überhaupt keinen API-Schlüssel.
-Im Folgenden findest du die Einstellungen für die verschiedenen Services (viele dieser Informationen kommen direkt aus den Quelldateien der Erweiterung):
+Weitere Informationen zu den spezifischen Anforderungen findest du auf der Einstellungsseite des jeweiligen Addons, entweder auf der Verwaltungsseite oder auf der Benutzerseite.
+Bluesky Jetstream
+---
-**Twitter Erweiterung für Friendica**
+Um die Konnektivität mit Bluesky weiter zu verbessern, kann die „Jetstream“-Konnektivität aktiviert werden.
+Jetstream ist ein Dienst, der sich mit dem Bluesky-Firehose verbindet.
+Mit Jetstream kommen die Nachrichten in Echtzeit an und müssen nicht erst abgefragt werden.
+Es ermöglicht auch die Echtzeitverarbeitung von Blöcken oder Tracking-Aktivitäten, die über die Bluesky-Website oder -Anwendung durchgeführt werden.
-* Author: Tobias Diekershoff
-* tobias.diekershoff@gmx.net
+Um die Jetstream-Verarbeitung zu aktivieren, führe `bin/console.php daemon' über die Befehlszeile aus.
+Du musst vorher die Prozess-ID-Datei in local.config.php im Abschnitt „jetstream“ mit dem Schlüssel „pidfile“ definieren.
-* License:3-clause BSD license
-
-Konfiguration:
-Um dieses Erweiterung zu nutzen, benötigst du einen OAuth Consumer-Schlüsselpaar (Schlüssel und Geheimnis), das du auf der Seite [https://twitter.com/apps](https://twitter.com/apps) erhalten kannst
-
-Registriere deine Friendica-Seite als "Client"-Anwendung mit "Read&Write"-Zugriff. Wir benötigen "Twitter als Login" nicht. Sobald du deine Anwendung installiert hast, erhältst du das Schlüsselpaar für deine Seite.
-
-Trage dieses Schlüsselpaar in deine globale "config/local.config.php"-Datei ein.
-
-```
-[twitter]
-consumerkey = your consumer_key here
-consumersecret = your consumer_secret here
-```
-
-Anschließend kann der Nutzer deiner Seite die Twitter-Einstellungen selbst eintragen: "Einstellungen -> Connector Einstellungen".
-
-
-**GNU Social Erweiterung für Friendica**
-
-* Author: Tobias Diekershoff
-* tobias.diekershoff@gmx.net
-
-* License:3-clause BSD license
-
-Konfiguration
-
-Wenn das Addon aktiv ist, muss der Nutzer die folgenden Einstellungen vornehmen, um sich mit dem GNU Social-Account seiner Wahl zu verbinden.
-
-* Die Basis-URL des GNU Social-API; für quitter.se ist es https://quitter.se/api/
-* OAuth Consumer key & Geheimnis
-
-Um das OAuth-Schlüsselpaar zu erhalten, muss der Nutzer
-
-(a) seinen Friendica-Admin fragen, ob bereits ein Schlüsselpaar existiert oder
-(b) einen Friendica-Server als Anwendung auf dem GNU Social-Server anmelden.
-
-Dies kann über Einstellungen --> Connections --> "Register an OAuth client application" -> "Register a new application" auf dem GNU Social-Server durchgeführt werden.
-
-Während der Registrierung des OAuth-Clients ist Folgendes zu beachten:
-
-* Der Anwendungsname muss auf der GNU Social-Seite einzigartig sein, daher empfehlen wir einen Namen wie "friendica-nnnn", ersetze dabei "nnnn" mit einer frei gewählten Nummer oder deinem Webseitennamen.
-* es gibt keine Callback-URL
-* Registriere einen Desktop-Client
-* stelle Lese- und Schreibrechte ein
-* die Quell-URL sollte die URL deines Friendica-Servers sein
-
-Sobald die benötigten Daten gespeichert sind, musst du deinen Friendica-Account mit GNU Social verbinden.
-Das kannst du über Einstellungen --> Connector-Einstellungen durchführen.
-Folge dem "Einloggen mit GNU Social"-Button, erlaube den Zugriff und kopiere den Sicherheitscode in die entsprechende Box.
-Friendica wird dann versuchen, die abschließende OAuth-Einstellungen über die API zu beziehen.
-
-Wenn es geklappt hat, kannst du in den Einstellungen festlegen, ob deine öffentlichen Nachrichten automatisch in deinem GNU Social-Account erscheinen soll (achte hierbei auf das kleine Schloss-Symbol im Status-Editor)
+Um die verarbeiteten Nachrichten und die Drift (die Zeitdifferenz zwischen dem Datum der Nachricht und dem Datum, an dem das System diese Nachricht verarbeitet hat) zu verfolgen, wurden dem Statistik-Endpunkt einige Felder hinzugefügt.
diff --git a/doc/de/Quick-Start-makingnewfriends.md b/doc/de/Quick-Start-makingnewfriends.md
index b7381cddf9..701fba505f 100644
--- a/doc/de/Quick-Start-makingnewfriends.md
+++ b/doc/de/Quick-Start-makingnewfriends.md
@@ -3,26 +3,26 @@ Neue Freunde finden
* [Zur Startseite der Hilfe](help)
-Hier siehst Du die Kontaktvorschläge.
-Wenn Du Dich mal verirrt hast, kannst Du diesen Link klicken und wieder hierher kommen.
+Hier siehst Du die Kontaktvorschläge.
+Wenn Du Dich mal verirrt hast, kannst Du diesen Link klicken und wieder hierher kommen.
-Diese Seite funktioniert in etwa wie die Seite für Kontaktvorschläge in Facebook.
-Jeder auf dieser Liste hat zugestimmt, als Kontaktvorschlag zu erscheinen.
+Diese Seite funktioniert in etwa wie die Seite für Kontaktvorschläge in Facebook.
+Jeder auf dieser Liste hat zugestimmt, als Kontaktvorschlag zu erscheinen.
Das bedeutet, das sie Anfragen meist nicht ablehnen, da sie neue Leute kennenlernen wollen.
-Siehst Du jemanden, der Dir interessant erscheint?
-Klicke auf den "Verbinden"-Knopf beim Foto.
-Als nächstes kommst Du zur Seite "Freundschafts-/Kontaktanfrage".
-Fülle das Formular wie vorgegeben aus und trage optional eine kleine Notiz ein.
-Nun musst Du nur noch auf die Bestätigung warten.
+Siehst Du jemanden, der Dir interessant erscheint?
+Klicke auf den "Verbinden"-Knopf beim Foto.
+Als nächstes kommst Du zur Seite "Freundschafts-/Kontaktanfrage".
+Fülle das Formular wie vorgegeben aus und trage optional eine kleine Notiz ein.
+Nun musst Du nur noch auf die Bestätigung warten.
Beachte dabei, dass es sich um reale Personen handelt und es somit etwas dauern kann.
-Jetzt, nachdem Du jemanden hinzugefügt hast, weißt Du vielleicht nicht mehr, wie Du zurückkommst.
+Jetzt, nachdem Du jemanden hinzugefügt hast, weißt Du vielleicht nicht mehr, wie Du zurückkommst.
Klicke einfach auf den Link oben auf dieser Seite und Du gelangst zur Seite mit den Kontaktvorschlägen zurück, um weitere Personen hinzuzufügen.
-Du willst nicht einfach Personen hinzufügen, die du nicht kennst?
+Du willst nicht einfach Personen hinzufügen, die du nicht kennst?
Kein Problem - an dieser Stelle kommen wir zu den Gruppen und Seiten.
-
+
diff --git a/doc/de/Settings.md b/doc/de/Settings.md
index 34b349e885..cee965ccaf 100644
--- a/doc/de/Settings.md
+++ b/doc/de/Settings.md
@@ -410,7 +410,7 @@ Wir raten allerdings dringen davon ab, da es die Interoperabilität mit anderen
Mal angenommen, du hast ein Unterverzeichnis tests und willst Friendica in ein weiteres Unterverzeichnis installieren, dann lautet die Konfiguration hierfür:
'system' => [
- 'urlpath' => 'tests/friendica',
+ 'url' => 'https://example.com/tests/friendica',
],
## Weitere Ausnahmen
diff --git a/doc/stats.md b/doc/stats.md
new file mode 100644
index 0000000000..1b6a2dfd2a
--- /dev/null
+++ b/doc/stats.md
@@ -0,0 +1,35 @@
+Monitoring
+===========
+
+* [Home](help)
+
+## Endpoints
+
+Currently, there are two endpoints for statistics available
+
+- `/stats` Returns some basic statistics of the current node
+- `/stats/caching` Returns statistics of cache or lock instances, which are used for the currend node
+
+### `/stats`
+
+The statistics contain data about the worker performance, the last cron call, number of reports, inbound and outbound packets, posts and comments.
+
+### `/stats/caching`
+
+The statistics contain data about the opcache, the used caching (like memory usage, hits/misses, entries, ...) and the used lock (including the cache data)
+
+## Configuration
+
+Please define 'stats_key' in your local.config.php in the 'system' section to be able to access the statistics page at /stats?key=your-defined-stats_key
+
+## 3rd Party monitoring tools
+
+### Zabbix
+
+To monitor the health status of your Friendica installation, you can use for example a tool like Zabbix.
+
+### Prometheus
+
+To use [prometheus](https://prometheus.io) for gathering metrics, use the [Friendica exporter](https://git.friendi.ca/friendica/friendica-exporter).
+
+You can find the installation instructions here: https://git.friendi.ca/friendica/friendica-exporter#installation
diff --git a/doc/themes.md b/doc/themes.md
index 8d85dce2a9..5804868836 100644
--- a/doc/themes.md
+++ b/doc/themes.md
@@ -2,153 +2,10 @@
* [Home](help)
-To change the look of friendica you have to touch the themes.
-The current default theme is [Vier](https://github.com/friendica/friendica/tree/stable/view/theme/vier) but there are numerous others.
-Have a look at [github.com/bkil/friendica-themes](https://github.com/bkil/friendica-themes) for an overview of the existing themes.
-In case none of them suits your needs, there are several ways to change a theme.
+The default Theme in Friendica is called [frio](https://github.com/friendica/friendica/tree/stable/view/theme/frio).
-So, how to work on the UI of friendica.
+Open `Settings > Display > Custom Theme Settings` adjust the Theme to your liking. Select your preferred Appearance - light, dark or black - and your favorite Accent color. Click `Submit` to save your changes.
-You can either directly edit an existing theme.
-But you might loose your changes when the theme is updated by the friendica team.
+The `Custom` Appearance allows to tweak the themes CSS and set colors for UI elements. So called `schemestrings` can be shared between users.
-If you are almost happy with an existing theme, the easiest way to cover your needs is to create a new theme, inheriting most of the properties of the parent theme and change just minor stuff.
-The below for a more detailed description of theme heritage.
-
-Some themes also allow users to select *variants* of the theme.
-Those theme variants most often contain an additional [CSS](https://en.wikipedia.org/wiki/CSS) file to override some styling of the default theme values.
-From the themes in the main repository *vier* and *vier* are using this methods for variations.
-Quattro is using a slightly different approach.
-
-Third you can start your theme from scratch.
-Which is the most complex way to change friendicas look.
-But it leaves you the most freedom.
-So below for a *detailed* description and the meaning of some special files.
-
-### Styling
-
-If you want to change the styling of a theme, have a look at the themes CSS file.
-In most cases, you can found these in
-
- /view/theme/**your-theme-name**/style.css
-
-sometimes, there is also a file called style.php in the theme directory.
-This is only needed if the theme allows the user to change certain things of the theme dynamically.
-Say the font size or set a background image.
-
-### Templates
-
-If you want to change the structure of the theme, you need to change the templates used by the theme.
-Friendica themes are using [SMARTY3](http://www.smarty.net/) for templating.
-The default template can be found in
-
- /view/templates
-
-if you want to override any template within your theme create your version of the template in
-
- /view/theme/**your-theme-name**/templates
-
-any template that exists there will be used instead of the default one.
-
-### JavaScript
-
-The same rule applies to the JavaScript files found in
-
- /js
-
-they will be overwritten by files in
-
- /view/theme/**your-theme-name**/js.
-
-## Creating a Theme from Scratch
-
-Keep patient.
-Basically what you have to do is identify which template you have to change so it looks more like what you want.
-Adopt the CSS of the theme accordingly.
-And iterate the process until you have the theme the way you want it.
-
-*Use the source Luke.* and don't hesitate to ask in @[developers](https://forum.friendi.ca/profile/developers) or @[helpers](https://forum.friendi.ca/profile/helpers).
-
-## Special Files
-
-### unsupported
-
-If a file with this name (which might be empty) exists in the theme directory, the theme is marked as *unsupported*.
-An unsupported theme may not be selected by a user in the settings.
-Users who are already using it wont notice anything.
-
-### README(.md)
-
-The contents of this file, with or without the .md which indicates [Markdown](https://daringfireball.net/projects/markdown/) syntax, will be displayed at most repository hosting services and in the theme page within the admin panel of friendica.
-
-This file should contain information you want to let others know about your theme.
-
-### screenshot.[png|jpg]
-
-If you want to have a preview image of your theme displayed in the settings you should take a screenshot and save it with this name.
-Supported formats are PNG and JPEG.
-
-### theme.php
-
-This is the main definition file of the theme.
-In the header of that file, some meta information is stored.
-For example, have a look at the theme.php of the *vier* theme:
-
-
- * Author: Ike
- * Author: Beanow
- * Maintainer: Ike
- * Description: "Vier" is a very compact and modern theme. It uses the font awesome font library: http://fortawesome.github.com/Font-Awesome/
- */
-
-You see the definition of the theme's name, it's version and the initial author of the theme.
-These three pieces of information should be listed.
-If the original author is no longer working on the theme, but a maintainer has taken over, the maintainer should be listed as well.
-The information from the theme header will be displayed in the admin panel.
-
-The first thing in file is to import the `App` class from `\Friendica\` namespace.
-
- use Friendica\App;
-
-This will make our job a little easier, as we don't have to specify the full name every time we need to use the `App` class.
-
-The next crucial part of the theme.php file is a definition of an init function.
-The name of the function is _init.
-So in the case of vier it is
-
- function vier_init(App $a) {
- $a->theme_info = array();
- $a->set_template_engine('smarty3');
- }
-
-Here we have set the basic theme information, in this case they are empty.
-But the array needs to be set.
-And we have set the template engine that should be used by friendica for this theme.
-At the moment you should use the *smarty3* engine.
-There once was a friendica specific templating engine as well but that is not used anymore.
-If you like to use another templating engine, please implement it.
-
-If you want to add something to the HTML header of the theme, one way to do so is by adding it to the theme.php file.
-To do so, add something alike
-
- DI::page()['htmlhead'] .= <<< EOT
- /* stuff you want to add to the header */
- EOT;
-
-So you can access the properties of this friendica session from the theme.php file as well.
-
-### default.php
-
-This file covers the structure of the underlying HTML layout.
-The default file is in
-
- /view/default.php
-
-if you want to change it, say adding a 4th column for banners of your favourite FLOSS projects, place a new default.php file in your theme directory.
-As with the theme.php file, you can use the properties of the $a variable with holds the friendica application to decide what content is displayed.
+In the `General Theme Settings` you can also find the [vier](https://github.com/friendica/friendica/tree/stable/view/theme/vier) Theme, which precedes frio and is no longer officially maintained.
diff --git a/docblox.dist.xml.license b/docblox.dist.xml.license
new file mode 100644
index 0000000000..985c307f25
--- /dev/null
+++ b/docblox.dist.xml.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2010-2024 the Friendica project
+
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/appnet.png b/images/appnet.png
deleted file mode 100644
index d92199704c..0000000000
Binary files a/images/appnet.png and /dev/null differ
diff --git a/images/blogger.png.license b/images/blogger.png.license
new file mode 100644
index 0000000000..cbf6bac69e
--- /dev/null
+++ b/images/blogger.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2017 blogger.com
+
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/bluesky.jpg b/images/bluesky.jpg
index 35020ac770..65c7593514 100644
Binary files a/images/bluesky.jpg and b/images/bluesky.jpg differ
diff --git a/images/bluesky.jpg.license b/images/bluesky.jpg.license
new file mode 100644
index 0000000000..6e3f8b787a
--- /dev/null
+++ b/images/bluesky.jpg.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2023 Bluesky
+
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/default/diaspora.png.license b/images/default/diaspora.png.license
new file mode 100644
index 0000000000..b3127d9150
--- /dev/null
+++ b/images/default/diaspora.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2010 Diaspora Inc., 2010
+
+SPDX-License-Identifier: CC-BY-4.0
diff --git a/images/default/gotosocial.svg.license b/images/default/gotosocial.svg.license
new file mode 100644
index 0000000000..a8d83b0afc
--- /dev/null
+++ b/images/default/gotosocial.svg.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2021 Anna Abramek
+
+SPDX-License-Identifier: CC-BY-SA-4.0
diff --git a/images/default/hometown.png.license b/images/default/hometown.png.license
new file mode 100644
index 0000000000..b99ea1b91c
--- /dev/null
+++ b/images/default/hometown.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2019-2024 hometown project
+
+SPDX-License-Identifier: AGPL-3.0-or-later
diff --git a/images/default/mastodon.png.license b/images/default/mastodon.png.license
new file mode 100644
index 0000000000..4e63c065f3
--- /dev/null
+++ b/images/default/mastodon.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2016-2024 Eugen Rochko & other Mastodon contributors
+
+SPDX-License-Identifier: AGPL-3.0-or-later
diff --git a/images/default/peertube-account.png.license b/images/default/peertube-account.png.license
new file mode 100644
index 0000000000..1400a4dc48
--- /dev/null
+++ b/images/default/peertube-account.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2013-2023 Cole Bemis, Feather Icons
+
+SPDX-License-Identifier: MIT
diff --git a/images/default/peertube-channel.png.license b/images/default/peertube-channel.png.license
new file mode 100644
index 0000000000..1400a4dc48
--- /dev/null
+++ b/images/default/peertube-channel.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2013-2023 Cole Bemis, Feather Icons
+
+SPDX-License-Identifier: MIT
diff --git a/images/default/plume.png.license b/images/default/plume.png.license
new file mode 100644
index 0000000000..c3aa27dbf0
--- /dev/null
+++ b/images/default/plume.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2019 Plume project
+
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/diaspora-banner.jpg.license b/images/diaspora-banner.jpg.license
new file mode 100644
index 0000000000..a6ce50e403
--- /dev/null
+++ b/images/diaspora-banner.jpg.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2010 Diaspora Inc., 2010
+
+SPDX-License-Identifier: CC-BY-3.0
diff --git a/images/diaspora-logo.png.license b/images/diaspora-logo.png.license
new file mode 100644
index 0000000000..b3127d9150
--- /dev/null
+++ b/images/diaspora-logo.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2010 Diaspora Inc., 2010
+
+SPDX-License-Identifier: CC-BY-4.0
diff --git a/images/diaspora.png.license b/images/diaspora.png.license
new file mode 100644
index 0000000000..51679d3af7
--- /dev/null
+++ b/images/diaspora.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2011 Diaspora Inc., 2010
+
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/discourse.png.license b/images/discourse.png.license
new file mode 100644
index 0000000000..d86793d836
--- /dev/null
+++ b/images/discourse.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2014 Civilized Discourse Construction Kit, Inc.
+
+SPDX-License-Identifier: CC-BY-SA-4.0
diff --git a/images/facebook.png.license b/images/facebook.png.license
new file mode 100644
index 0000000000..065f4a8f96
--- /dev/null
+++ b/images/facebook.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2013 Facebook Inc
+
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/friendica-404_svg_flexy-o-hare.png.license b/images/friendica-404_svg_flexy-o-hare.png.license
new file mode 100644
index 0000000000..80b62c4fa3
--- /dev/null
+++ b/images/friendica-404_svg_flexy-o-hare.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: lostinlight for the Friendica Project
+
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/friendica-404_svg_hare-bottom-light-inside.png.license b/images/friendica-404_svg_hare-bottom-light-inside.png.license
new file mode 100644
index 0000000000..80b62c4fa3
--- /dev/null
+++ b/images/friendica-404_svg_hare-bottom-light-inside.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: lostinlight for the Friendica Project
+
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/gnusocial.png.license b/images/gnusocial.png.license
new file mode 100644
index 0000000000..1d0b7027ba
--- /dev/null
+++ b/images/gnusocial.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2015 Jonas Laugs, with lettering by Steven DuBois
+
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/googleplus.png.license b/images/googleplus.png.license
new file mode 100644
index 0000000000..1f833eb333
--- /dev/null
+++ b/images/googleplus.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2012 Google
+
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/libertree.png.license b/images/libertree.png.license
new file mode 100644
index 0000000000..c425a2884c
--- /dev/null
+++ b/images/libertree.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2012 the libertree project
+
+SPDX-License-Identifier: AGPL-3.0-or-later
diff --git a/images/platforms/black/aardwolf.svg b/images/platforms/black/aardwolf.svg
new file mode 100644
index 0000000000..74558d599d
--- /dev/null
+++ b/images/platforms/black/aardwolf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/aardwolf.svg.license b/images/platforms/black/aardwolf.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/aardwolf.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/activitypods.svg b/images/platforms/black/activitypods.svg
new file mode 100644
index 0000000000..494f938ba7
--- /dev/null
+++ b/images/platforms/black/activitypods.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/activitypods.svg.license b/images/platforms/black/activitypods.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/activitypods.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/activitypub.svg b/images/platforms/black/activitypub.svg
new file mode 100644
index 0000000000..ab181102a2
--- /dev/null
+++ b/images/platforms/black/activitypub.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/images/platforms/black/activitypub.svg.license b/images/platforms/black/activitypub.svg.license
new file mode 100644
index 0000000000..33acc29726
--- /dev/null
+++ b/images/platforms/black/activitypub.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Matthias Pfefferle https://github.com/pfefferle/openwebicons?ref=svgrepo.com
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/black/akkoma.svg b/images/platforms/black/akkoma.svg
new file mode 100644
index 0000000000..db6fbd5372
--- /dev/null
+++ b/images/platforms/black/akkoma.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/akkoma.svg.license b/images/platforms/black/akkoma.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/akkoma.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/anfora.svg b/images/platforms/black/anfora.svg
new file mode 100644
index 0000000000..953d931d5f
--- /dev/null
+++ b/images/platforms/black/anfora.svg
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/anfora.svg.license b/images/platforms/black/anfora.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/anfora.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/awakari.svg b/images/platforms/black/awakari.svg
new file mode 100644
index 0000000000..7d65e5a68a
--- /dev/null
+++ b/images/platforms/black/awakari.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/awakari.svg.license b/images/platforms/black/awakari.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/awakari.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/azorius.svg b/images/platforms/black/azorius.svg
new file mode 100644
index 0000000000..3dcec30fce
--- /dev/null
+++ b/images/platforms/black/azorius.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/azorius.svg.license b/images/platforms/black/azorius.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/azorius.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/bluesky.svg b/images/platforms/black/bluesky.svg
new file mode 100644
index 0000000000..6e7f1bdb96
--- /dev/null
+++ b/images/platforms/black/bluesky.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/bluesky.svg.license b/images/platforms/black/bluesky.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/bluesky.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/bonfire.svg b/images/platforms/black/bonfire.svg
new file mode 100644
index 0000000000..459892408e
--- /dev/null
+++ b/images/platforms/black/bonfire.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/bonfire.svg.license b/images/platforms/black/bonfire.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/bonfire.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/bookwyrm.svg b/images/platforms/black/bookwyrm.svg
new file mode 100644
index 0000000000..df54fc74c5
--- /dev/null
+++ b/images/platforms/black/bookwyrm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/bookwyrm.svg.license b/images/platforms/black/bookwyrm.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/bookwyrm.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/bridgy_fed.svg b/images/platforms/black/bridgy_fed.svg
new file mode 100644
index 0000000000..1e202aedce
--- /dev/null
+++ b/images/platforms/black/bridgy_fed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/bridgy_fed.svg.license b/images/platforms/black/bridgy_fed.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/bridgy_fed.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/brighteon_social.svg b/images/platforms/black/brighteon_social.svg
new file mode 100644
index 0000000000..67b9abbfd5
--- /dev/null
+++ b/images/platforms/black/brighteon_social.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/brighteon_social.svg.license b/images/platforms/black/brighteon_social.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/brighteon_social.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/brutalinks.svg b/images/platforms/black/brutalinks.svg
new file mode 100644
index 0000000000..9540a38b07
--- /dev/null
+++ b/images/platforms/black/brutalinks.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/brutalinks.svg.license b/images/platforms/black/brutalinks.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/brutalinks.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/calckey.svg b/images/platforms/black/calckey.svg
new file mode 100644
index 0000000000..dd22d04466
--- /dev/null
+++ b/images/platforms/black/calckey.svg
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/calckey.svg.license b/images/platforms/black/calckey.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/calckey.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/castopod.svg b/images/platforms/black/castopod.svg
new file mode 100644
index 0000000000..2db17e7a02
--- /dev/null
+++ b/images/platforms/black/castopod.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/castopod.svg.license b/images/platforms/black/castopod.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/castopod.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/catodon.svg b/images/platforms/black/catodon.svg
new file mode 100644
index 0000000000..dad44fcc30
--- /dev/null
+++ b/images/platforms/black/catodon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/catodon.svg.license b/images/platforms/black/catodon.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/catodon.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/chatter_net.svg b/images/platforms/black/chatter_net.svg
new file mode 100644
index 0000000000..39312ca2ea
--- /dev/null
+++ b/images/platforms/black/chatter_net.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/chatter_net.svg.license b/images/platforms/black/chatter_net.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/chatter_net.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/chuckya.svg b/images/platforms/black/chuckya.svg
new file mode 100644
index 0000000000..a4b60c4efa
--- /dev/null
+++ b/images/platforms/black/chuckya.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/chuckya.svg.license b/images/platforms/black/chuckya.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/chuckya.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/clubsall.svg b/images/platforms/black/clubsall.svg
new file mode 100644
index 0000000000..29db863218
--- /dev/null
+++ b/images/platforms/black/clubsall.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/clubsall.svg.license b/images/platforms/black/clubsall.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/clubsall.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/communecter.svg b/images/platforms/black/communecter.svg
new file mode 100644
index 0000000000..46505c9d84
--- /dev/null
+++ b/images/platforms/black/communecter.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/communecter.svg.license b/images/platforms/black/communecter.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/communecter.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/decodon.svg b/images/platforms/black/decodon.svg
new file mode 100644
index 0000000000..f2a47a722d
--- /dev/null
+++ b/images/platforms/black/decodon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/decodon.svg.license b/images/platforms/black/decodon.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/decodon.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/diaspora.svg b/images/platforms/black/diaspora.svg
new file mode 100644
index 0000000000..3087c4e6aa
--- /dev/null
+++ b/images/platforms/black/diaspora.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/diaspora.svg.license b/images/platforms/black/diaspora.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/diaspora.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/discourse.svg b/images/platforms/black/discourse.svg
new file mode 100644
index 0000000000..0359b3b004
--- /dev/null
+++ b/images/platforms/black/discourse.svg
@@ -0,0 +1,10 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/discourse.svg.license b/images/platforms/black/discourse.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/discourse.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/dolphin.svg b/images/platforms/black/dolphin.svg
new file mode 100644
index 0000000000..2d581150e1
--- /dev/null
+++ b/images/platforms/black/dolphin.svg
@@ -0,0 +1,14 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/dolphin.svg.license b/images/platforms/black/dolphin.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/dolphin.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/drupal.svg b/images/platforms/black/drupal.svg
new file mode 100644
index 0000000000..c9ab526143
--- /dev/null
+++ b/images/platforms/black/drupal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/drupal.svg.license b/images/platforms/black/drupal.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/drupal.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/email.svg b/images/platforms/black/email.svg
new file mode 100644
index 0000000000..04c39cbfd9
--- /dev/null
+++ b/images/platforms/black/email.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/email.svg.license b/images/platforms/black/email.svg.license
new file mode 100644
index 0000000000..d51dd6d76e
--- /dev/null
+++ b/images/platforms/black/email.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Instructure Ui https://github.com/instructure/instructure-ui?ref=svgrepo.com
+SPDX-License-Identifier: MIT
diff --git a/images/platforms/black/emissary.svg b/images/platforms/black/emissary.svg
new file mode 100644
index 0000000000..b73b64f324
--- /dev/null
+++ b/images/platforms/black/emissary.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/emissary.svg.license b/images/platforms/black/emissary.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/emissary.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/epicyon.svg b/images/platforms/black/epicyon.svg
new file mode 100644
index 0000000000..ab399d6b86
--- /dev/null
+++ b/images/platforms/black/epicyon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/epicyon.svg.license b/images/platforms/black/epicyon.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/epicyon.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/f2ap.svg b/images/platforms/black/f2ap.svg
new file mode 100644
index 0000000000..5c6c37db22
--- /dev/null
+++ b/images/platforms/black/f2ap.svg
@@ -0,0 +1,32 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/f2ap.svg.license b/images/platforms/black/f2ap.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/f2ap.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/fedibird.svg b/images/platforms/black/fedibird.svg
new file mode 100644
index 0000000000..8849889a5e
--- /dev/null
+++ b/images/platforms/black/fedibird.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/fedibird.svg.license b/images/platforms/black/fedibird.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/fedibird.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/fedify.svg b/images/platforms/black/fedify.svg
new file mode 100644
index 0000000000..ee1b9b20a0
--- /dev/null
+++ b/images/platforms/black/fedify.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/fedify.svg.license b/images/platforms/black/fedify.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/fedify.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/firefish.svg b/images/platforms/black/firefish.svg
new file mode 100644
index 0000000000..b3dd710e4f
--- /dev/null
+++ b/images/platforms/black/firefish.svg
@@ -0,0 +1,36 @@
+
diff --git a/images/platforms/black/firefish.svg.license b/images/platforms/black/firefish.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/firefish.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/flipboard.svg b/images/platforms/black/flipboard.svg
new file mode 100644
index 0000000000..85494db64f
--- /dev/null
+++ b/images/platforms/black/flipboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/flipboard.svg.license b/images/platforms/black/flipboard.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/flipboard.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/flohmarkt.svg b/images/platforms/black/flohmarkt.svg
new file mode 100644
index 0000000000..0df94e3288
--- /dev/null
+++ b/images/platforms/black/flohmarkt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/flohmarkt.svg.license b/images/platforms/black/flohmarkt.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/flohmarkt.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/forgefriends.svg b/images/platforms/black/forgefriends.svg
new file mode 100644
index 0000000000..fd6ddcfca6
--- /dev/null
+++ b/images/platforms/black/forgefriends.svg
@@ -0,0 +1,13 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/forgefriends.svg.license b/images/platforms/black/forgefriends.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/forgefriends.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/forgejo.svg b/images/platforms/black/forgejo.svg
new file mode 100644
index 0000000000..b78d3b9c86
--- /dev/null
+++ b/images/platforms/black/forgejo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/forgejo.svg.license b/images/platforms/black/forgejo.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/forgejo.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/forte.svg b/images/platforms/black/forte.svg
new file mode 100644
index 0000000000..c5d53c8763
--- /dev/null
+++ b/images/platforms/black/forte.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/forte.svg.license b/images/platforms/black/forte.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/forte.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/foundkey.svg b/images/platforms/black/foundkey.svg
new file mode 100644
index 0000000000..071215d3df
--- /dev/null
+++ b/images/platforms/black/foundkey.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/foundkey.svg.license b/images/platforms/black/foundkey.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/foundkey.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/friendica.svg b/images/platforms/black/friendica.svg
new file mode 100644
index 0000000000..fbfc7e1221
--- /dev/null
+++ b/images/platforms/black/friendica.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/friendica.svg.license b/images/platforms/black/friendica.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/friendica.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/funkwhale.svg b/images/platforms/black/funkwhale.svg
new file mode 100644
index 0000000000..11318d562e
--- /dev/null
+++ b/images/platforms/black/funkwhale.svg
@@ -0,0 +1,14 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/funkwhale.svg.license b/images/platforms/black/funkwhale.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/funkwhale.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/gancio.svg b/images/platforms/black/gancio.svg
new file mode 100644
index 0000000000..41c28673ff
--- /dev/null
+++ b/images/platforms/black/gancio.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/gancio.svg.license b/images/platforms/black/gancio.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/gancio.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/gath.io.svg b/images/platforms/black/gath.io.svg
new file mode 100644
index 0000000000..d2e89cd6c1
--- /dev/null
+++ b/images/platforms/black/gath.io.svg
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/gath.io.svg.license b/images/platforms/black/gath.io.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/gath.io.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/ghost.svg b/images/platforms/black/ghost.svg
new file mode 100644
index 0000000000..b7ca833be3
--- /dev/null
+++ b/images/platforms/black/ghost.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/ghost.svg.license b/images/platforms/black/ghost.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/ghost.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/gitlab.svg b/images/platforms/black/gitlab.svg
new file mode 100644
index 0000000000..23a97f4814
--- /dev/null
+++ b/images/platforms/black/gitlab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/gitlab.svg.license b/images/platforms/black/gitlab.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/gitlab.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/glitch-soc.svg b/images/platforms/black/glitch-soc.svg
new file mode 100644
index 0000000000..b097a6608a
--- /dev/null
+++ b/images/platforms/black/glitch-soc.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/glitch-soc.svg.license b/images/platforms/black/glitch-soc.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/glitch-soc.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/glitchsoc.svg b/images/platforms/black/glitchsoc.svg
new file mode 100644
index 0000000000..b097a6608a
--- /dev/null
+++ b/images/platforms/black/glitchsoc.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/glitchsoc.svg.license b/images/platforms/black/glitchsoc.svg.license
new file mode 100644
index 0000000000..a53eead85a
--- /dev/null
+++ b/images/platforms/black/glitchsoc.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Copyright (C) 2016-2024 Eugen Rochko & other Mastodon contributors
+SPDX-License-Identifier: AGPL-3.0-only
diff --git a/images/platforms/black/gnu_social.svg b/images/platforms/black/gnu_social.svg
new file mode 100644
index 0000000000..51790be388
--- /dev/null
+++ b/images/platforms/black/gnu_social.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/gnu_social.svg.license b/images/platforms/black/gnu_social.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/gnu_social.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/gnusocial.svg b/images/platforms/black/gnusocial.svg
new file mode 100644
index 0000000000..51790be388
--- /dev/null
+++ b/images/platforms/black/gnusocial.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/gnusocial.svg.license b/images/platforms/black/gnusocial.svg.license
new file mode 100644
index 0000000000..33acc29726
--- /dev/null
+++ b/images/platforms/black/gnusocial.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Matthias Pfefferle https://github.com/pfefferle/openwebicons?ref=svgrepo.com
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/black/go-fed.svg b/images/platforms/black/go-fed.svg
new file mode 100644
index 0000000000..71caf52743
--- /dev/null
+++ b/images/platforms/black/go-fed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/go-fed.svg.license b/images/platforms/black/go-fed.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/go-fed.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/goblin.svg b/images/platforms/black/goblin.svg
new file mode 100644
index 0000000000..d4024eab0a
--- /dev/null
+++ b/images/platforms/black/goblin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/goblin.svg.license b/images/platforms/black/goblin.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/goblin.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/gotosocial.svg b/images/platforms/black/gotosocial.svg
new file mode 100644
index 0000000000..128032e499
--- /dev/null
+++ b/images/platforms/black/gotosocial.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/gotosocial.svg.license b/images/platforms/black/gotosocial.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/gotosocial.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/greatape.svg b/images/platforms/black/greatape.svg
new file mode 100644
index 0000000000..ecb21e81b4
--- /dev/null
+++ b/images/platforms/black/greatape.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/greatape.svg.license b/images/platforms/black/greatape.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/greatape.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/guppe.svg b/images/platforms/black/guppe.svg
new file mode 100644
index 0000000000..f1e39eb5dd
--- /dev/null
+++ b/images/platforms/black/guppe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/guppe.svg.license b/images/platforms/black/guppe.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/guppe.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/hollo.svg b/images/platforms/black/hollo.svg
new file mode 100644
index 0000000000..c1caf81cef
--- /dev/null
+++ b/images/platforms/black/hollo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/hollo.svg.license b/images/platforms/black/hollo.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/hollo.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/hometown.svg b/images/platforms/black/hometown.svg
new file mode 100644
index 0000000000..33cc6fbe79
--- /dev/null
+++ b/images/platforms/black/hometown.svg
@@ -0,0 +1,17 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/hometown.svg.license b/images/platforms/black/hometown.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/hometown.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/honk.svg b/images/platforms/black/honk.svg
new file mode 100644
index 0000000000..6e12a2b4ab
--- /dev/null
+++ b/images/platforms/black/honk.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/honk.svg.license b/images/platforms/black/honk.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/honk.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/hubzilla.svg b/images/platforms/black/hubzilla.svg
new file mode 100644
index 0000000000..60aaa1e532
--- /dev/null
+++ b/images/platforms/black/hubzilla.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/hubzilla.svg.license b/images/platforms/black/hubzilla.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/hubzilla.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/iceshrimp.svg b/images/platforms/black/iceshrimp.svg
new file mode 100644
index 0000000000..b0eaa569ac
--- /dev/null
+++ b/images/platforms/black/iceshrimp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/iceshrimp.svg.license b/images/platforms/black/iceshrimp.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/iceshrimp.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/juick.svg b/images/platforms/black/juick.svg
new file mode 100644
index 0000000000..1cddc5135c
--- /dev/null
+++ b/images/platforms/black/juick.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/juick.svg.license b/images/platforms/black/juick.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/juick.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/kazarma.svg b/images/platforms/black/kazarma.svg
new file mode 100644
index 0000000000..d7a9f0c550
--- /dev/null
+++ b/images/platforms/black/kazarma.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/kazarma.svg.license b/images/platforms/black/kazarma.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/kazarma.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/kbin.svg b/images/platforms/black/kbin.svg
new file mode 100644
index 0000000000..aa5e1ae3f1
--- /dev/null
+++ b/images/platforms/black/kbin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/kbin.svg.license b/images/platforms/black/kbin.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/kbin.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/kepi.svg b/images/platforms/black/kepi.svg
new file mode 100644
index 0000000000..96b6871e34
--- /dev/null
+++ b/images/platforms/black/kepi.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/kepi.svg.license b/images/platforms/black/kepi.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/kepi.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/kitsune.svg b/images/platforms/black/kitsune.svg
new file mode 100644
index 0000000000..a58f0d4203
--- /dev/null
+++ b/images/platforms/black/kitsune.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/kitsune.svg.license b/images/platforms/black/kitsune.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/kitsune.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/kmyblue.svg b/images/platforms/black/kmyblue.svg
new file mode 100644
index 0000000000..2c77208f3e
--- /dev/null
+++ b/images/platforms/black/kmyblue.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/kmyblue.svg.license b/images/platforms/black/kmyblue.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/kmyblue.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/kookie.svg b/images/platforms/black/kookie.svg
new file mode 100644
index 0000000000..e435201b06
--- /dev/null
+++ b/images/platforms/black/kookie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/kookie.svg.license b/images/platforms/black/kookie.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/kookie.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/ktistec.svg b/images/platforms/black/ktistec.svg
new file mode 100644
index 0000000000..39b71d11b6
--- /dev/null
+++ b/images/platforms/black/ktistec.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/ktistec.svg.license b/images/platforms/black/ktistec.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/ktistec.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/lemmy.svg b/images/platforms/black/lemmy.svg
new file mode 100644
index 0000000000..f031bb90b5
--- /dev/null
+++ b/images/platforms/black/lemmy.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/lemmy.svg.license b/images/platforms/black/lemmy.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/lemmy.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/loops.svg b/images/platforms/black/loops.svg
new file mode 100644
index 0000000000..9ec17d9983
--- /dev/null
+++ b/images/platforms/black/loops.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/loops.svg.license b/images/platforms/black/loops.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/loops.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/mastodon.svg b/images/platforms/black/mastodon.svg
new file mode 100644
index 0000000000..f3e0e962ca
--- /dev/null
+++ b/images/platforms/black/mastodon.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/mastodon.svg.license b/images/platforms/black/mastodon.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/mastodon.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/mbin.svg b/images/platforms/black/mbin.svg
new file mode 100644
index 0000000000..70b51b4f7d
--- /dev/null
+++ b/images/platforms/black/mbin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/mbin.svg.license b/images/platforms/black/mbin.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/mbin.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/micro.blog.svg b/images/platforms/black/micro.blog.svg
new file mode 100644
index 0000000000..df4c8c06cf
--- /dev/null
+++ b/images/platforms/black/micro.blog.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/micro.blog.svg.license b/images/platforms/black/micro.blog.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/micro.blog.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/minds.svg b/images/platforms/black/minds.svg
new file mode 100644
index 0000000000..8fd98b7b3d
--- /dev/null
+++ b/images/platforms/black/minds.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/minds.svg.license b/images/platforms/black/minds.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/minds.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/misskey.svg b/images/platforms/black/misskey.svg
new file mode 100644
index 0000000000..ab1c3204a0
--- /dev/null
+++ b/images/platforms/black/misskey.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/misskey.svg.license b/images/platforms/black/misskey.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/misskey.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/mistpark.svg b/images/platforms/black/mistpark.svg
new file mode 100644
index 0000000000..994ede5fe6
--- /dev/null
+++ b/images/platforms/black/mistpark.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/mistpark.svg.license b/images/platforms/black/mistpark.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/mistpark.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/mitra.svg b/images/platforms/black/mitra.svg
new file mode 100644
index 0000000000..593c62b6b1
--- /dev/null
+++ b/images/platforms/black/mitra.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/mitra.svg.license b/images/platforms/black/mitra.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/mitra.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/mobilizon.svg b/images/platforms/black/mobilizon.svg
new file mode 100644
index 0000000000..31ef831ec9
--- /dev/null
+++ b/images/platforms/black/mobilizon.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/mobilizon.svg.license b/images/platforms/black/mobilizon.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/mobilizon.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/neodb.svg b/images/platforms/black/neodb.svg
new file mode 100644
index 0000000000..adae2cf953
--- /dev/null
+++ b/images/platforms/black/neodb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/neodb.svg.license b/images/platforms/black/neodb.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/neodb.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/newsmast.svg b/images/platforms/black/newsmast.svg
new file mode 100644
index 0000000000..8331cb87e2
--- /dev/null
+++ b/images/platforms/black/newsmast.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/newsmast.svg.license b/images/platforms/black/newsmast.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/newsmast.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/nextcloud_social.svg b/images/platforms/black/nextcloud_social.svg
new file mode 100644
index 0000000000..acd6ee0f9a
--- /dev/null
+++ b/images/platforms/black/nextcloud_social.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/nextcloud_social.svg.license b/images/platforms/black/nextcloud_social.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/nextcloud_social.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/nodebb.svg b/images/platforms/black/nodebb.svg
new file mode 100644
index 0000000000..7798d3bd8a
--- /dev/null
+++ b/images/platforms/black/nodebb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/nodebb.svg.license b/images/platforms/black/nodebb.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/nodebb.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/osada.svg b/images/platforms/black/osada.svg
new file mode 100644
index 0000000000..56b4d774bb
--- /dev/null
+++ b/images/platforms/black/osada.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/osada.svg.license b/images/platforms/black/osada.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/osada.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/owncast.svg b/images/platforms/black/owncast.svg
new file mode 100644
index 0000000000..44b3f5b9b8
--- /dev/null
+++ b/images/platforms/black/owncast.svg
@@ -0,0 +1,13 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/owncast.svg.license b/images/platforms/black/owncast.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/owncast.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/peertube.svg b/images/platforms/black/peertube.svg
new file mode 100644
index 0000000000..554ca8d262
--- /dev/null
+++ b/images/platforms/black/peertube.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/peertube.svg.license b/images/platforms/black/peertube.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/peertube.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/piefed.svg b/images/platforms/black/piefed.svg
new file mode 100644
index 0000000000..87386fd939
--- /dev/null
+++ b/images/platforms/black/piefed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/piefed.svg.license b/images/platforms/black/piefed.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/piefed.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/pinetta.svg b/images/platforms/black/pinetta.svg
new file mode 100644
index 0000000000..4d8d49d2c6
--- /dev/null
+++ b/images/platforms/black/pinetta.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/pinetta.svg.license b/images/platforms/black/pinetta.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/pinetta.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/pixelfed.svg b/images/platforms/black/pixelfed.svg
new file mode 100644
index 0000000000..4f56fe12e4
--- /dev/null
+++ b/images/platforms/black/pixelfed.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/pixelfed.svg.license b/images/platforms/black/pixelfed.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/pixelfed.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/pleroma.svg b/images/platforms/black/pleroma.svg
new file mode 100644
index 0000000000..af93e43942
--- /dev/null
+++ b/images/platforms/black/pleroma.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/pleroma.svg.license b/images/platforms/black/pleroma.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/pleroma.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/plume.svg b/images/platforms/black/plume.svg
new file mode 100644
index 0000000000..d78dc18e70
--- /dev/null
+++ b/images/platforms/black/plume.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/plume.svg.license b/images/platforms/black/plume.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/plume.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/postmarks.svg b/images/platforms/black/postmarks.svg
new file mode 100644
index 0000000000..19dda5af8f
--- /dev/null
+++ b/images/platforms/black/postmarks.svg
@@ -0,0 +1,19 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/postmarks.svg.license b/images/platforms/black/postmarks.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/postmarks.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/prismo.svg b/images/platforms/black/prismo.svg
new file mode 100644
index 0000000000..67d71635c6
--- /dev/null
+++ b/images/platforms/black/prismo.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/prismo.svg.license b/images/platforms/black/prismo.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/prismo.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/pump-io.svg b/images/platforms/black/pump-io.svg
new file mode 100644
index 0000000000..e4e4fc3533
--- /dev/null
+++ b/images/platforms/black/pump-io.svg
@@ -0,0 +1,108 @@
+
+
+
+
diff --git a/images/platforms/black/pump-io.svg.license b/images/platforms/black/pump-io.svg.license
new file mode 100644
index 0000000000..b3db2b09ce
--- /dev/null
+++ b/images/platforms/black/pump-io.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: MathiasGebbe https://commons.wikimedia.org/wiki/File:Pump.io_Logo.svg
+SPDX-License-Identifier: CC-BY-SA-3.0
diff --git a/images/platforms/black/rebased.svg b/images/platforms/black/rebased.svg
new file mode 100644
index 0000000000..e74cac4873
--- /dev/null
+++ b/images/platforms/black/rebased.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/rebased.svg.license b/images/platforms/black/rebased.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/rebased.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/redmatrix.svg b/images/platforms/black/redmatrix.svg
new file mode 100644
index 0000000000..7aebdf7b52
--- /dev/null
+++ b/images/platforms/black/redmatrix.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/redmatrix.svg.license b/images/platforms/black/redmatrix.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/redmatrix.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/reel2bits.svg b/images/platforms/black/reel2bits.svg
new file mode 100644
index 0000000000..d5b9e48a75
--- /dev/null
+++ b/images/platforms/black/reel2bits.svg
@@ -0,0 +1,14 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/reel2bits.svg.license b/images/platforms/black/reel2bits.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/reel2bits.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/rss.svg b/images/platforms/black/rss.svg
new file mode 100644
index 0000000000..9fe37b87a6
--- /dev/null
+++ b/images/platforms/black/rss.svg
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/images/platforms/black/rss.svg.license b/images/platforms/black/rss.svg.license
new file mode 100644
index 0000000000..33acc29726
--- /dev/null
+++ b/images/platforms/black/rss.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Matthias Pfefferle https://github.com/pfefferle/openwebicons?ref=svgrepo.com
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/black/ruffy.svg b/images/platforms/black/ruffy.svg
new file mode 100644
index 0000000000..d6af02252a
--- /dev/null
+++ b/images/platforms/black/ruffy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/ruffy.svg.license b/images/platforms/black/ruffy.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/ruffy.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/sakura.svg b/images/platforms/black/sakura.svg
new file mode 100644
index 0000000000..1caeb82705
--- /dev/null
+++ b/images/platforms/black/sakura.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/sakura.svg.license b/images/platforms/black/sakura.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/sakura.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/seppo.svg b/images/platforms/black/seppo.svg
new file mode 100644
index 0000000000..f5ca69ba8f
--- /dev/null
+++ b/images/platforms/black/seppo.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/seppo.svg.license b/images/platforms/black/seppo.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/seppo.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/shadowfacts.svg b/images/platforms/black/shadowfacts.svg
new file mode 100644
index 0000000000..89c2cad2b5
--- /dev/null
+++ b/images/platforms/black/shadowfacts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/shadowfacts.svg.license b/images/platforms/black/shadowfacts.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/shadowfacts.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/sharky.svg b/images/platforms/black/sharky.svg
new file mode 100644
index 0000000000..4fd2f3fd09
--- /dev/null
+++ b/images/platforms/black/sharky.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/sharky.svg.license b/images/platforms/black/sharky.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/sharky.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/shuttlecraft.svg b/images/platforms/black/shuttlecraft.svg
new file mode 100644
index 0000000000..269386557c
--- /dev/null
+++ b/images/platforms/black/shuttlecraft.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/shuttlecraft.svg.license b/images/platforms/black/shuttlecraft.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/shuttlecraft.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/smilodon.svg b/images/platforms/black/smilodon.svg
new file mode 100644
index 0000000000..e418615cc7
--- /dev/null
+++ b/images/platforms/black/smilodon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/smilodon.svg.license b/images/platforms/black/smilodon.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/smilodon.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/smithereen.svg b/images/platforms/black/smithereen.svg
new file mode 100644
index 0000000000..bda9644917
--- /dev/null
+++ b/images/platforms/black/smithereen.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/smithereen.svg.license b/images/platforms/black/smithereen.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/smithereen.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/snac.svg b/images/platforms/black/snac.svg
new file mode 100644
index 0000000000..5d37b80941
--- /dev/null
+++ b/images/platforms/black/snac.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/snac.svg.license b/images/platforms/black/snac.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/snac.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/soapbox.svg b/images/platforms/black/soapbox.svg
new file mode 100644
index 0000000000..f70bcf2700
--- /dev/null
+++ b/images/platforms/black/soapbox.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/soapbox.svg.license b/images/platforms/black/soapbox.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/soapbox.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/socialhome.svg b/images/platforms/black/socialhome.svg
new file mode 100644
index 0000000000..fcd8bb08c0
--- /dev/null
+++ b/images/platforms/black/socialhome.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/socialhome.svg.license b/images/platforms/black/socialhome.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/socialhome.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/streams.svg b/images/platforms/black/streams.svg
new file mode 100644
index 0000000000..3c78ce0beb
--- /dev/null
+++ b/images/platforms/black/streams.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/streams.svg.license b/images/platforms/black/streams.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/streams.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/sublinks.svg b/images/platforms/black/sublinks.svg
new file mode 100644
index 0000000000..6e771f63bc
--- /dev/null
+++ b/images/platforms/black/sublinks.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/sublinks.svg.license b/images/platforms/black/sublinks.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/sublinks.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/sutty.svg b/images/platforms/black/sutty.svg
new file mode 100644
index 0000000000..f7b9a9030c
--- /dev/null
+++ b/images/platforms/black/sutty.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/sutty.svg.license b/images/platforms/black/sutty.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/sutty.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/swanye.svg.license b/images/platforms/black/swanye.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/swanye.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/takahe.svg b/images/platforms/black/takahe.svg
new file mode 100644
index 0000000000..1faf05bfeb
--- /dev/null
+++ b/images/platforms/black/takahe.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/takahe.svg.license b/images/platforms/black/takahe.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/takahe.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/takesama.svg b/images/platforms/black/takesama.svg
new file mode 100644
index 0000000000..fdf0f65984
--- /dev/null
+++ b/images/platforms/black/takesama.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/takesama.svg.license b/images/platforms/black/takesama.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/takesama.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/threads.svg b/images/platforms/black/threads.svg
new file mode 100644
index 0000000000..0097a7aeba
--- /dev/null
+++ b/images/platforms/black/threads.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/threads.svg.license b/images/platforms/black/threads.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/threads.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/tumblr.svg b/images/platforms/black/tumblr.svg
new file mode 100644
index 0000000000..2fe91e709e
--- /dev/null
+++ b/images/platforms/black/tumblr.svg
@@ -0,0 +1,19 @@
+
+
+
\ No newline at end of file
diff --git a/images/platforms/black/tumblr.svg.license b/images/platforms/black/tumblr.svg.license
new file mode 100644
index 0000000000..4c8c4b8e5d
--- /dev/null
+++ b/images/platforms/black/tumblr.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: bypeople https://www.svgrepo.com/svg/513007/tumblr-181
+SPDX-License-Identifier: CC-PDDC
diff --git a/images/platforms/black/vernissage.svg b/images/platforms/black/vernissage.svg
new file mode 100644
index 0000000000..9c576ac7cb
--- /dev/null
+++ b/images/platforms/black/vernissage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/vernissage.svg.license b/images/platforms/black/vernissage.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/vernissage.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/vervis.svg b/images/platforms/black/vervis.svg
new file mode 100644
index 0000000000..7c6a37f507
--- /dev/null
+++ b/images/platforms/black/vervis.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/vervis.svg.license b/images/platforms/black/vervis.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/vervis.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/vidzy.svg b/images/platforms/black/vidzy.svg
new file mode 100644
index 0000000000..953b9a5c3e
--- /dev/null
+++ b/images/platforms/black/vidzy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/vidzy.svg.license b/images/platforms/black/vidzy.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/vidzy.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/vocata.svg b/images/platforms/black/vocata.svg
new file mode 100644
index 0000000000..4d4476a320
--- /dev/null
+++ b/images/platforms/black/vocata.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/vocata.svg.license b/images/platforms/black/vocata.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/vocata.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/wafrn.svg b/images/platforms/black/wafrn.svg
new file mode 100644
index 0000000000..8e9d27df10
--- /dev/null
+++ b/images/platforms/black/wafrn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/wafrn.svg.license b/images/platforms/black/wafrn.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/wafrn.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/wildebeest.svg b/images/platforms/black/wildebeest.svg
new file mode 100644
index 0000000000..91b37d0a32
--- /dev/null
+++ b/images/platforms/black/wildebeest.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/wildebeest.svg.license b/images/platforms/black/wildebeest.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/wildebeest.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/wordpress.svg b/images/platforms/black/wordpress.svg
new file mode 100644
index 0000000000..a5c5aa6249
--- /dev/null
+++ b/images/platforms/black/wordpress.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/wordpress.svg.license b/images/platforms/black/wordpress.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/wordpress.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/write.as.svg b/images/platforms/black/write.as.svg
new file mode 100644
index 0000000000..4ea60554fd
--- /dev/null
+++ b/images/platforms/black/write.as.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/write.as.svg.license b/images/platforms/black/write.as.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/write.as.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/writefreely.svg b/images/platforms/black/writefreely.svg
new file mode 100644
index 0000000000..60c8c0bb53
--- /dev/null
+++ b/images/platforms/black/writefreely.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/writefreely.svg.license b/images/platforms/black/writefreely.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/writefreely.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/wxwclub.svg b/images/platforms/black/wxwclub.svg
new file mode 100644
index 0000000000..1ec30e8d7a
--- /dev/null
+++ b/images/platforms/black/wxwclub.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/wxwclub.svg.license b/images/platforms/black/wxwclub.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/wxwclub.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/xwiki.svg b/images/platforms/black/xwiki.svg
new file mode 100644
index 0000000000..3bd39a5f89
--- /dev/null
+++ b/images/platforms/black/xwiki.svg
@@ -0,0 +1,15 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/black/xwiki.svg.license b/images/platforms/black/xwiki.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/xwiki.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/black/zap.svg b/images/platforms/black/zap.svg
new file mode 100644
index 0000000000..062b00393e
--- /dev/null
+++ b/images/platforms/black/zap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/black/zap.svg.license b/images/platforms/black/zap.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/black/zap.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/color/aardwolf.svg b/images/platforms/color/aardwolf.svg
new file mode 100644
index 0000000000..8e5fb499ed
--- /dev/null
+++ b/images/platforms/color/aardwolf.svg
@@ -0,0 +1,42 @@
+
+
\ No newline at end of file
diff --git a/images/platforms/color/aardwolf.svg.license b/images/platforms/color/aardwolf.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/color/aardwolf.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/color/activitypods.svg b/images/platforms/color/activitypods.svg
new file mode 100644
index 0000000000..1cac3f1640
--- /dev/null
+++ b/images/platforms/color/activitypods.svg
@@ -0,0 +1,15 @@
+
\ No newline at end of file
diff --git a/images/platforms/color/activitypods.svg.license b/images/platforms/color/activitypods.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/color/activitypods.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/color/activitypub.svg b/images/platforms/color/activitypub.svg
new file mode 100644
index 0000000000..f56d428fbc
--- /dev/null
+++ b/images/platforms/color/activitypub.svg
@@ -0,0 +1,288 @@
+
+
+
+
+ ActivityPub logo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ image/svg+xml
+
+ ActivityPub logo
+
+ 2017-04-15
+
+
+ Robert Martinez
+
+
+
+
+ ActivityPub
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/images/platforms/color/activitypub.svg.license b/images/platforms/color/activitypub.svg.license
new file mode 100644
index 0000000000..acef685eed
--- /dev/null
+++ b/images/platforms/color/activitypub.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: mray https://commons.wikimedia.org/wiki/File:ActivityPub-logo-symbol.svg
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/color/akkoma.svg b/images/platforms/color/akkoma.svg
new file mode 100644
index 0000000000..96dc8d8ce8
--- /dev/null
+++ b/images/platforms/color/akkoma.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/images/platforms/color/akkoma.svg.license b/images/platforms/color/akkoma.svg.license
new file mode 100644
index 0000000000..f3816d7841
--- /dev/null
+++ b/images/platforms/color/akkoma.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: floatingghost https://commons.wikimedia.org/wiki/File:Akkoma_logo.svg
+SPDX-License-Identifier: AGPL-3.0-or-later
diff --git a/images/platforms/color/bluesky.svg b/images/platforms/color/bluesky.svg
new file mode 100644
index 0000000000..b60d51c279
--- /dev/null
+++ b/images/platforms/color/bluesky.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/images/platforms/color/bluesky.svg.license b/images/platforms/color/bluesky.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/color/bluesky.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/color/chuckya.svg b/images/platforms/color/chuckya.svg
new file mode 100644
index 0000000000..3d633b8842
--- /dev/null
+++ b/images/platforms/color/chuckya.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/color/chuckya.svg.license b/images/platforms/color/chuckya.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/color/chuckya.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/color/decodon.svg b/images/platforms/color/decodon.svg
new file mode 100644
index 0000000000..0e648c759b
--- /dev/null
+++ b/images/platforms/color/decodon.svg
@@ -0,0 +1,12 @@
+
+
+ decodon_flower_logo
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/images/platforms/color/decodon.svg.license b/images/platforms/color/decodon.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/color/decodon.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/color/discourse.svg b/images/platforms/color/discourse.svg
new file mode 100644
index 0000000000..4cbb8c87b3
--- /dev/null
+++ b/images/platforms/color/discourse.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/images/platforms/color/discourse.svg.license b/images/platforms/color/discourse.svg.license
new file mode 100644
index 0000000000..5c569fb582
--- /dev/null
+++ b/images/platforms/color/discourse.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Discourse team https://commons.wikimedia.org/wiki/File:Discourse_icon.svg
+SPDX-License-Identifier: GPL-2.0-only
diff --git a/images/platforms/color/fedify.svg b/images/platforms/color/fedify.svg
new file mode 100644
index 0000000000..b19fbb59b6
--- /dev/null
+++ b/images/platforms/color/fedify.svg
@@ -0,0 +1,175 @@
+
+
+
+
+ Deno Avatar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/images/platforms/color/fedify.svg.license b/images/platforms/color/fedify.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/color/fedify.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/color/firefish.svg b/images/platforms/color/firefish.svg
new file mode 100644
index 0000000000..7b36f4d77e
--- /dev/null
+++ b/images/platforms/color/firefish.svg
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/images/platforms/color/firefish.svg.license b/images/platforms/color/firefish.svg.license
new file mode 100644
index 0000000000..93e1b24be1
--- /dev/null
+++ b/images/platforms/color/firefish.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Kainoa Kanter https://commons.wikimedia.org/wiki/File:Firefish_animated.svg
+SPDX-License-Identifier: AGPL-3.0-or-later
diff --git a/images/platforms/color/flipboard.svg b/images/platforms/color/flipboard.svg
new file mode 100644
index 0000000000..6f42ee490f
--- /dev/null
+++ b/images/platforms/color/flipboard.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/images/platforms/color/flipboard.svg.license b/images/platforms/color/flipboard.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/color/flipboard.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/mods/fpostit/friendica.svg b/images/platforms/color/friendica.svg
similarity index 100%
rename from mods/fpostit/friendica.svg
rename to images/platforms/color/friendica.svg
diff --git a/images/platforms/color/friendica.svg.license b/images/platforms/color/friendica.svg.license
new file mode 100644
index 0000000000..7aaeaba96e
--- /dev/null
+++ b/images/platforms/color/friendica.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: 2010-2024 the Friendica project
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/color/gitlab.svg b/images/platforms/color/gitlab.svg
new file mode 100644
index 0000000000..858feda2a0
--- /dev/null
+++ b/images/platforms/color/gitlab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/color/gitlab.svg.license b/images/platforms/color/gitlab.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/color/gitlab.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/color/gnusocial.svg b/images/platforms/color/gnusocial.svg
new file mode 100644
index 0000000000..ba61f345c7
--- /dev/null
+++ b/images/platforms/color/gnusocial.svg
@@ -0,0 +1,99 @@
+
+
+
+
+ GNU Social Image Logo
+
+
+
+
+
+ image/svg+xml
+
+ GNU Social Image Logo
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/images/platforms/color/gnusocial.svg.license b/images/platforms/color/gnusocial.svg.license
new file mode 100644
index 0000000000..bdcd7aa795
--- /dev/null
+++ b/images/platforms/color/gnusocial.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Jonas Laugs, with lettering by Steven DuBois https://commons.wikimedia.org/wiki/File:GNU_Social_Image_Logo.svg
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/color/kookie.svg b/images/platforms/color/kookie.svg
new file mode 100644
index 0000000000..df374d1d33
--- /dev/null
+++ b/images/platforms/color/kookie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/color/kookie.svg.license b/images/platforms/color/kookie.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/color/kookie.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/color/loops.svg b/images/platforms/color/loops.svg
new file mode 100644
index 0000000000..8ba6b2231c
--- /dev/null
+++ b/images/platforms/color/loops.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/images/platforms/color/loops.svg.license b/images/platforms/color/loops.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/color/loops.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/color/mastodon.svg b/images/platforms/color/mastodon.svg
new file mode 100644
index 0000000000..a20e7981f6
--- /dev/null
+++ b/images/platforms/color/mastodon.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/images/platforms/color/mastodon.svg.license b/images/platforms/color/mastodon.svg.license
new file mode 100644
index 0000000000..cd758551b8
--- /dev/null
+++ b/images/platforms/color/mastodon.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Eugen Rochko & other Mastodon contributors https://commons.wikimedia.org/wiki/File:Mastodon_logotype_(simple)_new_hue.svg
+SPDX-License-Identifier: AGPL-3.0-or-later
diff --git a/images/platforms/color/mbin.svg b/images/platforms/color/mbin.svg
new file mode 100644
index 0000000000..b48eccdd17
--- /dev/null
+++ b/images/platforms/color/mbin.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/images/platforms/color/mbin.svg.license b/images/platforms/color/mbin.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/color/mbin.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/color/misskey.svg b/images/platforms/color/misskey.svg
new file mode 100644
index 0000000000..15c0bcc9bd
--- /dev/null
+++ b/images/platforms/color/misskey.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/color/misskey.svg.license b/images/platforms/color/misskey.svg.license
new file mode 100644
index 0000000000..41182ca490
--- /dev/null
+++ b/images/platforms/color/misskey.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: https://icon-sets.iconify.design/simple-icons/misskey/
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/color/neodb.svg b/images/platforms/color/neodb.svg
new file mode 100644
index 0000000000..cc10cff898
--- /dev/null
+++ b/images/platforms/color/neodb.svg
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/images/platforms/color/neodb.svg.license b/images/platforms/color/neodb.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/color/neodb.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/color/newsmast.svg b/images/platforms/color/newsmast.svg
new file mode 100644
index 0000000000..875fef30d9
--- /dev/null
+++ b/images/platforms/color/newsmast.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/images/platforms/color/newsmast.svg.license b/images/platforms/color/newsmast.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/color/newsmast.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/color/nodebb.svg b/images/platforms/color/nodebb.svg
new file mode 100644
index 0000000000..6ef96a9261
--- /dev/null
+++ b/images/platforms/color/nodebb.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/images/platforms/color/nodebb.svg.license b/images/platforms/color/nodebb.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/color/nodebb.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/color/peertube.svg b/images/platforms/color/peertube.svg
new file mode 100644
index 0000000000..0e6e228e61
--- /dev/null
+++ b/images/platforms/color/peertube.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/color/peertube.svg.license b/images/platforms/color/peertube.svg.license
new file mode 100644
index 0000000000..13cba9b2e3
--- /dev/null
+++ b/images/platforms/color/peertube.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: PeerTube contributors https://commons.wikimedia.org/wiki/File:Logo_de_PeerTube.svg
+SPDX-License-Identifier: CC-PDDC
diff --git a/images/platforms/color/pixelfed.svg b/images/platforms/color/pixelfed.svg
new file mode 100644
index 0000000000..dfaf03fbea
--- /dev/null
+++ b/images/platforms/color/pixelfed.svg
@@ -0,0 +1,101 @@
+
+
+
+ icon/color/svg/pixelfed-icon-color
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/images/platforms/color/pixelfed.svg.license b/images/platforms/color/pixelfed.svg.license
new file mode 100644
index 0000000000..a8129c266b
--- /dev/null
+++ b/images/platforms/color/pixelfed.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Mark Wilson & other Pixelfed contributors https://commons.wikimedia.org/wiki/File:Pixelfed_logo_multicolor_(September_2018).svg
+SPDX-License-Identifier: CC-BY-SA-4.0
diff --git a/images/platforms/color/pleroma.svg b/images/platforms/color/pleroma.svg
new file mode 100644
index 0000000000..2696052279
--- /dev/null
+++ b/images/platforms/color/pleroma.svg
@@ -0,0 +1,75 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/images/platforms/color/pleroma.svg.license b/images/platforms/color/pleroma.svg.license
new file mode 100644
index 0000000000..a5c1aa75f2
--- /dev/null
+++ b/images/platforms/color/pleroma.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Henry Jameson https://commons.wikimedia.org/wiki/File:Smaller_Pleroma_logo.svg
+SPDX-License-Identifier: AGPL-3.0-or-later
diff --git a/images/platforms/color/rss.svg b/images/platforms/color/rss.svg
new file mode 100644
index 0000000000..a7f9cf196c
--- /dev/null
+++ b/images/platforms/color/rss.svg
@@ -0,0 +1,18 @@
+
+
+
+ RSS feed icon
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/images/platforms/color/rss.svg.license b/images/platforms/color/rss.svg.license
new file mode 100644
index 0000000000..59f909d7b6
--- /dev/null
+++ b/images/platforms/color/rss.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Jahoe https://commons.wikimedia.org/wiki/File:Generic_Feed-icon.svg
+SPDX-License-Identifier: GPL-2.0-or-later
diff --git a/images/platforms/color/sharky.svg b/images/platforms/color/sharky.svg
new file mode 100644
index 0000000000..40a2fd9bed
--- /dev/null
+++ b/images/platforms/color/sharky.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/color/sharky.svg.license b/images/platforms/color/sharky.svg.license
new file mode 100644
index 0000000000..c0a1118a51
--- /dev/null
+++ b/images/platforms/color/sharky.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: https://icon-sets.iconify.design/game-icons/shark-jaws/
+SPDX-License-Identifier: CC-BY-3.0
diff --git a/images/platforms/color/tumblr.svg b/images/platforms/color/tumblr.svg
new file mode 100644
index 0000000000..d4f4d6d4df
--- /dev/null
+++ b/images/platforms/color/tumblr.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/images/platforms/color/tumblr.svg.license b/images/platforms/color/tumblr.svg.license
new file mode 100644
index 0000000000..39a4f64c06
--- /dev/null
+++ b/images/platforms/color/tumblr.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: ZyMOS https://commons.wikimedia.org/wiki/File:Tumblr.svg
+SPDX-License-Identifier: CC-PDDC
diff --git a/images/platforms/color/vervis.svg b/images/platforms/color/vervis.svg
new file mode 100644
index 0000000000..571464e7a8
--- /dev/null
+++ b/images/platforms/color/vervis.svg
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/images/platforms/color/vervis.svg.license b/images/platforms/color/vervis.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/color/vervis.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/color/vocata.svg b/images/platforms/color/vocata.svg
new file mode 100644
index 0000000000..a0ab84330f
--- /dev/null
+++ b/images/platforms/color/vocata.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/images/platforms/color/vocata.svg.license b/images/platforms/color/vocata.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/color/vocata.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/color/wordpress.svg b/images/platforms/color/wordpress.svg
new file mode 100644
index 0000000000..7182535973
--- /dev/null
+++ b/images/platforms/color/wordpress.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/color/wordpress.svg.license b/images/platforms/color/wordpress.svg.license
new file mode 100644
index 0000000000..1fea8f7f81
--- /dev/null
+++ b/images/platforms/color/wordpress.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: WordPress https://commons.wikimedia.org/wiki/File:WordPress_blue_logo.svg
+SPDX-License-Identifier: GPL-2.0-or-later
diff --git a/images/platforms/white/activitypub.svg b/images/platforms/white/activitypub.svg
new file mode 100644
index 0000000000..f44e06683a
--- /dev/null
+++ b/images/platforms/white/activitypub.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/activitypub.svg.license b/images/platforms/white/activitypub.svg.license
new file mode 100644
index 0000000000..330e2cb8af
--- /dev/null
+++ b/images/platforms/white/activitypub.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/white/akkoma.svg b/images/platforms/white/akkoma.svg
new file mode 100644
index 0000000000..7bc4df5630
--- /dev/null
+++ b/images/platforms/white/akkoma.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/akkoma.svg.license b/images/platforms/white/akkoma.svg.license
new file mode 100644
index 0000000000..53413ed82d
--- /dev/null
+++ b/images/platforms/white/akkoma.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC-BY-SA-4.0
diff --git a/images/platforms/white/andstatus.svg b/images/platforms/white/andstatus.svg
new file mode 100644
index 0000000000..ab551a2275
--- /dev/null
+++ b/images/platforms/white/andstatus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/andstatus.svg.license b/images/platforms/white/andstatus.svg.license
new file mode 100644
index 0000000000..53413ed82d
--- /dev/null
+++ b/images/platforms/white/andstatus.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC-BY-SA-4.0
diff --git a/images/platforms/white/bluesky.svg b/images/platforms/white/bluesky.svg
new file mode 100644
index 0000000000..88153df455
--- /dev/null
+++ b/images/platforms/white/bluesky.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/bluesky.svg.license b/images/platforms/white/bluesky.svg.license
new file mode 100644
index 0000000000..dfea79525f
--- /dev/null
+++ b/images/platforms/white/bluesky.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: Apache-2.0
diff --git a/images/platforms/white/bonfire.svg b/images/platforms/white/bonfire.svg
new file mode 100644
index 0000000000..9f2c438cfa
--- /dev/null
+++ b/images/platforms/white/bonfire.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/bonfire.svg.license b/images/platforms/white/bonfire.svg.license
new file mode 100644
index 0000000000..53413ed82d
--- /dev/null
+++ b/images/platforms/white/bonfire.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC-BY-SA-4.0
diff --git a/images/platforms/white/bookwyrm.svg b/images/platforms/white/bookwyrm.svg
new file mode 100644
index 0000000000..6afc7c37ca
--- /dev/null
+++ b/images/platforms/white/bookwyrm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/bookwyrm.svg.license b/images/platforms/white/bookwyrm.svg.license
new file mode 100644
index 0000000000..53413ed82d
--- /dev/null
+++ b/images/platforms/white/bookwyrm.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC-BY-SA-4.0
diff --git a/images/platforms/white/bridgy_fed.svg b/images/platforms/white/bridgy_fed.svg
new file mode 100644
index 0000000000..4326188486
--- /dev/null
+++ b/images/platforms/white/bridgy_fed.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/images/platforms/white/bridgy_fed.svg.license b/images/platforms/white/bridgy_fed.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/bridgy_fed.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/calckey.svg b/images/platforms/white/calckey.svg
new file mode 100644
index 0000000000..05de635f32
--- /dev/null
+++ b/images/platforms/white/calckey.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/images/platforms/white/calckey.svg.license b/images/platforms/white/calckey.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/calckey.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/castopod.svg b/images/platforms/white/castopod.svg
new file mode 100644
index 0000000000..a6c0c6df5e
--- /dev/null
+++ b/images/platforms/white/castopod.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/images/platforms/white/castopod.svg.license b/images/platforms/white/castopod.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/castopod.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/diaspora.svg b/images/platforms/white/diaspora.svg
new file mode 100644
index 0000000000..54ecd5f069
--- /dev/null
+++ b/images/platforms/white/diaspora.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/diaspora.svg.license b/images/platforms/white/diaspora.svg.license
new file mode 100644
index 0000000000..330e2cb8af
--- /dev/null
+++ b/images/platforms/white/diaspora.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/white/discourse.svg b/images/platforms/white/discourse.svg
new file mode 100644
index 0000000000..801b1345ee
--- /dev/null
+++ b/images/platforms/white/discourse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/discourse.svg.license b/images/platforms/white/discourse.svg.license
new file mode 100644
index 0000000000..330e2cb8af
--- /dev/null
+++ b/images/platforms/white/discourse.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/white/dolphin.svg b/images/platforms/white/dolphin.svg
new file mode 100644
index 0000000000..590bb6728d
--- /dev/null
+++ b/images/platforms/white/dolphin.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/images/platforms/white/dolphin.svg.license b/images/platforms/white/dolphin.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/dolphin.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/drupal.svg b/images/platforms/white/drupal.svg
new file mode 100644
index 0000000000..f4179023e7
--- /dev/null
+++ b/images/platforms/white/drupal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/drupal.svg.license b/images/platforms/white/drupal.svg.license
new file mode 100644
index 0000000000..dfea79525f
--- /dev/null
+++ b/images/platforms/white/drupal.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: Apache-2.0
diff --git a/images/platforms/white/email.svg b/images/platforms/white/email.svg
new file mode 100644
index 0000000000..cbc88ddb10
--- /dev/null
+++ b/images/platforms/white/email.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/email.svg.license b/images/platforms/white/email.svg.license
new file mode 100644
index 0000000000..dfea79525f
--- /dev/null
+++ b/images/platforms/white/email.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: Apache-2.0
diff --git a/images/platforms/white/firefish.svg b/images/platforms/white/firefish.svg
new file mode 100644
index 0000000000..bf20d55ebf
--- /dev/null
+++ b/images/platforms/white/firefish.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/firefish.svg.license b/images/platforms/white/firefish.svg.license
new file mode 100644
index 0000000000..330e2cb8af
--- /dev/null
+++ b/images/platforms/white/firefish.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/white/flipboard.svg b/images/platforms/white/flipboard.svg
new file mode 100644
index 0000000000..62d8873eb1
--- /dev/null
+++ b/images/platforms/white/flipboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/flipboard.svg.license b/images/platforms/white/flipboard.svg.license
new file mode 100644
index 0000000000..330e2cb8af
--- /dev/null
+++ b/images/platforms/white/flipboard.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/white/flohmarkt.svg b/images/platforms/white/flohmarkt.svg
new file mode 100644
index 0000000000..cbab50efe0
--- /dev/null
+++ b/images/platforms/white/flohmarkt.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/images/platforms/white/flohmarkt.svg.license b/images/platforms/white/flohmarkt.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/flohmarkt.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/forgejo.svg b/images/platforms/white/forgejo.svg
new file mode 100644
index 0000000000..fb9566de7e
--- /dev/null
+++ b/images/platforms/white/forgejo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/forgejo.svg.license b/images/platforms/white/forgejo.svg.license
new file mode 100644
index 0000000000..330e2cb8af
--- /dev/null
+++ b/images/platforms/white/forgejo.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/white/friendica.svg b/images/platforms/white/friendica.svg
new file mode 100644
index 0000000000..c08f087165
--- /dev/null
+++ b/images/platforms/white/friendica.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/friendica.svg.license b/images/platforms/white/friendica.svg.license
new file mode 100644
index 0000000000..dfea79525f
--- /dev/null
+++ b/images/platforms/white/friendica.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: Apache-2.0
diff --git a/images/platforms/white/funkwhale.svg b/images/platforms/white/funkwhale.svg
new file mode 100644
index 0000000000..8afb6a3226
--- /dev/null
+++ b/images/platforms/white/funkwhale.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/funkwhale.svg.license b/images/platforms/white/funkwhale.svg.license
new file mode 100644
index 0000000000..53413ed82d
--- /dev/null
+++ b/images/platforms/white/funkwhale.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC-BY-SA-4.0
diff --git a/images/platforms/white/ghost.svg b/images/platforms/white/ghost.svg
new file mode 100644
index 0000000000..cca71bc322
--- /dev/null
+++ b/images/platforms/white/ghost.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/ghost.svg.license b/images/platforms/white/ghost.svg.license
new file mode 100644
index 0000000000..330e2cb8af
--- /dev/null
+++ b/images/platforms/white/ghost.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/white/gitlab.svg b/images/platforms/white/gitlab.svg
new file mode 100644
index 0000000000..ef428338de
--- /dev/null
+++ b/images/platforms/white/gitlab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/gitlab.svg.license b/images/platforms/white/gitlab.svg.license
new file mode 100644
index 0000000000..dfea79525f
--- /dev/null
+++ b/images/platforms/white/gitlab.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: Apache-2.0
diff --git a/images/platforms/white/glitch-soc.svg b/images/platforms/white/glitch-soc.svg
new file mode 100644
index 0000000000..54ad242c76
--- /dev/null
+++ b/images/platforms/white/glitch-soc.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/images/platforms/white/glitch-soc.svg.license b/images/platforms/white/glitch-soc.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/glitch-soc.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/gnusocial.svg b/images/platforms/white/gnusocial.svg
new file mode 100644
index 0000000000..179c6fc8ba
--- /dev/null
+++ b/images/platforms/white/gnusocial.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/gnusocial.svg.license b/images/platforms/white/gnusocial.svg.license
new file mode 100644
index 0000000000..330e2cb8af
--- /dev/null
+++ b/images/platforms/white/gnusocial.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/white/gotosocial.svg b/images/platforms/white/gotosocial.svg
new file mode 100644
index 0000000000..2e097a139f
--- /dev/null
+++ b/images/platforms/white/gotosocial.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/gotosocial.svg.license b/images/platforms/white/gotosocial.svg.license
new file mode 100644
index 0000000000..53413ed82d
--- /dev/null
+++ b/images/platforms/white/gotosocial.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC-BY-SA-4.0
diff --git a/images/platforms/white/guppe.svg b/images/platforms/white/guppe.svg
new file mode 100644
index 0000000000..25b62c1a56
--- /dev/null
+++ b/images/platforms/white/guppe.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/images/platforms/white/guppe.svg.license b/images/platforms/white/guppe.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/guppe.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/hollo.svg b/images/platforms/white/hollo.svg
new file mode 100644
index 0000000000..ad53ba31f8
--- /dev/null
+++ b/images/platforms/white/hollo.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/images/platforms/white/hollo.svg.license b/images/platforms/white/hollo.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/hollo.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/hubzilla.svg b/images/platforms/white/hubzilla.svg
new file mode 100644
index 0000000000..9c9168a4c1
--- /dev/null
+++ b/images/platforms/white/hubzilla.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/images/platforms/white/hubzilla.svg.license b/images/platforms/white/hubzilla.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/hubzilla.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/iceshrimp.svg b/images/platforms/white/iceshrimp.svg
new file mode 100644
index 0000000000..7b942fe652
--- /dev/null
+++ b/images/platforms/white/iceshrimp.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/images/platforms/white/iceshrimp.svg.license b/images/platforms/white/iceshrimp.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/iceshrimp.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/kbin.svg b/images/platforms/white/kbin.svg
new file mode 100644
index 0000000000..7cc7811bde
--- /dev/null
+++ b/images/platforms/white/kbin.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/images/platforms/white/kbin.svg.license b/images/platforms/white/kbin.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/kbin.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/lemmy.svg b/images/platforms/white/lemmy.svg
new file mode 100644
index 0000000000..3bed2cc4b1
--- /dev/null
+++ b/images/platforms/white/lemmy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/lemmy.svg.license b/images/platforms/white/lemmy.svg.license
new file mode 100644
index 0000000000..330e2cb8af
--- /dev/null
+++ b/images/platforms/white/lemmy.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/white/loforo.svg b/images/platforms/white/loforo.svg
new file mode 100644
index 0000000000..76724dd834
--- /dev/null
+++ b/images/platforms/white/loforo.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/images/platforms/white/loforo.svg.license b/images/platforms/white/loforo.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/loforo.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/loops.svg b/images/platforms/white/loops.svg
new file mode 100644
index 0000000000..4ba2f33ba5
--- /dev/null
+++ b/images/platforms/white/loops.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/images/platforms/white/loops.svg.license b/images/platforms/white/loops.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/loops.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/mastodon.svg b/images/platforms/white/mastodon.svg
new file mode 100644
index 0000000000..2ac7d0b895
--- /dev/null
+++ b/images/platforms/white/mastodon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/mastodon.svg.license b/images/platforms/white/mastodon.svg.license
new file mode 100644
index 0000000000..dfea79525f
--- /dev/null
+++ b/images/platforms/white/mastodon.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: Apache-2.0
diff --git a/images/platforms/white/mbin.svg b/images/platforms/white/mbin.svg
new file mode 100644
index 0000000000..28e9b49345
--- /dev/null
+++ b/images/platforms/white/mbin.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/images/platforms/white/mbin.svg.license b/images/platforms/white/mbin.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/mbin.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/microblog.svg b/images/platforms/white/microblog.svg
new file mode 100644
index 0000000000..c77fd2ff6b
--- /dev/null
+++ b/images/platforms/white/microblog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/microblog.svg.license b/images/platforms/white/microblog.svg.license
new file mode 100644
index 0000000000..07ac40ec9a
--- /dev/null
+++ b/images/platforms/white/microblog.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC-BY-4.0
diff --git a/images/platforms/white/minds.svg b/images/platforms/white/minds.svg
new file mode 100644
index 0000000000..0ddee7bc03
--- /dev/null
+++ b/images/platforms/white/minds.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/minds.svg.license b/images/platforms/white/minds.svg.license
new file mode 100644
index 0000000000..330e2cb8af
--- /dev/null
+++ b/images/platforms/white/minds.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/white/misskey.svg b/images/platforms/white/misskey.svg
new file mode 100644
index 0000000000..9dd605eb9a
--- /dev/null
+++ b/images/platforms/white/misskey.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/misskey.svg.license b/images/platforms/white/misskey.svg.license
new file mode 100644
index 0000000000..330e2cb8af
--- /dev/null
+++ b/images/platforms/white/misskey.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/white/mobilizon.svg b/images/platforms/white/mobilizon.svg
new file mode 100644
index 0000000000..2d2a6d9a17
--- /dev/null
+++ b/images/platforms/white/mobilizon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/mobilizon.svg.license b/images/platforms/white/mobilizon.svg.license
new file mode 100644
index 0000000000..53413ed82d
--- /dev/null
+++ b/images/platforms/white/mobilizon.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC-BY-SA-4.0
diff --git a/images/platforms/white/nextcloud.svg b/images/platforms/white/nextcloud.svg
new file mode 100644
index 0000000000..6ef81a6795
--- /dev/null
+++ b/images/platforms/white/nextcloud.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/nextcloud.svg.license b/images/platforms/white/nextcloud.svg.license
new file mode 100644
index 0000000000..bf13a3d696
--- /dev/null
+++ b/images/platforms/white/nextcloud.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: MIT
diff --git a/images/platforms/white/owncast.svg b/images/platforms/white/owncast.svg
new file mode 100644
index 0000000000..cf0ada166b
--- /dev/null
+++ b/images/platforms/white/owncast.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/images/platforms/white/owncast.svg.license b/images/platforms/white/owncast.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/owncast.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/peertube.svg b/images/platforms/white/peertube.svg
new file mode 100644
index 0000000000..7a15c8e0d4
--- /dev/null
+++ b/images/platforms/white/peertube.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/peertube.svg.license b/images/platforms/white/peertube.svg.license
new file mode 100644
index 0000000000..330e2cb8af
--- /dev/null
+++ b/images/platforms/white/peertube.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/white/phanpy.svg b/images/platforms/white/phanpy.svg
new file mode 100644
index 0000000000..f9f8073e41
--- /dev/null
+++ b/images/platforms/white/phanpy.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/images/platforms/white/phanpy.svg.license b/images/platforms/white/phanpy.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/phanpy.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/pixelfed.svg b/images/platforms/white/pixelfed.svg
new file mode 100644
index 0000000000..c872c65e89
--- /dev/null
+++ b/images/platforms/white/pixelfed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/pixelfed.svg.license b/images/platforms/white/pixelfed.svg.license
new file mode 100644
index 0000000000..dfea79525f
--- /dev/null
+++ b/images/platforms/white/pixelfed.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: Apache-2.0
diff --git a/images/platforms/white/pleroma.svg b/images/platforms/white/pleroma.svg
new file mode 100644
index 0000000000..e0b0585c7b
--- /dev/null
+++ b/images/platforms/white/pleroma.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/pleroma.svg.license b/images/platforms/white/pleroma.svg.license
new file mode 100644
index 0000000000..330e2cb8af
--- /dev/null
+++ b/images/platforms/white/pleroma.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/white/plume.svg b/images/platforms/white/plume.svg
new file mode 100644
index 0000000000..b4fbff3127
--- /dev/null
+++ b/images/platforms/white/plume.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/images/platforms/white/plume.svg.license b/images/platforms/white/plume.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/plume.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/rss.svg b/images/platforms/white/rss.svg
new file mode 100644
index 0000000000..1874fa72d3
--- /dev/null
+++ b/images/platforms/white/rss.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/rss.svg.license b/images/platforms/white/rss.svg.license
new file mode 100644
index 0000000000..dfea79525f
--- /dev/null
+++ b/images/platforms/white/rss.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: Apache-2.0
diff --git a/images/platforms/white/shark.svg b/images/platforms/white/shark.svg
new file mode 100644
index 0000000000..6b360796ab
--- /dev/null
+++ b/images/platforms/white/shark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/shark.svg.license b/images/platforms/white/shark.svg.license
new file mode 100644
index 0000000000..d1c6a344b0
--- /dev/null
+++ b/images/platforms/white/shark.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC-BY-3.0
diff --git a/images/platforms/white/soapbox.svg b/images/platforms/white/soapbox.svg
new file mode 100644
index 0000000000..b852de2381
--- /dev/null
+++ b/images/platforms/white/soapbox.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/images/platforms/white/soapbox.svg.license b/images/platforms/white/soapbox.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/soapbox.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/socialhome.svg b/images/platforms/white/socialhome.svg
new file mode 100644
index 0000000000..513f2bb6d0
--- /dev/null
+++ b/images/platforms/white/socialhome.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/images/platforms/white/socialhome.svg.license b/images/platforms/white/socialhome.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/socialhome.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/streams.svg b/images/platforms/white/streams.svg
new file mode 100644
index 0000000000..3b7224134a
--- /dev/null
+++ b/images/platforms/white/streams.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/images/platforms/white/streams.svg.license b/images/platforms/white/streams.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/streams.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/takahe.svg b/images/platforms/white/takahe.svg
new file mode 100644
index 0000000000..31146146ea
--- /dev/null
+++ b/images/platforms/white/takahe.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/images/platforms/white/takahe.svg.license b/images/platforms/white/takahe.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/takahe.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/threads.svg b/images/platforms/white/threads.svg
new file mode 100644
index 0000000000..d178ba1dfb
--- /dev/null
+++ b/images/platforms/white/threads.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/threads.svg.license b/images/platforms/white/threads.svg.license
new file mode 100644
index 0000000000..dfea79525f
--- /dev/null
+++ b/images/platforms/white/threads.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: Apache-2.0
diff --git a/images/platforms/white/tumblr.svg b/images/platforms/white/tumblr.svg
new file mode 100644
index 0000000000..d11cfd53ee
--- /dev/null
+++ b/images/platforms/white/tumblr.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/tumblr.svg.license b/images/platforms/white/tumblr.svg.license
new file mode 100644
index 0000000000..bf13a3d696
--- /dev/null
+++ b/images/platforms/white/tumblr.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: MIT
diff --git a/images/platforms/white/wordpress.svg b/images/platforms/white/wordpress.svg
new file mode 100644
index 0000000000..39c01c6658
--- /dev/null
+++ b/images/platforms/white/wordpress.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/wordpress.svg.license b/images/platforms/white/wordpress.svg.license
new file mode 100644
index 0000000000..dfea79525f
--- /dev/null
+++ b/images/platforms/white/wordpress.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: Apache-2.0
diff --git a/images/platforms/white/write.as.svg b/images/platforms/white/write.as.svg
new file mode 100644
index 0000000000..b910f3d480
--- /dev/null
+++ b/images/platforms/white/write.as.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/images/platforms/white/write.as.svg.license b/images/platforms/white/write.as.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/write.as.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/writefreely.svg b/images/platforms/white/writefreely.svg
new file mode 100644
index 0000000000..e6e7e76d16
--- /dev/null
+++ b/images/platforms/white/writefreely.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/images/platforms/white/writefreely.svg.license b/images/platforms/white/writefreely.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/writefreely.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/platforms/white/xwiki.svg b/images/platforms/white/xwiki.svg
new file mode 100644
index 0000000000..db64f83d2e
--- /dev/null
+++ b/images/platforms/white/xwiki.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/platforms/white/xwiki.svg.license b/images/platforms/white/xwiki.svg.license
new file mode 100644
index 0000000000..330e2cb8af
--- /dev/null
+++ b/images/platforms/white/xwiki.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: iconify https://icon-sets.iconify.design
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/platforms/white/zap.svg b/images/platforms/white/zap.svg
new file mode 100644
index 0000000000..6e1470d88b
--- /dev/null
+++ b/images/platforms/white/zap.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/images/platforms/white/zap.svg.license b/images/platforms/white/zap.svg.license
new file mode 100644
index 0000000000..3ffce40c5f
--- /dev/null
+++ b/images/platforms/white/zap.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: wakest https://codeberg.org/FediverseIconography
+SPDX-License-Identifier: GPL-3.0-only
diff --git a/images/screenshots/friendica-2023-10-frio-desktop.png b/images/screenshots/friendica-2023-10-frio-desktop.png
deleted file mode 100644
index e06f971365..0000000000
Binary files a/images/screenshots/friendica-2023-10-frio-desktop.png and /dev/null differ
diff --git a/images/screenshots/friendica-2023-10-frio-mobile-options-dark-blue.png b/images/screenshots/friendica-2023-10-frio-mobile-options-dark-blue.png
index e486cfeead..edbfe7564e 100644
Binary files a/images/screenshots/friendica-2023-10-frio-mobile-options-dark-blue.png and b/images/screenshots/friendica-2023-10-frio-mobile-options-dark-blue.png differ
diff --git a/images/screenshots/friendica-2023-10-frio-mobile-options-light-blue.png b/images/screenshots/friendica-2023-10-frio-mobile-options-light-blue.png
index 04c6c60682..e299313e83 100644
Binary files a/images/screenshots/friendica-2023-10-frio-mobile-options-light-blue.png and b/images/screenshots/friendica-2023-10-frio-mobile-options-light-blue.png differ
diff --git a/images/screenshots/friendica-2023-10-frio-mobile-timeline-dark-blue.png b/images/screenshots/friendica-2023-10-frio-mobile-timeline-dark-blue.png
index ebcbce3d6c..01ebc07076 100644
Binary files a/images/screenshots/friendica-2023-10-frio-mobile-timeline-dark-blue.png and b/images/screenshots/friendica-2023-10-frio-mobile-timeline-dark-blue.png differ
diff --git a/images/screenshots/friendica-2023-12-frio-desktop.png b/images/screenshots/friendica-2023-12-frio-desktop.png
new file mode 100644
index 0000000000..ac11015caa
Binary files /dev/null and b/images/screenshots/friendica-2023-12-frio-desktop.png differ
diff --git a/images/tumblr.png.license b/images/tumblr.png.license
new file mode 100644
index 0000000000..8e741e2533
--- /dev/null
+++ b/images/tumblr.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2014 Notrons (Wikimedia)
+
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/twitter.png.license b/images/twitter.png.license
new file mode 100644
index 0000000000..88cdb0a15e
--- /dev/null
+++ b/images/twitter.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2013 Aimmp (Wikimedia)
+
+SPDX-License-Identifier: CC0-1.0
diff --git a/images/wordpress.png.license b/images/wordpress.png.license
new file mode 100644
index 0000000000..d719437e22
--- /dev/null
+++ b/images/wordpress.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2003 Wordpress
+
+SPDX-License-Identifier: GPL-2.0-or-later
diff --git a/images/youtube_icon.gif.license b/images/youtube_icon.gif.license
new file mode 100644
index 0000000000..36dc1373af
--- /dev/null
+++ b/images/youtube_icon.gif.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2011 ZyMOS (Wikimedia)
+
+SPDX-License-Identifier: CC0-1.0
diff --git a/index.php b/index.php
index 87778308a5..c1265556f6 100644
--- a/index.php
+++ b/index.php
@@ -1,56 +1,22 @@
.
- *
- */
-use Dice\Dice;
+// Copyright (C) 2010-2024, the Friendica project
+// SPDX-FileCopyrightText: 2010-2024 the Friendica project
+//
+// SPDX-License-Identifier: AGPL-3.0-or-later
$start_time = microtime(true);
if (!file_exists(__DIR__ . '/vendor/autoload.php')) {
- die('Vendor path not found. Please execute "bin/composer.phar --no-dev install" on the command line in the web root.');
+ die('Vendor path not found. Please execute "bin/composer.phar run install:prod" on the command line in the web root.');
}
require __DIR__ . '/vendor/autoload.php';
-$dice = (new Dice())->addRules(include __DIR__ . '/static/dependencies.config.php');
-/** @var \Friendica\Core\Addon\Capability\ICanLoadAddons $addonLoader */
-$addonLoader = $dice->create(\Friendica\Core\Addon\Capability\ICanLoadAddons::class);
-$dice = $dice->addRules($addonLoader->getActiveAddonConfig('dependencies'));
-$dice = $dice->addRule(Friendica\App\Mode::class, ['call' => [['determineRunMode', [false, $_SERVER], Dice::CHAIN_CALL]]]);
+$request = \GuzzleHttp\Psr7\ServerRequest::fromGlobals();
-\Friendica\DI::init($dice);
+$container = \Friendica\Core\DiceContainer::fromBasePath(__DIR__);
-\Friendica\Core\Logger\Handler\ErrorHandler::register($dice->create(\Psr\Log\LoggerInterface::class));
+$app = \Friendica\App::fromContainer($container);
-$a = \Friendica\DI::app();
-
-\Friendica\DI::mode()->setExecutor(\Friendica\App\Mode::INDEX);
-
-$a->runFrontend(
- $dice->create(\Friendica\App\Router::class),
- $dice->create(\Friendica\Core\PConfig\Capability\IManagePersonalConfigValues::class),
- $dice->create(\Friendica\Security\Authentication::class),
- $dice->create(\Friendica\App\Page::class),
- $dice->create(\Friendica\Content\Nav::class),
- $dice->create(Friendica\Module\Special\HTTPException::class),
- new \Friendica\Util\HTTPInputData($_SERVER),
- $start_time,
- $_SERVER
-);
+$app->processRequest($request, $start_time);
diff --git a/mod/item.php b/mod/item.php
index e85c08e023..e416126a4a 100644
--- a/mod/item.php
+++ b/mod/item.php
@@ -1,21 +1,9 @@
.
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*
* This is the POST destination for most all locally posted
* text stuff. This function handles status, wall-to-wall status,
@@ -28,16 +16,14 @@
* information.
*/
-use Friendica\App;
use Friendica\Content\Conversation;
use Friendica\Content\Text\BBCode;
-use Friendica\Core\Hook;
-use Friendica\Core\Logger;
use Friendica\Core\Protocol;
use Friendica\Core\System;
use Friendica\Core\Worker;
use Friendica\Database\DBA;
use Friendica\DI;
+use Friendica\Event\ArrayFilterEvent;
use Friendica\Model\Contact;
use Friendica\Model\Item;
use Friendica\Model\ItemURI;
@@ -45,7 +31,8 @@ use Friendica\Model\Post;
use Friendica\Network\HTTPException;
use Friendica\Util\DateTimeFormat;
-function item_post(App $a) {
+function item_post()
+{
$uid = DI::userSession()->getLocalUserId();
if (!$uid) {
@@ -56,7 +43,11 @@ function item_post(App $a) {
item_drop($uid, $_REQUEST['dropitems']);
}
- Hook::callAll('post_local_start', $_REQUEST);
+ $eventDispatcher = DI::eventDispatcher();
+
+ $_REQUEST = $eventDispatcher->dispatch(
+ new ArrayFilterEvent(ArrayFilterEvent::INSERT_POST_LOCAL_START, $_REQUEST)
+ )->getArray();
$return_path = $_REQUEST['return'] ?? '';
$preview = intval($_REQUEST['preview'] ?? 0);
@@ -68,7 +59,7 @@ function item_post(App $a) {
*/
if (!$preview && !empty($_REQUEST['post_id_random'])) {
if (DI::session()->get('post-random') == $_REQUEST['post_id_random']) {
- Logger::warning('duplicate post');
+ DI::logger()->warning('duplicate post');
item_post_return(DI::baseUrl(), $return_path);
} else {
DI::session()->set('post-random', $_REQUEST['post_id_random']);
@@ -144,10 +135,10 @@ function item_insert(int $uid, array $request, bool $preview, string $return_pat
$post = DI::contentItem()->initializePost($post);
$post['edit'] = null;
- $post['post-type'] = $request['post_type'] ?? '';
- $post['wall'] = $request['wall'] ?? true;
+ $post['post-type'] = $request['post_type'] ?? '';
+ $post['wall'] = $request['wall'] ?? true;
$post['pubmail'] = $request['pubmail_enable'] ?? false;
- $post['created'] = $request['created_at'] ?? DateTimeFormat::utcNow();
+ $post['created'] = $request['created_at'] ?? DateTimeFormat::utcNow();
$post['edited'] = $post['changed'] = $post['commented'] = $post['created'];
$post['app'] = '';
$post['inform'] = '';
@@ -177,18 +168,18 @@ function item_insert(int $uid, array $request, bool $preview, string $return_pat
// This enables interaction like starring and saving into folders
if ($toplevel_item['uid'] == 0) {
$stored = Item::storeForUserByUriId($toplevel_item['uri-id'], $post['uid'], ['post-reason' => Item::PR_ACTIVITY]);
- Logger::info('Public item stored for user', ['uri-id' => $toplevel_item['uri-id'], 'uid' => $post['uid'], 'stored' => $stored]);
+ DI::logger()->info('Public item stored for user', ['uri-id' => $toplevel_item['uri-id'], 'uid' => $post['uid'], 'stored' => $stored]);
}
- $post['parent'] = $toplevel_item['id'];
- $post['gravity'] = Item::GRAVITY_COMMENT;
- $post['thr-parent'] = $parent_item['uri'];
- $post['wall'] = $toplevel_item['wall'];
+ $post['parent'] = $toplevel_item['id'];
+ $post['gravity'] = Item::GRAVITY_COMMENT;
+ $post['thr-parent'] = $parent_item['uri'];
+ $post['wall'] = $toplevel_item['wall'];
} else {
- $parent_item = [];
- $post['parent'] = 0;
- $post['gravity'] = Item::GRAVITY_PARENT;
- $post['thr-parent'] = $post['uri'];
+ $parent_item = [];
+ $post['parent'] = 0;
+ $post['gravity'] = Item::GRAVITY_PARENT;
+ $post['thr-parent'] = $post['uri'];
}
$post = DI::contentItem()->getACL($post, $parent_item, $request);
@@ -209,7 +200,7 @@ function item_insert(int $uid, array $request, bool $preview, string $return_pat
$post = Post::selectFirst(Item::ITEM_FIELDLIST, ['id' => $post_id]);
if (!$post) {
- Logger::error('Item couldn\'t be fetched.', ['post_id' => $post_id]);
+ DI::logger()->error('Item couldn\'t be fetched.', ['post_id' => $post_id]);
if ($return_path) {
DI::baseUrl()->redirect($return_path);
}
@@ -225,7 +216,7 @@ function item_insert(int $uid, array $request, bool $preview, string $return_pat
DI::contentItem()->copyPermissions($post['thr-parent-id'], $post['uri-id'], $post['parent-uri-id']);
}
- Logger::debug('post_complete');
+ DI::logger()->debug('post_complete');
item_post_return(DI::baseUrl(), $return_path);
// NOTREACHED
@@ -233,13 +224,15 @@ function item_insert(int $uid, array $request, bool $preview, string $return_pat
function item_process(array $post, array $request, bool $preview, string $return_path): array
{
- $post['self'] = true;
- $post['api_source'] = false;
- $post['attach'] = '';
- $post['title'] = trim($request['title'] ?? '');
- $post['body'] = $request['body'] ?? '';
- $post['location'] = trim($request['location'] ?? '');
- $post['coord'] = trim($request['coord'] ?? '');
+ $post['self'] = true;
+ $post['api_source'] = false;
+ $post['attach'] = '';
+ $post['title'] = trim($request['title'] ?? '');
+ $post['content-warning'] = trim($request['summary'] ?? '');
+ $post['sensitive'] = !empty($request['sensitive'] ?? false);
+ $post['body'] = $request['body'] ?? '';
+ $post['location'] = trim($request['location'] ?? '');
+ $post['coord'] = trim($request['coord'] ?? '');
$post = DI::contentItem()->addCategories($post, $request['category'] ?? '');
@@ -248,7 +241,7 @@ function item_process(array $post, array $request, bool $preview, string $return
$post['body'] .= DI::contentItem()->storeAttachmentFromRequest($request);
}
- $post = DI::contentItem()->finalizePost($post);
+ $post = DI::contentItem()->finalizePost($post, $preview);
if (!strlen($post['body'])) {
if ($preview) {
@@ -278,20 +271,32 @@ function item_process(array $post, array $request, bool $preview, string $return
$post['quote-uri-id'] = Item::getQuoteUriId($post['body'], $post['uid']);
$post['body'] = BBCode::removeSharedData(Item::setHashtags($post['body']));
$post['writable'] = true;
+ $post['sensitive'] = false;
+ $post['post-reason'] = Item::PR_LOCAL;
$o = DI::conversation()->render([$post], Conversation::MODE_SEARCH, false, true);
System::jsonExit(['preview' => $o]);
}
- Hook::callAll('post_local',$post);
+ $eventDispatcher = DI::eventDispatcher();
+
+ $hook_data = [
+ 'item' => $post,
+ ];
+
+ $hook_data = $eventDispatcher->dispatch(
+ new ArrayFilterEvent(ArrayFilterEvent::INSERT_POST_LOCAL, $hook_data)
+ )->getArray();
+
+ $post = $hook_data['item'] ?? $post;
unset($post['edit']);
unset($post['self']);
unset($post['api_source']);
if (!empty($request['scheduled_at'])) {
- $scheduled_at = DateTimeFormat::convert($request['scheduled_at'], 'UTC', DI::app()->getTimeZone());
+ $scheduled_at = DateTimeFormat::convert($request['scheduled_at'], 'UTC', DI::appHelper()->getTimeZone());
if ($scheduled_at > DateTimeFormat::utcNow()) {
unset($post['created']);
unset($post['edited']);
@@ -305,7 +310,7 @@ function item_process(array $post, array $request, bool $preview, string $return
}
if (!empty($post['cancel'])) {
- Logger::info('mod_item: post cancelled by addon.');
+ DI::logger()->info('mod_item: post cancelled by addon.');
if ($return_path) {
DI::baseUrl()->redirect($return_path);
}
@@ -332,12 +337,12 @@ function item_post_return($baseurl, $return_path)
$json['reload'] = $baseurl . '/' . $_REQUEST['jsreload'];
}
- Logger::debug('post_json', ['json' => $json]);
+ DI::logger()->debug('post_json', ['json' => $json]);
System::jsonExit($json);
}
-function item_content(App $a)
+function item_content()
{
if (!DI::userSession()->isAuthenticated()) {
throw new HTTPException\UnauthorizedException();
@@ -452,7 +457,7 @@ function drop_item(int $id, string $return = ''): string
item_redirect_after_action($item, $return);
//NOTREACHED
} else {
- Logger::warning('Permission denied.', ['local' => DI::userSession()->getLocalUserId(), 'uid' => $item['uid'], 'cid' => $contact_id]);
+ DI::logger()->warning('Permission denied.', ['local' => DI::userSession()->getLocalUserId(), 'uid' => $item['uid'], 'cid' => $contact_id]);
DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect('display/' . $item['guid']);
//NOTREACHED
diff --git a/mod/lostpass.php b/mod/lostpass.php
index 5eb53ae2f3..d62fd5f5aa 100644
--- a/mod/lostpass.php
+++ b/mod/lostpass.php
@@ -1,25 +1,12 @@
.
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*
*/
-use Friendica\App;
use Friendica\Core\Renderer;
use Friendica\Database\DBA;
use Friendica\DI;
@@ -27,7 +14,7 @@ use Friendica\Model\User;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Strings;
-function lostpass_post(App $a)
+function lostpass_post()
{
$loginame = trim($_POST['login-name']);
if (!$loginame) {
@@ -90,7 +77,7 @@ function lostpass_post(App $a)
DI::baseUrl()->redirect();
}
-function lostpass_content(App $a)
+function lostpass_content()
{
if (DI::args()->getArgc() > 1) {
$pwdreset_token = DI::args()->getArgv()[1];
diff --git a/mod/message.php b/mod/message.php
index d75fb240f0..f3a231601c 100644
--- a/mod/message.php
+++ b/mod/message.php
@@ -1,25 +1,13 @@
.
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*
*/
-use Friendica\App;
use Friendica\Content\Nav;
use Friendica\Content\Pager;
use Friendica\Content\Text\BBCode;
@@ -34,7 +22,7 @@ use Friendica\Util\DateTimeFormat;
use Friendica\Util\Strings;
use Friendica\Util\Temporal;
-function message_init(App $a)
+function message_init()
{
$tabs = '';
@@ -49,7 +37,7 @@ function message_init(App $a)
'accesskey' => 'm',
];
- $tpl = Renderer::getMarkupTemplate('message_side.tpl');
+ $tpl = Renderer::getMarkupTemplate('message_side.tpl');
DI::page()['aside'] = Renderer::replaceMacros($tpl, [
'$tabs' => $tabs,
'$new' => $new,
@@ -61,7 +49,7 @@ function message_init(App $a)
]);
}
-function message_post(App $a)
+function message_post()
{
if (!DI::userSession()->getLocalUserId()) {
DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
@@ -74,7 +62,7 @@ function message_post(App $a)
$body = !empty($_REQUEST['body']) ? Strings::escapeHtml(trim($_REQUEST['body'])) : '';
$recipient = !empty($_REQUEST['recipient']) ? intval($_REQUEST['recipient']) : 0;
- $ret = Mail::send($sender_id, $recipient, $body, $subject, $replyto);
+ $ret = Mail::send($sender_id, $recipient, $body, $subject, $replyto);
$norecip = false;
switch ($ret) {
@@ -104,7 +92,7 @@ function message_post(App $a)
}
}
-function message_content(App $a)
+function message_content()
{
$o = '';
Nav::setSelected('messages');
@@ -114,7 +102,7 @@ function message_content(App $a)
return Login::form();
}
- $myprofile = DI::baseUrl() . '/profile/' . $a->getLoggedInUserNickname();
+ $myprofile = DI::baseUrl() . '/profile/' . DI::userSession()->getLocalUserNickname();
$tpl = Renderer::getMarkupTemplate('mail_head.tpl');
if (DI::args()->getArgc() > 1 && DI::args()->getArgv()[1] == 'new') {
@@ -144,7 +132,7 @@ function message_content(App $a)
$cmd = DI::args()->getArgv()[1];
if ($cmd === 'drop') {
$message = DBA::selectFirst('mail', ['convid'], ['id' => DI::args()->getArgv()[2], 'uid' => DI::userSession()->getLocalUserId()]);
- if(!DBA::isResult($message)){
+ if (!DBA::isResult($message)) {
DI::sysmsg()->addNotice(DI::l10n()->t('Conversation not found.'));
DI::baseUrl()->redirect('message');
}
@@ -154,7 +142,7 @@ function message_content(App $a)
}
$conversation = DBA::selectFirst('mail', ['id'], ['convid' => $message['convid'], 'uid' => DI::userSession()->getLocalUserId()]);
- if(!DBA::isResult($conversation)){
+ if (!DBA::isResult($conversation)) {
DI::baseUrl()->redirect('message');
}
@@ -177,8 +165,8 @@ function message_content(App $a)
$tpl = Renderer::getMarkupTemplate('msg-header.tpl');
DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, [
- '$nickname' => $a->getLoggedInUserNickname(),
- '$linkurl' => DI::l10n()->t('Please enter a link URL:')
+ '$nickname' => DI::userSession()->getLocalUserNickname(),
+ '$linkurl' => DI::l10n()->t('Please enter a link URL:')
]);
$recipientId = DI::args()->getArgv()[2] ?? null;
@@ -191,7 +179,7 @@ function message_content(App $a)
'$to' => DI::l10n()->t('To:'),
'$subject' => DI::l10n()->t('Subject:'),
'$subjtxt' => $_REQUEST['subject'] ?? '',
- '$text' => $_REQUEST['body'] ?? '',
+ '$text' => $_REQUEST['body'] ?? '',
'$readonly' => '',
'$yourmessage' => DI::l10n()->t('Your message:'),
'$select' => $select,
@@ -220,7 +208,7 @@ function message_content(App $a)
$r = get_messages(DI::userSession()->getLocalUserId(), $pager->getStart(), $pager->getItemsPerPage());
if (!DBA::isResult($r)) {
- DI::sysmsg()->addNotice(DI::l10n()->t('No messages.'));
+ $o .= DI::l10n()->t('You have no messages.');
return $o;
}
@@ -235,7 +223,8 @@ function message_content(App $a)
$o .= $header;
- $message = DBA::fetchFirst("
+ $message = DBA::fetchFirst(
+ "
SELECT `mail`.*, `contact`.`name`, `contact`.`url`, `contact`.`thumb`
FROM `mail`
LEFT JOIN `contact` ON `mail`.`contact-id` = `contact`.`id`
@@ -254,11 +243,12 @@ function message_content(App $a)
if ($message['convid']) {
$sql_extra = "AND (`mail`.`parent-uri` = ? OR `mail`.`convid` = ?)";
- $params[] = $message['convid'];
+ $params[] = $message['convid'];
} else {
$sql_extra = "AND `mail`.`parent-uri` = ?";
}
- $messages_stmt = DBA::p("
+ $messages_stmt = DBA::p(
+ "
SELECT `mail`.*, `contact`.`name`, `contact`.`url`, `contact`.`thumb`
FROM `mail`
LEFT JOIN `contact` ON `mail`.`contact-id` = `contact`.`id`
@@ -282,12 +272,12 @@ function message_content(App $a)
$tpl = Renderer::getMarkupTemplate('msg-header.tpl');
DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, [
- '$nickname' => $a->getLoggedInUserNickname(),
- '$linkurl' => DI::l10n()->t('Please enter a link URL:')
+ '$nickname' => DI::userSession()->getLocalUserNickname(),
+ '$linkurl' => DI::l10n()->t('Please enter a link URL:')
]);
- $mails = [];
- $seen = 0;
+ $mails = [];
+ $seen = 0;
$unknown = false;
foreach ($messages as $message) {
@@ -297,18 +287,18 @@ function message_content(App $a)
if ($message['from-url'] == $myprofile) {
$from_url = $myprofile;
- $sparkle = '';
+ $sparkle = '';
} else {
$from_url = Contact::magicLink($message['from-url']);
- $sparkle = ' sparkle';
+ $sparkle = ' sparkle';
}
$from_name_e = $message['from-name'];
- $subject_e = $message['title'];
- $body_e = BBCode::convertForUriId($message['uri-id'], $message['body']);
- $to_name_e = $message['name'];
+ $subject_e = $message['title'];
+ $body_e = BBCode::convertForUriId($message['uri-id'], $message['body']);
+ $to_name_e = $message['name'];
- $contact = Contact::getByURL($message['from-url'], false, ['thumb', 'addr', 'id', 'avatar', 'url']);
+ $contact = Contact::getByURL($message['from-url'], false, ['thumb', 'addr', 'id', 'avatar', 'url']);
$from_photo = Contact::getThumb($contact);
$mails[] = [
@@ -333,7 +323,7 @@ function message_content(App $a)
$parent = '';
$tpl = Renderer::getMarkupTemplate('mail_display.tpl');
- $o = Renderer::replaceMacros($tpl, [
+ $o = Renderer::replaceMacros($tpl, [
'$thread_id' => DI::args()->getArgv()[1],
'$thread_subject' => $message['title'],
'$thread_seen' => $seen,
@@ -342,19 +332,19 @@ function message_content(App $a)
'$unknown_text' => DI::l10n()->t("No secure communications available. You may be able to respond from the sender's profile page."),
'$mails' => $mails,
// reply
- '$header' => DI::l10n()->t('Send Reply'),
- '$to' => DI::l10n()->t('To:'),
- '$subject' => DI::l10n()->t('Subject:'),
- '$subjtxt' => $message['title'],
- '$readonly' => ' readonly="readonly" style="background: #BBBBBB;" ',
- '$yourmessage' => DI::l10n()->t('Your message:'),
- '$text' => '',
- '$select' => $select,
- '$parent' => $parent,
- '$upload' => DI::l10n()->t('Upload photo'),
- '$insert' => DI::l10n()->t('Insert web link'),
- '$submit' => DI::l10n()->t('Submit'),
- '$wait' => DI::l10n()->t('Please wait')
+ '$header' => DI::l10n()->t('Send Reply'),
+ '$to' => DI::l10n()->t('To:'),
+ '$subject' => DI::l10n()->t('Subject:'),
+ '$subjtxt' => $message['title'],
+ '$readonly' => ' readonly="readonly" style="background: #BBBBBB;" ',
+ '$yourmessage' => DI::l10n()->t('Your message:'),
+ '$text' => '',
+ '$select' => $select,
+ '$parent' => $parent,
+ '$upload' => DI::l10n()->t('Upload photo'),
+ '$insert' => DI::l10n()->t('Insert web link'),
+ '$submit' => DI::l10n()->t('Submit'),
+ '$wait' => DI::l10n()->t('Please wait')
]);
return $o;
@@ -409,18 +399,15 @@ function get_messages(int $uid, int $start, int $limit): array
LEFT JOIN `contact` c ON m.`contact-id` = c.`id`
WHERE m.`uid` = ?
ORDER BY m2.`mailcreated` DESC
- LIMIT ?, ?'
- , $uid, $uid, $start, $limit));
+ LIMIT ?, ?', $uid, $uid, $start, $limit));
}
function render_messages(array $msg, string $t): string
{
- $a = DI::app();
-
- $tpl = Renderer::getMarkupTemplate($t);
+ $tpl = Renderer::getMarkupTemplate($t);
$rslt = '';
- $myprofile = DI::baseUrl() . '/profile/' . $a->getLoggedInUserNickname();
+ $myprofile = DI::baseUrl() . '/profile/' . DI::userSession()->getLocalUserNickname();
foreach ($msg as $rr) {
if ($rr['unknown']) {
@@ -431,7 +418,7 @@ function render_messages(array $msg, string $t): string
$participants = DI::l10n()->t("%s and You", $rr['from-name']);
}
- $body_e = $rr['body'];
+ $body_e = $rr['body'];
$to_name_e = $rr['name'];
if (is_null($rr['url'])) {
@@ -439,7 +426,7 @@ function render_messages(array $msg, string $t): string
continue;
}
- $contact = Contact::getByURL($rr['url'], false, ['thumb', 'addr', 'id', 'avatar', 'url']);
+ $contact = Contact::getByURL($rr['url'], false, ['thumb', 'addr', 'id', 'avatar', 'url']);
$from_photo = Contact::getThumb($contact);
$rslt .= Renderer::replaceMacros($tpl, [
diff --git a/mod/notes.php b/mod/notes.php
index 554429d0ec..478e4c4aca 100644
--- a/mod/notes.php
+++ b/mod/notes.php
@@ -1,25 +1,12 @@
.
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*
*/
-use Friendica\App;
use Friendica\Content\Conversation;
use Friendica\Content\Nav;
use Friendica\Content\Pager;
@@ -29,7 +16,7 @@ use Friendica\Model\Item;
use Friendica\Model\Post;
use Friendica\Module\BaseProfile;
-function notes_init(App $a)
+function notes_init()
{
if (! DI::userSession()->getLocalUserId()) {
return;
@@ -39,14 +26,16 @@ function notes_init(App $a)
}
-function notes_content(App $a, bool $update = false)
+function notes_content(bool $update = false)
{
+ $contactId = DI::appHelper()->getContactId();
+
if (!DI::userSession()->getLocalUserId()) {
DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return;
}
- $o = BaseProfile::getTabsHTML('notes', true, $a->getLoggedInUserNickname(), false);
+ $o = BaseProfile::getTabsHTML('notes', true, DI::userSession()->getLocalUserNickname(), false);
if (!$update) {
$o .= '
-EOF;
-
-}
-?>
-
-
-
\ No newline at end of file
diff --git a/mods/home.html b/mods/home.html
index b881cf8ff2..7521f4e3e1 100644
--- a/mods/home.html
+++ b/mods/home.html
@@ -12,7 +12,7 @@
What other networks does it interact with?
-
Every network that speaks either the DFRN2, ActivityPub, OStatus or diaspora* protocol. Currently this list includes: diaspora*, friendica, funkwhale, ganggo, GNU social, Hubzilla, Mastodon, NextClout social, pixelfed, Pleroma, postActivi, Osada, Socialhome and many more.
+
Every network that speaks either the DFRN2, ActivityPub or diaspora* protocol. Currently this list includes: diaspora*, friendica, funkwhale, ganggo, GNU social, Hubzilla, Mastodon, NextClout social, pixelfed, Pleroma, Socialhome and many more.