# Mural ships Android preview releases and a seven-day iPhone build loop

> Mural is a SwiftUI and Jetpack Compose conversation app for language practice that runs on your own OpenAI key and needs a Mac with Xcode 26. Its published releases only cover Android previews, and the free iPhone path expires every seven days.

**Chuloo/mural** — The language app you eventually delete. A native iPhone companion for learning through conversation.

- Repository: https://github.com/Chuloo/mural
- Website: https://mural.chat
- Stars: 1,583 · Forks: 311
- Language: Kotlin
- License: MIT
- Published: 2026-09-16 · Updated: 2026-09-16 · Language: en
- Canonical page: https://hysenlabs.com/projects/chuloo-mural

## Free provisioning profiles expire after seven days

Running Mural on your own iPhone without paying Apple anything is possible, and the shape of that path is unusual. A free Personal Team can build and run the app on one phone, but TestFlight and App Store distribution require Apple Developer Program membership, and the free provisioning profile behind the free team expires after seven days. The refresh is not an app update. It means running the same Xcode project again while preserving the same team and the same bundle identifier. So the default first experience of the iPhone client is a weekly loop of rebuild, reinstall and device trust prompts, and the only way out of it is a paid membership that changes how the app reaches a phone rather than how the app is built.

## The bundle identifier is the only key to the learning records

Mural has no account and no server-side copy. Learning records stay on the device, and the export is a JSON learning backup that can be imported later, with iPhone-compatible JSON backups also offered on the Android client. That makes the app identity load-bearing rather than cosmetic. For a fork the bundle identifier has to be replaced with a unique value such as `com.yourname.mural`, and the installation steps are explicit that the value must stay stable for later updates, and that a backup should be exported before changing either the team or the identifier, or before switching phones. Checkouts from before the move also have to follow local-settings migration steps, because the iPhone project now lives in `apps/ios/` and the migration is what preserves your signing team, account configuration and existing app identity. Settings carries the other half of local storage, letting you delete one conversation or delete all learning data outright, with no server copy behind either action.

## The copy-and-paste agent prompt stops mid-sentence

The README offers a prompt to paste into Codex or another coding agent that already has access to the Mac's files and terminal. It asks the agent to clone the repository, read README.md, docs/run-on-iphone.md and docs/build-and-test.md, resolve the pinned dependencies, run the offline core tests and build the iOS Simulator target, then guide the user through adding an Apple Account and choosing a signing team. The prompt text ends partway through its final instruction, at the words `Preserve the existing team and identifier when up`, so the sentence carrying the update guidance never finishes. The README also states what the agent cannot do: Apple Account sign-in, team selection, device trust, Developer Mode prompts and API-key entry all stay with the person holding the phone. The repository carries an Android build guide at docs/run-on-android.md and a verification record at verification/android-validation.md, and the offline core tests named in the agent prompt show the same habit on the iOS side: checks that run without the network.

## One gradle invocation runs the tests, the linter and the APK build

The Android side has the shortest documented build in the project, and it asks for Java 17 with Android SDK 36:

```sh
cd apps/android
./gradlew :app:testDebugUnitTest :app:lintDebug :app:assembleDebug
```

Three Gradle tasks in one command: unit tests, Android lint, and a debug APK for personal install. The platform floor is Android 8.0 or later, while the iPhone client wants an iPhone on iOS 26.1 or later with Xcode 26 or later, so two clients in one repository cover close to opposite ends of the device range. The Android interface is English, and Spanish on a phone set to Spanish, which is a much narrower set of interface languages than the eleven modules the app teaches.

## No account, your own key, and a different key store on each platform

Mural connects straight to OpenAI with a key the user supplies, so the setup asks for an OpenAI API project with billing and access to GPT-Live-1 and GPT-5.6 Luna, and says plainly that a ChatGPT subscription does not provide API credit. It needs an internet connection but no Mural account and no running Mac. The two clients hold that key differently: on iPhone it is saved under Settings, Advanced, Use your own API key, and on Android the app accepts Mural minutes or your own OpenAI API key stored with Android Keystore. Learning records stay local on both sides. The result is that obtaining the app is free and running it is not, because the usage is billed to the API project you own.

## Android shows an ongoing notification with an End action, and the iPhone side is not described

