Skip to content

What’s new

Changelog

Notable changes that have reached production. For what we are working on next, see our roadmap.

Release notes for every SDK version are under SDK releases.

Last updated

Release 2.0.2: safer deletes, faster web admin lists and new SDK versions

  • Deleting your account: if a project you own has other members, transfer it to another member or delete it before you continue. Until then your account stays as it is and nothing is removed. Projects you own with no other members are deleted with your account.
  • A subscription you pay for on the web is cancelled at once, with no refund for the unused period. An App Store subscription is not cancelled by deleting your account: cancel it in your Apple account settings, or it keeps renewing.
  • Typing the wrong password when deleting your account now shows an error and keeps you signed in.
  • Deleting a project now asks you to type its name, in the app and in the web admin. The dialog says what will be lost.
  • Web admin: the Projects list has search and a list or grid view. The SDK Users page is paged, with search, sorting by when a user was added or by MRR, and a page for each user with their feedback and votes.
  • Web admin: the board shows each column’s real total with a Show more button, filters and status changes update in place, and keyboard shortcuts move you around (press ? for the list, or turn them off).
  • The embedded board stops refreshing while its page is hidden and waits longer between retries after an error.
  • Connecting HubSpot now checks that the connection was started by you, for your project.
  • iPhone, iPad and Mac app: the integration badges on a feedback item wrap onto a second line and read right to left in Arabic, chart colours are easier to tell apart, and the Mac app works better with VoiceOver and is easier to read in light and dark mode.
  • New SDK versions: Swift, JavaScript, React Native, Flutter and Kotlin 2.3.0, and Vapor 3.1.0. A user can delete their own comment, a list stops cleanly when a proxy returns a stale page, and Flutter and Kotlin comments show their author’s name instead of “Anonymous”.
  • Swift SDK 2.3.0: configure(with:) now connects to FeedbackKit’s servers, as the other SDKs do. If you develop against a local server with that call, switch to configure(environment: .local, key:). See the Swift SDK guide.

Release 2.0.1: encrypted credentials and API keys

  • Integration credentials, including access tokens and Slack webhook URLs, are now encrypted before they are stored in our database.
  • Project API keys are encrypted the same way. Owners and admins can still see their key in the project settings.
  • Existing API keys and integrations keep working, with nothing for you to change.

Release 2.0.0: a refreshed app for iPhone, iPad and Mac

  • The Mac app keeps a sensible window size, has menu bar commands, and shows status, category and revenue badges in colour with the same symbols as the iPhone and iPad apps.
  • On the Mac you can vote from the feedback list, and the Skip button on the vote sheet works. Staff replies are labelled in the comment thread.
  • On iPad, Feature Requests no longer hides behind a second sidebar.
  • The feedback list on iPhone shows status and category on one line and revenue, votes and comments on the next. On iPad, the feedback table switches to that list when the window is narrow, so columns no longer overlap.
  • Comments: each one can be copied from its menu, and the panel stays readable and in place at every text size.
  • Cards keep their edges in Dark Mode, and error messages from the server appear in your language.
  • Older “What’s new” blog posts for each SDK version now open the matching section of this changelog.

A redesigned website

  • A new homepage that walks through collecting, ranking and answering feedback, with sample data from a demo app.
  • One navigation bar and one footer across every public page, including the documentation and the blog, with a compact menu on phones.
  • Refreshed Pricing, Integrations, Documentation and Changelog pages that read well on phones. Every SDK guide now uses the same layout, with a section sidebar.
  • New pages comparing FeedbackKit with Canny, WishKit and Featurebase, an About page, and new blog posts.
  • The Timeline on our feedback board now includes improvements as well as feature requests, with up to six items per month.
  • Web admin: saving integration settings with a ticked option works again for every provider.
  • The status page loads reliably again.
  • The privacy policy and terms name Swiftly Workspace BV, and questions about support, privacy and security each have their own @getfeedbackkit.com address.

Vote-count automations and new SDK guides

  • Integration automations can now open a ticket in your tracker when a feedback item reaches a vote count you choose, next to the existing triggers for new feedback and status changes.
  • An automation can also be run over feedback that already qualifies, with its progress shown in the web admin.
  • New Vapor SDK guide, and the Swift, Kotlin, Flutter, React Native and JavaScript guides were rewritten against the current SDK code.
  • Feedback counts now match the list beside them: merged items and items over the Free plan limit are no longer counted.
  • Creating a ticket by hand now needs the Pro or Team plan on all nine trackers, the same as automations.
  • A wrong current password when changing your password now shows an error and keeps you signed in.
  • Web admin: settings links opened in a new tab show the page instead of raw data, and vote counts read correctly in every language.

