v0.17.0-rc1
Pre-releaseRelease highlights
Hello everyone! This is the first release candidate for v0.17.0 of GoToSocial! We've absolutely jam-packed this release (candidate) with goodies:
- Interaction policies: This release gives you the ability to set interaction policies on your statuses using the settings panel. Interaction policies let you determine who can reply to, like, or boost your statuses. You can accept or reject interactions as you wish; accepted replies will be added to your replies collection, and unwanted replies will be dropped. This feature is still a work-in-progress as we will almost certainly have some kinks to work out in terms of implementation etc, but we wanted to get it into people's hands as quickly as possible.
User docs here: https://docs.gotosocial.org/en/latest/user_guide/settings/#default-interaction-policies
Federation docs here: https://docs.gotosocial.org/en/latest/federation/posts/#interaction-policy - Much wider range of support for different media types: In this release we've embedded a webassembly build of ffmpeg into the GoToSocial binary, so that users can post many different types of media than previously, including mp3, flac, and other audio types, and many more video types. Admins: you don't need to have ffmpeg installed on your server for this to work.
- Audio player: to complement the new media types, we adapted our current video player to also play audio, so people visiting your profile can play MP3s and FLACs. Album art is supported when embedded in the audio file!
- Header/avatar alt text: You can now set alt-text for your avatar + header images, so that screenreader users visiting your profile can read a description of your beautiful face.
- Better threading model for statuses: On the web view of a thread, conversations are now indented at different levels, to make it easier to see who's replying to whom.
- Prefers-reduced-motion is now supported, so that folks with animations turned off in their operating system or browser aren't confronted with lots of animation when they open your profile.
- Conversations view: You can now view a list of your direct message conversations, making it much easier to keep track of who you're talking to.
- Import/export csv files: It's now possible to import Mastodon-compatible CSV files for accounts you follow and accounts you block, making it much easier to migrate across instances. Export of these files is supported too.
- Exclusive lists: You can now mark lists as "exclusive", which means that posts from accounts in an exclusive list will show up only in that list and not in your home timeline.
- Show/hide posts on your profile: Previously only Public posts were shown on your web profile. This is still the default, but you can now choose to show unlisted posts on your web profile too (the Mastodon default), or to show no posts at all.
- Lots of new themes: solarized, brutalist, ecks pee, and more.
- Store worker queue on restart: when you stop the instance, pending tasks are stored into the database, and loaded again when you start up the instance, so that no tasks get lost between restarts.
Migration notes
Upgrading
To upgrade to 0.17.0-rc1 from a previous release:
Binary/tar
- Stop GoToSocial
- Back up your database! For sqlite, this is as simple as copying your
sqlite.db
file. - Untar the new release, including the web assets and html templates.
- Edit your config.yaml file as necessary (see below).
- Start GoToSocial
- Wait patiently for migrations to run and do not interrupt them.
Docker
- Stop GoToSocial.
- Back up your database! For sqlite, this is as simple as copying your
sqlite.db
file. - Pull the new docker container (
superseriousbusiness/gotosocial:0.17.0-rc1
orsuperseriousbusiness/gotosocial:latest
) - Edit your config.yaml file as necessary (see below).
- Start GoToSocial.
- Wait patiently for migrations to run and do not interrupt them.
config.yaml
The configuration file has changed since the previous release. You can see a diff of the config file here: v0.16.0...v0.17.0-rc1#diff-c071e03510b2c57e193a44503fd9528a785f0f411497cc75841a9f8d0b1ac622
- Add
db-postgres-connection-string
. - Remove
media-image-max-size
andmedia-video-max-size
. - Add
media-local-max-size
andmedia-remote-max-size
. - Add
media-ffmpeg-pool-size
. - Add
storage-s3-redirect-url
. - Change
http-client.timeout
default from 10s to 30s to reduce occurrence of "could not download media" message.
Database Migrations
Detailed changelist
Features + performance
- [feature] Implement types[] param for notifications by @VyrCossont in #3009
- [feature/frontend] Reports frontend v2 by @tsmethurst in #3022
- [feature] add worker task serialization logic by @NyaaaWhatsUpDoc in #2989
- [feature] Rain Forest Theme by @xmgz in #3021
- [feature] Default to WASM-based SQLite driver by @daenney in #3053
- [feature] Set some security related headers by @daenney in #3065
- [feature/frontend] Allow setting alt-text for avatar + header by @tsmethurst in #3086
- [feature] support processing of (many) more media types by @NyaaaWhatsUpDoc in #3090
- [feature/frontend] Better visual separation between "main" thread and "replies" by @tsmethurst in #3093
- [feature/frontend] Add player for audio files; use thumbnail for
poster
by @tsmethurst in #3099 - [feature] more filetype support! by @NyaaaWhatsUpDoc in #3107
- [feature] Allow users to set default interaction policies per status visibility by @tsmethurst in #3108
- [feature] use webp for thumbnails by @NyaaaWhatsUpDoc in #3116
- [feature/frontend] Respect
prefers-reduced-motion
for avatars, headers, and emojis by @tsmethurst in #3118 - [feature] add flac support by @NyaaaWhatsUpDoc in #3121
- [feature] Conversations API by @VyrCossont in #3013
- [feature] Allow user to set "bot" flag; show bot icon on profile by @tsmethurst in #3135
- [feature] Federate interaction policies + Accepts; enforce policies by @tsmethurst in #3138
- [feature] Implement following hashtags by @VyrCossont in #3141
- [feature] persist worker queues to db by @NyaaaWhatsUpDoc in #3042
- [performance] limit ffprobe read time to at most 1s after start of file by @NyaaaWhatsUpDoc in #3155
- [feature] Object store custom URL (S3) by @CDN18 in #3046
- [feature] Allow users to export data via the settings panel by @tsmethurst in #3140
- [feature] Implement Mastodon-compatible roles by @VyrCossont in #3136
- [feature] Allow import of following and blocks via CSV by @tsmethurst in #3150
- [feature] Beef up our AI opt-outs by @daenney in #3165
- [feature] Use gifv type for short soundless mp4 videos by @tsmethurst in #3182
- handle db-url by @winston0410 in #3178
- [performance] move thumbnail generation to go code where possible by @NyaaaWhatsUpDoc in #3183
- [performance] use native Go code to probe JPEGs by @NyaaaWhatsUpDoc in #3206
- [feature] Use
local_only
field, deprecatefederated
field by @tsmethurst in #3222 - [performance] ffmpeg ffprobe wrapper improvements by @NyaaaWhatsUpDoc in #3225
- [feature] Interaction requests client api + settings panel by @tsmethurst in #3215
- [performance] use single-threaded image transforms by @NyaaaWhatsUpDoc in #3252
- [feature/frontend] ecks pee theme by @tsmethurst in #3274
- [feature/frontend] Add brutalist b&w theme by @tsmethurst in #3275
- [feature/frontend] Add options to include Unlisted posts or hide all posts by @tsmethurst in #3272
- [feature] Implement exclusive lists by @VyrCossont in #3280
- [feature] Process
Reject
of interaction via fedi API, put rejected statuses in the "sin bin" 😈 by @tsmethurst in #3271 - [feature/frontend] Add dark version of brutalist theme by @tsmethurst in #3294
- [performance] cache more database calls, reduce required database calls overall by @NyaaaWhatsUpDoc in #3290
- [feature] Allow users to submit
interaction_policy
on new statuses by @tsmethurst in #3314 - [feature/frontend] Add solarized light + dark themes by @tsmethurst in #3325
- [feature] Show info for pending replies, allow implicit accept of pending replies by @tsmethurst in #3322
Bugfixes
- [bugfix] rename
include_types[]
totypes[]
by @tsmethurst in #3023 - [bugfix] add Date and Message-ID headers for email by @jugendhacker in #3031
- [bugfix] Fix typo in instance cache copyF by @tsmethurst in #3052
- [fix] use instance configured emoji maxsize on emoji update validation by @f0x52 in #3056
- [bugfix] update SignupURL routing in email template by @CDN18 in #3055
- [bugfix] Handle ErrHideStatus when preparing timeline statuses by @VyrCossont in #3071
- [frontend] Better autocapitalize/spellcheck settings on forms by @tsmethurst in #3077
- [bugfix] Don't throw error when parent statuses are missing (#2011) by @snowkat in #3088
- [bugfix] Fix panic in
isStatusHomeTimelineable
by @tsmethurst in #3096 - [bugfix] give read-only access to /dev for ffmpeg to access /dev/urandom by @NyaaaWhatsUpDoc in #3109
- [bugfix] update common get target account / status doing refresh async by @NyaaaWhatsUpDoc in #3124
- [bugfix] media.Processor{}.GetFile() returning 404s on first call, correctly loading on 2nd by @NyaaaWhatsUpDoc in #3129
- [bugfix] Explicitly propagate filter results from statuses to their boosts in API responses by @VyrCossont in #3130
- Serialize empty conversation account list as empty list, not null by @VyrCossont in #3137
- [bugfix] Use punycode for
host
part ofresource
query param when doing webfinger requests by @tsmethurst in #3133 - [bugfix] ensure ffmpeg muxer gets set correctly by setting input file extension before clean by @NyaaaWhatsUpDoc in #3142
- [bugfix] moves file rename to earlier in media pipeline so ffmpeg calls ALWAYS have a file extension by @NyaaaWhatsUpDoc in #3146
- [bugfix] take into account rotation when generating thumbnail by @NyaaaWhatsUpDoc in #3147
- Fix no rows in result set error in emoji list command by @rdelaage in #3152
- [bugfix] close files before error return by @NyaaaWhatsUpDoc in #3163
- [bugfix] fix emoji recaching operations by @NyaaaWhatsUpDoc in #3167
- [bugfix] send back Sec-Websocket-Protocol header for streaming WebSocket by @leahneukirchen in #3169
- [bugfix] ensure testrig package only compiled-in when debug enabled by @NyaaaWhatsUpDoc in #3185
- [bugfix] updated pinned counts on status delete by @NyaaaWhatsUpDoc in #3188
- [bugfix] incorrect AP serialize function used serializing worker data by @NyaaaWhatsUpDoc in #3196
- [bugfix] relax missing preferred_username, instead using webfingered username by @NyaaaWhatsUpDoc in #3189
- [bugfix] permit unspecified orientation data by @NyaaaWhatsUpDoc in #3205
- [bugfix/frontend] Fix error on submitting domain perm with enter key by @tsmethurst in #3218
- [bugfix/frontend] Small safari + gnome web fixes by @tsmethurst in #3219
- [bugfix] Carry-over
ApprovedByURI
to avoid marking already-approved remote statuses as pending approval by @tsmethurst in #3231 - [bugfix] Let prometheus client do its own compression handling by @tsmethurst in #3232
- [bugfix] move WASM compilation stage much later in server init by @NyaaaWhatsUpDoc in #3242
- [bugfix] Fix incorrect json-ld
@context
serialization by @tsmethurst in #3243 - [bugfix/frontend] Fix
TypeError: gtsError is undefined
by @tsmethurst in #3245 - [bugfix] fix new processing media / emoji not being added to dereferencer maps 🤦 by @NyaaaWhatsUpDoc in #3269
- [bugfix] Fix temp table deletion causing runaway allocations by @tsmethurst in #3278
- [bugfix] Swagger: add missing filter_action param for v2 filter PUT by @VyrCossont in #3281
- [bugfix] Update home timeline query to ignore exclusive list entries by @tsmethurst in #3289
- [bugfix] Hoist filterable text field extraction out of loop by @VyrCossont in #3297
- always set the status sensitive flag to true if it has a content-warn… by @NyaaaWhatsUpDoc in #3308
- [bugfix] Use better plaintext representation of status for filtering by @tsmethurst in #3301
- [bugfix] Be more lenient when parsing mastodown following.csv by @tsmethurst in #3311
- [bugfix] Ensure id set on outgoing Reject + Accept by @tsmethurst in #3312
- [bugfix] Fix incorrect policy value parsing by @tsmethurst in #3315
- [bugfix] Fix pending approval check by @tsmethurst in #3316
- [bugfix/email] Don't use plainAuth when no smtp username/password provided by @tsmethurst in #3332
- [bugfix] add support for media with rotation contained in stream side data by @NyaaaWhatsUpDoc in #3335
Chores
- [chore]: Bump github.com/yuin/goldmark from 1.7.1 to 1.7.2 by @dependabot in #3018
- [chore]: Bump github.com/tdewolff/minify/v2 from 2.20.33 to 2.20.34 by @dependabot in #3017
- [chore]: Bump github.com/miekg/dns from 1.1.59 to 1.1.61 by @dependabot in #3014
- [chore]: Bump golang.org/x/oauth2 from 0.20.0 to 0.21.0 by @dependabot in #3015
- [chore]: Bump github.com/spf13/cobra from 1.8.0 to 1.8.1 by @dependabot in #3016
- [chore] update go-structr and go-mangler to no longer rely on modern-go/reflect2 by @NyaaaWhatsUpDoc in #3026
- [chore] updates go-mutexes to no longer rely on unsafe linkname by @NyaaaWhatsUpDoc in #3027
- [chore] update remaining gruf libraries relying on linkname by @NyaaaWhatsUpDoc in #3028
- [chore] update github.com/ncruces/go-sqlite3 -> v0.16.3 by @NyaaaWhatsUpDoc in #3029
- [chore] Update our robots.txt by @daenney in #3033
- [chore]: Bump github.com/yuin/goldmark from 1.7.2 to 1.7.3 by @dependabot in #3034
- [chore]: Bump github.com/minio/minio-go/v7 from 7.0.71 to 7.0.72 by @dependabot in #3037
- [chore]: Bump github.com/gorilla/feeds from 1.1.2 to 1.2.0 by @dependabot in #3035
- [chore] media and emoji refactoring by @NyaaaWhatsUpDoc in #3000
- [chore]: Bump golang.org/x/image from 0.17.0 to 0.18.0 by @dependabot in #3044
- [chore] Add envparsing test for advanced-header-filter-mode by @tsmethurst in #3051
- [chore]: Bump github.com/yuin/goldmark from 1.7.3 to 1.7.4 by @dependabot in #3059
- [chore] Allow gtsmodel to depend on util by @VyrCossont in #3068
- [chore] Update ncruces/go-sqlite3 to 0.17 by @daenney in #3072
- [chore] upstep activity to v1.7.0-gts by @tsmethurst in #3074
- [chore]: Bump golang.org/x/crypto from 0.24.0 to 0.25.0 by @dependabot in #3080
- [chore]: Bump github.com/microcosm-cc/bluemonday from 1.0.26 to 1.0.27 by @dependabot in #3081
- [chore]: Bump golang.org/x/net from 0.26.0 to 0.27.0 by @dependabot in #3082
- [chore]: Bump github.com/minio/minio-go/v7 from 7.0.72 to 7.0.73 by @dependabot in #3083
- [chore/frontend] Put ActivityPub logo on index page by @tsmethurst in #3087
- [chore] Bump ncruces/go-sqlite3 to 0.17.1 by @daenney in #3085
- [choore] Update robots.txt by @daenney in #3092
- [chore] Add interaction policy gtsmodels by @tsmethurst in #3075
- [chore/frontend] Tweak threading a bit, inform about hidden replies by @tsmethurst in #3097
- [chore] Go mod tidy / vendor by @tsmethurst in #3100
- [chore] add step-by-step logging to long migration by @tsmethurst in #3102
- [chore]: Bump github.com/coreos/go-oidc/v3 from 3.10.0 to 3.11.0 by @dependabot in #3104
- [chore]: Bump github.com/tdewolff/minify/v2 from 2.20.34 to 2.20.37 by @dependabot in #3106
- [chore] media pipeline improvements by @NyaaaWhatsUpDoc in #3110
- [chore] Fix typo by @tsmethurst in #3113
- [chore/frontend] Use smaller webp images for logo and default avatars by @tsmethurst in #3119
- [chore] update go-ffmpreg to v0.2.3 by @NyaaaWhatsUpDoc in #3120
- [chore] Remove duplicate
<hr>
by @tsmethurst in #3123 - [chore]: Bump github.com/minio/minio-go/v7 from 7.0.73 to 7.0.74 by @dependabot in #3125
- [chore] Remove content and related fields from boosts by @VyrCossont in #3131
- [chore] Add some log lines to recent migrations warning not to interrupt by @tsmethurst in #3134
- [chore] renames the
GTS
caches toDB
caches by @NyaaaWhatsUpDoc in #3127 - [chore] Add interaction filter to complement existing visibility filter by @tsmethurst in #3111
- [chore] small tidying of dereferencer status permissivity by @NyaaaWhatsUpDoc in #3143
- [chore] log delivery worker stop/start at debug level by @tsmethurst in #3145
- [chore] add some more slice related utility functions + remove duplicates by @NyaaaWhatsUpDoc in #3149
- [chore] replace UniqueStrings with Deduplicate by @tsmethurst in #3154
- [chore] Take account of rotation data when calculating full size image dimensions by @tsmethurst in #3159
- [chore] add back exif-terminator and use only for jpeg,png,webp by @NyaaaWhatsUpDoc in #3161
- [chore] move PopulateAccountStats() nil check often performed into function itself by @NyaaaWhatsUpDoc in #3158
- [chore/frontend] Update namerole rendering on skinny devices by @tsmethurst in #3166
- [chore] Add
media-ffmpeg-pool-size
config var by @tsmethurst in #3164 - [chore]: Bump golang.org/x/oauth2 from 0.21.0 to 0.22.0 by @dependabot in #3171
- [chore] updates our ffmpreg version, heh by @NyaaaWhatsUpDoc in #3181
- [chore]: Bump golang.org/x/net from 0.27.0 to 0.28.0 by @dependabot in #3194
- [chore]: Bump golang.org/x/image from 0.18.0 to 0.19.0 by @dependabot in #3191
- [chore] update go-structr to v0.8.8 by @NyaaaWhatsUpDoc in #3199
- [chore] update go-fastcopy to v1.1.3 by @NyaaaWhatsUpDoc in #3200
- [chore] update go-ffmpreg to v0.2.5 (pulls in latest tetratelabs/wazero) by @NyaaaWhatsUpDoc in #3203
- [chore] update go-sqlite3 to v0.18.0 by @NyaaaWhatsUpDoc in #3204
- [chore]: Bump github.com/prometheus/client_golang from 1.19.1 to 1.20.0 by @dependabot in #3210
- [chore]: Bump github.com/minio/minio-go/v7 from 7.0.74 to 7.0.75 by @dependabot in #3208
- [chore]: Bump github.com/miekg/dns from 1.1.61 to 1.1.62 by @dependabot in #3209
- [chore] update default http client timeout to 30s by @NyaaaWhatsUpDoc in #3214
- Bump micromatch from 4.0.5 to 4.0.8 in /web/source by @dependabot in #3227
- Bump elliptic from 6.5.4 to 6.5.7 in /web/source by @dependabot in #3212
- [chore/bugfix] Fix missing insertion of preapproved interaction requests by @tsmethurst in #3228
- [chore] Tiny tweak to ApprovedByURI by @tsmethurst in #3234
- [chore] Remove unused "env" wasm module by @tsmethurst in #3235
- [chore]: Bump github.com/prometheus/client_golang from 1.20.0 to 1.20.2 by @dependabot in #3239
- [chore] Bump all otel deps by @tsmethurst in #3241
- [chore/frontend] Present themes as dropdown instead of radio by @tsmethurst in #3244
- [chore] Update robots.txt with more AI scrapers by @daenney in #3248
- [chore] Only call
imaging.Resize when necessary
, use even tinier blurhashes by @tsmethurst in #3247 - [chore] Upgrade ncruces/go-sqlite3 to v0.18.1 by @daenney in #3253
- [chore] Close copied request body in SignDelivery by @tsmethurst in #3254
- [chore]: Bump github.com/minio/minio-go/v7 from 7.0.75 to 7.0.76 by @dependabot in #3262
- [chore/performance] Avoid unnecessary "uncached" queries by @tsmethurst in #3265
- [chore] Don't try to select zero uncached filters by @tsmethurst in #3266
- [chore/performance] Further reduce nil uncached queries by @tsmethurst in #3267
- [chore] More AI blocking by @daenney in #3273
- [chore] Change ecks pee font size to large by @tsmethurst in #3276
- [chore]: Bump github.com/prometheus/client_golang from 1.20.2 to 1.20.3 by @dependabot in #3282
- [chore]: Bump golang.org/x/text from 0.17.0 to 0.18.0 by @dependabot in #3286
- [chore]: Bump golang.org/x/image from 0.19.0 to 0.20.0 by @dependabot in #3285
- [chore]: Bump golang.org/x/oauth2 from 0.22.0 to 0.23.0 by @dependabot in #3284
- [chore]: Bump golang.org/x/crypto from 0.26.0 to 0.27.0 by @dependabot in #3283
- [chore] status dereferencing improvements by @NyaaaWhatsUpDoc in #3255
- [chore] update go-ffmpreg v0.2.5 -> v0.2.6 by @NyaaaWhatsUpDoc in #3287
- [chore] update list of library deps on readme by @NyaaaWhatsUpDoc in #3288
- [chore] Fix import/export links on settings panel by @tsmethurst in #3292
- [chore] Update go-sqlite3 to 0.18.3 by @daenney in #3295
- [chore]: Bump github.com/jackc/pgx/v5 from 5.6.0 to 5.7.1 by @dependabot in #3302
- [chore]: Bump golang.org/x/net from 0.28.0 to 0.29.0 by @dependabot in #3303
- [chore] Bump otel deps -> v1.30.0/v0.52.0 by @tsmethurst in #3307
- [chore] Reject replies to rejected replies by @tsmethurst in #3291
- [chore] Refactor federatingDB.Undo, avoid 500 errors on Undo Like by @tsmethurst in #3310
- [chore] improved federatingdb logging in cases of unknown iri / types by @NyaaaWhatsUpDoc in #3313
- [chore/frontend] Tweak status styling a little by @tsmethurst in #3317
- [chore] make csv export ordering determinate by @tsmethurst in #3318
- [chore/frontend] Tweak blockquote formatting by @tsmethurst in #3326
- [chore]: Bump github.com/prometheus/client_golang from 1.20.3 to 1.20.4 by @dependabot in #3327
- [chore/frontend] Make ecks pee theme even more ecks pee er by @tsmethurst in #3324
- [chore] ensure consistent caller name fetching regardless of compiler inlining by @NyaaaWhatsUpDoc in #3323
- [chore] header filter improvements by @NyaaaWhatsUpDoc in #3329
- [chore] local instance count query caching, improved status context endpoint logging, don't log ErrHideStatus when timelining by @NyaaaWhatsUpDoc in #3330
- [chore] add nometrics build tagging to metrics API endpoint by @NyaaaWhatsUpDoc in #3331
- [chore/docs] More little tweaks by @tsmethurst in #3336
- [chore] Roll otel deps back to
v1.29.0
/v0.51.0
by @tsmethurst in #3337
Docs
- [docs] traefik redirect regex documentation by @coxde in #3032
- [docs] restructure federation section by @tsmethurst in #3038
- [docs] Tidy up API auth docs a little bit by @tsmethurst in #3050
- [docs] Update how to enable http2 on nginx by @daenney in #3066
- [docs] update README with our corporate sponsorship policy by @NyaaaWhatsUpDoc in #3112
- [docs] Add separate migration section + instructions for moving to GtS and not just away by @tsmethurst in #3139
- [docs] Update system requirements, move things around a bit by @tsmethurst in #3157
- [docs] Update readme alpha -> beta, add more feature examples by @tsmethurst in #3333
- [docs] Add rainforest theme to readme.md by @tsmethurst in #3334
Security
- [security] harden account update logic by @NyaaaWhatsUpDoc in #3198
- [security] Implement
allowFiles
fs for better isolation of ffmpeg / ffprobe by @tsmethurst in #3251
New Contributors
- @jugendhacker made their first contribution in #3031
- @xmgz made their first contribution in #3021
- @coxde made their first contribution in #3032
- @snowkat made their first contribution in #3088
- @leahneukirchen made their first contribution in #3169
- @winston0410 made their first contribution in #3178
Full Changelog: v0.16.0...v0.17.0-rc1