> ## Documentation Index
> Fetch the complete documentation index at: https://feddy.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Troubleshooting

> What to check when Feddy doesn't behave as expected, on iOS, on the web, and in the inbox.

Most problems come down to one of a few things: Feddy hasn't been set up yet when something tries to open it, the project ID doesn't match, or a feature needs a setting that isn't on. Find your symptom below.

## iOS

> [accordion] Nothing happens when I call present()
>
> **Possible cause:** `configure` hasn't run yet. The console shows `[Feddy] present() called before configure(projectId:)`.
>
> **Solution:** Call `Feddy.configure` in your app's `init` (SwiftUI) or in `application(_:didFinishLaunchingWithOptions:)` (UIKit), so it runs before any screen can call `present()`.

> [accordion] The unread badge doesn't update
>
> **Possible cause:** `.feddyUnreadBadge()` only draws inside a `List`, `Form`, or `TabView`. Anywhere else it does nothing.
>
> **Solution:** Use `FeddyUnreadDot` for a marker you place yourself, or read the count from `FeddyUnread.shared`. See [Unread badge](https://feddy.app/docs/guides/unread-badge.md).
>
> **Another possible cause:** the SDK stops checking for replies while the app is in the background, so the badge can be stale for a moment after the user comes back.
>
> **Solution:** Call `Feddy.refresh()` when the app becomes active.
>
> Also keep in mind that only opening a conversation clears its count. Opening Feddy doesn't.

> [accordion] The attachment button is missing
>
> **Possible cause:** The image picker needs iOS 16. On iOS 15 the attachment row isn't shown.
>
> **Another possible cause:** Attachments are a paid-plan feature.
>
> Only PNG, JPEG, and WebP images are accepted, up to 5 per message.

## Web

> [accordion] The widget doesn't appear
>
> **Possible cause:** `init` was called without a project ID. The console shows `[Feddy] init requires a projectId`.
>
> **Solution:** Pass `projectId` to `Feddy.init`, copied from **Settings → Install**.
>
> **Another possible cause:** The script never loaded. In the console, `typeof Feddy` should print `"object"`; if it prints `"undefined"`, check the script tag's URL and that nothing is blocking it.
>
> **Another possible cause:** You passed `launcher: false`, which turns off the floating button. Nothing is drawn until you call `Feddy.open()` from your own element.
>
> Note that `init` only takes effect once per page load. To start over, reload the page.

> [accordion] The unread count doesn't update on my own badge
>
> **Possible cause:** `Feddy.onUnreadCountChanged` was assigned after the count changed, so the first update was missed.
>
> **Solution:** Assign it right after `init`. The widget checks every 45 seconds and whenever the tab becomes visible, and calls your function each time the number changes.
>
> Also keep in mind that only opening a conversation clears its count. Opening Feddy doesn't.

> [accordion] The widget is in the wrong language
>
> **Possible cause:** The widget follows the browser's language and falls back to English for languages it doesn't ship.
>
> **Solution:** Pass `locale` to `init` to force one, for example `'ja'` or `'zh-TW'`. Text you wrote in the dashboard, such as topics and the fallback message, uses your translation when one exists for the user's language and your default text otherwise.

## Inbox and email

> [accordion] Messages don't arrive in the inbox
>
> **Possible cause:** The project ID in your code doesn't match the one under **Settings → Install**. A wrong ID fails silently for the user.
>
> **Another possible cause:** You're looking at a different project. Check the project picker in the dashboard sidebar.
>
> **Another possible cause:** A development build is still pointed at a local server through `apiUrl` (web) or `apiURL` (iOS).
>
> **Solution:** Compare the IDs character by character, and make sure production builds use the default server.

> [accordion] Attributes are missing from a contact
>
> **Possible cause:** Anything over the limits is dropped without an error: more than 20 keys, a key over 40 characters, a value over 255 characters, nested objects or lists, or more than 8 KB in total. On iOS, a value that isn't a `String`, `Bool`, a number, or a `Date` is dropped on the device.
>
> **Another possible cause:** Each `identify` call replaces the whole set. A key you left out of the latest call is gone.
>
> **Solution:** Keep attributes flat and within the limits, and send every attribute you want to keep on each call. See [Identify users](https://feddy.app/docs/guides/identify-users.md).

> [accordion] Users are never asked for an email
>
> **Possible cause:** The widget only asks when your project has a verified email domain, and only once per device.
>
> **Solution:** Verify a domain under **Settings → Email domain**, or pass `email` in `identify` so there's nothing to ask for.

> [accordion] Replies aren't emailed to users
>
> **Possible cause:** All three must be true: Feddy has an email for the contact, your project's email domain is verified, and your plan includes email to users.
>
> **Solution:** Check each one under **Settings → Email domain** and the contact's **Details** panel. Replies still appear in the app either way.

> [accordion] Milo answered something it shouldn't have
>
> **Possible cause:** One of your answers matched more broadly than you meant it to, or a source says something you didn't mean users to read. Milo only ever uses your answers, your sources, and your **About your app** text, so the cause is in there.
>
> **Solution:** Open the conversation: **Based on** under the reply links the page it used. Fix the answer or the page, or set the source to **Team only**, then ask the same question on the phone under **Settings → Milo AI → Settings** to confirm the change before users see it.

## Still stuck?

Use the chat button in the bottom-right corner of your dashboard. It's Feddy's own widget, going to the same kind of inbox you're setting up, and a real person answers.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.