Release 1.2.0: integration automations, a sync log and a refreshed web admin

  • Integration automations: choose when FeedbackKit opens a ticket in GitHub, Linear, Notion, ClickUp, Monday.com, Trello, Airtable, Asana or Basecamp, when feedback arrives or when it moves to a status you pick.
  • A sync log for each project lists the tickets FeedbackKit created, and the reason when one could not be created.
  • The web admin has a dark mode, dialogs you can use from the keyboard, clearer loading and empty states, and right-to-left layout for Arabic.
  • New Pricing, Integrations and Changelog pages, a blog with setup guides for React Native, Flutter, Android and JavaScript, and a homepage section on the languages FeedbackKit speaks.
  • Status-change push notifications now follow the same status list as status-change emails.
  • Security fixes: votes and comments need your project’s API key, App Store purchases are verified before a plan changes, and viewers can no longer edit feedback or see integration credentials.
  • Public pages no longer scroll sideways on phones, and the vote button on feature-request pages is easier to read.

Comment and Linear fixes

  • Adding a comment no longer reopens feedback that was already closed.
  • Fixed a Linear GraphQL scalar mismatch that caused some issue lookups to fail validation.

Board filtering and Linear authentication

  • Toggles to hide completed and rejected items from the feedback board.
  • Filter dropdowns are now localized.
  • Fixed Linear authentication for personal API keys, which do not take a Bearer prefix.

Bot protection on web sign-up

  • Cloudflare Turnstile, signed form timestamps and CSRF protection on the web auth forms.

Release 1.1.1

  • SDK and admin updates rolled up into the 1.1.1 release.

Custom 404 page

  • A branded not-found page replaces the default error response.

SDK releases

Release notes for each FeedbackKit SDK, newest version at the top: what changed, and what to change in your code when you upgrade.

Swift SDK

SwiftUI views and a client for iPhone, iPad, Mac and Vision Pro apps.

Swift SDK 1.3.0

  • The board draws each request as a card. Set listStyle = .classic to keep the 1.2.0 list.
  • One Sort & Filter menu holds the sort order and the Status and Category filters, and filters run on the device. On iPad the list is a split view, and FeedbackListView(embedsNavigationStack: false) sits inside a navigation stack you already have.
  • Fixes for defects present since 1.0.0: status and category filters reach the server, updateUser(customID:) takes effect at once, logs no longer contain emails, user ids or MRR, and offline failures arrive as networkError.
  • To upgrade: config, theme and shared are now configuration, appearance and current, on the main actor. The old names still compile, with a warning.
  • To upgrade: the package builds in Swift 6 language mode, though your app can stay in Swift 5 mode. It generates its strings with a package plugin, so Xcode asks you once to trust it and xcodebuild on CI needs -skipPackagePluginValidation. The public Strings enum is removed.
  • To upgrade: SwiftlyFeedbackError has new cases, among them forbidden and rateLimited, so an exhaustive switch needs them or a default.
  • Published on 14 October 2026 under a different version number and renumbered 1.3.0 on 17 October. It has source-breaking changes despite its minor number, and a Package.resolved from before the renumbering must be resolved again. The migration notes list every change since 1.1.1.

Swift SDK guide

Swift SDK 1.2.0

  • Search in the list, with status and category suggestions as you type.
  • Loading placeholders, an error screen with Try Again, and a sort order that is remembered between launches.
  • A rebuilt detail screen with native list controls, the request’s own title in the navigation bar, and a Share button.
  • Feedback written in another language can be translated on the device, on iOS and macOS.
  • To upgrade: buttons.segmentedControl is now buttons.statusFilter, and status and category colours are ThemeColor values, so wrap a plain colour in .color(_:). secondaryColor, tertiaryColor, bottomPadding and six members of Strings are removed.
  • To upgrade: two Feedback values are now equal when every field matches, not when the ids match. Key dictionaries and change handlers on feedback.id.
  • Published on 14 October 2026 under a different version number and renumbered 1.2.0 on 17 October, with source-breaking changes despite its minor number. 1.3.0 fixes defects that 1.2.0 still has, such as status filters that fail with a not-found error, so upgrade straight to 1.3.0 where you can.

Swift SDK guide

