NativePHP / dev-null-app
git clone https://github.com/NativePHP/dev-null-app.git
A native iOS and Android app for devnull, built with NativePHP
—
stars, 24h
+53
stars, 7 days · #857
+53
stars, 30 days · #5,579
53
★ total · +53% this week
13
forks · 12 open issues
Star history starts 2026-10-20; the chart appears after the second daily snapshot.
LanguagePHP
LicenseMIT
Created2026-10-15 (5d ago)
Last pushtoday
Watchers1
OwnerOrganization
Links
README excerpt
# /dev/null mobile A native iOS and Android app for devnull, the social network for developers drawn as a git log. It's built with NativePHP Mobile v4, so the UI is fully native and the app logic is Laravel. ## How signing in works There are no passwords or tokens. On first launch the app makes its own ed25519 SSH key and keeps the secret half in the Keychain. Every request to devnull is signed with it. Sign in with GitHub opens dev-null.sh in the system's sign-in browser, which shares Safari's cookies, so if you're already signed in there you only tap Approve. dev-null.sh approves this phone's key for your account and sends the browser back to `devnull://auth/callback` with a code. The app trades the code for your account with a signed request, using PKCE to prove it started the sign-in. On iOS you can also link an Apple ID from this device, under your profile. After that, Sign in with Apple on a new phone gets you into the same account. It never makes one: a devnull account is always a GitHub one, so an Apple ID nobody has linked gets a message saying to sign in with GitHub first. It comes from codingwithrk/nativephp-social-auth, which hashes the app's nonce for Apple, and the app asks Apple for no name or email. ## The API The app talks to the signed `/api/v1` from nunomaduro/dev-null.sh#130, which isn't merged yet. Until it is, point the app at a devnull instance running that branch. To make that instance work with the app on your phone, create a tunnel (ngrok, Cloudflare etc) and set the `DEVNULL_URL` .env key to that URL before compiling the app. ## Setup Clone the repo and: [code] `nativephp/mobile-secure-storage` is a paid plugin from `plugins.nativephp.com`, so `composer install` needs your NativePHP plugin credentials. See below if you don't have access to the plugin. For now the app tracks unreleased branches, which Composer pulls straight from GitHub: - `nativephp/mobile` on `combined/dev-null-app`, a branch just for this app. It's `feat/custom-icons`, which adds custom SVG icons (NativePHP/mobile-air#544), plus the fix that stops the keyboard-dismiss tap swallowing taps on UIKit controls such as `native:toggle` and the Sign in with Apple button (NativePHP/mobile-air#545). - `nativephp/mobile-ui` on `combined/dev-null-app`, a branch just for this app. It's `feat/custom-icons` (NativePHP/mobile-ui#132) plus: - opening the iOS pager at its start page (#131) and running a swiping pager's lists under the tab bar (#134), - a pager that reports its page once the swipe settles (#135) and draws its tabs natively (#136), - button variants named after a theme colour (#137), - a sticky header for lists (#138), - a pager header that scrolls with the page showing (#139). Once those are released, the app goes back to tagged versions and the combined branches can be deleted. ### Without plugin credentials [code] This installs everything except the Secure Storage plugin, from a copy of `composer.json` and `composer.lock` that it writes to `c