Private Mobile Beta

PocketDev

From pocket to production

curl -fsSLhttps://pocketdev.run/install.sh| bash
AppleiOS
AndroidAndroid
ClaudeClaude
CodexCodex
GitHub CopilotCopilot

Enter in credentials

Then open up the Pocket Dev web console on you IP address

Repo History

tasks and git history are tracked for each repo

grows

System Overview

PocketDev is no longer just a phone talking to a daemon. The current system has two user-facing clients, one self-hosted runtime, and one shared package that keeps protocol and design tokens aligned.

PocketDev Agent

Server runtime

A Bun + Elysia process on your Linux box that owns pairing, task orchestration, terminal sessions, file access, preview proxying, and local SQLite state.

Console SPA

Browser-based control plane

A React dashboard served by the agent for admin setup, pairing, diagnostics, repo inspection, and terminal access.

iOS / Android

Mobile workspace

React Native app for tasks, plans, files, git, projects, containers, server actions, and setup workflows on phones and tablets.

Shared foundation:@pocketdev/sharedwire protocol/theme tokens/Zod schemas/Ed25519 crypto

Workspace Readiness

PocketDev treats setup as guided capability enablement

The mobile setup flow does not just check whether binaries exist. It groups tools by role, opens dedicated wizards for Git and AI tools, and blocks dependent paths until the server has what that workflow actually needs.

Required setup

Complete Git and package-manager setup before heavier workspace flows begin.

GitHubGit + GitHub CLI
Node.jsNode and package tools

AI assistant

Choose at least one assistant path depending on how you want the server to work.

ClaudeClaude
CodexCodex
GitHub CopilotGitHub Copilot

Language support

Python and related language tooling unlock setup inspection and more capable workspace automation.

PythonPython runtime

Agent API Surface

The agent still owns a single-port interface, but it now exposes a much broader product surface: console auth, mobile APIs, realtime task streams, project management, and preview proxying under one namespace.

Console and setup

GET/PocketDev/health
REST/PocketDev/api/console/*
REST/PocketDev/api/pair
APP/PocketDev/*

Realtime transport

WS/PocketDev/ws
WS/PocketDev/ws/terminal

Device REST surface

REST/PocketDev/api/files/*
REST/PocketDev/api/git/*
REST/PocketDev/api/projects/*
REST/PocketDev/api/containers/*

Preview and local tooling

ANY/PocketDev/preview/*

Security Model

The security model is now split across three boundaries: the public website, the self-hosted agent, and the paired clients that talk to that agent. Each layer has a narrower role than before.

Ed25519 Keypair Auth
Each paired device generates its own Ed25519 keypair. The agent stores only the public key, while signed requests prove device identity without sharing long-lived secrets.
One-Time Pairing Passcodes
Mobile pairing flows through short-lived passcodes and explicit approval state. That gives the server owner a clear enrollment step before any device gains API access.
Separate Admin and Device Trust
The browser console uses its own admin account and cookie session, while mobile devices authenticate with public-key cryptography. Those two trust paths stay distinct.
Scoped Host Access
File, repo, terminal, and preview actions are mediated by the agent. Path validation, active project selection, and explicit endpoint boundaries keep host access centralized in one process.
Local-First Server State
Operational data lives on the box that you control: SQLite for the agent runtime and OS keychain or MMKV on clients. The hosted website is separate from your server session data.

Wire Protocol

The protocol now covers more than task streaming. Plans, setup diagnostics, terminal sessions, container logs, and connection health all ride through the same typed message envelope from `@pocketdev/shared`.

Commands (client → agent)

task.start
task.kill
task.input
container.logs.follow
terminal.input
setup.check_prerequisites
plan.answer
plan.accept

Events (agent → client)

task.output
task.status_changed
task.completed
terminal.output
setup.prerequisites_result
plan.proposed
plan.step_updated
plan.resolved
{ type: "plan.step_updated", id: "msg_01", payload: { step_id: "step_repo", status: "completed" }, timestamp: 1712000000 }

Tech Stack

The stack is intentionally split by responsibility. The public website, the self-hosted runtime, and the two clients each have their own runtime needs, but they stay aligned through shared TypeScript contracts in the monorepo.

Hosted Web

  • TanStack Start
  • Vite
  • Postgres
  • @pocketdev/db

Agent

  • Bun runtime
  • Elysia
  • SQLite + Drizzle
  • PTY + process orchestration

Console

  • Vite + React 19
  • react-router-dom
  • xterm.js
  • shadcn/ui + Tailwind 4

Mobile

  • React Native 0.83
  • Rock CLI + Re.Pack
  • Zustand
  • MMKV + Keychain

Shared

  • Typed WS protocol
  • Zod schemas
  • Theme tokens
  • @noble/ed25519

Tooling

  • Claude / Codex / Copilot CLIs
  • ripgrep
  • git
  • local dev servers