You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# Phone Server
Phone Server is now a local-first Android app intended to make the phone behave like a small self-managed server environment. The phone is the server. The user opens the app, grants local permissions if needed, and starts working directly on-device.
There is no required registration, login, or external control plane in the target product.
## Current Build
The active implementation lives in `app/` and currently includes:
- a Jetpack Compose Android UI with Dashboard, Terminal, Projects, and Services tabs
- a terminal-first default experience with a cleaner Termux-style terminal screen
- local workspace creation inside app-private storage
- a persistent shell session so `cd` changes survive between commands
- local terminal history stored in app-private files
- a foreground runtime service for long-running local work
- managed service start, stop, restart, and output preview from the Services tab
- a runtime abstraction layer for Android shell vs future Ubuntu userspace backends
- Ubuntu 22.04 scaffold state and storage preparation inside the app
- Ubuntu Base rootfs download, checksum verification, and extraction into app-private storage
- no account, no device enrollment, and no required backend to use the app
The older Spring Boot code under `src/main/java/com/phoneserver/controlplane` and the `pom.xml` file are legacy artifacts from the earlier backend-first prototype. They are no longer the primary direction.
## What It Should Feel Like
The app is aiming for a Linux-style terminal experience on Android:
- open the app and use the device directly
- create local workspaces for repos or project files
- run shell commands on the phone
- keep long-running commands under app control
- manage everything locally without depending on a remote server
## Current Limits
The current Android build is functional, but it is not finished in the VPS sense:
- the shell is persistent, but it is not PTY-backed yet
- highly interactive terminal programs are still limited
- workspace and history persistence are file-backed JSON stores, not Room yet
- managed services are not restored automatically after process death or reboot
- Ubuntu Base can now be staged locally, but the real `proot` + PTY session is still not implemented yet
- Git clone/import flows and port-management UI are not implemented yet
- the repository still contains the old backend prototype for reference
## Run The App
The Android entry point is the `app/` module.
1. Open the repository in Android Studio.
2. If Android Studio detects multiple build systems, use the Gradle project defined by `settings.gradle.kts` at the repository root.
3. Run the `app` module on a device or emulator running Android 8.0 or newer.
4. On Android 13 and newer, allow notification permission so the foreground runtime service can stay active.
5. Use the Projects tab to create a workspace, the Terminal tab to run commands, and the Services tab to keep long-running commands under control.
Note:
- this repository now includes a Gradle 8.9 wrapper compatible with Android Gradle Plugin 8.7.3
- Android Studio can use its embedded JDK; you do not need a separate system-wide Gradle install for IDE builds
- you still need to install Android SDK components from Android Studio: Platform-Tools, a recent SDK Platform, and matching Build-Tools
## Manual Test Flow
Use this sequence on a device or emulator:
1. Launch the app and verify the dashboard says the app is local-only.
2. Create a workspace from the Projects tab.
3. Open that workspace in the Terminal tab and run `pwd`, `ls`, and `echo hello`.
4. Run `cd ..` and then `pwd` again to confirm directory changes persist.
5. Close and reopen the app, then confirm recent terminal history is still shown.
6. Start a managed service with `while true; do date; sleep 5; done`.
7. Confirm the Services tab shows live output preview.
8. Restart the managed service, then stop it.
9. Open the Services tab and press `Prepare Ubuntu`.
10. Press `Install Ubuntu` and keep the app open while the Ubuntu Base archive downloads and extracts.
11. Confirm the Services tab shows the Ubuntu phase moving through download, extraction, and ready states.
12. Confirm the app still blocks `Use Ubuntu` until a real `proot` launcher is bundled.
## Next Steps
1. Add a PTY-backed terminal implementation.
2. Bundle `proot` binaries for supported Android ABIs and wire them into the runtime manager.
3. Launch Ubuntu bash sessions through the new runtime abstraction against the staged rootfs.
4. Add Git clone/import flows and per-workspace run profiles inside the selected runtime.
5. Persist managed service definitions and restore them when Android allows.
6. Remove or archive the legacy Spring Boot prototype once it is no longer needed as reference.
# phone-server
# phone-server
# phone-server
# phone-server
# phone-server
# phone-server
# phone-server