An active voice conversation is meant to survive the phone dimming, locking, or Mural moving to the background, and returning to the app restores the same conversation. On Android that promise is paired with an ongoing notification carrying an End action, so a call that is no longer on screen still has a visible way to stop it. Nothing in the same paragraph describes an equivalent indicator or control for iOS. The paragraph also names three things that still end a call: audio interruptions, the chosen duration, and an existing silence limit whose value is never given. The termination rules are therefore stated in the negative, while the numbers behind them are left out.

## The recall bars are called heuristics by the project itself

The retention display is one to three bars summarising repeated retrieval over time, and three bars require spaced evidence in different contexts. The project then narrows its own claim in the next sentence: these are product heuristics, not calibrated forgetting probabilities and not a language certificate. That disclaimer is the most precisely worded claim in the README. Other numbers are smaller but just as concrete: the Talk screen returns to its greeting 15 seconds after a conversation ends, with New conversation as the immediate reset while saved conversations and learning remain. The conversation settings count is 24, with cultural details supplied by each language module, progress is tracked separately per learning language, and requesting a current topic brings back source links from web search.

## The release channel is Android previews, and the last paragraph ends at Voice accent and

The three most recent releases are v0.1.0-android-preview.17, v0.1.0-android-preview.10 and v0.1.0-android-preview.9, which makes the release train an Android preview channel sitting at 0.1.0 with a build counter, and leaves no published iPhone build at all. The last recorded push to main is dated 2026-10-02. Language coverage is eleven modules with regional targets, from Norwegian Bokmal with an Eastern Norwegian voice target through Brazilian Portuguese to Tagalog from the Philippines, and Serbian accepts Cyrillic input alongside Ekavian Latin. The final paragraph is the Mandarin one, and it ends mid-sentence at the words Voice accent and, after the warning that pinyin readings come from system dictionary entries and that names, ambiguous words and tone changes in connected speech still need listening checks.

## Conclusion

Mural suits someone who already has an OpenAI API project and is willing to build it themselves rather than download it. Before starting on iPhone, check the Apple membership question first, because the free Personal Team path dies every seven days and the fix is a paid membership, not a different build flag. Check that GPT-Live-1 and GPT-5.6 Luna are reachable from your project with billing enabled, since a ChatGPT subscription does not carry API credit. Decide your bundle identifier once and keep it, because your learning records are local and tied to that identity. On Android, expect a narrower interface than the eleven languages the app teaches, and treat the recall bars as the product heuristics they are called rather than a measure of what you have retained.

## FAQ

### What does Chuloo/mural need before the iPhone app will build and run?

A Mac with Xcode 26 or later, an iPhone running iOS 26.1 or later, an Apple Account, and an OpenAI API project with billing plus access to GPT-Live-1 and GPT-5.6 Luna. A ChatGPT subscription does not provide API credit, so the subscription alone is not enough.

### Do I need a Mural account to use the app?

No. Mural needs an internet connection but no Mural account and no running Mac. On iPhone the key is saved under Settings, Advanced, Use your own API key; on Android the app accepts Mural minutes or your own OpenAI API key stored with Android Keystore. Learning records stay on the device.

### How long does the free iPhone installation of Mural last?

Free provisioning profiles on a free Personal Team expire after seven days. Refreshing means running the same project again while preserving the team and bundle identifier. TestFlight and App Store distribution require Apple Developer Program membership.

### What do the recall bars in Mural actually measure?

One to three bars summarise repeated retrieval over time, and three bars require spaced evidence in different contexts. The project states these are product heuristics, not calibrated forgetting probabilities or a language certificate.

### Which languages does Mural teach, and which interface languages does Android have?

Eleven modules with regional targets, including Norwegian Bokmal, Spanish from Spain, international English, French, German, Italian, Brazilian Portuguese, Standard Mandarin with Simplified Chinese, Standard Serbian, Modern Standard Greek and Tagalog from the Philippines. The Android interface is English, and Spanish on a phone set to Spanish.

## Sources

- [Chuloo/mural on GitHub](https://github.com/Chuloo/mural)
- [License: MIT](https://github.com/Chuloo/mural/blob/main/LICENSE)
- [Project website](https://mural.chat)
- [README](https://github.com/Chuloo/mural/blob/main/README.md)
- [Releases](https://github.com/Chuloo/mural/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/chuloo-mural
