# Application error events
> Automatically track exceptions and application errors with the application_error event schema on web and mobile.
> Source: https://docs.snowplow.io/docs/events/ootb-data/app-error-events/
> Documentation index: https://docs.snowplow.io/llms.txt

Exception (error) tracking captures exceptions within your application.

This table shows the support for exception tracking across the main client-side Snowplow [tracker SDKs](/docs/sources/). The server-side trackers don't include error tracking APIs.

| Tracker                                                                      | Supported | Since version | Auto-tracking | Notes                                                                                                                                                                                                                                |
| ---------------------------------------------------------------------------- | --------- | ------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [Web](/docs/sources/web-trackers/tracking-events/errors/)                    | ✅         | 3.0.0         | ✅/❌           | Requires error tracking plugin. Track handled exceptions manually.                                                                                                                                                                   |
| [iOS](/docs/sources/mobile-trackers/tracking-events/exception-tracking/)     | ✅         | 1.0.0         | ✅             |                                                                                                                                                                                                                                      |
| [Android](/docs/sources/mobile-trackers/tracking-events/exception-tracking/) | ✅         | 1.0.0         | ✅             |                                                                                                                                                                                                                                      |
| React Native                                                                 | ❌         |               |               | Earlier versions of the React Native tracker supported error tracking for mobile platforms. This feature was removed in version 4.0.0 as it didn't work with JavaScript. Track errors manually using the `application_error` schema. |
| Flutter                                                                      | ❌         |               |               | Use the `application_error` schema for your own custom event.                                                                                                                                                                        |
| Roku                                                                         | ❌         |               |               | Use the `application_error` schema for your own custom event.                                                                                                                                                                        |
| [Google Tag Manager](/docs/sources/google-tag-manager/snowplow-template/)    | ✅         | v3            | ❌             |                                                                                                                                                                                                                                      |

The Errors plugin for the JavaScript trackers provides configuration for automatic tracking of unhandled exceptions, as well as a method for manually tracking handled exceptions.

The mobile trackers will capture unhandled exceptions. These can crash the app, so it's likely that the event will be sent after restart. Note that in some situations, it may not be possible to capture all exception details before the app crashes.

All exception events use the same `application_error` schema, which has the following properties:

### `application_error`

**Type:** Event

Schema for an application error

**Properties:**

| Property                       | Description                                                                                                                                                                                                                                                            |
| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `programmingLanguage` _string_ | _Required._ Must be one of: `JAVA`, `SCALA`, `KOTLIN`, `GROOVY`, `RUBY`, `GOLANG`, `JAVASCRIPT`, `PHP`, `PYTHON`, `OBJECTIVEC`, `SWIFT`, `C`, `CPLUSPLUS`, `CSHARP`, `ACTIONSCRIPT`, `LUA`, `RUST`, `HASKELL`, `CLOJURE`, `ERLANG`, `ELIXIR`, `CRYSTAL`, `PONY`, `NIM` |
| `message` _string_             | _Required._                                                                                                                                                                                                                                                            |
| `threadName` _string_          | _Optional._                                                                                                                                                                                                                                                            |
| `threadId` _integer_           | _Optional._                                                                                                                                                                                                                                                            |
| `stackTrace` _string_          | _Optional._                                                                                                                                                                                                                                                            |
| `causeStackTrace` _string_     | _Optional._                                                                                                                                                                                                                                                            |
| `lineNumber` _integer_         | _Optional._                                                                                                                                                                                                                                                            |
| `className` _string_           | _Optional._                                                                                                                                                                                                                                                            |
| `exceptionName` _string_       | _Optional._                                                                                                                                                                                                                                                            |
| `isFatal` _boolean_            | _Optional._                                                                                                                                                                                                                                                            |
| `lineColumn` _integer_         | _Optional._                                                                                                                                                                                                                                                            |
| `fileName` _string_            | _Optional._                                                                                                                                                                                                                                                            |

**Example warehouse query (Snowflake):**

```sql
select
unstruct_event_com_snowplowanalytics_snowplow_application_error_1 application_error_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'application_error'
and events.event_vendor = 'com.snowplowanalytics.snowplow'
```
