# Client-side Events Filtering

RudderStack's client-side event filtering feature lets you specify which events should be discarded or allowed to flow through by allowlisting or denylisting them.

{{< info >}}
Note that:
- Client-side event filtering is applicable only for `track` calls. In case of mobile SDKs, it also applies to the following application lifecycle events:
    - Application Installed
    - Application Opened
    - Application Backgrounded
    - Application Updated
- You can use this feature for all RudderStack destinations that support sending events via [device mode]({{< ref "destinations/rudderstack-connection-modes.md#device-mode" >}}).
- To use this feature with the latest [JavaScript SDK]({{< ref "sources/event-streams/sdks/rudderstack-javascript-sdk/" >}}), note that:
    - Empty and non-string event names are not allowlisted anymore.
    - Event name comparison is case-sensitive.
{{< /info >}}

## Supported SDKs

The following source SDKs support this feature:

- [JavaScript]({{< ref "sources/event-streams/sdks/rudderstack-javascript-sdk/_index.md" >}})
- [Android (Java)]({{< ref "sources/event-streams/sdks/rudderstack-android-sdk/_index.md" >}})
- [iOS (Obj-C)]({{< ref "sources/event-streams/sdks/rudderstack-ios-sdk/_index.md" >}})
- [React Native]({{< ref "sources/event-streams/sdks/rudderstack-react-native-sdk.md" >}})
- [Flutter]({{< ref "sources/event-streams/sdks/rudderstack-flutter-sdk/_index.md" >}})
- [Cordova]({{< ref "sources/event-streams/sdks/rudderstack-cordova-sdk.md" >}})

## Event filtering options

RudderStack gives you the ability to configure your event filtering options while setting up your device mode destination in the dashboard:

{{< image src="images/event-stream-sources/rudderstack-event-filtering.webp" alt="Event filtering options" >}}

You will see the following dropdown options under **Event Filtering**, in the **Connection Settings** page:

### Disable

Event filtering will be disabled if you select this option from the dropdown. In this case, RudderStack will not filter any events and allow all events to flow through.

### Allowlist

Upon selecting the **Allowlist** option from the dropdown, you can specify the names of the events that you want RudderStack to **allow** or flow through to the destination. 

{{< info >}}
If you choose the <strong>Allowlist</strong> option for event filtering, any events specified in the <strong>Denylist</strong> field will be ignored.
{{< /info >}}

You can add as many events as you want to the allowlist by clicking the **Add More** option.

{{< warning >}}
RudderStack will discard any event that is not specified in the allowlist. If you do not specify any events in the allowlist, <strong>all</strong> the calls will be discarded.
{{< /warning >}}

### Denylist

Upon selecting the **Denylist** option from the dropdown, you can specify the names of the events that you want RudderStack to **discard**. These events will not be sent to the destination.

{{< info >}}
If you choose the <strong>Denylist</strong> option for event filtering, any events specified in the <strong>Allowlist</strong> field will be ignored.
{{< /info >}}

You can add as many events as you want to the denylist by clicking on the **Add More** option.

{{< warning >}}
RudderStack will only discard events explicitly specified in the denylist. If you do not specify any events in the denylist, then <strong>all</strong> calls will be allowed through.
{{< /warning >}}

