• Stable 0.7.1 a457f7992d


    prologic released this 8 months ago | 0 commits to since this release

    🐞 Hotfix: This release is a hotfix that fixes a few criticla bugs with password reset tokens, thanks @lyse as well as adds support for running yarnd on Synolgy NAS(s) thanks to @grover1911

    Bug Fixes

    • Fix signal handling using su-exec and ownership of default data volume /data
    • Fix example Docker Compose for Docker Swarm to match Docker image entrypoint chagne
    • Fix password reset token by properly checking counters (#519)
    • Fix password reset token by not decrementing it twice in the token cache
    • Fix expiryAt timestamp for magic_link auth and password reset tokens
    • Fix example Docker Compose for Docker Swarm


    • Add an improved Docker image that supports PUID/PGID env vars to run yarnd as different users (e.g: to support Synolgy)


    • Update CHANGELOG for 0.7.1
  • Stable 0.7.0 dd1bc41b75


    prologic released this 8 months ago | 8 commits to since this release

    Releases - yarn - v0.7.0

    This is probably one of the biggest releases of yarnd in a while, there were a lot of bug fixes, improvements as well as a tonne of new features. 🥳


    • Custom pages
      The About, Privacy and Abuse pages can now be customised by Pod Owner/Operators.
      To do so simply copy the builtin ones cp -a internal/pages /path/to/data or
      just start creating matching pages in /path/to/data/pages.
      Note that unfortunately at this time customising pages requires a restart of
      the backend yarnd as page content is cached.
    • Login via Email
      Users can now login with their email address in addition to their username
      and password (if set). This feature can be enabled by Pod Owners/Operators
      with the magic_link_auth feature flag.
    • Improved UX for Follow/Unfollow and Mute/Unmute buttons with graceful JS fallback!
    • Pod-level Timezone, Time format and Open links in preferences.
    • New /custom support for themes to serve arbitrary static assets
      This new route allows Pod Owner/Operators to serve up arbitrary static assets
      with any directory structure that cannot be easily served up by the existing
      /css/:commit, /img/:commit and /js/:commit routes. Custom static assets
      should be placed in a directory called custom under /path/to/theme.

    Bug Fixes

    • Fix bug in setting tokens for passwrod reset and magiclink auth
    • Fix minor bug in TTLCache.get()
    • Fix cached tokens to be deleted after use
    • Fix token expiry check on password reset form
    • Fix password reset and magiclink auth tokens to only be usable once with a default TTL of 30m
    • Fix edit/reply/fork buttons ot use ID selectors
    • Fix /custom static route for prod builds
    • Fix incorrect cache header used in conversation view
    • Fix FeatureFlags' JSON marshalling/unmarshalling
    • Fix Cached.UpdateFeed() to not overwrite a cached feed with an empty set of twts
    • Fix misspelled translation key for ErrTokenExpired
    • Fix autocomplete for Login via EMail's username field
    • Fix potential nil pointer bug in PermalinkHandler()
    • Fix bug that logs pod owner out when deleting users
    • Fix the session cookie name once and for all 🥳
    • Fix Pod Base URL automatically if it's missing a Scheme, log a warning and assume https://
    • Fix caching bug with editing and deleting last twt
    • Fix default MediaResolution to match default themes page width of 850px (Fixes #508)
    • Fix Cache.FetchTwts() to Normalize Feed.URL(s) before doing anything
    • Fix Session Cookie name to by config.LocalURL().Hostname() so the Pod name can be more free form
    • Fix NormalizeURL() to strip URL Fragments from Feed URIs
    • Fix short time ago formats (Fixes #509)
    • Fix title entries of Atom/XML feeds


    • Add improved UX for Follow/Unfollow and Mute/Unmute with graceful JS fallback
    • Add support for Pod-level (User overridable) Timezone, Time and external link preferences
    • Add support for /custom/*filepath arbitrary static file serving from a theme with any directory/file structure
    • Add missing lang msg for MsgMagicLinkAuthEmailSent
    • Add support for Login via Email with feature magic_link_auth
    • Add isFeatureEnabled() func to templates
    • Add support for custom pages (Fixes #393)
    • Add s simple JS confirm to logout to avoid accidental logout
    • Add a PruneUsers job that runs once per week with an email list of candidate users to delete for the Pod Owner based on some heuristics
    • Add new pod yarn.meff.me to manually track versions to help keep the ecosystem up-to-date as we grow :D
    • Add basic validation of the Pod's Base URL to ensure it is TLS enabled in non-debug (production) mode
    • Add pagination extension spec (#494)


    • Update CHANGELOG for 0.7.0
    • Update deps
    • Update contributing guidelines
  • Stable 0.6.2 0f2bbdd1d2


    prologic released this 8 months ago | 59 commits to since this release

    This is the second patch for the 0.6.x series of yarnd that fixes a few bugs.
    In addition it also adds "Feed Rotation" via a RotateFeeds() job as this has become necessary now (@prologic filled his feed! finally after 16 months!). Feed rotation is performed at ~2am on a Sunday (weekly) and is controlled by the -F/--max-fetch-limit pod configuration.

    Bug Fixes

    • Fix consistency of pointers on toolbar buttons (Fixes #505)
    • Fix expression in User Settings template for which openLinksInPreference is checked 🤦‍♂️
    • Fix typo in User Settings handler for persisting OpenLinksInPreference 🤦‍♂️


    • Add RotateFeeds job (#504)
    • Add article target (#506)
    • Add per-handler latency metrics


    • Update CHANGELOG for 0.6.2
  • Stable 0.6.1 8ff9211ba7


    prologic released this 8 months ago | 68 commits to since this release

    Very sorry 😢 I fucked up in with the addition of hte User OpenLinksInPrefernece features added in 0.6.0 🤦‍♂️ This minor patch releases fixes a nasty nil pointer derefernece bug. Again sorry! 🙇‍♂️

    PLEASE upgrade to 0.6.1+ 🙇‍♂️

    Bug Fixes

    • Fix a nil pointer exception handling User OpenLinksInPreference :/


    • Update CHANGELOG for 0.6.1
  • Stable 0.6.0 ed9de1d67a


    prologic released this 8 months ago | 70 commits to since this release

    It's been a pretty big 2 weeks for [Yarn.social]https://yarn.social)'s development!
    We've fixed numerous bugs with yarnd (the backend software behind each pod)
    as well as numerous new features! 🥳 Here's some hightlights:


    • The yarnc command-line client now renders Twts in Markdown just like the Web Interface and Mobile App 🥳
    • Blacklists 🏴‍☠️ it is not possbile for Pod Owner/Operators to "blacklist" feeds by a list of regex patterns. This should be used sparingly and as a last resort ⚠️ (also don't use a regex pattern of .* 😂)
    • Several new User Settings preferences:
      • Time display preferences, 12h or 24h
      • Open links preferences, new window or same window

    These were the biggest changes aside from some pretty major rework of the Global Feed Cache which servces all users on a pod their "timeline", "mentions" and "discover" views. A LOT of work and effort was put into performance optimiations and thus Cache v8 is now the standard feed cache. With this comes better/improved lateency and performance. 🥳

    As per usual, enjoy and happy Yarn'ing 🧶

    Bug Fixes

    • Fix and improve the yarnc timeline to support Markdown rendering and fix multi-line twts
    • Fix missing parser.HardLineBreak extension
    • Fix consistency of Pod URL for the yarnc command-line client to match the mobile app just taking a Pod URL
    • Fix broken tests (#500)
    • Fix typo in recovery email template
    • Fix bug persisting BlacklistedFeeds in Pod override Settings (ooops)
    • Fix validation/initialization bugs with pod override settings and handling of whitelisted_images and blacklisted_feeds
    • Fix data races with feature flags
    • Fix marshaling/unmarshaling of feature flags
    • Fix some weird Markdown parsing and HTML formatting behaviour by turning off some extensions/options
    • Fix bug with serializing FeatureFlags causing pod settings overrides not to load
    • Fix typo (case) in managePod template
    • Fix a panic bug in Cache v7 :/
    • Fix preflight check for Go1.17
    • Fix performance of computing timeline view updated_at timestamps
    • Fix updating UpdateAt timestamps across all views
    • Fix the builtin theme to use title instead of data-tooltip
    • Fix Markdown html rendering and re-enable CommonFlags
    • Fix performance regression posting as user that e9222f5 broke
    • Fix metadata parsing in comments (#484)
    • Fix TwtxtHanadler() to support If-Modified-Since and Range requests (#490)


    • Add a Open links in to user settings page
    • Add a user setting OpenLinksInPreference to control behaviour of opening external links
    • Add highlights to mentions for the yarnc command-line client's timeline sub-command
    • Add vim support to yarnc post to use an editor to write the twt
    • Add parser.NoEmptyLineBeforeBlock to Markdown parsing extensions
    • Add support for user preferred time format (12h/24h)
    • Add support for blacklisting feeds or entire pods, domains, etc
    • Add background tasks for Post handlers and External feeds to decrease latency
    • Add custom user views that take into account user muted feeds
    • Add a --disable-logger flag for those that already do access logs at the ingress level
    • Add a local cache view
    • Add a new view for Discover
    • Add a hacky pre-rendering hook and move timeline tiemstamp updates there for hopefully better perf
    • Add a --max-cache-fetchers configuration option to control the number of fetchers the feed cache uses (defaults to number of cpus)
    • Add a custom version of humanize.Time with shorter output
    • Add .Profile.LastPostedAt to be used by template authors
    • Add support for displaying last updated times for the main three timeline views and proivde as template context (updated_at)
    • Add support for displaying last updated times for the main three timeline views and proivde as template context
    • Add support for displaying external feed's following feeds
    • Add immediate on-pod feed/persona updates
    • Add retryableStore to automatically recover from database failure in some cases (#474)
    • Add discover_all_posts and shorter_permalink_title as permanent feature changes
    • Add fork button to search results
    • Add a much impmroved SearchHandler() and new search template with similar UX to Conversation/Yarn view (#493)


    • Update CHANGELOG for 0.6.0
  • Stable 0.5.0 e5fe007c65


    prologic released this 8 months ago | 132 commits to since this release

    Continuing on from the 0.4.x series, this release introduces some major new feautres:

    • First-class custom themes
    • Displaying bookmarks as a "Timeline" view
    • Dealing with misbehaving clieknts
    • Optinoally disabling media altogether (--disable-media)
    • Adding support to the API for allowing the Mobile App to "Poast as..."

    In addition there have been several bugfixes, notable to do with refreshing Avatar across Yarn.social pods.

    As usual please upgrade, and enojy Yarn.social 🤗

    Bug Fixes

    • Fix unnecessary warning on non-existent settings.yaml on startup (Fixes #435)
    • Fix italics formatting toolbar butotn to use foo instead of foo
    • Fix the name of the default database, app specific JS and CSS files
    • Fix loading custom templates and static assets with -t/--theme
    • Fix mising AvatarHash for the API SettingsEndpoint()
    • Fix missing translation on Conversation View (Yarn) title


    • Add Feeds to Profile for the Mobile App (only for the user viewing their own profile)
    • Add support for ignoring twts in the future until they become relevant (#491)
    • Add tw.lohn.in to tools/check-versions.sh
    • Add automatic rename of old store path for pod owners that use defaults to smooth over change in 034009e
    • Add first-class support for themes to more easily customize templates and static assets
    • Add support for displaying bookmarks in a timeline view instead of just a list of hashes
    • Add two additional lines of preamble text promoting Yarn.social (shameful plug)
    • Add support for also disabling media in general (--disable-media)
    • Add -m 5 (5s timeout) to tools/check-pod-versions.sh


    • Update CHANGELOG for 0.5.0
  • Stable 0.4.1 4406164eeb


    prologic released this 8 months ago | 154 commits to since this release

    • Fixes the title of the "conversation" button to be "Yarn"

    This brings the Mobile App in-line with the yarnd Web Interface and the branding and labelling to be more consistent. Thanks to @fastidious@arrakis.netbros.com for this suggestion!


    • Update CHANGELOG for 0.4.1
    • Update the default favicon
    • Update release script to also push the git commit
  • Stable 0.4.0 1d652b3b85


    prologic released this 8 months ago | 161 commits to since this release

    This is a minor release with an importany user-facing change.

    Auto Refreshing Avatars! 🥳

    Besides this it also improves the code block CSS and adds some extra error handling
    for yarnd --enable-feature ... when an invalid feature is used or as a way to
    list the available experimental features.

    Bug Fixes

    • Fix abbr of URL
    • Fix padding on code blocks (#476)


    • Add support for auto-refreshing avatars using a cache-busting technique
    • Add a fragment, a blake2b base32 encoded hash of user and feed avatars to avatar metddata
    • Add list of available features if invalid feature supplied to --enable-feature


    • Update CHANGELOG for 0.4.0
  • Stable 0.3.0 4f63207afe


    prologic released this 8 months ago | 170 commits to since this release

    This is mostly a bugfix release. There are no significant new features besides
    the new templated logo, default pod logo and some layout changes.

    Thanks to all those that contirbuted! (You know who you are!)

    Bug Fixes

    • Fix nav layout and remove unncessary container-fluid class
    • Fix excessive padding, minor CSS tweaks and use a centered layout (#473)
    • Fix video poster generation for short (<3s) videos using thumbnail filter
    • Fix User.Fork() behaviour
    • Fix an edge case with the lextwt feed parser with bad url/avatar metadata missing the scheme
    • Fix bug where external avatars were not generated for some misbehaving feeds
    • Fix the rendering of the Twter in permalink titles
    • Fix overriding alrady cached/discovered Avatars from feed advertised Avatar in feed preamble metadata
    • Fix Reply hints to just the Twter
    • Fix and remove unnecessary footer on every Markdown page
    • Fix external feed avatar handling so avatars are always cached and served from the pod
    • Fix up the rendering of the default pages
    • Fix the yarnc stats sub-command to display the right information on feeds
    • Fix User.Filter() to return an empty slice if all twts are filtered
    • Fix handling for external avatars so the local pod has a cached copy and services all external avatars (regression)
    • Fix external profile view to correctly point to the external profile view for the header feed name and cleanup some of hte code
    • Fix consistency of profileLinks partial and drop use of TwtURL from Profile model
    • Fix internal links to open in same page


    • Add Follow to Settings page and fix template reloading in debug mode (#454)
    • Add support for templating the logo with the pod name and update the default yarnd logo
  • Stable 0.2.0 c20962fc97


    prologic released this 8 months ago | 233 commits to since this release

    After long last v0.2.0 of the Yarn.social yarnd pod backend
    is finally released! 🥳 There are far too many changes here between v0.1.0 and
    v0.2.0 and for that I apologise! 🤗 Needless to say this releases finally dropps
    all use of any C libraries (no longer requiring the use of CGO) and thus allowing
    me to release pre-built binaries again! 🥳

    Going forward we will release proper minor/patch and major release versions with
    a proper cadence and following a proper release schedule.

    Thank you! 🤗

    Bug Fixes

    • Fix GoReleaser config
    • Fix bug in profileLinks partial
    • Fix external profile view to not display following/followers counts if zero
    • Fix NFollowing count based on no. of # follow = found
    • Fix Conversation view to hide Root button when the conversation has no more roots
    • Fix display of Fork button
    • Fix typo
    • Fix layout of local feeds
    • Fix Feeds view when uneven no. of feeds
    • Fix Feeds view
    • Fix behaviour of when Fork/Conversation buttons are displayed contextually and cleanup UX
    • Fix behaviour of prompt for when the Timeline is empty
    • Fix Python twt hash reference implementation (#459)
    • Fix serving videos behind Cloudflare for Safari and Mobile Safari (redo of 35241bc) by adding a --disable-gzip flag
    • Fix broken test
    • Fix mentions lookup and expansion based on the new (by default) nick@domain format with fallback to local user and custom aliases
    • Fix shortel_permalink_title maxPermalinkTitle to 144
    • Fix feature for shorter_permalink_title
    • Fix serving videos for Mobile Safari / Safari through Cloudflare by disabling Gzip compression :/
    • Fix related projects
    • Fix up the README's links and branding
    • Fix follow handlers and data models to cope with following multiple feeds with the same nick or alias
    • Fix typo in Conversations sub-heading view
    • Fix showing Register button when registrations are disabled (#452)
    • Fix inconsistent button colors using only contrast class sparingly and only for irréversible actions like deleting your account (#453)
    • Fix tests
    • Fix duplicate twtst in FilterOutFeedsAndBotsFactory
    • Fix missing view context initialization missed in two other templates
    • Fix templtes view context var that wasn't initialized
    • Fix logic of handling local user/feeds vs. external feeds in /api/v1/fetch-twts endpoint
    • Fix fetching twts from external profiles
    • Fix order of twts in conversations (reverse order)
    • Fix Twts.Swap() implementation
    • Fix sorting of twts to be consistent (sorted by created, then hash)
    • Fix typo in error handling for updating white list domains
    • Fix preflight to handle Go 1.17
    • Fix loading settings and re-applying WhitelistedDomains on startup
    • Fix lextwt to cope with bad url in metadata
    • Fix FeedLookup case sensitivity bug
    • Fix CI
    • Fix preflight to account for null GOPATH and GOBIN
    • Fix performance of processing WebMentions by using a TaskFunc
    • Fix Makefile
    • Fix typo in +RegisterFormEmailSummary
    • Fix error handling in reset user
    • Fix image name for Docker Hub
    • Fix Drone CI config to build docker images in paralell and fix installation of deps
    • Fix Drone CI for building and pushing Docker images using plugins/kaniko plugin
    • Fix writeBtn (blog post editor) behavior (#433)
    • Fix version string of server binary
    • Fix Drone CI config and add make deps back
    • Fix Drone CI and Docker image tags and versioning
    • Fix Drone CI config
    • Fix server version strings
    • Fix typo
    • Fix Dockerfile.dev with missing langs soruces
    • Fix some more dependneices of things that moved to git.mills.io
    • Fix docker-compose
    • Fix .gitignore
    • Fix stale issue workflow
    • Fix stale issues workflow
    • Fix change in case of translation files
    • Fix User-Agent detection by tightening up the regex used (#418)
    • Fix lang translations to use embed and io/fs to load translations
    • Fix whitespace
    • Fix display of multi-line private messages
    • Fix Emails removeal migration and remove it from the templates
    • Fix tests and refactor invalid feed error (#412)
    • Fix bug in URLForConvFactory to also check for OP Hash validity in the archive too
    • Fix bug in lastTwt.Created() call -- missed in refactor from concrete types to interfaces
    • Fix formatTwtText template factory function
    • Fix User-Agent matching for iPhone OS 14.x that can't handle WebP correctly (even though it claims it can)
    • Fix typo around custom pod Settings struct with missing quote for pod_logo
    • Fix custom pod logo support (#358)
    • Fix public following disclosure (#379)
    • Fix an off-by-one error in types.SplitTwts() (#377)
    • Fix Uhuntu build (#376)
    • Fix option for -P/--parser
    • Fix fallback to config theme when user has no theme set
    • Fix display of published time of blog posts (#366)
    • Fix User Profile URL routes (#360)
    • Fix typo
    • Fix typo
    • Fix typos (#353)
    • Fix a bug for iOS 14.3 Mobile Safari not rendering WebP correctly (work-around)
    • Fix missing closing a (Fixes #335)
    • Fix working simplified docker-compose.yml to get up and running quickly
    • Fix a JS bug clikcing on the Write button in the toolbar to start writing a Twt Blog Post
    • Fix internal events from non-Public IPs (#332)
    • Fix Referer redirect behaviour (#331)
    • Fix deleting last twt (missing csrf token)
    • Fix goreleaser configs
    • Fix bug in UnparseTwtFactory() causing erroneous d to be appended to domains
    • Fix footer layout regression (#322)
    • Fix messaging for when feeds may possibly exceed conf.MaxFetchLimit
    • Fix the way cache_limited counter/log works
    • Fix CI
    • Fix HTML validation errors (#321)
    • Fix text overflow p element
    • Fix a JS bug on load
    • Fix tag expansion (#314)
    • Fix user able visit login and register page after login (#313)
    • Fix edge case with Subject parsing
    • Fix developer experience so UI/UX developers can modify templates and static assets without reloading or rebuilding
    • Fix header wrapping on domain (#306)
    • Fix action URL for managing pods
    • Fix Docker image build
    • Fix Docker image push
    • Fix Docker Image badges (don't yet have a jointwt Docke rHub org)
    • Fix Docker image push
    • Fix conversations for Twt Blog Posts (#287)
    • Fix blog post validation
    • Fix bad data with missing Followers
    • Fix spelling errors on register form
    • Fix bitcask dep
    • Fix a data race with session handling
    • Fix refreshing user's own feed and re-warming cache on a user deleting their last Twt (#272)
    • Fix blog posting with empty titles (#271)
    • Fix image Makefile target that 15f25c1 broke and add PUBLISH=1 variable so we publish new images again
    • Fix order of twts displayed in twt timeline (reverse order)
    • Fix data privacy by removing all user email addresses and never storing emails (#269)
    • Fix image target to not push the image built immediately (CI does this)
    • Fix LICENSE file
    • Fix image resizing for media (avatars was already working)
    • Fix bug with AddFollower()
    • Fix timeline style on mobile devices with very long feed names (#248)
    • Fix userAgentRegex bug with greedy matching
    • Fix UA detection and relax regex even more
    • Fix logic in archiver makePath
    • Fix bug in archiver to prevent use of invalid twt hashes
    • Fix concurrent map read/write bug with feed cache
    • Fix Follows/FollowedBy/Muted for external profiles
    • Fix followers view for external profiles
    • Fix bad copy/paste
    • Fix Docker build
    • Fix title of twt permalinks
    • Fix generate Make target to run rice to embed the assets after minification/bundling
    • Fix size of RSS Icon on External Profile view
    • Fix avatar for external profiles when no avatar found
    • Fix size of icss-rss icon for externals feeds without an avatar
    • Fix color of multimedia upload buttons
    • Fix bug in /settings view
    • Fix more UI/UX things on the Web App with better CSS
    • Fix typo
    • Fix spacing around icons for Post/Publish button (#233)
    • Fix potential session cookie bug where Path was not explicitly set
    • Fix name of details settings tab for Pod Management
    • Fix name of details settings tab for Pod Management
    • Fix /report view to work anonymously without a user account
    • Fix conversation bug caused by user filter (mute user feature)
    • Fix a bug with User.Filter()
    • Fix wording in Mute / Report User text
    • Fix grammar on /register view
    • Fix link to /abuse page
    • Fix JS error
    • Fix og:description meta tag
    • Fix a few bugs with OpenGraph tag generation
    • Fix URLForExternalProfile links and typo (#224)
    • Fix subject bug causing conversations to fork (#217)
    • Fix JS bug with persisting title/text fields
    • Fix API Signing Key (#212)
    • Fix video upload quality by disabling rescaling (#205)
    • Fix structtag for config (#203)
    • Fix old missing twts missing from the archive from local users and feeds
    • Fix older Twt Blog posts whoose Twts has been archived (and missing? bug?)
    • Fix MediaHandler to return a Media Not Found for non-existent media rather than a 500 Internal Server Error
    • Fix build (#198)
    • Fix responsive video size on mobile (#195)
    • Fix video aspect ratio and scaling (#191)
    • Fix Range Requests for /media/* (#190)
    • Fix video display to use block style inside paragraphs (#189)
    • Fix missing names to feeds
    • Fix links to external feeds
    • Fix ExpandTags() function so links to Github issue comments work and add unit tess (#176)
    • Fix PublishBlogHandler(o and fix line endings so rendering happens correctly
    • Fix incorrect locking used in GetByPrefix()
    • Fix blogs cache bug
    • Fix logic for when to attempt to send webmentions for mentions
    • Fix duplicate @mentions in reply (Fixes #167)
    • Fix concurrency bug in cache.GetByPrefix()
    • Fix content-type and set charset=utf-8
    • Fix wrapping behaviour and remove warp=hard
    • Fix blogs cache to be concurrenct safe too
    • Fix global feed cache concurrency bug
    • Fix all invalid uses of footer inside hgroup and make all hgroups consistently use h2/h3
    • Fix regex patterns for valid username and feed names and mention syntax
    • Fix and restore full subjet in twt replies (#163)
    • Fix the pager (properly)
    • Fix bug with pager (temporary fix)
    • Fix nil pointer in map assignment bug
    • Fix cli build nad refactor username/password prompt handling
    • Fix the CSS/JS bundled assets with new minify tool (with bug fixes)
    • Fix bug in /settings with incorrect call to .Profile()
    • Fix date/time shown on blog posts (remove time)
    • Fix metric naming consistency feed_sources -> cache_sources (#155)
    • Fix duplicate tags and mentions (#154)
    • Fix content-negotiation for image/webp
    • Fix ExpandMentions()
    • Fix dns issues in container and force Go to use cgo resolver
    • Fix CI
    • Fix feed cache bug not storing Last-Modified and thereby not respecting caching
    • Fix inconsistency in Syndication and Profile views accessing feed fiels directly instead of by the cache
    • Fix CI
    • Fix Dockerfile with missing webmention sources
    • Fix webmention handling to be more robust and error proof
    • Fix AvatarHandler that was incorrectly encoding the auto-generated as image/webp when image/png was asked for
    • Fix bug in /mentions and dedupe twts displayed
    • Fix bug causing permalink(s) on fresh new twts to 404 when linked to but not in the local pod's cache
    • Fix /mentions view logic (ooops)
    • Fix bug in register user on fresh pods with no directory structure in place yet
    • Fix typo
    • Fix bug
    • Fix ordering of twts post cache ttl and archival
    • Fix an index out of bounds bugs
    • Fix the logic for Max Cache Items (whoops)
    • Fix bug in ParseFile() which may cause all local and user twts to be considered old
    • Fix UX perf of posting and perform async webmentions instead
    • Fix bugs with followers/folowing view post external feed integration
    • Fix session leadkage by not calling SetSession() on newly created sessions (only when we actually store session data)
    • Fix leaking sessions and clean them up on startup and only persist sessions to store for logged in users with an account
    • Fix external avatar, don't set a Twter.Avatar is none was foudn
    • Fix build
    • Fix bug with caching Twter.URL for external feeds
    • Fix isLocal check in proile template
    • Fix more bus
    • Fix Twtter caching in feed cache cycles
    • Fix Twtxt URL of externalProfile view
    • Fix several bugs to do with external profiles (I'm tired :/)
    • Fix typo
    • Fix bug with DownloadImage()
    • Fix computed external avatar URIs
    • Fix external avatar negogiation
    • Fix old user avatars (proper)
    • Fix profile avatars
    • Fix profile bug
    • Fix Dockerfile (again)
    • Fix Dockerfile adding missing minify tool
    • Fix Edit on Github page link
    • Fix bug in #hashtag searching showing duplicates twts in results
    • Fix the global feed_cache_size count
    • Fix profile view and make Reply action available on profile views too
    • Fix typo
    • Fix bug in theme so null theme defaults to auto
    • Fix feed_cache_size metric bug (missed counting already-cached items)
    • Fix bug in profile view re ShowConfig for profileLinks
    • Fix another memory optimization and remove another cache.GetAll() call
    • Fix media upload image resize bug
    • Fix caching bug with /avatar endpoint
    • Fix similar bug to #124 for editing last twt
    • Fix bug in feed cache for local twts
    • Fix bug in feed cache dealing with empty feeds or null urls
    • Fix media uploads to only resize images if image > UploadOptions.ResizeW
    • Fix session storage leakage and delete/expunge old sessions
    • Fix memory allocation bloat on retrieving local twts from cache
    • Fix the glitchy theme-switcher that causes unwanted flicker effects (by removing it!)
    • Fix populating textarea when reply button is clicked for more than one time. (#124)
    • Fix repository name in Docker GHA workflow
    • Fix database fragmentation and merge on startup
    • Fix local twts lookup to be O(n) where n is the no. of source urls (not total twts in cache)
    • Fix image handling and auto-orient images according to their EXIF orientation tag
    • Fix panic in PageHandler() -- not safe to reuse the markdown parser, etc


    • Document Twt Subject Extension (#309)


    • Add support for detecting and disabling ffmpeg support for audio/video with --disable-ffmpeg as an optional configuration flag
    • Add support for fetching, storing and serving remote external feed description and following/followers counts via the API
    • Add support for fetching, storing and displaying remote feed description and following/followers counts
    • Add Root to link back to root conversations in Conversation view
    • Add Disable Gzip server setting on startup output
    • Add build-dev-site Drone CI job to build docs (dev.twtxt.net) site
    • Add Spec for Metadata Extension (#451)
    • Add shorter_permalink_title feature
    • Add yarnc --help to README
    • Add the same nick@domain and then nick_xx behaviour for keeping track of followers too
    • Add Tools section to Useer Settings and Bookmarklet that can be added to browser bookmark bars
    • Add some prompts to new users with an empty timeline
    • Add a human/crawler friendly version of /version
    • Add a SoftwareConfig struct and /version endpoint to more easily identify pods
    • Add JSON marshallers/unmarshallers to FeatureFlags
    • Add FeatureDiscoverALlPosts to the API end /api/v1/discover endpoint too
    • Add optional feature (--enable-feature discover_posts_all)
    • Add following and followers counts to default feed preamble metadata
    • Add a hacky temporary solution to squelch flip-flopping followers (#450)
    • Add a ~/:nick/post/ route for blog posts
    • Add support for Muting/Unmuting external pods (cross-pod)
    • Add a POSIX Shell script to run preflight checks as part of the default Makefile target
    • Add handlers for ~/:nick
    • Add --json flag to yarnc timeline command for seeing and processing the raw JSON from the API
    • Add WhitelistedDomains support to Manage Pod settings
    • Add content-negogiation for /twt/:hash handler
    • Add CI for dev.twtxt.net
    • Add native support for Gopher (gopher://) feeds
    • Add support for forking conversations in the Web UI
    • Add Drone CI step to build and push to prologic/yarnd (Docker Hub)
    • Add a 2nd docker image publihs step
    • Add separate docker image publish step
    • Add Reset User feature to Pod Management interface
    • Add a blake2b_base32 cli tool
    • Add i18n to deps and generate active.*.toml
    • Add missing lang (i18n) files to Docker image builds
    • Add preamble to top of all twtxt feeds (#384)
    • Add check for Bad Request in CLI and fix PEBKAC problem of entering a bad Pod API Base URL :D
    • Add support for bookmarks (#372)
    • Add support for draft blog posts and fix deletion (#367)
    • Add Node.js reference implementation of Twt Hash algorithm (#365)
    • Add @twtxt FOLLOW events for feeds too
    • Add information about ffmpeg dependency. Remove repeated FreeBSD section. Fix a formatting error or two
    • Add missing CI step for tools deps
    • Add local Drone CI config
    • Add support for expanding Twtxt mentions and tags in Twt Blog posts
    • Add support for bookmarklet(s)
    • Add Content-Length to TwtxtHandler for /user/:user/twtxt.txt URIs so Pods know what the size of feeds are
    • Add feed_limited counter to measure no. of feeds affected by conf.MaxFetchLimit
    • Add SameSite session cookie policy and CSRF Verification to prevent Cross-Site-Sciprint (XSS)
    • Add msgs.Inc() and msgs.Dec() for messages
    • Add Pod config handlers and API endpoints (#297)
    • Add rice-embed.go so the go get works
    • Add net/http/pprof to debug mode
    • Add improved async media upload endpoint for the API (backwards compatible) (#274)
    • Add front matter to pages
    • Add Atom link for Pod's timeline (aka Discover) on the bottom of every page
    • Add ValidateFeeds job to cleanup bad feeds on twtxt.net
    • Add timeline command to twt (command-line client)
    • Add GET support for /api/v1/settings endpoint to retrieve user settings/object (#256)
    • Add /api/v1/settings API Endpoint for updating user settings (#252)
    • Add better support for UA on fetches with token callback (#249)
    • Add Follows/FollowedBy attributes to user profiles
    • Add footnote parsing for Twt Blogs
    • Add HardLineBreak and NoEmptyLineBeforeBlock to Markdown parser options
    • Add protection against brute force login attempts at user accounts (#241)
    • Add FilterTwts to conversation view and treat /conv URIs a bit like /twt (permalink) ones
    • Add a RealIP middleware to capture the real ip of clients when we're behind a proxy
    • Add better page titles to improve SEO
    • Add /api/v1/conv ConversationEndpoint() to API
    • Add DEBUG=1 capability to Makefile for debug builds with real-time static (css/js/img) asset modifications
    • Add missing FilterTwts() calls to API
    • Add Muted property to Profile objects in ProfileResposne for the API (#235)
    • Add improved CSS for the timeline view
    • Add feed validation to Follow requests from Web App and API to avoid invalid feeds (#228)
    • Add /mute and /unmute API endpoints (#230)
    • Add /support and /report API endpoints (#231)
    • Add switch on /register view to encourage new users to read the community guidelines and agree to them (EULA)
    • Add support for Pod Owners to manage users (add/delete) (#227)
    • Add a fast-path to User.Filter() when .muted is of length 0
    • Add support for muting/unmuting intolerable users (#226)
    • Add text to /register view that links to the /abuse page
    • Add blank Abuse Policy (to be filled out)
    • Add OpenGraph Meta tags to Twt Permalinks (#225)
    • Add support for uploading audio media (#222)
    • Add MarkdownText field to Twt (#223)
    • Add Tags and Subject as dynamic fields to Twt.MarshalJSON() for API clients (#219)
    • Add support for managing a pod's configuration as a pod owner (#170)
    • Add Hash to Twt and Slug to Twter outputs when Marshalled as JSON for the API (#206)
    • Add archive_dupe counter
    • Add support for persisting Title and Text in Twts and Twt Blogs to local storage (#193)
    • Add support for auto-generating poster thumbnails for uploaded videos
    • Add playsinline as allowed attr on video elements
    • Add ffmeg to Dockerfile runtime image and remove debug loggging (#188)
    • Add support for older video media (locally) (#187)
    • Add support for video uploads and hosting (#186)
    • Add blogs, archived and cache stats and cache_blogs to metrics
    • Add BlogPost PublishedAt and Modified timestamps
    • Add support for editing twt blog posts (#171)
    • Add missing mu.Lock() for loading older twts cache
    • Add support for newlines in Twts (short-form) by using Unicode LS (\u2028) to encode them (#166)
    • Add Timeline navbar item and cleanup Navbar
    • Add support for editing/deleting your last Twt in a Conversation view
    • Add Ctrl+Enter to Post a new Twt
    • Add link to Blog on Twts associated with a Twt Blog Post
    • Add formatDateTime template function to shorten the human display of Twt posted date/time shorter when it wasn't that long ago
    • Add a border around avatar images
    • Add support for style attr on some HTML elements as an option for some users
    • Add integrated support for conversations (#161)
    • Add a O(1) lookup for a types.Twt by hash in the global feed cache (cahced on demand)
    • Add /blogs view to display all twt blog posts for an author (#160)
    • Add unit tests for types.Twt.Subject() and fix the regex (#157)
    • Add unit tests for types.Feed (#156)
    • Add a note about having to be logged in to comment on blog posts
    • Add better UI/UX around the blog view with comments in reverse order and some nice headings
    • Add support for long-form posts (blog posts) with integrated twt(s). (#152)
    • Add remote mention syntax @user@domain (#151)
    • Add twtd_server_sessions metric
    • Add Token model and view for managing API Tokens (#135)
    • Add vendored version of github.com/prologic/webmention since it has detracted slightly from standard webmention handling
    • Add a Remember Me to /login view
    • Add a new SessionStore that is a caching/persistent store
    • Add MergeStoreJob to merge the store once per day
    • Add local twts to mentions view in addition to feeds the user follows
    • Add a DiskArchver that implements a Cache TTL (#138)
    • Add more candidates to GetExxternalAvatar() and rearrange preferences
    • Add a db.Merge() call after startupJobs() to free memory on database compaction possibly after some cleanup jobs
    • Add a GenerateAvatar() func and use github.com/nullrocks/identicon for identicons
    • Add loading=lazy attr to all images to lazy load images on supported browsers
    • Add post form to external profile view
    • Add improved external feed integration
    • Add .gitkeep files for data directory layout
    • Add missing HEAD handler for /externa/:slug/avatar
    • Add support for WebP image format (#130)
    • Add tooling to combined and minify all static css/js assets into a single file and request (boosting load times)
    • Add external avatar to /external view
    • Add support for fetching, caching and displaying external avatars
    • Add /robots.txt view
    • Add post form on profile view and puts profile links in a 2nd column
    • Add user preferences for theme in /settings view
    • Add target=_blank to Config/Twtxt/Atom Profile Links
    • Add link to user config on /settings view
    • Add server_info metric with version information
    • Add Grafana Dashbaord
    • Add /user/:nick/config.yaml handler (Closes #36)
    • Add debug-only memory profiler to debug some memory bloat
    • Add a Uploading to the Upload button tooltip when its processing the media
    • Add a paper-plance icon to the Post button
    • Add profile links to /settings view to be consistent with the profile view


    • Update CHANGELOG for 0.2.0
    • Update the footer of the base template to remove James Mills (the original author/creator) and instead link to Yarn.social as the primary branding
    • Update to Bitcask v0.3.14
    • Update bitcask to v0.3.13
    • Update README
    • Update README a little bit and add Drone CI badge
    • Update docker image publication
    • Update deps
    • Update about.md
    • Update stale workflow
    • Update privacy.md
    • Update icon used for bookmarking Twts (Closes Viglino/iconicss#21)
    • Update production example docker + traefik deployment
    • Update README.md
    • Update README.md
    • Update deps
    • Update README
    • Update external feed source URI(s)
    • Update Go module path to github.com/jointwt/twtxt and remove committed .min.* and commit rice-embed.go insted
    • Update links to Related Projects
    • Update README.md
    • Update bundled CSS
    • Update abuse.md
    • Update about.md
    • Update Grafana Dashboard
    • Update Grafana Dashboard
    • Update Grafana Dashboard
    • Update Grafana Dashboard
    • Update Grafana Dashboard
    • Update Grafana Dashboard
    • Update Grafana Dashboard
    • Update Grafana Dashboard
    • Update Grafana Dashboard
    • Update Grafana Dashboard
    • Update README.md
    • Update AUTHORS (#131)
    • Update Grafana Dashboards and make all panels transparent
    • Update Grafana Dashbaord with fixed Go Memory panel
    • Update Grafana Dashbaord
    • Update README.md
    • Update README.md