Quickstart
Every path below ends with a real, labelled GitHub issue in your repo. Pick your platform.
-
Add the package (see Installation), importing
AppFeedbackCore(andAppFeedbackUIfor the drop-in sheet). -
Build a client once at app start:
import AppFeedbackCorelet feedback = FeedbackClient(appName: "Acme",transport: GitHubDirectTransport(owner: "acme", repo: "feedback", token: token)) -
Submit a report:
let issueNumber = try await feedback.submit(FeedbackReport(type: .bug, title: "Crash on launch", description: "Steps to reproduce…")) -
Or present the drop-in SwiftUI sheet:
import AppFeedbackUI.sheet(isPresented: $showFeedback) {FeedbackSheet(client: feedback, theme: .default)}
The web SDK never holds a GitHub token — it talks to a relay you deploy.
-
Deploy a relay (one function — Cloudflare / Vercel / Firebase / Appwrite). See The relay.
-
Install and mount the widget:
import { mountFeedbackWidget } from '@appfeedback/widget'import { RelayTransport } from '@appfeedback/core'mountFeedbackWidget(document.getElementById('feedback')!, {transport: new RelayTransport({ endpoint: '/api/feedback' }),appName: 'Acme',appVersion: '1.0.0',}) -
React app? Use the component instead:
import { FeedbackForm } from '@appfeedback/react'<FeedbackFormtransport={new RelayTransport({ endpoint: '/api/feedback' })}appName="Acme"appVersion="1.0.0"/>
-
Add the dependency (see Installation). The
:androidmodule bundles the shared core plus the Compose UI. -
Build a client once at app start —
androidFeedbackClientfills the device-info block fromandroid.os.Build:import com.appfeedback.android.androidFeedbackClientimport com.appfeedback.core.*val client = androidFeedbackClient(transport = GitHubDirectTransport(owner = "acme", repo = "feedback", token = token),appName = "Acme",appVersion = "1.0.0",) -
Submit a report —
submitreturns the new issue number:val issueNumber = client.submit(FeedbackReport(type = FeedbackType.BUG, title = "Crash on launch", description = "Steps to reproduce…")) -
Or drop in the themeable Compose sheet:
import com.appfeedback.android.FeedbackSheetFeedbackSheet(client = client, onSubmitted = { number -> /* dismiss, toast… */ })
What lands in GitHub
Section titled “What lands in GitHub”A labelled issue (bug/feature-request + user-submitted) whose body carries the description, a device-info block, optional contact email, and any attachments — in one byte-exact format across every platform.