Swift SDK 1.1.1

  • Fixes the 1.1.0 build, which failed because its Environment type hid SwiftUI’s inside the package.
  • To upgrade: Environment is renamed FeedbackEnvironment, and a plain @Environment in your own files means SwiftUI’s again.
  • To upgrade: .development now points at FeedbackKit’s development server. For a server on your own Mac, use the new .local.
  • The views are translated into eleven languages and have VoiceOver labels and hints.
  • A mailing-list opt-in on the submit form and in the vote dialog, which appears once someone types an email. Set showMailingListOptIn = false to hide it.
  • The list can sort by comment count, the server addresses moved to getfeedbackkit.com, and the package includes a privacy manifest.
  • On the Mac the user id moved to the data protection keychain, so a Mac user may start with a new anonymous id after the update.

Swift SDK guide

Swift SDK 1.1.0

  • configure(environment:key:) chooses the server by name: .production, .testflight or .development.
  • configureAuto(keys:) with EnvironmentAPIKeys uses one API key per build type. configureAuto(with:) is deprecated.
  • The detail screen shows why a request was rejected, and Feedback has a rejectionReason property.
  • Known issue: 1.1.0 does not compile, because its new Environment type hides SwiftUI’s property wrapper. Use 1.1.1.

Swift SDK guide

Swift SDK 1.0.0

  • Three SwiftUI views, FeedbackListView, SubmitFeedbackView and FeedbackDetailView, with voting, comments and six statuses: Pending, Approved, In Progress, TestFlight, Completed and Rejected.
  • A client for your own screens, with async calls that throw SwiftlyFeedbackError.
  • updateUser(payment:) passes what each user pays, so your team can rank requests by the MRR behind them.
  • Colours, badges, buttons and the email prompts are configurable through SwiftlyFeedback.theme and SwiftlyFeedback.config.
  • Needs iOS 26, macOS 26 or visionOS 26, and Xcode 26.
  • Swift Package Manager cannot install the 1.0.0 tag as an exact version. To start today, follow the Swift SDK guide.

Swift SDK guide

JavaScript SDK

A typed client for web apps and Node.js, with a ready-made list for web pages since 2.1.0.

JavaScript SDK 2.1.0

  • feedbackkit-js/ui adds mountFeedbackList, a card list with voting, sorting and filters that renders into any element with no framework. A global build covers pages without a bundler.
  • userId is optional. Without one, the client creates a local_ id and keeps it in localStorage.
  • page and perPage on feedback.list() and comments.list(). Leave page out to read every page, as before.
  • A 429 is a RateLimitError with retryAfterSeconds, and a 5xx is a ServerError. Both extend FeedbackKitError.
  • To upgrade: a baseUrl on plain http:// is refused unless it is localhost, and redirects are not followed.
  • To upgrade: comments.create() with isAdmin: true needs a server-side bearerToken. Reply as your team from the dashboard, the admin apps or your own server.
  • 1.2.0, tagged the same day, makes includeMerged: true return merged requests. There is no 2.0.0: 2.1.0 follows 1.2.0.
  • Install it from the 2.1.0 tag on GitHub. The guide shows how.

JavaScript SDK guide

JavaScript SDK 1.1.0

  • Responses arrive in camelCase, so voteCount, hasVoted and createdAt hold values. Request bodies go out in snake_case.
  • FeedbackSort orders feedback.list() by votes, newest, oldest or comments.
  • An optional mailing-list opt-in on feedback.create() and votes.vote(), with subscribeToMailingList and mailingListEmailTypes.
  • isHiddenOverLimit marks a request held back by the Free plan’s limit, so your page can tell the person who filed it that it is waiting for review.
  • The default server address moved to api.prod.getfeedbackkit.com. If you set baseUrl, update it or remove it.
  • Known issue: includeMerged has no effect until 1.2.0. 1.1.1, tagged on 24 April 2026, changes the version number and nothing else.

JavaScript SDK guide

JavaScript SDK 1.0.0

  • A typed client, FeedbackKit, with feedback, votes, comments and users calls, written in TypeScript with ES module and CommonJS builds.
  • No runtime dependencies. It runs in current browsers and in Node.js 18 or later.
  • users.register() reports what each user pays, so your team can rank requests by the MRR behind them.
  • Failures are typed errors, such as AuthenticationError, ConflictError for a repeat vote, and NetworkError.
  • Published on npm as feedbackkit-js. 1.0.1, published the same day, makes the production server the default address.
  • Known issue: responses keep the server’s snake_case keys, so camelCase fields such as voteCount read as undefined. 1.1.0 fixes this.

JavaScript SDK guide

React Native SDK

