snac2

Fork of https://codeberg.org/grunfink/snac2
git clone https://git.inz.fi/snac2
Log | Files | Refs | README | LICENSE

RELEASE_NOTES.md (44849B)


      1 # Release Notes
      2 
      3 ## UNRELEASED
      4 
      5 Fixed regression while sending email via pipe on OpenBSD.
      6 
      7 Fixed Markdown parsing when the URL has parenthesis.
      8 
      9 Always show the 'pending follow confirmations' section if there are any (even if the toggle is off).
     10 
     11 If a metadata value is an account handler, it's also tried to be validated (rel="me" links).
     12 
     13 Another search by URL tweak (this time for Pixelfed links).
     14 
     15 ## 2.78
     16 
     17 Hashtag following also allow URLs to RSS feeds of ActivityPub objects (like e.g. https://mastodon.social/tags/ThankYouTuesday).
     18 
     19 Users can now configure a webhook to receive an HTTP POST for every notification. This can be useful for implementing bots that react to activities, like autorepliers, chatbots or interactive textual games (see `snac(1)` for more information).
     20 
     21 The number of pending follow confirmations is shown next to the "people" link.
     22 
     23 Faster performance metrics (contributed by dandelions).
     24 
     25 Improved lowercasing in hashtags (contributed by postscriptum).
     26 
     27 A search-by-url tweak for implementations that return 200 for invalid webfinger queries (e.g. piefed).
     28 
     29 Mastodon API: added follow confirmation endpoints, fixed collisions in attachment file names.
     30 
     31 Fixed potential crashes in attachment uploads.
     32 
     33 ## 2.77 "Ugly Links Everywhere"
     34 
     35 As they look confusing in some platforms, links in content posts are no longer included as `Link` attachments.
     36 
     37 ## 2.76
     38 
     39 Added Webmention support for links (Markdown-style or direct) written in a post.
     40 
     41 Added new command-line options for list maintenance.
     42 
     43 Display custom emoji in more places (contributed by dandelions).
     44 
     45 Mastodon API: fixed infinite scroll in many clients (thanks to cheeaun for giving me the clue), added `/api/v1/accounts/.../lists` endpoint (contributed by dandelions).
     46 
     47 Email notifications can now be sent via `libcurl` SMTP instead of spawning the `/usr/sbin/sendmail` program. To use this new feature, some additional server configuration is needed, see `snac(8)` (contributed by shtrophic).
     48 
     49 ## 2.75 "Time Is On My Side"
     50 
     51 Added support for scheduled posts (for this to work correctly, users will have to set their time zone, see below).
     52 
     53 The user can now select a working time zone. This will be used to correctly parse the local date and time of a scheduled post.
     54 
     55 Fixed incorrect poll vote format, which was causing problems in platforms like GotoSocial.
     56 
     57 Mastodon API: added support for `/api/v1/instance/peers`.
     58 
     59 Added a new `snac-admin` helper script (contributed by shtrophic).
     60 
     61 In the web UI, posts are separated by the `<hr hidden>` tag; it's invisible in graphical browsers, but it separates post clearly in text-based browsers.
     62 
     63 Some Finnish, Spanish, Czech and Russian translation updates and fixes.
     64 
     65 ## 2.74 "The Days of Nicole, the Fediverse Chick"
     66 
     67 Added Spanish (default, Argentina and Uruguay) translation (contributed by gnemmi).
     68 
     69 Added Czech translation (contributed by pmjv).
     70 
     71 Added Brazilian Portuguese translation (contributed by daltux).
     72 
     73 Added Finnish translation (contributed by inz).
     74 
     75 Added French translation (contributed by Popolon).
     76 
     77 Added Russian translation (contributed by sn4il).
     78 
     79 Added Chinese translation (contributed by mistivia).
     80 
     81 Added German translation (contributed by zen and Menel).
     82 
     83 Added Greek translation (contributed by uhuru).
     84 
     85 Added Italian translation (contributed by anzu).
     86 
     87 Mastodon API: added support for `/api/v1/custom_emojis` (contributed by violette).
     88 
     89 Improved Undo+Follow logic (contributed by rozenglass).
     90 
     91 Reverted (temporarily) the Markdown code that converted text between underscores to italics, because it was causing more problems that what it was worth.
     92 
     93 Fixed bug in bookmark CSV import.
     94 
     95 Don't indent Twitter-like "threads" (i.e. chains of short posts from the same author that are self-replies).
     96 
     97 ## 2.73
     98 
     99 Added support for customizing and translating the web UI language via simple `.po` files. For more information on how to install language files or create new ones, please see `snac(8)` (the administrator manual).
    100 
    101 New user support for blocking hashtags from the web UI.
    102 
    103 The `Content-Security-Policy` HTTP header is now always sent to disable any JavaScript, instead of just being suggested in the documentation.
    104 
    105 Image attachments in SVG format are now disabled by default; you can enable them back by setting the `enable_svg` value to `true` in `server.json`.
    106 
    107 Several fixes (contributed by inz).
    108 
    109 ## 2.72
    110 
    111 Each post can have more than one attachment from the web UI. The maximum number can be configured in `server.json` via the `max_attachments` value (default: 4).
    112 
    113 Each notification includes a link labelled `Context`, that leads to a page with the full conversation tree the post is a part of.
    114 
    115 Each followed hashtag has now a directly accesible link.
    116 
    117 Fixed a search bug (some matches were missed).
    118 
    119 Fixed more crashes (contributed by inz).
    120 
    121 Fixed link detection in posts (contributed by inz).
    122 
    123 Allow multiple editors for command-line posts (contributed by inz).
    124 
    125 Separated maximum and default timeline entry count, allowing larger timelines to be requested without having to increase the default (contributed by lxo).
    126 
    127 Turned message date into a link to the local post, so that it can be loaded into a separate tab for interacting with (contributed by lxo).
    128 
    129 Special thanks to fellow developer inz for bringing my attention to code places where I should have been more careful.
    130 
    131 ## 2.71
    132 
    133 Fixed memory leak (contributed by inz).
    134 
    135 Fixed crash.
    136 
    137 ## 2.70
    138 
    139 Notifications are now shown in a more compact way (i.e. all reactions are shown just above your post, instead of repeating the post *ad nauseam* for every reaction).
    140 
    141 New command-line option `unmute` to, well, no-longer-mute an actor.
    142 
    143 The private timeline now includes an approximate mark between new posts and "already seen" ones.
    144 
    145 Fixed a spurious 404 error in the instance root URL for some configurations.
    146 
    147 ## 2.69 "Yin/Yang of Love"
    148 
    149 Added support for subscribing to LitePub (Pleroma-style) Fediverse Relays like e.g. https://fedi-relay.gyptazy.com to improve federation. See `snac(8)` (the Administrator Manual) for more information on how to use this feature.
    150 
    151 Added support for following hashtags. This is only useful if your instance is subscribed to relays (see above).
    152 
    153 Added support for a Mastodon-like `/authorize_interaction` webpoint entry, that allows following, liking and boosting from another account's Mastodon public web interface. To be able to use it, you must reconfigure your https proxy to redirect `/authorize_interaction` to snac (see `snac(8)`).
    154 
    155 Some fixes to accept `Event` objects properly (like those coming from implementations like https://gancio.org/ or https://mobilizon.fr).
    156 
    157 Added some caching for local `Actor` objects.
    158 
    159 Hashtags that are not explicitly linked in a post's content are shown below it.
    160 
    161 Fixed broken NetBSD build (missing dependency in Makefile.NetBSD).
    162 
    163 The user profile can now include longitude and latitude data for your current location.
    164 
    165 Mastodon API: implemented limit= on notification fetches (contributed by nowster), implemented faster min_id handling (contributed by nowster), obey the quiet public visibility set for posts, other timeline improvements (contributed by nowster).
    166 
    167 Reduced RSA key size for new users from 4096 to 2048. This will be friendlier to smaller machines, and everybody else out there is using 2048.
    168 
    169 If the `SNAC_BASEDIR` environment variable is defined and set to the base directory of your installation, you don't have to include the base directory in the command line.
    170 
    171 Fixed a bug in the generation of the top page (contributed by an-im-dugud).
    172 
    173 Added support for Markdown headers and underlining (contributed by an-im-dugud).
    174 
    175 ## 2.68
    176 
    177 Fixed regression in link verification code (contributed by nowster).
    178 
    179 Added ipv6 support for the https frontend connection (contributed by hb9hnt).
    180 
    181 New "Like by URL" operation (contributed by dheadshot).
    182 
    183 Added support for a Mastodon-like `/share` link sharing URL, like the one provided by sites like https://mastodonshare.com/ and such. To be able to use it, you must reconfigure your https proxy to redirect `/share` to snac (see `snac(8)`).
    184 
    185 New linux landlock (sandboxing) support for enhanced security (contributed by shtrophic). It's still a bit experimental, so you have to enable it explicitly by recompiling with the WITH_LINUX_SANDBOX directive (e.g. `make CFLAGS=-DWITH_LINUX_SANDBOX`).
    186 
    187 Some search fixes regarding repeated matches.
    188 
    189 The `export_csv` cmdline operation now exports the CSV files inside a user's `export/` subdirectory instead of the current directory.
    190 
    191 All CSV files to be imported must now be stored inside a user's `import/` subdirectory instead of the current directory.
    192 
    193 Mastodon API: more timeline paging tunings (contributed by nowster), post language selected in apps is properly set.
    194 
    195 The command-line operation `note` new reads the `LANG` environment variable to set the post's language.
    196 
    197 A new command-line operation, `note_unlisted`, allows posting "unlisted" or "quiet public" posts.
    198 
    199 The maximum number of entries in users' RSS feeds and in outboxes can now be set via the `max_public_entries` variable in the `server.json` file.
    200 
    201 Fixed broken support for `Audio` objects.
    202 
    203 Made xmpp and mailto URLs clickable.
    204 
    205 ## 2.67
    206 
    207 The search box also accepts post URLs; the post is requested and, if it's found, can be interacted with (liked, boosted, replied to, etc.).
    208 
    209 IP addresses for failed logins are tracked and throttled to mitigate brute force attacks (see `snac(8)` for more information).
    210 
    211 Fixed a bug regarding repeated attachments when editing a post.
    212 
    213 Mastodon API: Improved timeline pagination in some clients (details: an HTTP `Link` header has been added), fixed missing audio attachments, fixed an incorrect value for the `bot` field in newly created accounts, fixed a crash, implemented markers (contributed by nowster).
    214 
    215 When running in server mode, the pidfile is locked to avoid concurrent running of the same server instance.
    216 
    217 Added documentation and some tweaks to enable static compilation with musl (contributed by Shamar).
    218 
    219 ## 2.66
    220 
    221 As many users have asked for it, there is now an option to make the number of followed and following accounts public (still disabled by default). These are only the numbers; the lists themselves are never published.
    222 
    223 Some fixes to blocked instances code (posts from them were sometimes shown).
    224 
    225 Fixed non-appearing buttons `Approve` and `Discard` if the account requesting a follow were being followed.
    226 
    227 ## 2.65
    228 
    229 Added a new user option to disable automatic follow confirmations (follow requests must be manually approved from the people page).
    230 
    231 The search box also searches for accounts (via webfinger).
    232 
    233 New command-line action `import_list`, to import a Mastodon list in CSV format (so that [Mastodon Follow Packs](https://mastodonmigration.wordpress.com/?p=995) can be directly used).
    234 
    235 New command-line action `import_block_list`, to import a Mastodon list of accounts to be blocked in CSV format.
    236 
    237 ## 2.64
    238 
    239 Some tweaks for better integration with https://bsky.brid.gy (the BlueSky bridge by brid.gy).
    240 
    241 A corner case bug in the media proxying code has been fixed.
    242 
    243 Hashtags can now include underscores.
    244 
    245 The server now creates a pidfile inside the data directory.
    246 
    247 Mastodon API: fixed a crash in the notification code, fixed autocapitalization in the OAuth login field (contributed by fkooman).
    248 
    249 ## 2.63
    250 
    251 The server can now act as a proxy for all image, audio or video media coming from other account's posts (both from the Web UI and the Mastodon API). This way, other servers will see media requests coming from the server IP, not the user's, improving privacy. This is controlled by setting the `proxy_media` boolean field to `server.json` to true.
    252 
    253 The `strict_public_timelines` option introduced in the previous release now works correctly.
    254 
    255 Fixed a crash when posting from the links browser.
    256 
    257 Fixed some repeated images from Lemmy posts.
    258 
    259 Fixed a crash when posting an image from the tooot mobile app.
    260 
    261 Updated FreeBSD rc script: the server process is now managed by the daemon(8) utility (contributed by @stefano@bsd.cafe).
    262 
    263 RSS feeds are now in 2.0 version instead of 0.91.
    264 
    265 ## 2.62
    266 
    267 Added a new user option to collapse top level threads by default.
    268 
    269 Added a new `disable_block_notifications` boolean field to `server.json` to disable the notifications of Block activities.
    270 
    271 Added a new `strict_public_timelines` boolean field to `server.json` to only show an account's posts and boosts (no trees) in public timelines.
    272 
    273 Fixed repeated images in posts from some implementations (those that include an image both as an attachment and as an `<img>` tag inside the post content).
    274 
    275 Added a small HTML/CSS tweak to improve post previews from some implementations (contributed by nyanide).
    276 
    277 Notifications for `EmojiReact` activities now show the emoji.
    278 
    279 New command-line action `insert`, to insert a post by its URL in a user's timeline.
    280 
    281 Fixed bad processing/rendering of URLs with two or more @ symbols.
    282 
    283 ## 2.61
    284 
    285 Migration from a Mastodon account to a snac one has been implemented. Please see `snac(8)` (the administrator manual) for more information.
    286 
    287 Mastodon API: fixed `timelines/public` (it was showing less posts that it should).
    288 
    289 Fixed over-zealous caching to the public timeline.
    290 
    291 Some HTML tweaks and fixes to the web interface.
    292 
    293 ## 2.60
    294 
    295 Migration from a snac account to a Mastodon one has been implemented. Please see `snac(8)` (the administrator manual) for more information.
    296 
    297 Fixed a bug in argument parsing regarding some special characters (contributed by ndagestad).
    298 
    299 Fixed image emojis in the public profile bio.
    300 
    301 ## 2.59
    302 
    303 Added post drafts: new or edit post edition dialogs include a checkbox that will cause the message to not be posted, but stored in a list of drafts, directly accesible from the private timeline. From that list, drafts can be edited and definitely posted (or re-stored as a draft for later editing).
    304 
    305 Fixed a bug that caused `Block` notifications to not be shown properly.
    306 
    307 Fixed crash in a corner case of the URL parameter parsing code.
    308 
    309 ## 2.58
    310 
    311 Search by content also looks into alt-text from attachments (images, videos, etc.).
    312 
    313 Search by content is case insensitive for all Unicode-supported alphabets (previously was only for ASCII characters).
    314 
    315 Added support for bookmarking posts.
    316 
    317 Fixed a failed compilation under Solaris/Illumos.
    318 
    319 The actor `Person` object now includes a `featured` property, that returns the list of pinned posts.
    320 
    321 The delete post button can now be hidden server-wise (it's not very useful and clutters the space).
    322 
    323 The lists of pinned and bookmarked posts are directly accesible from the private timeline.
    324 
    325 ## 2.57
    326 
    327 Added support for listening on UNIX-like sockets.
    328 
    329 Don't allow empty polls.
    330 
    331 Added support for Markdown-style images (converted to attachments) and strikethrough text.
    332 
    333 Added support for incoming `Move` messages: when received, the new account is followed and the old one is unfollowed.
    334 
    335 Incoming `EmojiReact` messages are internally converted to `Like` (more proper support will happen eventually).
    336 
    337 Blocks are also notified.
    338 
    339 Mastodon API: fixed a cache bug when following local users.
    340 
    341 ## 2.56
    342 
    343 Don't show instance announcements in public timelines (contributed by sarahpw).
    344 
    345 Added auto boosting. If an account has this flag enabled, all mentions to that account are automatically boosted to all its followers (contributed by sarahpw).
    346 
    347 Fixed typos in manpages (contributed by sergiodj).
    348 
    349 Some minor performance improvements (contributed by Claire).
    350 
    351 ## 2.55
    352 
    353 Mastodon API: fixed a last-minute bug that broke some API functions.
    354 
    355 ## 2.54
    356 
    357 Markdown-style links are now supported.
    358 
    359 The alt text in attachments that have one is also shown in a dropdown just below it (useful for environments where mouseover is not available, i.e. for phones and tablets).
    360 
    361 Instance-wide notifications has been implemented (contributed by louis77). A small tweak to the default CSS was made to suit this change; please consider updating your style.css (see doc/style.css as an example).
    362 
    363 The avatar and/or the header images can now be deleted (contributed by louis77).
    364 
    365 Code cleaning: HTTP status codes use names instead of hardcoded integers (contributed by louis77).
    366 
    367 Mastodon API: fixed login problems with the official Mastodon API, IceCube and Toot! on iOS, some fixes for Mona and Tokodon apps, user credentials can now be edited from apps (all contributed by louis77), fixed crash on unset content-type header.
    368 
    369 The webfinger content-type response header is now RFC-compliant (contributed by steve-bate).
    370 
    371 Improved support for the HTTP OPTIONS method, allowing sites like https://mastodonlistmanager.org to work.
    372 
    373 Fixed non-working content warnings in the public instance timeline.
    374 
    375 ## 2.53
    376 
    377 New user feature to search by post content (using regular expressions) or tag.
    378 
    379 Added some (partial) support for `Event` object types.
    380 
    381 Minor fixes: Allow unboosting your own posts (contributed by khm), CSS fixes for the Dillo browser (contributed by kvibber).
    382 
    383 ## 2.52
    384 
    385 Posts that were liked or boosted can now be unliked and unboosted.
    386 
    387 Outgoing message timeouts are no longer hardcoded and can be configured (see `snac(8)` for more information).
    388 
    389 Fixed a bug that caused some incorrect unfollows under special conditions (with shared inboxes enabled and users from the same instance that follow each other, the internal message distributor was confused).
    390 
    391 Mastodon API: Added support for lists.
    392 
    393 Added a header to avoid over-zealous caching in some browsers (contributed by louis77).
    394 
    395 Added support for running and federating inside hidden networks like Tor, I2P or Loki (contributed by iwojima).
    396 
    397 Fixed an error processing polls coming from Pleroma instances.
    398 
    399 ## 2.51
    400 
    401 Support for custom Emojis has been added; they are no longer hardcoded, but read from the `emojis.json` file at the server base directory. Also, they are no longer limited to string substitutions, but images as external URLs are also supported (see `snac(8)` for more information).
    402 
    403 Fixed a bug that caused some notifications to be lost when coming from a user in the same instance.
    404 
    405 Added an additional check for blocked instances (sometimes, posts from blocked sites that were ancestors of legit posts were 'leaking' into the timeline).
    406 
    407 On OpenBSD, if the `disable_email_notifications` server flag is set to `true`, `unveil()` is not called for the execution of the `/usr/sbin/sendmail` binary and `pledge()` doesn't set the `exec` promise.
    408 
    409 ## 2.50
    410 
    411 Incoming posts can now be filtered out by content using regular expressions on a server level (these regexes are written in the `filter_reject.txt` file at the server base directory; see `snac(5)` and `snac(8)`).
    412 
    413 Improved page position after hitting the `Hide` or `MUTE` buttons (for most cases).
    414 
    415 Use a shorter maximum conversation thread level (also, this maximum value is now configurable at compilation level with the `MAX_CONVERSATION_LEVELS` define).
    416 
    417 Fixed a bug where editing a post made the attached media or video to be lost.
    418 
    419 The way of refreshing remote actor data has been improved.
    420 
    421 Posting from the command-line now allows attachments.
    422 
    423 Added defines for time to enable MacOS builds (contributed by andypiper).
    424 
    425 ## 2.49
    426 
    427 Mastodon API: Fixed a bug in how validated links are reported.
    428 
    429 Mastodon API: Fixed a bug in search by account.
    430 
    431 Mastodon API: Fixed missing `Video` type objects in timelines.
    432 
    433 Mastodon API: Added search by hashtag.
    434 
    435 Some cosmetic fixes to the web interface.
    436 
    437 ## 2.48
    438 
    439 A new instance page, that shows all posts by users in the same instance (like the public instance timeline, but interactive). This will help building communities.
    440 
    441 Follower-only replies to unknown users are not shown in timelines.
    442 
    443 Added verification of metadata links: if the linked page contains a link back to the snac user with a rel="me" attribute, it's marked as verified.
    444 
    445 Added a new server-level configuration parameter: `min_account_age`. If this value (in seconds) is set in `server.json`, any activity coming from accounts that were created newer than that will be discarded. This can be used to mitigate spam.
    446 
    447 Added a profile-page relation to links in webfinger responses (contributed by khm).
    448 
    449 Fixed some regressions and a crash.
    450 
    451 ## 2.47
    452 
    453 Added pagination to the notification page.
    454 
    455 The *New Post...* option now includes an optional field to set the URL of an ActivityPub post to be a reply to.
    456 
    457 Fixed spurious notifications from the same user.
    458 
    459 Fixed repeated mentions in the reply text field.
    460 
    461 One-post only pages include the post content instead of the user bio in their metadata (improving post previews from other software).
    462 
    463 Mastodon API: Added support for timelines by tag (for sites like e.g. https://fediwall.social to work).
    464 
    465 ## 2.46
    466 
    467 Added support for Peertube videos.
    468 
    469 Mastodon API: Tweaks to support the Subway Tooter app (contributed by pswilde), added support for editing posts, fixed an error related to the edit date of a post, fixed some crashes.
    470 
    471 Added a handshake emoji next to a user name if it's a mutual relation (follower and followed), because friendship is bliss.
    472 
    473 Tweaked some retry timeout values for better behaviour in larger instances (thanks to me@mysmallinstance.homelinux.org for their help).
    474 
    475 ## 2.45
    476 
    477 Fixed a collision in webfinger caching. This may affect federation with some software, so I recommend an upgrade.
    478 
    479 Fixed crashes in some command-line options.
    480 
    481 New command-line option `state`, that dumps some information about the running server and the state of each thread (note: this feature uses shared memory blocks and you may need an argument to the `make` call in older Linux distributions; please see the `README` file for details).
    482 
    483 Fixed a bug that may leave an inconsistent state for a followed actor in a special case of repeated messages.
    484 
    485 Mastodon API: added some fixes for integration with the Mona iOS app (contributed by jamesoff).
    486 
    487 Added support for ntfy notifications, both using a self-hosted server or the official ntfy.sh (contributed by Stefano Marinelli).
    488 
    489 ## 2.44
    490 
    491 Fixed a nasty bug that caused the in-memory output queue to be corrupted under heavy traffic loads. This is a good reason to upgrade (thanks to Víctor Moral and Stefano Marinelli for helping me in fixing this).
    492 
    493 Shared inboxes are now supported. This is not a user visible feature (hopefully, they will not feel any change), but it will significantly improve traffic for snac instances with many users and will open room for new features that are only feasible with these kind of input channels (this is not enabled by default; see `snac(8)`).
    494 
    495 I've refactored all HTML code because it was somewhat of a mess; now it's much more maintainable (at least for me). I think I haven't broken anything.
    496 
    497 Fixed crash in a special case of malformed query.
    498 
    499 Mastodon API: some tweaks for better integration with more clients, and fixed a crash when processing boosts from kbin.
    500 
    501 Fixed crash in the FastCGI code (thanks to Yonle for helping me debug this).
    502 
    503 Added apache2 configuration information (contributed by Víctor Moral).
    504 
    505 Added FreeBSD and NetBSD setup information and examples (contributed by draga79).
    506 
    507 ## 2.43
    508 
    509 Tags in posts are now indexed and searching by tag is possible. It's still not very useful, but at least new user posts contain links that return real search-by-tag results. Also, no "re-indexing" of the previously stored data is done (only new local and remote posts will be searchable by tag).
    510 
    511 Added FastCGI support. This allows for simpler setups (e.g. on #OpenBSD, it's no longer necessary to enable and configure `relayd`, as the native `httpd` daemon includes FastCGI support).
    512 
    513 History can be disabled by administrators by setting the `disable_history` field to true.
    514 
    515 New command-line option `deluser`, to delete a user (including unfollowing everybody).
    516 
    517 Mastodon API: account lookups has been implemented.
    518 
    519 Fixed a minor memory leak :facepalm:
    520 
    521 Fixed some HTML errors :facepalm:
    522 
    523 ## 2.42
    524 
    525 It's now possible to add profile metadata.
    526 
    527 Accounts can be marked as 'private', so that they are not accesible from any non-authorized web UI (i.e. only through the Fediverse).
    528 
    529 Outgoing connections that fail with a timeout are retried with a higher timeout limit. But, if the instance keeps timing out, it's penalized by skipping one retry.
    530 
    531 If a post comes from a group or community (i.e. it has an `audience` field set), the buttons `Follow Group` or `Unfollow Group` are shown.
    532 
    533 Pinned posts are never (incorrectly) purged.
    534 
    535 Some RSS validation fixes.
    536 
    537 Mastodon API: some tweaks to better match Mastodon behaviour in timeline entries and boosted posts are correctly returned, and some fixes for crashes.
    538 
    539 Don't allow creating users which user name strings only differ in case. This was creating some problems (e.g. the webfinger interface doesn't allow case sensitivity).
    540 
    541 ## 2.41
    542 
    543 Added support for `Article` ActivityPub objects to correctly process reviews from #Bookwyrm instances and other similar software.
    544 
    545 Show `Link` objects that are image, audio or video media as if they were attachments.
    546 
    547 Added more aggressive caching to timelines and history files.
    548 
    549 The history at the end of the public page is listed in reverse chronological order.
    550 
    551 Mastodon API: minor fixes.
    552 
    553 Be more strict when serving note objects.
    554 
    555 Additional HTTP response headers can be defined by adding an `http_headers` object with header/content pairs into the `server.json` configuration file.
    556 
    557 If you hover the mouse pointer over a vote option in a pool, the current count (as per the last update) is shown. This may be considered cheating in some cases, so try to be honest (or not).
    558 
    559 The `nodeinfo` URL now returns more accurate information.
    560 
    561 ## 2.40
    562 
    563 Announces (boosts) can now be disabled/reenabled on a per-people basis (to limit those boost-trigger-happy friends from flooding your timeline). This is operated from the people page.
    564 
    565 It's now possible to show an instance timeline instead of the classic greeting static page at the base URL. This can be enabled by setting the `show_instance_timeline` field to `true` in the server configuration file. Other metadata fields can be set to add information to this page; please see `snac(8)` (the Administrator manual page) for details.
    566 
    567 Users can now upload an image (preferably in landscape mode) that will be shown as a banner in their public pages.
    568 
    569 Added hints to web UI buttons.
    570 
    571 Mastodon API: some minor fixes to allow the semaphore.social web client to work.
    572 
    573 Fixed miscalculation of the `votersCount` field in multiple-choice polls.
    574 
    575 DNS or TLS errors in outgoing connections are considered fatal errors and not retried.
    576 
    577 ## 2.39
    578 
    579 Added support for Follow confirmation messages that only return the follow request id (this fixes following Guppe channels).
    580 
    581 Fixed some Gotosocial ActivityPub compatibility (details: support fields like `tag` and `attachment` being single objects instead of arrays).
    582 
    583 Fixed ActivityPub outbox (it listed 'Note' objects instead of 'Create' activities).
    584 
    585 Show the 'audience' field (channel URL) if a post has one (like pages from lemmy channels and other forums).
    586 
    587 Some web UI tweaks: the new post field is hidden by default (wasting less screen space), added a 'back to top' link at the bottom of the page and other minor tuning to the HTML and default CSS (contributed by yonle).
    588 
    589 Fixed RSS (contributed by yonle).
    590 
    591 Fixed interactive text processes (like instance or user creating) by calling `fflush()` after printing text prompts (it was broken on systems that use musl like Alpine Linux).
    592 
    593 ## 2.38
    594 
    595 More vulnerability fixes (contributed by yonle).
    596 
    597 Added support for ActivityPub `Group` and `Page` objects. This allows subscribing to Lemmy channels and interacting with them.
    598 
    599 Confirmation messages to follow requests are sent as soon as possible (i.e. bypassing the usual output queue).
    600 
    601 Fixed crash when accessing some static or history objects.
    602 
    603 ## 2.37
    604 
    605 Fixed several XSS vulnerabilities (contributed by yonle).
    606 
    607 Fixed a bug that prevented working in systemd restricted environments (details: `mkdir()` failed if trying to set the setgid bit).
    608 
    609 ## 2.36
    610 
    611 Added proper HTTP caching when serving static files (attached images, avatars, etc.)
    612 
    613 Sensitive content messages can now have a summary.
    614 
    615 Added a way to block full instances (from the command-line tool, as I consider this to be an administration priviledge).
    616 
    617 If the user style.css does not exist, the server-wide one if served instead.
    618 
    619 Added support for pinning user posts. These posts are shown first in the public AND in the private timelines.
    620 
    621 Fixed some crashes on badly-formatted input messages.
    622 
    623 The image alt-text is also inserted in the 'title' attribute, so it's shown on mouse hover in browsers like Firefox (contributed by Haijo7).
    624 
    625 Some improvements to HTML sanitization.
    626 
    627 For polls, show the time left before it closes.
    628 
    629 Fixed a bug that prevented unfollows to be shown in the notification area.
    630 
    631 ## 2.35
    632 
    633 Fixed broken URL links with the # symbol on them.
    634 
    635 Fixed people-being-followed data loss after not logging in for a long time (actor objects were purged too soon).
    636 
    637 Fixed bug that made impossible to vote on polls that were replied to.
    638 
    639 Don't show 'ghost' no-longer-followers in the people list.
    640 
    641 When sanitizing HTML input, unsupported tags are deleted instead of escaped.
    642 
    643 Fixed crash on missing headers while checking signatures.
    644 
    645 Mastodon API: several bug fixes (contributed by Poesty), improved account object (contributed by Haijo7).
    646 
    647 There is new a user configuration setup checkbox to mark an account as a bot.
    648 
    649 ## 2.34
    650 
    651 Polls can now be created from the web interface.
    652 
    653 New Mastodon API features: polls are shown and can be voted on.
    654 
    655 The user@host identifier is now shown next to the user avatar (contributed by Haijo7). A small tweak to the default CSS was made to suit this change; please consider updating your style.css.
    656 
    657 Clicking on an image attachment opens it in a new tab (contributed by Haijo7).
    658 
    659 Bots are marked as such using an emoji (contributed by Haijo7).
    660 
    661 ## 2.33
    662 
    663 Polls (in #ActivityPub lingo, Questions) are shown and can be voted on. Creating a poll is not yet implemented, though.
    664 
    665 If an URL written in a post links to an image, it's converted to an attachment.
    666 
    667 Fixed a bug in the semaphore code that caused total hangs on OpenBSD.
    668 
    669 ## 2.32
    670 
    671 New user configuration switch to drop direct messages from people you don't follow, in order to mitigate spam from Mastodon open registration instances.
    672 
    673 When updating user information (e.g. the display name or the bio), the changes are also sent to the people being followed (so they have an updated description about who the user is).
    674 
    675 Mastodon API: account search has been implemented, so mention completion works from apps; new support for blocking users (this operation is called MUTE here).
    676 
    677 ## 2.31
    678 
    679 Fixed webfinger and curl issues, which crashed snac while trying to follow Mitra users (contributed by Poesty).
    680 
    681 Use named semaphores instead of anonymous ones, to make it work under MacOS (contributed by Saagar Jha).
    682 
    683 Fixed semaphore name conflicts (contributed by Poesty).
    684 
    685 Fix warning in ugly pointer substraction (contributed by Saagar Jha).
    686 
    687 Added user-agent to webfinger queries (contributed by Poesty).
    688 
    689 Mastodon API: implemented notification type filters, fixed (partially) the issue with mentions without server.
    690 
    691 ## 2.30
    692 
    693 Fixed a bug that made some notifications to be missed.
    694 
    695 New Mastodon API features: the instance public timeline is now a real one, unfavourite / unreblog is supported (somewhat). Some regression bugs regarding image posting were also fixed.
    696 
    697 The non-standard `Ping` and `Pong` #ActivityPub activities have been implemented as proposed by @tedu@honk.tedunangst.com in the https://humungus.tedunangst.com/r/honk/v/tip/f/docs/ping.txt document (with a minor diversion: retries are managed in the same way as the rest of #snac messages).
    698 
    699 The build process now includes the `-Wextra` flag.
    700 
    701 ## 2.29
    702 
    703 New Mastodon API features: account search, relationships (so the Follow/Unfollow buttons now appear for each account), follow and unfollow accounts, an instance-level timeline (very kludgy), custom emojis for accounts and statuses, many bug fixes (sadly, the Mastodon official app still does not work).
    704 
    705 ## 2.28
    706 
    707 Added a new notification area to the web interface, accessible from a link at the top, that also shows the number of unseen events. This area lists all notifications in reverse chronological order and provides a button to clear all.
    708 
    709 More work in the Mastodon API. The new supported features are: notifications, post of new and reply messages (including attached images). Some API v2 entry points had to be implemented, so you'll need to update your HTTPS proxy configuration again, see `snac(8)`. #Tusky no longer crashes, or so I think. The official app and close relatives like #Megalodon still don't work, though.
    710 
    711 If you are not interested in this Mastodon API crap, you can compile it out of your #snac by defining the `NO_MASTODON_API` preprocessor directive and forget about it.
    712 
    713 Fixed an HTML cache bug (it was not refreshed after editing a post).
    714 
    715 ## 2.27
    716 
    717 Started Mastodon API support, so you can use Mastodon-compatible apps to access #snac accounts. What works so far: login, private and public timelines, full post information (replies and ancestors), liking and boosting posts. Things that don't work yet but eventually will: following accounts, posting and replying to messages (I still have to figure out how some things work, like posting images), notifications (needs some internal support), the instance timeline (snac does not have one, but it can be simulated with not much effort) and probably many other things. Things that will never work: bookmarks, pinning, a federated timeline, many other things that I don't remember right now. Please note that if you want to use this API in your instance, you must add some lines to your HTTP proxy configuration, see the `snac(8)` (administrator documentation) manual page. I'm doing my tests using the #Tusky (which sometimes crashes, surely my fault), #AndStatus, #Fedilab and #Husky Android apps. Success or failure reports will be appreciated.
    718 
    719 Fixed some buffer overflows (contributed by Saagar Jha).
    720 
    721 Fixed overzealous rejection of some local boosts.
    722 
    723 ## 2.26
    724 
    725 The OpenSSL code has been refactored to avoid using deprecated functions.
    726 
    727 Added more aggressive filtering on unwanted `Announce` (boost) messages.
    728 
    729 ## 2.25
    730 
    731 Federation with other instances have been improved by collecting shared inbox information from input messages more thoroughly.
    732 
    733 Fixed an obscure bug that caused connection rejections from some instances.
    734 
    735 Some rules regarding incoming messages have been tightened; messages that are not related to the user are not added to the timeline. This has to be implemented because some ill-behaving ActivityPub implementations were found injecting unwanted messages to user inboxes.
    736 
    737 Messages from MUTEd users are rejected as soon as possible with a 403 Forbidden HTTP status.
    738 
    739 Fixed a minor bug regarding the scope of the 'Update' activity (edited posts were sent to more recipients that it should).
    740 
    741 More aggressive input sanitization (some posts were found that included strange ASCII control codes).
    742 
    743 Added "Open Graph" HTML meta tags for better previsualization of `snac` links from other social media.
    744 
    745 ## 2.24
    746 
    747 Sending non-public messages is now much easier: a checkbox to post a message to only those people mentioned in the message body has been added.
    748 
    749 Fixed an over-optimization bug that caused some mentioned recipients to be skipped.
    750 
    751 Added some new administrator tweaks: email notifications can be globally disabled.
    752 
    753 ## 2.23
    754 
    755 The user avatar can now be uploaded (instead of given as an URL).
    756 
    757 Minor speed improvements int output messages.
    758 
    759 Minor improvements in error logging.
    760 
    761 ## 2.22
    762 
    763 Fixed a bug with the Delete button in the web interface: sometimes, instead of the post (as the user intended), the follower was deleted instead :facepalm:
    764 
    765 Fixed a bug in the command-line option `follow` (and probably others), that made it fail silently if there was no running server.
    766 
    767 Fixed a crash under OpenBSD (a recent change needed a new permission to the `pledge()` call that was forgotten).
    768 
    769 ## 2.21
    770 
    771 Users can now specify an expire time for the entries in their timelines (both their own and others').
    772 
    773 Added support for sending notifications (replies, follows, likes, etc.) via Telegram.
    774 
    775 Followers can now be deleted (from the *people* page in the web interface). Yes, to stop sending in vain your valuable and acute posts to those accounts that disappeared long ago and flood the log with connection errors.
    776 
    777 The internal way of processing connections have been rewritten to be more efficient or, as technical people say, "scalable". This way, `snac` is much faster in processing outgoing connections and less prone to choke on an avalanche of incoming messages. This is a big step towards the secret and real purpose of the creation of this software: being able to host the account of #StephenKing when he finally leaves that other site.
    778 
    779 The `note` action from the command-line tool can also accept the post content from the standard input.
    780 
    781 ## 2.20
    782 
    783 Image attachments in posts can now have a description (a.k.a. "alt text").
    784 
    785 ## 2.19
    786 
    787 You can edit your own posts from now on.
    788 
    789 Fixed the breakage of Emojis I introduced when implementing HashTags because I am a moron.
    790 
    791 Added adaptative timeouts when sending messages to other instances.
    792 
    793 ## 2.18
    794 
    795 Added support for #HashTags (they are not internally indexed yet, only propagated to other instances).
    796 
    797 Added support for OpenBSD enhanced security functions `unveil()` and `pledge()` (contributed by alderwick).
    798 
    799 The purge ttl for stray global objects has been shortened.
    800 
    801 In the HTML interface, don't show the collapse widget for non-existent children.
    802 
    803 Added support for HTTP signature pseudo-headers `(created)` and `(expires)`, that are used by some ActivityPub implementations (e.g. Lemmy).
    804 
    805 When replying, the mentioned people inherited from the original post will be clearly labelled with a CC: prefix string instead of just being dropped out there like noise like Mastodon and others do. (I hope) this will help you realise that you are involving other people in the conversation.
    806 
    807 ## 2.17
    808 
    809 Fixed a header bug (contributed by alderwick).
    810 
    811 Fixed a bug in the Boost by URL option when the URL of the boosted message is not the canonical id for the message (e.g. Mastodon's host/@user/NNN vs. host/users/user/statuses/NNN).
    812 
    813 Fixed crash on a corner case regarding failed webfinger requests.
    814 
    815 ## 2.16
    816 
    817 Some outgoing connection tweaks: the protocol is no longer forced to be HTTP/1.1 and timeouts are less restrictive. This has proven useful for some unreachable instances.
    818 
    819 Conversations can be collapsed.
    820 
    821 Added support for edited posts on input. These updated messages will be marked by two dates (creation and last update).
    822 
    823 Some tweaks to the docker configuration to generate a smaller image (contributed by ogarcia).
    824 
    825 ## 2.15
    826 
    827 Fixed bug in message posting that may result in 400 Bad Request errors (contributed by tobyjaffey).
    828 
    829 Fixed crash and a deletion error in the unfollow code.
    830 
    831 Added configuration files and examples for running snac with docker (contributed by tobyjaffey).
    832 
    833 Serve /robots.txt (contributed by kensanata).
    834 
    835 ## 2.14
    836 
    837 Previous posts in the public and private timelines can be reached by a "More..." post at the end (contributed by kensanata).
    838 
    839 Clicking the 'Like' and 'Boost' buttons don't move the full conversation up; after that, the page is reloaded to a more precise position. Still not perfect, but on the way.
    840 
    841 New command-line operation, `resetpwd`, to reset a user's password to a new, random one.
    842 
    843 Added a user setup option to toggle if sensitive content is shown or not by default (contributed by kensanata).
    844 
    845 All images are loaded in lazy mode for a snappier feel (contributed by kensanata).
    846 
    847 Fixed crash in the data storage upgrade process when debug level >= 2 (contributed by kensanata).
    848 
    849 Log message improvements for excelence (contributed by kensanata).
    850 
    851 The logging of "new 'Delete'..." messages has been moved to debug level 1, because I'm fed up of seeing my logs swamped with needless cruft.
    852 
    853 Don't show the 'Boost' button for private messages.
    854 
    855 Added (partial) support for /.well-known/nodeinfo site information. This is not mandatory at all, but if you want to serve it, remember that you need to proxy this address from your web server to the `snac` server.
    856 
    857 Some internal structure improvements.
    858 
    859 ## 2.13
    860 
    861 A big disk layout rework, to make it more efficient when timelines get very big. Please take note that you must run `snac upgrade` when you install this version over an already existing one.
    862 
    863 Fixed HTML loose close tag (contributed by kensanata).
    864 
    865 Fixed bug when closing sendmail pipe (contributed by jpgarcia and themusicgod1).
    866 
    867 ## 2.12
    868 
    869 Fixed some bugs triggered when a GET query does not have an `Accept:` header.
    870 
    871 RSS feeds are a bit less ugly.
    872 
    873 ## 2.11
    874 
    875 Marking posts and replies as sensitive content is now possible.
    876 
    877 On output, shared inboxes are used on instances that support it. This reduces bandwidth usage greatly, specially for very popular users with thousands of followers.
    878 
    879 Added RSS output support for the user posts (by adding .rss to the actor URL or by requesting the actor with an Accept HTTP header of `text/xml` or `application/rss+xml`).
    880 
    881 Much more aggresive HTML sanitization.
    882 
    883 ## 2.10
    884 
    885 The local timeline purge has been implemented. The maximum days to live can be configured by setting the field `local_purge_days` in the server configuration file. By default it's 0 (no purging).
    886 
    887 Some memory usage fixes.
    888 
    889 More formatting fixes.
    890 
    891 The only JavaScript snippet has been replaced by pure HTML, so `snac` is now purely JavaScript-free.
    892 
    893 ## 2.09
    894 
    895 New button `Hide`, to hide a post and its children.
    896 
    897 You can boost your own posts indefinitely, because Social Media is about repeating yourself until the others care about you.
    898 
    899 Fixed bug in the webfinger query (uid queries should no longer fail).
    900 
    901 Updated documentation.
    902 
    903 ## 2.08
    904 
    905 A new page showing the list of people being followed and that follows us has been implemented, with all operations associated (including sending Direct Messages).
    906 
    907 Messages marked as sensitive are now hidden behind a dropdown.
    908 
    909 More aggressive HTML sanitization.
    910 
    911 Fixed possible crash when following somebody by its @user@host.
    912 
    913 Some fixes to formatting in post creation.
    914 
    915 Fixed a small memory leak.
    916 
    917 After a like or boost, the scrolling position is set to the next entry in the timeline and not to the top of the page. This is still somewhat confusing so it may change again in the future.
    918 
    919 ## 2.07
    920 
    921 Fixed some minor memory leaks.
    922 
    923 Mail notifications are sent through the queue (and retried if failed).
    924 
    925 ## 2.06
    926 
    927 Fixed a nasty bug in newly created users.
    928 
    929 The purge is managed internally, so there is no longer a need to add a cron job for that. If you don't want any timeline data to be purged, set `timeline_purge_days` to 0.
    930 
    931 The :shortnames: or Emoji or whatever the fuck these things are called are now shown in actor names and post contents.
    932 
    933 Added optional email notifications.
    934 
    935 ## 2.05
    936 
    937 Image upload is now supported (one image per post).
    938 
    939 Added support for HEAD methods (who knew it was necessary?).
    940 
    941 Fixed bug in greeting.html completion (%host% was not being replaced).
    942 
    943 Referrers (actors that like or announce posts) are not overwritten.
    944 
    945 ## 2.04
    946 
    947 More multithreading.
    948 
    949 Image URLs can also be attached to reply messages.
    950 
    951 Improved default mentions in reply text fields.
    952 
    953 The static directory now works.
    954 
    955 New command line `unfollow`.
    956 
    957 ## 2.03
    958 
    959 Notes can now attach images and other media. The web interface still limits this feature to only one attachment (given by URL, so the file must have been uploaded elsewhere).
    960 
    961 Videos attached to notes are now shown.
    962 
    963 A small set of ASCII emoticons are translated to emojis.
    964 
    965 The new (optional) server configuration directive, `disable_cache`, disables the caching of timeline HTML output if set to `true` (useful only for debugging, don't use it otherwise).
    966 
    967 ## 2.02
    968 
    969 Fixed a bug that caused empty actor names look like crap.
    970 
    971 Fixed a severe bug in number parsing and storage.
    972 
    973 Children entries are not indented further than 4 levels, so that fucking Twitter-like threads are readable.
    974 
    975 Added some asserts for out-of-memory situations.
    976 
    977 The publication timestamp only shows the date, so timezone configuration and conversion is no longer an issue.
    978 
    979 The reply textareas are pre-filled with the user ids mentioned in the message.
    980 
    981 Fixed bug in the web command `Boost (by URL)`.
    982 
    983 New command-line option `purge`.
    984 
    985 Fixed a null-termination bug in Basic Authentication parsing.
    986 
    987 Updated documentation.
    988 
    989 New systemd and OpenBSD startup script examples in the examples/ directory.
    990 
    991 ## 2.01
    992 
    993 This is the first public release of the 2.x branch.