v2.0.3 Latest
October 18, 2026
New 7 Improve 13 Fix 29 Security 8 Dev 3 Compat 1
New
- Members can report or block someone from the ⋯ menu on their profile, which hides that member's topics and replies and stops their messages without telling them.
- Edit Profile lists every member you have blocked, 20 a page, with an Unblock button for each.
- Deleting Jetonomy now keeps your community unless an administrator ticks "Remove all community data when Jetonomy is deleted" under Settings > General > Data.
- A Recount counters button under Dashboard > Quick Actions rebuilds topic, reply, member and vote counts from your content.
- Jetonomy can be installed with Composer as wbcomdesigns/jetonomy.
- The author of a scheduled topic, or staff, can move or cancel the schedule from a Change time form on the topic page.
- Reports on the same item merge into one moderation card with the reporter count and reasons, and one decision resolves them all.
Improve
- Reading a notification updates every unread badge on the page straight away, and the bell count refreshes when you return to the tab.
- A silenced or banned member who tries to post, vote, report or upload is told why, on the space, new-topic and topic pages as well.
- Notifications and emails now name the actor and the space, and the staff report email's Review in Mod Queue button opens the moderation queue.
- Settings > Email lists every placeholder, with Preview and Send test using realistic sample values, and a blank template field sends the default shown there.
- Search ranks an exact title phrase first, highlights matched words, and shows the true match count in the header.
- Space cards show your own role (Member, Moderator or Admin) instead of the join policy.
- Spaces and Content in wp-admin can be searched and sorted, and the Users list names the space of a space ban.
- Invite links, join requests and the admin invite list load in pages, so long lists no longer drop rows.
- Load More skips topics already shown, reports a failed fetch, and moves focus to the first new row.
- Join request approvals show the same confirmation on the website as in wp-admin.
- Reply polling on an open topic stops when the topic is deleted or access is lost, and backs off after errors.
- Post Topic and Post Reply stay above the fixed tab bar on phones, and dropdowns open above it.
- Links in posts use the accent colour with an underline, mentions read correctly in right-to-left text, and member-written text follows its own direction.
Fix
- A reply that @mentions someone who would also be notified as the topic author or a follower sends them one notice and one email.
- Unfollowing a space or topic removes that follow, not your most recent one.
- A second moderator's Close or Pin no longer undoes the first, because the buttons now set the state they showed.
- Editing a topic or reply from an out-of-date tab is refused instead of overwriting newer changes.
- A topic link inside a private space shows the same "not found" page as a missing topic, and the private space page names the space for visitors.
- A space on a boxed theme such as Reign no longer squeezes its description beside the stats and buttons.
- Clearing the Community Base URL field and saving keeps your community at its current address instead of breaking every community link.
- Deleting a space removes its topics, replies and related data, and a database failure keeps the space instead of half deleting it.
- Topics in an archived or locked space no longer offer reply, quote or log in to reply, and Reply and Quote no longer show where you cannot reply.
- Members banned site-wide no longer appear on the leaderboard, and an empty week or month says so when All time has members.
- Trashing or deleting the accepted reply clears the accepted answer, and restoring it sets it back.
- Moderators no longer see Ban, Silence or Lift on rows they are not allowed to act on, and reports already handled by someone else say so.
- Self-votes are refused everywhere and the vote control explains why.
- Trashing or restoring a topic now moves its repliers' reply counts, and the home welcome counts refresh after a recount or import.
- Import counts agree across the import note, the result, Past imports and the command line.
- The home welcome shows only Log in when registration is off, and the topic and reply composers have accessible names for screen readers.
- Saving a profile with a refused display name no longer saves half the profile.
- Resend confirmation on the Login block replaces the error and reports a cooldown instead of a false "on its way".
- The mention picker shows initials when a member has no avatar, and the next word no longer loses the mention link.
- Settings shows the white-label brand name, and the access rule Trust Level hint now says 1 to 5.
- Deleting the plugin with data removal ticked also clears its scheduled jobs, licence check and widget settings.
- The report dialog stays open with your reason and details when sending fails, and says the request did not reach the server.
- Deleting notifications updates the All, Unread and type counts on the page straight away.
- An invite page left open too long says it expired and offers Join again instead of silently doing nothing.
- The category in a topic's breadcrumb links to the category page.
- A failed Approve in the moderation queue says the request did not reach the server instead of blaming another moderator.
- Moderation report cards say who reported the item, and Trash and Approvals open on the tab that holds items.
- Editing a reply in wp-admin shows its plain-text preview right away instead of raw HTML.
- Categories created by an import get a readable address instead of a number.
Security
- Topics, replies and spaces you cannot see now answer exactly like missing ones on every write route, reply read and live update, so their existence is not revealed.
- A topic in a hidden space no longer shows its title in the browser tab, and hidden spaces, private spaces and categories you cannot see hide their names in titles and headers.
- Bookmarking, following or voting on a topic you cannot read no longer reveals whether it is held for review or exists.
- Followers, mentions and notification emails reach only people who can still read the topic, so a hidden or left private space delivers no topic titles.
- Lifting a restriction now needs the authority that issued it, IP bans are lifted only by administrators, and IP bans refuse loopback and reserved addresses.
- A member's silence or ban is visible only to staff and that member, and last-seen times show exact values only to the member and staff.
- Space access now ends when its access rule is deleted or narrowed, and only site administrators can manage access rules.
- Imported titles are stored as plain text, so escaped markup in a source title never becomes live.
Dev
- Close and pin routes accept closed and pinned values to set an exact state, GET /subscriptions filters by object, and GET /link-preview returns an empty preview for URLs it will not fetch.
- New filters jetonomy_send_instant_email and jetonomy_profile_notification_fields, and the jetonomy_allow_self_upvote filter is removed.
- List routes accept per_page as well as limit, and deleting notifications returns the fresh tab counts.
Compat
- Aligned with Jetonomy Pro 2.0.3. Install both updates together.
New 14 Improve 46 Fix 50 Security 30 Dev 9
New
- Owners can rename every trust level under Settings > Permissions, and members now see the level name on profiles, hover cards and badges, with level 5 called Veteran.
- A new setting lists private spaces to logged-out visitors as locked previews that explain how to request access, off by default.
- The leaderboard shortcode, widget and block can show this week's or this month's top members, and show each member's avatar.
- The Login block on its own page tells a signed-in member who they are signed in as, with links to the community, their profile and log out.
- Space pages link to their moderation queue, with a count, for space admins and site moderators.
- A switched-off feature such as Messages shows a "page not available" page inside the community instead of a blank page.
- Closed topics now show a "Closed" badge next to Pinned and Private in topic lists, and feed cards gain the same badges.
- Topics and replies show "edited 2 hours ago" to everyone when the edit came more than a minute after posting, with the exact time on hover.
- The reply composer quotes the first line of the reply being answered and links back to it, and a nested reply shows "in reply to" its parent at every depth.
- Owners can now unarchive a space they handed over, and the archived banner names the new owner; the former owner stays on as a space moderator.
- Admins see an error notice on every admin screen when Plain permalinks are active, linking to Settings > Permalinks, because community URLs cannot work with Plain permalinks.
- Members can withdraw a join request they are still waiting on.
- Reporting a topic, reply or member asks for a reason (spam, offensive, off-topic, harassment, other) and optional details.
- Site staff can ban an IP address from Jetonomy > Users, and lift it with the other restrictions.
Improve
- Renamed terms for spaces, topics, replies, members and categories now apply on every wp-admin screen, in notification preferences, empty states and messages, and read correctly with any word you choose.
- Private spaces always take join requests or invites, existing private spaces set to Open now take requests, and members see a pending state after asking to join.
- Every space card shows a Private badge and how to join, and the request form sits inside the private space notice with a clear Request to join button.
- The community home shows the first six spaces of each category with a View all link, so large communities stay easy to scan.
- Topic and reply menus follow the Permissions screen, so a role you allow to edit, delete, pin, close or move sees those actions and a role you do not allow does not.
- Site moderators can moderate in every space they can read without joining it first.
- The Manage community users, Manage badges and Manage extensions permissions now open their screens and API for staff you delegate them to.
- The member bio is the WordPress Biographical Info field, so wp-admin and the community profile always match, and existing bios are copied over on update.
- Vote buttons show clearly when your vote is active, say "Remove your upvote" there, and confirm every topic and reply vote as added or removed.
- Members who reach their daily vote limit can still take back a vote.
- wp-admin and the community use one neutral "Lift restriction" button and dialog for bans and silences.
- The idea bonus is awarded once when an idea first reaches the roadmap and taken back if it leaves, and a moderator moving content to Trash counts as removal, the same as Spam.
- Popular tags, tag pages and tag search count and list only topics the visitor can read.
- The Trust Levels table lists exactly what each level changes, including the CAPTCHA skip at level 2.
- Settings > Who can create spaces is the single control for creating spaces, and existing choices carry over.
- Access rule and join request buttons line up in one row in wp-admin and wrap neatly on phones.
- Only a space's owner or a site administrator can demote or remove the owner, so a co-admin can no longer lock an owner out of their own space.
- Site moderators skip the spam check like other staff.
- The notifications page names join requests, their answers, reactions and reviewed reports.
- Merging topics now moves votes, subscribers and bookmarks to the target and keeps the duplicate's opening post as a reply "Merged from <title>" with its attachments.
- Every Settings sidebar row, including the Pro extension tabs, now has an icon and lines up with the others.
- All community pages use the Community Title setting in the nav label, browser tab title, breadcrumbs, admin bar and home heading.
- Every space tab (Discussions, Members, Roadmap) shows the same space header with cover, description, counts and the Join, Follow and Leave buttons.
- The space form keeps visibility and join policy consistent, so choosing Hidden switches join to Invite only, with a note explaining why.
- The roadmap status picker is labelled "Roadmap status", shows "Not set" until a stage is chosen, and highlights the chosen stage with its colour dot.
- A deep-linked reply highlights briefly and then fades instead of staying highlighted.
- The Move topic dialog reads "Choose a space..." once spaces load, instead of staying on "Loading spaces...".
- Every user-facing string is now translatable, counts use each language's real plural forms (including "Show N replies" and "N new replies"), and the language files are updated.
- Member names in notifications, moderation lists, profile structured data, the leaderboard and members shortcodes, the user panel block and profile titles now follow the Name display setting.
- Popular lists (space lists, tag pages, the global feed, shortcodes and search) break vote ties by reply count, so a young community no longer reads like Newest.
- Creating a space from the front end follows it for its creator.
- On BuddyX and BuddyX Pro, community pages are wrapped like the theme's own pages, so a short page keeps the footer in the right place; the `jetonomy_theme_content_hooks` filter adjusts this.
- Setup wizard, Compose Topic block help, Integrations cards and the admin footer now describe what each feature actually does; the Learnomy card says course-gated spaces need Jetonomy Pro.
- The account panel highlights the page you are on and announces it to screen readers.
- With BuddyNext active, community pages show its notification bell only, since it already carries forum notifications.
- Opening an invite link shows a Join button; joining happens when the member clicks it, so link previews can never add anyone.
- Invite links set to expire on a date now work until the end of that day in your site's timezone, and an unreadable or past date is refused.
- Archived and locked spaces show Follow instead of Join, and accept no new members by any route.
- Private and invite-only pages name the space and show its description.
- Members are emailed when their join request is approved or declined, and can turn this off in their preferences.
- Settings > Emails lists every email the community sends, including reactions, report reviews, join answers and the account confirmation email.
- The Activity Log reads like the Dashboard: titles, plain reputation changes and no raw codes.
- Flags in a space's own moderation queue show the topic and the flagged text.
- Admin screens follow your Terminology everywhere, and White Label brand names replace Jetonomy in admin headings.
- The Permissions role table scrolls with its first column fixed, and trust level names, revisions and the Activity Log retention setting are clearer.
- An empty space invites a first post, and a topic with no replies invites a first reply, only to visitors who can post there.
Fix
- Members whose display name is a reserved word, such as admin, can save their profile again.
- Refused actions such as reaching the pin limit show their message even when the community navigation is hidden.
- Members who cannot vote see why, in topic lists as well as on the topic page, instead of a vote button that does nothing.
- Dismissing a report on a reply now restores the author's reputation, as it already did for topics.
- The More options menu no longer opens empty for a role that can only moderate.
- Messages no longer return a 404 on Windows servers.
- The personal data export includes the member bio again.
- Community pages outside a space no longer write a database notice to the debug log.
- On block themes, community pages now load the header and footer styles, so the site title, menu and buttons look like the rest of the theme.
- With The SEO Framework active, community pages no longer show "Untitled - Site" or a second set of social tags.
- Saving Settings > Permissions no longer cuts off roles without defaults (Customer, Student and similar); a notice with a one-click button restores access for roles already saved empty.
- The Upload media permission now fully controls uploads, so unticking it stops a role, and the image buttons and avatar and cover upload controls hide for members who cannot upload.
- The Permissions tab lists only the trust level abilities that are actually enforced.
- Imported demo badges no longer show "(none)" and are now awarded.
- The last admin of a space can no longer be removed or demoted from wp-admin, the front end or the API, while membership expiry, group leave and automation removals still always apply.
- Users > Ban no longer offers a Space Ban that banned nothing, and stored space bans that never applied are cleaned up on update.
- Deleting a space no longer orphans its topics and replies after a database error; the purge stops with the space intact and retries.
- Deleting a space with more than 500 topics locks it at once and finishes in the background, and the screen says so.
- A reply can no longer be created under a parent that is missing, trashed, spam or in another topic.
- Merging topics keeps a single accepted answer, and splitting a thread moves the whole reply subtree and un-accepts a moved answer properly.
- Topic counts stay correct when a topic is moved between spaces, when a thread is split, and when a draft or trashed topic is moved.
- Merging a topic no longer joins the donor's author to the target space.
- Handing a space over now picks a valid heir, ignoring banned members and the current owner, and falls back to reassigning the author if a privacy hand-over fails.
- Account deletion and privacy erase no longer blank a space's owner when nobody can inherit it, so it is retried.
- Composer paste and drop of images follow the image button, so no upload is attempted when uploads are off.
- Space memberships can no longer be created for a space that no longer exists.
- The Delete permanently button in the danger zone is red again.
- Delete permanently now explains an empty or wrong confirmation name, whether you click the button or press Enter.
- The Dashboard's Review flags link opens the Flags tab.
- Logged-out visitors see Log in to reply as a button on topic pages.
- Saved times on the Bookmarks tab are no longer cut off.
- Approving a join request no longer tells the member they are in when the join did not happen, and a decided request cannot be decided again.
- Two people joining or using the last invite at the same moment no longer double-count members or exceed the invite's limit.
- Deleting a topic no longer makes a quiet space look recently active, and archived spaces are no longer counted in their category.
- The Spaces admin screen and its actions now need the same Manage spaces permission.
- Join request and invite lists are paginated, and approve or deny failures now show a message.
- Deleting a space also clears its import records, so re-running an importer cannot attach content to a deleted space.
- Archived and locked spaces no longer offer a composer that the server then refuses.
- A space's moderation queue button opens the tab its count is about.
- The edited Mention email subject and body are now used.
- Taking back a vote no longer leaves "0 people voted" in the bell.
- Removing the last bookmark shows the empty state straight away.
- Re-importing demo data no longer awards the site admin the same badge again.
- After removing a reported topic, opening the Trash tab shows it straight away instead of an empty list.
- The email telling a member a moderator removed or approved their content names it with your Terminology and links to the community, not to a mod queue they cannot open.
- Next and Previous on member lists, tag pages, notifications and moderation queues no longer end on a 404 on sites that rewrite paged links.
- Profile links work for members whose username is an email address or contains spaces or other special characters, and older profile links still open.
- The email telling a member their join request was answered is headed "Your join request was answered".
- The "View all spaces" link on the community home has room above it instead of touching the space cards.
- A space hand-over that fails part-way is undone, so the proposed owner is not left as a space admin.
Security
- Site moderators can no longer edit, trash, approve or resolve reports on content in private spaces they cannot read, and their moderation queues, report lists and counts leave those spaces out.
- Members can no longer report content they cannot see, which also stops reports being used to learn which private topics exist.
- A member's display name can no longer run script in wp-admin's member search or Users screen.
- Files posted in the community are no longer listed to visitors through the WordPress media API.
- The live updates API no longer shows members activity from private spaces, joins or moderation actions.
- Staff with delegated user management can no longer raise their own trust level, each other's, or an administrator's or moderator's.
- Sitemaps never list private spaces or their topics, including when private spaces are shown to visitors.
- Setting a new profile picture or space cover through the REST API now needs the upload permission, as the forms already did.
- Restoring removed content or declining an idea only gives back reputation that was actually taken.
- A private reply's full text was returned by the replies API to anyone, including logged-out visitors; it is now hidden like on the thread.
- Private replies no longer show their first words on profile Replies tabs (community and BuddyPress), which now read "Private reply".
- Private replies are now excluded from reply search and counts, Q&A structured data, the accepted-answer callout, reply attachments, @mention notices, subscriber notifications and split-to-topic.
- Hidden spaces no longer confirm they exist or name their admins through the privileged-members API; private spaces still show who runs them.
- The tag page's structured data and BuddyNext hashtag "Related discussions" no longer expose titles of private topics, topics in private spaces or unpublished topics, or the names of anonymous authors.
- Anonymous authors now stay anonymous in wp-admin lists, oEmbed cards, the Activity Log, Dashboard activity, Revisions and approval cards; only an admin's logged Reveal author shows the name.
- A space owner can no longer reverse a lock or archive that a site admin set; owners can undo only their own hand-over, and only while they still hold the space admin role and are not banned.
- Only the owner or a site admin can hand a space over.
- Merging a private topic is refused, so Private no longer turns public through a merge, and an unapproved opening post is never published by a merge.
- Splitting a thread that contains private replies is refused, and a split topic is named only when it sits in a public space.
- Replies could notify an author about a reply in a topic they may not read when a parent from another topic was used; that is no longer possible.
- The Abilities "mark notifications read" tool only touches the caller's own notifications.
- Members banned from a space can no longer join it through a join, a request, an invite or an approval.
- Breadcrumbs, category space counts and tag lists no longer reveal hidden categories, private spaces or tags used only in private topics.
- Access rules need a value that can work, so a trust level rule with no level can no longer admit every member.
- Space admins can no longer edit a space a site admin archived or locked; unarchiving still works where allowed.
- Topics in hidden spaces now answer exactly like missing ones, so a guessed link no longer confirms they exist.
- The REST API no longer returns members' usernames (an email address on some sites) to visitors; the author_login, actor_login and mention-suggest login fields now carry the public handle.
- A profile page's meta description shows the member's public handle instead of their username, which on some sites is an email address.
- A join request denied or withdrawn while it was being approved no longer grants membership.
- Joining a linked BuddyPress or FluentCommunity group no longer adds anyone to an archived or locked space, or to a space that bans them.
Dev
- New filter jetonomy_space_preview_limit sets how many spaces a category previews, and REST user responses add trust_level_label.
- A pre-commit check now fails on hardcoded space, topic, reply, member or category nouns in translatable text.
- Error codes returned by the REST API and Abilities are now prefixed `jetonomy_` (for example `jetonomy_not_found`, `jetonomy_invalid_url`, `jetonomy_user_silenced`).
- The `jetonomy_post_card_after_badges` hook now fires for feed cards as well as topic rows.
- The `jetonomy_space_transferred` hook now fires once, only on a successful hand-over, with the real previous owner.
- The `jetonomy_theme_content_hooks` filter sets the theme hooks community pages are wrapped in.
- Every public hook now has a documented description and `@since` version, and the hooks reference is regenerated.
- REST: POST /invite/{token} accepts an invite (it was GET); the invites and join-requests lists take limit and offset; space responses include url; invite responses include expires_label.
- New DELETE /spaces/{id}/join-requests/mine, POST /moderation/ban accepts type ip_ban with ip, space responses keep their url, and new hooks jetonomy_join_request_withdrawn, jetonomy_member_message_url (Message button link from another messenger) and jetonomy_brand_name.
New 3 Improve 24 Fix 47 Security 2 Dev 9
New
- The Dashboard can import the demo community again after it was skipped during setup or removed, and the REST API can check, import, and remove it.
- Each sub-category on the community home and its parent's page has a button that shows its spaces right there, without leaving the page.
- A search plugin such as Meilisearch or Elasticsearch can now power the search page, the REST API, and the app, and is kept up to date as topics and replies change.
Improve
- Re-running an import skips everything already imported and adds only new content, and the Import screen reports how many items were already imported.
- A site that imported from bbPress on an earlier version can re-run the import to bring in the private, hidden, and BuddyPress group forums the old importer skipped, without duplicating anything.
- Logged-out community pages can now be stored by page caches such as LiteSpeed Cache and WP Rocket.
- Moderators can restore or permanently delete trashed topics and replies from the moderation queue, the topic page, and wp-admin, and the Content screen no longer lists trashed topics under All.
- The Import screen explains replies that were not imported because their topic was pending, spam, or trashed, instead of saying nothing was skipped.
- Forum data from a deactivated or uninstalled bbPress, wpForo, or Asgaros is shown as ready to import instead of as an active plugin.
- bbPress category forums import as Jetonomy categories instead of empty spaces, and large BuddyPress groups are added in batches so big imports do not time out.
- Imports of very large forums no longer slow down as they grow.
- Changing a space so it no longer takes join requests now settles pending requests: members join if the space opened, and are told no if it became invite-only.
- Notifications no longer lead to banned members or to posts and replies that were removed.
- The remaining English-only text in admin screens, keyboard shortcuts, and the composer can now be translated.
- Scheduled topics publish at their scheduled time instead of up to an hour late, and scheduling confirms the time instead of saying the draft was saved.
- The reply and topic editors gain a Code block button, and no longer claim Markdown support the editor does not have.
- Sub-categories appear on the community home and category pages as links that show how many spaces each holds, and every space picker lists them indented under their parent.
- Space and sub-category pages show a linked breadcrumb back through the category and its parent category.
- The community home shows each category's description under its name, separates categories with a divider, and uses the category colour as an accent.
- Every place that names topics follows a renamed Topic label, including empty states, profile tabs, drafts, search filters, the leaderboard, moderation screens, and notification emails.
- A held topic or reply that a moderator approves, or marks as not spam, now notifies subscribers and mentioned members, reaches activity feeds such as BuddyNext, and credits the author's reputation, the same as content posted directly.
- Notifications to spaces and topics with many followers go out in batches in the background, so every follower is notified on large communities.
- New database indexes keep trending topics, follower notifications, leaderboards, and the old-notification cleanup fast on large communities.
- Tag, drafts, and search pages load their topics with a fixed number of queries however many topics they list.
- Searches for very short words match topic titles only, so they stay fast on large communities.
- Community pages load the smaller minified stylesheets and scripts.
- A visitor opening a space invite without an account is offered Create free account, and returns to the invite after signing up.
Fix
- Importing the demo community no longer runs out of memory on sites running Query Monitor, and an import that stops part way can still be removed.
- wpForo and Asgaros re-imports no longer miss topics posted to an already-imported forum, and Asgaros no longer reports database errors on a re-run.
- bbPress imports keep sticky topics and threaded replies, and re-running the import restores threading on replies an earlier version imported flat.
- Imported BuddyPress group forums are linked to their group, and the group's members get access to the space.
- After changing the community base URL, a real page at the old URL is no longer redirected to the community.
- Changing the community base URL from the default now redirects old links instead of leaving them broken.
- The Spaces list in wp-admin shows the current community base URL instead of always showing /community/.
- The reply editor toolbar wraps on narrow screens instead of cutting off its last buttons.
- Permanently deleting a topic now removes its replies, votes, bookmarks, tags, subscriptions, and notifications instead of leaving them behind.
- My Subscriptions shows how you are actually notified, so it no longer says Web + Email when email is off.
- Leaderboards and the Top Members widget rank only members who have earned reputation.
- Topic views are counted by the browser after the page loads, so topic pages set no cookie, page caches can store them, and cached visits still count.
- Imported forum names with emoji get clean URLs, and the import progress bar no longer passes 100%.
- The Full Width and Hide sidebar layout options no longer stretch the theme header or hide footer widgets on Reign, BuddyX, and BuddyX Pro.
- Denying or approving the same member's join request a second time now works.
- Accepting an answer again no longer awards the reputation twice.
- The keyboard shortcut help Close button is readable in dark mode, and the profile hover card uses your renamed topic label.
- Deleting a member no longer archives their spaces when the site admin is already a space admin there.
- Wide tables in topics and replies scroll sideways on phones instead of breaking every word, and the Post Topic button fits on small screens.
- A trashed topic no longer offers its author Delete or Edit, deleting it again returns an error instead of a false success, and delete confirmations focus Cancel.
- Scheduling rejects past dates, a missing time, and a duplicate submit.
- Accepting an answer twice at the same moment, such as a double tap, awards the reputation once.
- Creating or editing a space with an unknown type is refused on every screen and in the REST API instead of storing an empty type.
- Imported forums and topics titled in Hindi, Bengali, Tamil, and other scripts with vowel signs keep readable addresses.
- wpForo imports bring over likes from current wpForo versions, in batches that survive large boards and never duplicate on a re-run.
- Spaces filed in a sub-category no longer disappear from the community home and the navigation block.
- Deleting a category is refused while it still has sub-categories or active spaces, in the REST API as well as wp-admin, instead of leaving them unreachable.
- Categories nest two levels deep on every screen, in the REST API, and in imports, and deeper, orphaned, or looping categories from earlier versions are moved under their top-level category on update.
- The composer button keeps the space type's wording after you choose Publish now, and a failed draft save no longer relabels it as posting.
- Settings no longer claims Regular members can create spaces, and the White Label upgrade note describes what Pro White Label actually changes.
- Category management in wp-admin checks the Manage categories capability, the same as the REST API.
- Topics and replies waiting for approval no longer send mention notifications, push, or email, or award reputation, before a moderator approves them.
- Spaces that require approval now hold every new topic and reply, including drafts and scheduled topics when they publish, replies sent by email, and content created through the Abilities API.
- Approve, Not Spam, and Trash in the wp-admin content screens now resolve open reports and notify members the same way the moderation queue does.
- Approving a topic or reply that was already live and then held no longer notifies everyone a second time.
- Topics created through the Abilities API no longer count twice on the author's profile.
- Purging a space now clears its notifications from a connected community bell, such as BuddyNext, for the space and every topic and reply in it.
- Adding a category with a name that is already used now works instead of failing, and changing a slug to one that is taken explains why.
- The category Color setting is offered only for top-level categories, where the colour is shown.
- Removing demo data also removes its notifications, bookmarks, and subscriptions, and no longer fails when run outside wp-admin.
- The search page and the REST API return the same results for the same search, and the search page no longer offers Load More on its last page.
- The Roadmap page has a main content landmark for screen readers, and My Subscriptions shows its breadcrumb.
- The edited time of topics and replies is stored in UTC, so apps no longer show it shifted by the site's time zone.
- Topic and reply edits made in wp-admin now reach webhooks and other integrations, the same as edits made on the site.
- Running the setup wizard again with a category or space name that already exists now works.
- The pending flag count in the moderation queue goes down as each flag is resolved, without a reload.
- The recent topics, top spaces and space leaders shortcodes keep a stable order when items tie, so the same topic no longer drops in and out of the list.
Security
- Quoting a topic or reply can no longer run script hidden in the quoted text.
- Anonymous topics and replies no longer reveal their author in page metadata, structured data, or the Recent and Trending widgets.
Dev
- New POST /posts/{id}/view REST route counts a topic view, and GET /posts/{id} no longer counts one, so apps call the new route when they show a topic.
- wp jetonomy reply unaccept is new, reply accept marks the reply itself, space create accepts the feed type, and space delete --mode=purge --yes skips the prompt as documented.
- GET /categories includes spaces on sub-category nodes, and its tree is two levels deep.
- The free plugin no longer registers an Ollama AI provider or runs a hidden AI spam check. AI features are part of Jetonomy Pro.
- The message notification type is part of the community notification contract, and the jetonomy_check_content filter now runs on every create and publish path.
- New jetonomy_breadcrumb_placement filter renders the breadcrumb inside the main content area on every community page.
- New Search_Query_Adapter interface and jetonomy_search_adapter filter, and the jetonomy_search_query_args filter's return value is now used.
- New jetonomy_community_notification_read action and Notification::mark_read_for_object() let a host community mark one member's notifications as read.
- New GET, POST and DELETE /admin/demo-data REST route; the jetonomy_cleanup_sample_data AJAX action is removed.
v2.0.0
September 23, 2026
Improve 2 Fix 11 Compat 1
Improve
- Action buttons, vote and bookmark toggles, admin icon alignment, and list-table headers are now consistent across every surface, not just the ones originally reported.
- BuddyPress surfaces use the design-token layer and support dark mode.
Fix
- Category and space visibility is now enforced on every read path (search, listings, REST), not just stored as a setting. A space inside a hidden category could still surface through search or a filtered listing.
- The media cleanup sweep no longer deletes images that are still in use.
- Several settings that appeared to save (reputation overrides, the verification email's accent color, and others) now actually apply.
- Reply, space, and leaderboard counters are recounted automatically in the background after upgrading, repairing drift accumulated before these write-path fixes, then stay accurate going forward.
- bbPress, wpForo, and Asgaros importers keep the source's moderation state, recover closed topics and private forums, and identify their own rows by source key instead of slug so re-running an import doesn't create duplicates.
- Sub-forum hierarchy is visible again: a parent space lists its children and a child names its parent.
- Scheduled posts show correctly in wp-admin, and Approve no longer publishes a post early.
- Leaderboard ranks by reputation instead of array position, and ties are ordered consistently.
- Quoting a reply now attributes the quote to its author; the citation was left blank.
- The Access Rules builder now explains who a membership-adapter rule (WP Fusion, WooCommerce, etc.) catches, matching the built-in rule types.
- The site no longer goes down if the bundled Action Scheduler library is missing from an install; background jobs fall back to WP-Cron instead.
Compat
- Aligned with Jetonomy Pro 2.0.0. Install both updates together.
v1.9.7
September 10, 2026
Fix 8 Security 1 Dev 2 Compat 1
Fix
- Moderators can reply to a closed topic again. The page offered them a reply box and then refused the reply, so the only way to add a moderator note was to reopen the topic first. The topic stays closed after they reply.
- Community pages now respect maintenance mode and membership restrictions. A community page could stay reachable while the rest of the site was closed, and on sites using the community as the homepage that included the homepage itself.
- Notification email now sends from the address configured in Settings > Email even when another active plugin sets a sender for the whole site. Mail was going out as the WordPress admin address instead, which hurts deliverability.
- The tags API can now page past the first 100 tags. It reported a total it could not reach, so a site with a large tag list, common after a forum import, could not read the rest.
- Link previews now load. The preview request resolved the linked site's address in a way that ignores the server's own DNS settings and cannot time out, so on many hosts the request never returned and no preview ever appeared. It now resolves through the system, in milliseconds.
- Quoting a reply in the app no longer inserts "&" where the author wrote "&", and no longer welds the end of one paragraph onto the start of the next.
- Feed excerpts, notification text, search snippets and derived headlines share that same corrected plain-text copy, so all of them stop showing raw entities and run-together paragraphs.
- Searching for a phrase that spans a paragraph break now matches, because the stored search copy keeps the break.
Security
- The link-preview fetch now connects only to an address the internal-address guard has checked, closing a gap where the connection could use an unchecked IPv6 address for the same host.
Dev
- Added the jetonomy_breadcrumb_html filter so the breadcrumb trail can be restyled, replaced or hidden from one place instead of overriding eighteen templates.
- Added wp jetonomy content scan-plain and wp jetonomy content backfill-plain to re-derive the stored plain-text copy for content written before this release. Resumable, non-destructive, and owner-triggered rather than run automatically on update.
Compat
- Aligned with Jetonomy Pro 1.9.7. Install both updates together.
Fix 2 Dev 5 Compat 1
Fix
- Moving a topic now lists every space you can move into, instead of stopping at the first 20. On sites with more than 20 spaces, common after a bbPress import where each forum becomes a space, the rest were silently missing from the dialog and could not be chosen.
- The move dialog now lists only spaces you are allowed to move topics into, instead of offering targets the move would then refuse.
Dev
- Regression guards are now proven to fail when their bug returns. Three guards shipped in 1.9.5 that stayed green against the exact defect they were written for, so a bug could look tested when nothing checked it.
- Added npm run check:guards, which reintroduces each known bug and requires the matching guard to go red.
- Test runs no longer count skipped checks as passes. A site where fixtures could not be created previously reported a fully green suite while asserting almost nothing.
- Added checks that the community sitemap serves XML rather than only returning a 200, and that its handler claims the URL ahead of any SEO plugin.
- Continuous integration can now serve URLs that carry a file extension, so sitemap and feed routes are actually exercised instead of silently skipped.
Compat
- Aligned with Jetonomy Pro 1.9.6. Install both updates together.
Improve 2 Fix 8 Dev 2 Compat 1
Improve
- The jetonomy_space_members shortcode now accepts a space slug, not only a numeric ID that no admin screen ever displayed.
- Misconfigured shortcodes now explain what to change instead of rendering nothing. The message is shown only to users who can edit posts, so visitors see no change.
Fix
- The Categories admin page no longer fails with a fatal error. A backslash-escaped format specifier made sprintf() throw on every 1.9.4 site, whether or not any categories existed.
- The community sitemap no longer returns 404 on sites running Yoast SEO, Rank Math or All in One SEO. Those plugins claim a broad sitemap URL that took precedence over ours, so spaces and posts were missing from search engines.
- Updating Jetonomy and Jetonomy Pro together no longer drops every Pro route. Private Messaging and other Pro pages silently returned a redirect until permalinks were re-saved, with no error anywhere.
- A shortcode given an ID that does not exist now says so instead of showing an empty result, so a typo is no longer indistinguishable from an empty space.
- The post compose form no longer renders for a space that does not exist, which allowed a topic to be aimed at nothing.
- Attachment records are no longer orphaned when a post or reply is deleted outside the REST API, which left rows pointing at content that no longer exists.
- Updating only custom fields on a post through the REST API now works. It previously returned "No fields provided for update" and discarded the value.
- Renamed Topic, Reply and Member labels now apply to the remaining interface messages, including the moderator confirmation dialogs that still used the built-in words.
Dev
- Added a format-string check to the build so an invalid sprintf specifier fails CI instead of reaching a page. Run it with npm run check:format-strings.
- The release battery now exercises an activate, deactivate and reactivate cycle and asserts that no rewrite rule disappears across it.
Compat
- Aligned with Jetonomy Pro 1.9.5. Install both updates together.
New 6 Improve 7 Fix 15 Security 5 Dev 6
New
- Owners can now rename Topic, Reply, Member and Category throughout the community, the same way Space could already be renamed. Set the labels under Settings, or override per site with the jetonomy_label filter.
- Paying members are now added to the roster of every space their plan grants, so they appear in the Members list and count toward members-only posting. Row provenance means a lapsed plan only ever removes rows it added, never someone who joined the space directly.
- Members can be identified by display name, @handle, or both, chosen under Settings > General > Member Names. Display names are not unique in WordPress; the handle always is.
- Space admins can now delete or archive-and-transfer their own space from the frontend, not only from wp-admin.
- Tags can now be created, renamed and deleted through the REST API, so tag management works from the app and from integrations instead of only inside wp-admin.
- Space access rules can now be listed, created and deleted through the REST API, so membership gating can be configured from the app or an integration rather than only in wp-admin.
Improve
- Members who share a display name are now told apart by their unique @handle wherever names appear.
- The community home now tells members where posting happens instead of reading as a dead end. Reword or hide the hint with the jetonomy_home_member_hint filter.
- Space directory cards now name the space owner.
- A member who hits a posting rate limit now sees how many they can post and roughly when they can post again, instead of "try again later."
- The moderation Flags queue now shows what was reported and links to it. Previously it showed only an internal id, so a moderator had to go find the content before deciding.
- Community home and category pages now page through spaces instead of rendering every one of them, so a large directory stays fast. Set the page size with the jetonomy_spaces_per_page filter.
- Faster threaded replies on busy topics, and a faster ban check on every anonymous submission.
Fix
- The Settings link in notifications now scrolls to the notification preferences section instead of jumping to the top of the page, including after in-app navigation.
- Jetonomy's own profile links (edit profile, notification settings, badges, digest) now stay on the community profile even when member profiles are pointed at another profile plugin.
- Notifications that have no actor now read as whole sentences instead of "Someone earned a badge" and similar broken phrasing.
- Icon-only action buttons on posts and replies now meet the 44px touch-target size on phones.
- New topics created directly through the model or the agent interface now always take their space's type, so they no longer get the wrong type and search-engine markup after creation.
- Sites upgrading from 1.9.2 never received the 1.9.3 content fix that matches a topic's type to the space holding it, so Q&A spaces could still publish the wrong search-engine markup. The fix now applies on upgrade.
- The space edit form in wp-admin now has the Display order field it was missing, and the moderation queue no longer runs a separate query per row.
- Posts held for approval now appear in the frontend moderation queue.
- Two moderators resolving the same report at the same time no longer overwrite each other. The second now sees the report as already handled instead of silently replacing who resolved it.
- The Role Capability Mapping table on Settings > Permissions was unreadable on phones, with role names clipped to their last few letters.
- An expanded admin table row no longer overlaps its own cells between 482px and 782px wide.
- Custom text for the "idea roadmap status changed" email is now saved. It was silently discarded on every save.
- The dashboard no longer tells you to run the setup wizard when your community already has spaces and posts, which affected every site whose content arrived by import or migration.
- Renaming Spaces in Settings now also renames it in the admin menu, instead of the menu contradicting the page.
- Listing spaces by category through the AI-agent interface is now limited like every other listing, instead of loading the whole category.
Security
- A private reply could be read from a topic's cache by another viewer, including a logged-out visitor, because the cached thread was not keyed per viewer. Threads are now cached per viewer, so one member's permissions never decide what another sees.
- The activity log is no longer readable through the AI-agent interface by members who cannot open it in wp-admin. It now requires the same permission on both.
- A moderator can no longer restrict an administrator or another moderator. The moderation screen enforced this only through the REST API, so the screen's own save path let an editor lock the site owner out of their account.
- Joining a space through the WordPress Abilities API now honours the space's join setting. Hidden and invite-only spaces could be joined directly, which exposed every topic inside them.
- Replies arriving by email are now subject to the same rules as replies posted on the site. A banned member could still reply by email, and emailed replies could land on closed topics and in archived spaces.
Dev
- REST user and author payloads now publish can_ban, can_block_author and any active restriction, so app clients do not offer an action that will fail.
- Corrected the plugin manifest version and provenance stamps, which had lagged two releases behind the shipping version.
- Consolidated the QA gate so the expected `wp jetonomy qa-actions` total is stated in one place instead of four conflicting ones.
- Fixed the QA smoke config, which pointed at a site path that does not exist.
- Corrected table, model, controller and template counts in the contributor documentation.
- Removed dead documentation links and a reference to a plans directory that was never part of this project.
New 5 Improve 3 Fix 13 Security 1 Dev 6 Compat 1
New
- Removing a space now offers Archive or Delete permanently as separate actions, and archiving keeps every topic, reply and vote.
- Permanently deleting a space asks you to type the space name first, so an irreversible action cannot be triggered by a single click.
- Setting to let space admins permanently delete their own space from the community pages, off by default. In the admin area, permanent deletion follows the Manage all spaces capability.
- Edit Profile collects a first name, last name and nickname, and members choose which combination to display publicly.
- Spaces can be dragged into a deliberate order within a category, instead of always sorting alphabetically.
Improve
- Permanently deleting a large space now runs in the background in batches, so it no longer times out.
- The Revisions and Activity admin screens now collapse correctly on a phone instead of squeezing a column to a single letter per line.
- Member post and reply counts are corrected automatically when a space is permanently deleted.
Fix
- @mentions now resolve on a member's handle, so members whose account was imported or created from an email address are notified instead of silently missed.
- Deleting a space left its topics, replies and member records behind in the database; both removal actions now handle a space's contents properly, and earlier damage is cleaned up automatically.
- Deleting the account of a member who owned a space no longer leaves that space with nobody able to manage it.
- Dragging to reorder categories on page two no longer scrambles the order of page one.
- A Q&A or Ideas space converted from another type now produces the right search-engine markup for its posts.
- Trust level names are now the same on the Users screen, the promotion email and the Permissions tab.
- The bbPress and wpForo importers no longer offer a dry run they cannot honour, and the bbPress dry run no longer reports an error for every topic and reply.
- The report control on a post now stays visible after a page refresh.
- Invite link rows sit on one line again, and the duplicate trust level pill is gone from the profile header.
- The Archive and Delete permanently dialogs in the admin area opened as a blank grey panel with no readable message, no visible input and no usable buttons; every Jetonomy admin screen now loads the shared style layer those dialogs depend on.
- Dialog buttons on a phone are now full height, so the last tap before an irreversible delete is not the smallest target on the screen.
- Permanently deleting a space reported success and removed nothing on sites where background jobs do not run; the space and its content are now deleted straight away, with only very large spaces continuing in the background.
- The Deleting spaces setting could not be switched on. It was never saved, so the feature behind it stayed off however many times it was ticked.
Security
- Members can no longer publish under a reserved name such as Administrator, Support or your site's name, or take another member's exact name.
Dev
- DELETE /spaces/{id} accepts mode=transfer (default) or mode=purge, and POST/PATCH /spaces accept sort_order.
- wp jetonomy space delete accepts --mode=transfer|purge and prompts before destroying content.
- New filters jetonomy_user_display_name, jetonomy_user_handle, jetonomy_display_name_choices and jetonomy_reserved_display_names control how members are named and identified.
- New filter jetonomy_schema lets an extension adjust a page's primary schema.org entity instead of emitting a competing one.
- New actions jetonomy_space_transferred and jetonomy_space_purged fire when a space changes hands or is destroyed.
- Vote and flag state for the current viewer is published on the API, so clients stop inferring it.
Compat
- Aligned with Jetonomy Pro 1.9.3. Install both updates together.
New 1 Fix 3 Dev 3 Compat 1
New
- A member can leave a space from the front end, the same place they joined it, instead of only being able to join.
Fix
- A member admitted to a space by a read-only access rule was shown Vote controls, a New Topic button, the empty-space call to action and a reply box, then refused by the server on use. Each control now appears only when the member is actually allowed to use it, so a read-only member sees the content without the dead buttons.
- A single topic in a private space now opens for a member admitted by an access rule, matching what the server allows.
- Tag, space and author listings open again when there is no search text, instead of returning nothing.
Dev
- Member and leaderboard payloads carry author_last_seen_at so a client can show the online dot under an avatar.
- New AccessRule::spaces_with_level_prefix() lists every space gated on a membership-level rule, so an integration can show the spaces a member can reach by access rather than only those they have formally joined.
- New Space::unique_slug() is the one rule for space-slug uniqueness, shared by every path that creates a space.
Compat
- Aligned with Jetonomy Pro 1.9.2. Install both updates together.
Improve 7 Fix 4 Security 1 Dev 3 Compat 1
Improve
- Busy communities do far less database work per page. Topic lists, sidebars, notification counts, the category tree, feeds and leaderboards are cached, and the hottest screens fetch their data in batches instead of one query per row.
- A long topic loads only the replies on the page you are reading rather than the whole thread, so a 500-reply topic opens as quickly as a short one.
- A space roadmap loads each column on its own instead of every idea at once.
- New database indexes speed up topic lists, member search and access rules on large sites.
- A member whose WordPress role comes from another plugin, such as an LMS student or a membership tier, can now take part in a space they have been added to or admitted to by a rule. Before this they could open the space and do nothing in it.
- The Access Rules screen says who each rule type catches, gives each value box its own example instead of one generic hint, and groups membership levels under what they are.
- Rules no longer imply they restrict people. The screen states plainly that a rule lets people in, and only visibility and join policy hold anyone back.
Fix
- Someone admitted to a space by an access rule rather than by joining could be let in by the browser and refused by the API for the same space.
- Space and topic counts could drift after merging topics or moving content between spaces.
- A partly installed licence library no longer white-screens the site. The plugin loads and reports the problem instead.
- The sidebar no longer writes a PHP warning to the error log on every page outside a space, including the community home, search, leaderboard, notifications and member profiles.
Security
- Member suggestions could be searched by email address, so a member could confirm whether an address had an account. Suggestions now match on username and display name only.
Dev
- One serializer produces post and space payloads for every endpoint, so a feed, a search result and a single read return the same shape.
- New GET /replies/{id}. List endpoints share one pagination contract, and post and reply payloads carry author_last_seen_at.
- Membership adapters may return optional kind and note keys from get_all_levels() to group and describe their levels in the Access Rules picker. Adapters that do not return them are unaffected.
Compat
- Aligned with Jetonomy Pro 1.9.1. Install both updates together.
New 4 Improve 7 Fix 11 Security 1 Dev 6 Compat 1
New
- Gate a space on a membership plan, and people holding that plan get in automatically. Access starts when the plan becomes active and ends when it lapses, with nothing to sync by hand.
- A visitor who cannot enter a paid space is told which plan includes it and given a link to buy it, instead of a generic "this space is private".
- Connect the mobile app to your account: approve the connection once in the browser and the app gets its own access key for that account, visible and revocable any time from your profile.
- Keyboard shortcuts l (upvote the focused post) and r (reply to it), which the FAQ has always documented.
Improve
- The buy link on a gated space works with Paid Memberships Pro, MemberPress, WooCommerce Memberships, Restrict Content Pro, LearnDash, Tutor LMS, LifterLMS, Sensei, MasterStudy and Learnomy, sending people to the right plan or course. Levels that are granted rather than sold, such as a WordPress role or a CRM tag, state the requirement without a link.
- The Access Rules screen explains what each access level unlocks, and reads your rule back in plain English as you build it.
- An access rule now uses a single Access level rather than two settings that could contradict each other, and defaults to Participate.
- Warn on the Access Rules screen when a rule cannot restrict anything, because the space is public or anyone can join it.
- Admin screens are usable down to 320px, and touch targets meet 44px on phones and tablets.
- Dropdown menus in wp-admin match the rest of the interface instead of using the operating system's own styling, where the browser supports it.
- Every message the plugin shows can be translated, including sign-in, sign-up and password-reset feedback, and admin list statuses.
Fix
- Search-as-you-type returns results again, and clicking one opens that topic.
- Pressing Enter on a keyboard-focused row opens it.
- The emoji picker can be opened from the composer toolbar.
- Paragraph spacing is kept on topics and replies written in the composer.
- The Conversations screen explains that messaging is dormant when another plugin handles direct messages, instead of showing a permissions error.
- Closing the email preview with Escape returns focus to the button that opened it.
- Activity Log and Revisions rows identify themselves on a phone rather than showing only a date or a type.
- Roadmap columns no longer use the same colour for Planned and In Progress.
- The "Read the full guide" link on the Users screen resolves.
- Filled buttons rendered black text on ordinary brand colours, so New Topic, New Post and Join read wrong on a plain blue. The auto-contrast threshold moved to 0.7, and white now stays on every normal brand blue, green, purple and red.
- Actions in a space header could not share a row with the owner's Edit space button, so each one dropped onto a line of its own. The header is a wrapping row now, centred on mobile.
Security
- An access rule could grant more than it advertised: a rule set to "Read" could record people as space admins, and running Sync Members then gave them moderation powers, including deleting other people's posts. The role a rule assigns is now capped by what the rule allows, and a membership rule can never make somebody a moderator. Rules already saved on your site are covered; no action is needed.
Dev
- New filters: jetonomy_compose_label (the create verb per space type) and jetonomy_membership_upgrade_url (where a plan is bought). Membership adapters may implement get_level_url() to link a plan directly.
- New filters for app connection: jetonomy_app_connect_schemes (which app URL schemes may receive a credential) and jetonomy_app_connect_bridge (which plugin owns the connect screen when several are installed). Add a scheme only for an app you ship, never a wildcard.
- New AccessRule::spaces_for_level() answers which spaces a membership level opens, replacing thirteen hand-written copies of the same query living inside individual adapters.
- New AccessRule::member_spaces_for_level_prefix() lists the gated spaces one member can reach, for products that want to surface them in their own account area.
- New space_permalink() builds a space URL, so an integration in another plugin stops composing the path by hand.
- New index rule_lookup (rule_type, rule_value) on jt_access_rules, because both lookups above were full table scans and now run on page views rather than only during provisioning. Schema milestone 1.9.1 covers sites already on 1.9.0; fresh installs get the index from CREATE TABLE.
Compat
- Removed a finfo_close() call that PHP 8.4 deprecates, so upload checks no longer emit a notice on 8.4.
New 4 Improve 7 Fix 16 Security 2 Dev 2
New
- Import attachments and media from wpForo, bbPress, and Asgaros, not just the posts and replies.
- Block another member, and report while blocking, from the mobile app and the REST API.
- Delete your own account from the app (DELETE /users/me).
- Generate and revoke space invite links from the front end, so an invite-only space can be run without wp-admin.
Improve
- Attachments are shown and served by the free plugin, so a site without Pro keeps displaying its files instead of hiding them.
- An import that cannot recover a file now lists which files were skipped instead of reporting a silent success.
- Object cache is invalidated the moment you change a space, profile, or membership, so counts and visibility are never a few minutes stale.
- The subscriptions API returns the title and link of what you are subscribed to, and no longer lists content that has been deleted.
- Moderation queue items and flags name the author and reporter, honour the status filter, and page correctly on both the site-wide and per-space screens.
- Hidden spaces can be chosen from the front-end space forms and stay hidden when you save.
- Opening the notification bell and building the moderation queue no longer run extra queries per row.
Fix
- Every Jetonomy page sets its own title and canonical again, instead of inheriting an unrelated page's SEO tags when another SEO plugin is active.
- A topic's SEO title uses the title you set rather than its slug, and the title-format settings take effect.
- Profile links in the navigation and in @mentions respect the jetonomy_profile_url filter.
- Saving a hidden space from the front end no longer silently republishes it as public.
- The mobile app and the website agree on which spaces exist for a given member.
- The accent colour you pick in Appearance is applied instead of being discarded.
- The "Create free account" and login buttons stay readable on every theme, including light brand colours.
- The login card follows dark mode instead of rendering white on a dark page.
- A reply notification takes you to that reply on the right page, instead of the top of the topic.
- A blocked member's posts and replies are hidden everywhere, including the browser tab title, without dropping the innocent replies nested beneath them.
- A deleted topic is no longer served to people who should not see it.
- wpForo and bbPress imports keep the forum hierarchy, count progress correctly, and run in batches instead of one request that times out on large forums.
- Migrated inline images and attachments are registered into the media library, so deleting the old forum's uploads folder can no longer break them.
- One-click email unsubscribe links save the change; they reported success but the preference never persisted.
- "Small" buttons render at their intended size, and the moderation Approve control renders as a button.
- A custom accent colour stays readable on every accent-backed surface (buttons, the follow pill, level tags, avatar initials, and the new-replies banner); a light accent no longer leaves white text invisible, in every browser.
Security
- A moderator could globally ban the site administrator; banning an admin or a fellow moderator is now refused.
- AI moderation logs are removed when a member is deleted or their data erased.
Dev
- Post and reply REST payloads carry an attachments array (id, url, thumbnail, mime, name, size, type) whether or not Pro is active.
- New WP-CLI commands "wp jetonomy privacy scan" and "wp jetonomy privacy purge-orphans" clear personal data left by accounts deleted before 1.7.1.
New 2 Fix 7 Security 1 Dev 1 Compat 1
New
- Members with no uploaded avatar now get a generated initials avatar instead of a blank placeholder, on the web and in any REST client.
- User records returned by the REST API now include an avatar_display field, so a native app renders the same avatar the site does.
Fix
- The profile-header avatar now uses the same resolver as every other avatar, so a member's initials fallback no longer disappears on their own profile.
- BuddyPress activity-reply notifications now open the forum topic being replied to, instead of the activity feed.
- Badge notifications now deep-link to the badges section of the recipient's profile, instead of the top of the profile.
- Post and reply body text now share one alignment across every content type, so a reply no longer sits offset from the post it answers.
- Vertical spacing above and below the post hashtag row is now balanced, instead of crowding the tags against the post body.
- Compose toolbar labels, block-editor scripts, the threaded-reply toggle, and the remaining front-end script strings are now translatable.
- Composer and form inputs now show a single focus ring instead of a doubled outline.
Security
- Member media uploads are now validated against an explicit file-type allow-list with a content check, replacing behaviour where the accepted types depended on the member's role.
Dev
- Added the author-display resolver, the is_anonymous columns, and the upload allow-list and max-size filters that power Pro Anonymous Posting and File Attachments.
Compat
- Aligned with Jetonomy Pro 1.7.0. Install both updates together.