The previous stripHtml decoded </> after the regex pass, so content stored as <p>text</p> was never stripped. Now entities are decoded first, then all tags are removed. Also strip HTML when prefilling compose from an existing post (Edit/Repost) so the text field shows clean content, not raw markup. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PostizMobile
React Native (Expo) mobile app to control a self-hosted Postiz instance from Android.
Build is fully local — no expo.dev account or EAS cloud required.
Features
| Screen | Description |
|---|---|
| Calendar | Monthly view with color dots per day (indigo = scheduled, green = published, red = error). Tap a day to see its posts. |
| Posts | Filtered list (All / Queue / Published / Draft / Error) with sort toggle, pull-to-refresh, swipe left to delete, swipe right to reschedule. |
| Compose | Text editor with per-network character limit, channel picker, date/time picker, gallery image pick + upload, publish now or schedule. Local draft save/restore. |
| Settings | API key and base URL, connection test, secure storage. 401 auto-redirect to Settings. |
| Notifications | Local alerts when a post transitions to PUBLISHED or ERROR (polling every 15 min). |
Theme: forced dark. Auth: API key in expo-secure-store, never hardcoded.
Prerequisites
| Tool | Version |
|---|---|
| Node.js | 20 LTS |
| pnpm | 10+ |
| Java (JDK) | 17–24 (Java 25+ not yet supported by Gradle 8) |
| Android SDK | see below |
Installation & Development
git clone https://github.com/pirona/postiz-android.git
cd postiz-android
pnpm install
Start the dev server (requires Expo Go on the device):
pnpm --filter @workspace/postiz-mobile run dev
Building an APK (local, no EAS)
See artifacts/postiz-mobile/README.md for the full build guide.
Quick start:
cd artifacts/postiz-mobile
./install-android-sdk.sh # first time only
cp ~/.config/postiz-mobile/signing.env.example ~/.config/postiz-mobile/signing.env
$EDITOR ~/.config/postiz-mobile/signing.env # fill in keystore credentials
./build-apk.sh # → dist/postiz-mobile-YYYYMMDD-HHMM.apk
GitHub Actions release
Pushing a tag triggers an automated signed APK release:
git tag v1.0.0
git push origin --tags
The workflow builds the APK on GitHub's infrastructure and attaches it to a GitHub Release.
Required secrets: KEYSTORE_B64, KEYSTORE_ALIAS, KEYSTORE_STORE_PASSWORD, KEYSTORE_KEY_PASSWORD.
App Configuration
On first launch, go to Settings:
- Base URL:
https://your-postiz-instance/api/public/v1 - API Key: generated in Postiz → Settings → API Keys
- Tap Test Connection, then Save Settings
Postiz API
| Method | Endpoint | Usage |
|---|---|---|
GET |
/integrations |
List channels |
GET |
/posts?startDate=&endDate= |
Posts over a date range |
POST |
/posts |
Create / schedule a post |
DELETE |
/posts/:id |
Delete a post |
POST |
/upload |
Upload an image (multipart) |
Troubleshooting
"Not Configured" on all screens → Settings tab → enter API key and URL → Test Connection.
"Connection failed" → URL must end with /api/public/v1 — check Postiz is reachable.
No notifications → Accept permissions on first launch. Polling runs every 15 min.
Build fails at Gradle → Make sure ANDROID_HOME is set and Java is ≤ 24 (the script auto-detects ~/jdk21).
expo prebuild fails → Run pnpm install from the repo root first.