AetherVault is a .NET MAUI app for browsing, searching, and managing Magic: The Gathering cards and personal collections.
It uses a local SQLite copy of MTGJSON data, downloads card images from Scryfall, and stores user collection/deck data in a separate local database.
Decks are slowly being added.
- Language/Runtime: C# on .NET 10 (preview features enabled)
- UI: .NET MAUI + XAML
- Pattern: MVVM (CommunityToolkit.Mvvm) + Repository pattern + DI
- Data access: SQLite + Dapper
- Rendering: SkiaSharp (custom card grid rendering)
- Platform target: Android (
net10.0-android)
(some Windows files exist, but Android is primary)
To build this project locally, you need:
- .NET 10 SDK (preview-compatible for this project)
- .NET MAUI workload (including Android)
- Android SDK (API 21+ supported by project settings)
- Java JDK required by MAUI/Android toolchain
- Internet access on first app launch (for initial MTG database download)
From repo root:
dotnet workload install maui
dotnet workload install maui-android
dotnet restore AetherVault.sln
dotnet build AetherVault.csproj -f net10.0-android -mTo run on Android emulator/device:
dotnet build AetherVault.csproj -t:Run -f net10.0-android -mFaster builds: Use -m for parallel MSBuild (uses all cores). Debug builds use Fast Deployment by default (only changed assemblies are redeployed), so incremental build+deploy is quicker. For a single full APK (e.g. for sharing or devices where Fast Deployment fails), set EmbedAssembliesIntoApk to True in the Debug property group in AetherVault.csproj.
Use the test project directly:
dotnet test AetherVault.Tests/AetherVault.Tests.csproj- On startup, the app checks for the MTG master database (
MTG_App_DB.zip) and downloads it if needed. - Two SQLite databases are used:
- Read-only MTG database for card/search data
- Read-write collection database for user-owned cards and decks
CardManagercoordinates repository/services.- Search uses
MTGSearchHelperto build parameterized SQL queries safely. - Card grid rendering is performance-focused via SkiaSharp custom controls.
Data/– repositories, SQL query definitions, database managerServices/– app services (image cache/download, card manager, deck builder, etc.)ViewModels/– MVVM view modelsPages/– MAUI XAML pagesControls/– custom UI controls and renderer codeCore/– shared models/enums/utility logicAetherVault.Tests/– xUnit tests
![]() Search |
![]() Collection |
![]() Card Detail |
![]() Decks |
![]() Browse Sample Decks |
![]() Stats |
GitHub Actions workflow (.github/workflows/main.yml) runs weekly and can be triggered manually to:
- Download MTGJSON SQLite data
- Trim/optimize it
- Publish
MTG_App_DB.zipto GitHub Releases
The app then consumes that release artifact for local DB setup.