Components and hooks for iOS and Android apps built with React Native.

React Native SDK 2.1.0

  • FeedbackList draws a card per request by default, in Material 3 on Android and as rounded cards on iOS. listStyle="classic" keeps the 1.x list.
  • A Sort & Filter sheet, with status and category chips that filter the loaded requests on the device.
  • Dark mode: colorScheme on FeedbackProvider follows the device by default, and colorScheme="light" keeps it light. renderIcon draws the list’s icons with your own icon set.
  • Fixes: locale and translations apply before the views render, a slow response no longer overwrites a newer one, VoteButton follows new props, and a failed comment send is shown.
  • To upgrade: install JavaScript SDK 2.1.0 alongside it. Its changes reach your app through this package: a baseUrl on plain http:// is refused unless it is localhost, and a 429 arrives as RateLimitError.
  • To upgrade: admin replies through addComment(content, true) need a server-side bearerToken on FeedbackProvider.
  • 1.2.0, tagged the same day, changes no runtime code. There is no 2.0.0: 2.1.0 follows 1.2.0.

React Native SDK guide

React Native SDK 1.1.0

  • SubmitFeedbackView, a complete form with validation and a mailing-list opt-in.
  • FeedbackDetailView, one request with its vote button and comments.
  • Sort chips on FeedbackList: most votes, newest, oldest and most comments.
  • The views in eleven languages, picked from the device, with locale and translations props to override.
  • With JavaScript SDK 1.1.0, vote counts, voted state and comment counts come through.
  • To upgrade: install JavaScript SDK 1.1.0 with it, since the list fails on 1.0.1. The detail screen shows each commenter’s user id, so pass an opaque id rather than an email address.
  • 1.1.1, tagged on 24 April 2026, changes the version number and nothing else.

React Native SDK guide

React Native SDK 1.0.0

  • FeedbackProvider and five components: FeedbackList, FeedbackCard, VoteButton, StatusBadge and CategoryBadge.
  • Six hooks, among them useFeedbackList, useVote, useComments and useSubmitFeedback, for the screens it does not include.
  • Built on the JavaScript SDK, which it re-exports, so the enums, types and error classes come from the same import.
  • Needs React 18, React Native 0.70 and AsyncStorage 1.17 or later. Published on npm as feedbackkit-react-native, with 1.0.1 the same day.
  • Known issue: vote counts, voted state and comment counts read as undefined until JavaScript SDK 1.1.0.

React Native SDK guide

Flutter SDK

Widgets and a Dart client for Flutter apps.

Flutter SDK 2.1.0

  • FeedbackList draws Material 3 cards with a search field and a Sort & Filter sheet, all running on the device. listStyle: FeedbackListStyle.classic keeps the 1.x list.
  • Fixes: the SDK creates a user id when you pass none, removing a vote and posting a comment work, and the email in the form reaches FeedbackKit, so the person who filed a request hears when its status changes.
  • votes.vote() takes email and notifyStatusChange, and a 429 raises RateLimitError.
  • To upgrade: Dart 3.6 and Flutter 3.27 are the new minimums, RegisterUserRequest.id is removed (read userId), and a plain-HTTP baseUrl throws unless it is a loopback address.
  • 1.2.0, tagged the same day, shows the Team badge on comments, makes Comment.feedbackId nullable, and drops a row with an unknown status or category instead of showing it as Pending. There is no 2.0.0: 2.1.0 follows 1.2.0.
  • Install it from the 2.1.0 tag on GitHub. The guide shows how.

Flutter SDK guide

Flutter SDK 1.1.0

  • The widgets’ text in eleven languages, picked from the device, with locale and translations on FeedbackKitProvider.
  • A mailing-list opt-in on SubmitFeedbackView, with matching fields on CreateFeedbackRequest and votes.vote().
  • FeedbackItem.isHiddenOverLimit marks a request held back by the Free plan’s limit.
  • The default server address is the production server, api.prod.getfeedbackkit.com, so a baseUrl set for 1.0.0 can go.
  • Known issues carried from 1.0.0: a user id must be passed, and removing a vote, posting a comment and the form’s email do not work, so the opt-in records nothing yet. 2.1.0 fixes them.
  • 1.1.1, tagged on 24 April 2026, changes no Dart code.

Flutter SDK guide

