Plugin.Maui.SwipeCardView provides lightweight MVVM friendly UI control that brings Tinder-style swipeable cards to .NET MAUI apps.
$ dotnet add package Plugin.Maui.SwipeCardView
SwipeCardView is a lightweight MVVM-friendly UI control that brings Tinder-style swipeable cards to .NET MAUI applications. It supports swiping in all directions while providing constant dragging feedback, which enables awesome interactivity.
This library is intended for anyone who wants to build swipeable card UI in C#. As it's built on top of .NET MAUI and uses no platform-specific code, it works on Android, iOS, macOS, Windows and any other .NET MAUI supported platform. If you are familiar with .NET MAUI ListView, CollectionView and SwipeGestureRecognizer interfaces, you will be able to utilize SwipeCardView with minimal effort.
It's highly customizable too, by giving you options to set supported directions, back card scale, rotation angle, looping behavior, and more.

Available on NuGet.
Install with the dotnet CLI: dotnet add package Plugin.Maui.SwipeCardView, or through the NuGet Package Manager in Visual Studio.
| Platform | Minimum Version |
|---|---|
| Android | 5.0 (API 21) |
| iOS | 14.2 |
| macOS (Catalyst) | 14.0 |
| Windows | 10.0.17763.0 |
ItemsSource, with or without data binding. Full ObservableCollection support (Add, Remove, Replace, Move, Reset)ItemTemplate. Supports any .NET MAUI view as the card root, including BorderGoBack(), optionally with animationInvokeSwipe()LoopCards propertyIDisposable implementationFor more info about the features check out the full documentation.
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:swipeCardView="clr-namespace:Plugin.Maui.SwipeCardView;assembly=Plugin.Maui.SwipeCardView">
<swipeCardView:SwipeCardView
ItemsSource="{Binding CardItems}"
SwipedCommand="{Binding SwipedCommand}"
VerticalOptions="FillAndExpand">
<swipeCardView:SwipeCardView.ItemTemplate>
<DataTemplate>
<Label Text="{Binding .}"
FontSize="Large"
HorizontalTextAlignment="Center"
VerticalTextAlignment="Center"
BackgroundColor="Beige"/>
</DataTemplate>
</swipeCardView:SwipeCardView.ItemTemplate>
</swipeCardView:SwipeCardView>
</ContentPage>
You can try all the samples by cloning this project and running the sample app solution in Visual Studio.
The intention of this sample is to show how simple it is to start using SwipeCardView in your MVVM app. All you need is a collection of items and a command handler.

<swipeCardView:SwipeCardView
ItemsSource="{Binding CardItems}"
SwipedCommand="{Binding SwipedCommand}"
VerticalOptions="FillAndExpand">
<swipeCardView:SwipeCardView.ItemTemplate>
<DataTemplate>
<Label Text="{Binding .}" FontSize="Large" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" BackgroundColor="Beige"/>
</DataTemplate>
</swipeCardView:SwipeCardView.ItemTemplate>
</swipeCardView:SwipeCardView>
CardItems, a list of strings defined in the bound ViewModelDataTemplate, which contains only a LabelSwipedCommand will be triggered when the card is swiped over threshold in any directionThe intention of this sample is to demonstrate the SwipeCardView interactivity. Each color represents one DraggingCardPosition. Labels on cards represent the current values of SwipeCardDirection and DraggingCardPosition. Also demonstrates GoBack() (with animation), dynamic collection manipulation (Clear Items, Add Items), and the PreviousItem property.

The intention of this sample is to replicate a Tinder-like UI, including programmatic swipes via InvokeSwipe().

Profiles, an ObservableCollection<Profile> defined in the bound ViewModelAbsoluteLayout with overlay layers. Opacity of Like, Nope, and SuperLike frames are updated on Dragging eventSwipedCommand will be triggered when the card is swiped over thresholdThe intention of this page is to demonstrate the use of all the properties of SwipeCardView. All properties can be updated at runtime using the UI controls below:

Demonstrates using a Border as the root element in a DataTemplate. This is useful when you want rounded corners, custom strokes, or other border styling on your cards.
<swipeCardView:SwipeCardView.ItemTemplate>
<DataTemplate>
<Border StrokeShape="RoundRectangle 20"
Stroke="LightGray"
StrokeThickness="2"
BackgroundColor="{Binding Color}">
<Label Text="{Binding Title}" />
</Border>
</DataTemplate>
</swipeCardView:SwipeCardView.ItemTemplate>
SwipeCardView supports navigating back to the previously swiped card:
// Go back without animation
swipeCardView.GoBack();
// Go back with a slide-in animation
swipeCardView.GoBack(animated: true);
The PreviousItem property provides access to the last swiped item. GoBack() returns true if navigation succeeded, or false if there is no previous card to go back to.
Enable infinite card looping so the stack cycles back to the first card after reaching the end:
<swipeCardView:SwipeCardView
ItemsSource="{Binding CardItems}"
LoopCards="True" />
The migration should be fairly simple:
MLToolkit.Forms.SwipeCardView to Plugin.Maui.SwipeCardViewThis project is forked from Marko Lazic's MLToolkit.Forms.SwipeCardView project and updated to be compatible with .NET MAUI.
Thank you Marko and contributors for doing the initial work on this amazing control!
Although I used a CC0 License icon, I still want to be transparent about where I got them and who made them. Credit where credit is due!