NativeGrind
A third-party SwiftUI Grindr Client with optional NativeServer.
The source code for NativeGrind and NativeServer is now private. It is available on request for employers or anyone looking to hire me, so get in touch at jay@imaoreo.dev.
After building Free Grind with Tauri, I wanted to see how well a fully native version would go so NativeGrind is my take on a unofficial native Grindr Client. This runs on every apple platform tvOS, iOS, iPadOS, visionOS, there was future plans to even bring it to watchOS. There was also a backend component called NativeServer that allowed for encrypted syncing between devices, as well as public backups of data.
Both of these are cancelled now but they are the work that I am the most proud of so far.
One codebase, every Apple platform
The whole client is made using SwiftUI this runs on iPhone, iPad, Mac, Apple TV and Vision Pro from a singular codebase. I split the codebase into three modules so the UI and shared logic stayed separate this was to help with the watchOS client in the future.
- NativeGrind — the main app, targeting iOS, iPadOS, macOS, tvOS and visionOS.
- WatchNativeGrind — the watchOS app.
- NativeGrindCore — a shared Swift package holding the REST API client, Keychain storage and the shared types.
The idea of splitting up the NativeGrindCore was to allow both the Watch and Main app to use the same components even without the WatchOS app working it is still good since it split up the codebase more.
Security by subtraction
I used Apple’s own frameworks whenever I could there was very little third-party dependencies. Secrets also lived in Keychain instead of app storage for extra security.
NativeServer: the optional backend
NativeServer is the optional backend for the “NS” build of the app. It adds accounts, device linking, encrypted sync between your devices, and media backups.
It is a TS backend using Prisma and PostgreSQL for storage, Redis and WebSockets. That all compiled and used Docker.
It also backed up chat media and albums publicly so that any other user could see it.
Why it is cancelled
NativeGrind was cancelled due to the advanced features and privacy risks that NativeServer brought up. There was also the personal reason of me recently getting a boyfriend.
As with anything unofficial, using it may break Grindr’s terms of service, and neither project is affiliated with Grindr LLC in any way.
Source code
The NativeGrind and NativeServer repositories are now private. If you are an employer, or are looking to hire me, I’m happy to share access: email jay@imaoreo.dev.