Flutter SDK 1.0.0

  • FeedbackKitProvider and four widgets: FeedbackList, FeedbackCard, FeedbackDetailView and SubmitFeedbackView.
  • A vote button that updates before the server answers, and badges for the six statuses.
  • FeedbackKitTheme with a dark preset, and a Dart client with typed errors for your own screens.
  • Needs Flutter 3.10 and Dart 3.0 or later. Published on pub.dev as feedbackkit_flutter, with 1.0.1 the same day.
  • Known issues: pass a user id and the production baseUrl. Removing a vote, adding a comment and the form’s email do not work. 1.1.0 fixes the address and 2.1.0 the rest.

Flutter SDK guide

Kotlin SDK

Jetpack Compose screens and a coroutine client for Android apps.

Kotlin SDK 2.1.0

  • FeedbackList draws Material 3 cards, and FeedbackListScreen adds an app bar, search and a sort and filter sheet. listStyle = FeedbackListStyle.CLASSIC keeps the 1.x cards.
  • Fixes: votes no longer roll back, removing a vote works, comments load, the form’s email reaches FeedbackKit, and the SDK creates a user id when you set none.
  • New since 1.0.1: the screens in eleven languages, a mailing-list opt-in on the form, and mrr on users.register.
  • To upgrade: Comment.feedbackId is nullable, and FeedbackKitError has a new RateLimitError case, so an exhaustive when needs it or an else. The library builds against Compose BOM 2024.06.00.
  • Known gap: the detail screen shows comments but has no field for writing one. comments.create works from your own screen.
  • 1.2.0, tagged the same day, compiles again and loads comments. The 1.1.0 and 1.1.1 tags do not compile. There is no 2.0.0: 2.1.0 follows 1.2.0.
  • Install it from the 2.1.0 tag on GitHub. The guide shows how.

Kotlin SDK guide

Kotlin SDK 1.0.0

  • Three Jetpack Compose screens: FeedbackList, FeedbackDetailView and SubmitFeedbackView.
  • A coroutine client, FeedbackKit.shared, with feedback, votes and comments APIs for your own screens.
  • Light and dark themes, with a colour for each status and category.
  • Needs minSdk 24 and Java 17. Published on Maven Central as com.getfeedbackkit:feedbackkit. 1.0.1, the same day, replaces 1.0.0, whose default address had no FeedbackKit server behind it.
  • Known issues: set a userId when you configure. A vote rolls back on screen until the list reloads, removing a vote and loading comments fail, and the form’s email does not reach FeedbackKit. 2.1.0 fixes them.

Kotlin SDK guide

Vapor SDK

A client for server-side Swift apps built on Vapor 4.

Vapor SDK 3.0.0

  • page and perPage on the feedback and comment lists. Leave page out to read every page, as before.
  • FeedbackResponse.syncStates lists each ticket a request was sent to, with its sync state and a link.
  • Fixes: query values are percent-encoded, comments on a request hidden by the Free plan’s limit reach the person who filed it, auth.changePassword(_:) works, and concurrent requests no longer share one JSON coder.
  • To upgrade: a 429 arrives as rateLimited(message:) instead of serverError, and FeedbackKitError has new cases, so an exhaustive switch needs them or a default.
  • To upgrade: comments.delete(feedbackId:commentId:) needs a userId or a bearerToken.

Vapor SDK guide

Vapor SDK 2.0.0

  • To upgrade: SyncAppleTransactionRequest takes the signed StoreKit 2 transaction, jwsRepresentation, instead of the transaction and product ids.
  • To upgrade: totalMRR, usersWithMRR, averageMRR and slackWebhookURL are now totalMrr, usersWithMrr, averageMrr and slackWebhookUrl, so they decode. The user stats calls return again, and the Slack webhook address is no longer always nil.
  • One request with a status or category newer than the SDK no longer fails the whole list.
  • feedback.delete(id:) on the project-key client is deprecated and throws the new operationNotSupported error. Delete with an account token instead.
  • A requirement written against 1.1.1 does not move to 2.0.0 on its own, because it is a new major version.

Vapor SDK guide

Vapor SDK 1.0.0

  • One configure call, then req.feedbackKit in any route to list, file, vote on and comment on requests with your project key, and to register users with their MRR.
  • req.feedbackKitAdmin(token:) manages projects, members, statuses, merges and ticket integrations with an account token.
  • FeedbackKitError conforms to Vapor’s AbortError, so a failure thrown from a route becomes the matching HTTP status.
  • Needs Swift 6.2 and Vapor 4.89 or later.
  • 1.0.0 has no git tag: it is commit e2be1ee in the repository. Its .production setting points at the website rather than the API, which 1.1.0 corrects, so install 1.1.0 or later.

Vapor SDK guide