NativeAppTemplate-Free-Android is a modern, comprehensive, and production-ready native Android app with user authentication and a full CRUD example.
This Android app is a free version of NativeAppTemplate-Android (Solo) and NativeAppTemplate-Android (Team).
The iOS version is available here: NativeAppTemplate-Free-iOS.
Want this template adapted to your own domain? nativeapptemplate-agent is a Claude Code agent that turns a one-sentence spec (e.g. "a walk-in queue for a barbershop") into a coherent three-platform app — this Jetpack Compose Android app, a matching Rails 8.1 API, and a SwiftUI iOS app — renamed and adapted for you, with validation built in.
NativeAppTemplate-Free-Android is configured to connect to api.nativeapptemplate.com.
The Rails 8.1 API backend that powers api.nativeapptemplate.com is open source (MIT):
NativeAppTemplate-Free-Android uses modern Android development tools and practices, including:
- 100% Kotlin
- 100% Jetpack Compose
- Hilt (Dependency Injection)
- Retrofit2 (Networking)
- Proto DataStore
- Android Modern App Architecture
- Simple MVVM Layered Architecture
- Test
- Inspired by nowinandroid and emitron-Android
- Onboarding
- Sign Up / Sign In / Sign Out
- Email Confirmation
- Forgot Password
- CRUD Operations for Shops (Create/Read/Update/Delete)
- CRUD Operations for Shops' Nested Resource, Item Tags (Create/Read/Update/Delete)
- Force App Version Update
- Force Privacy Policy Version Update
- Force Terms of Use Version Update
- And more!
NFC tag writing and background tag reading were part of v1 and have been removed from the current version. The full NFC implementation remains available in the v1-with-nfc branch.
The full versions (NativeAppTemplate-Android (Solo) and NativeAppTemplate-Android (Team)) include additional advanced features:
- URL Path-Based Multitenancy (prepends
/:account_id/to URLs) - User Invitation to Organizations
- Role-Based Permissions and Access Control
- Organization Switching UI
- Push Notifications via FCM
To get started, clone this repository:
git clone https://github.com/nativeapptemplate/NativeAppTemplate-Free-Android.gitTo run this app successfully, ensure you have:
- An Android device or emulator with API level 26 or higher.
By default the debug build hits the hosted API (https://api.nativeapptemplate.com). To point it at a Rails server running on your Wi-Fi, add the following to ~/.gradle/gradle.properties (here ~ is your user home directory — /Users/<you> on macOS, /home/<you> on Linux, C:\Users\<you> on Windows; create the file if it doesn't exist):
# Use your current Wi-Fi IP (macOS: `ipconfig getifaddr en0`), or 10.0.2.2 for emulator → host.
# Never use 127.0.0.1, localhost, or 0.0.0.0 — Rails and this app must agree on one reachable address.
NATIVEAPPTEMPLATE_API_DOMAIN=192.168.1.21
NATIVEAPPTEMPLATE_API_PORT=3000
NATIVEAPPTEMPLATE_API_SCHEME=http
Then ./gradlew assembleDebug — or Build → Rebuild Project from Android Studio. The debug buildConfigField entries in app/build.gradle.kts read these via project.findProperty(...), so the same config works from both the terminal and the IDE. Remove the three properties to fall back to the hosted default. For a one-off override: ./gradlew -PNATIVEAPPTEMPLATE_API_DOMAIN=192.168.1.21 -PNATIVEAPPTEMPLATE_API_PORT=3000 -PNATIVEAPPTEMPLATE_API_SCHEME=http assembleDebug.
Cleartext HTTP to private IPs is already permitted in debug via app/src/debug/res/xml/network_security_config.xml; the release config (in app/src/main/) keeps api.nativeapptemplate.com HTTPS-only.
Contributions are welcome! Please read CONTRIBUTING.md for guidelines on reporting issues, proposing changes, and submitting pull requests.
This project adheres to the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code.
If you discover a security vulnerability, please follow the disclosure process in SECURITY.md. Do not open public issues for security concerns.
This project is licensed under the MIT License — see LICENSE for details.

