On iPhone, iPad and Android today · macOS and Windows next

Your device
is the server.

Device Cloud turns a phone, tablet or desktop into a small personal file server — files, an editor, git, databases and documents, served to the browser on the device, to the local network, and through a zero-account tunnel to anywhere on the internet.

http://127.0.0.1:8080 Loopback only

One address per reach. Nothing beyond the first one is on until you turn it on.

Get it

On your phone today, on your desk shortly

The phone heads and the desktop heads are the same application. What differs between one platform's build and another's is the entry point, the manifest and the icon.

iPhone & iPad
iOS 15 and up
Available Download on theApp Store
Android
API 29 and up
Available Get it onGoogle Play
macOS
A real menu bar and a status-bar item
Coming soon
Windows
A system-tray item and drag from Explorer
Coming soon
Getting there

Six ways in, and you decide how many are open

The server binds to loopback until you say otherwise, and nothing off the device is served until a username and password are set. Every route past the first one is a switch you throw.

On the device

The app itself

Nothing to set up. The Files tab is a WebView on the loopback server — the same client every other device gets.

On the device

The platform's file manager

Nothing to set up. On My iPhone → DeviceCloud in Files, or DeviceCloud in the Android picker.

On the device

The share sheet

Send a file to Device Cloud from anywhere on the phone. It lands in Inbox and opens where it is best read.

Same network

Another device on this wifi

A password, then Share on this network. Announced over Bonjour as _devicecloud._tcp.

Anywhere

The public internet

A password, then Public tunnel. You get a public https:// address and a QR code for it. No account anywhere.

Same room

No network at all

Bluetooth, one file at a time, accepted by hand at the other end. Nothing moves until the other device says yes.

What is in it

A file server, and then everything you would want to do with the files

There is exactly one file-management UI. What you see standing at the device is what a visitor on the other side of the tunnel sees.

The workspace

Monaco, a lazy file tree, and tabs that each keep their own undo stack, language and view state. A scratch buffer is open on arrival, so it is somewhere to type before it is somewhere to open a file.

Files

Listings, breadcrumbs, upload, download, rename, and a trash you can turn off if a delete should just be a delete. Cut, copy, move, zip or share several at once. Zip archives open as folders you walk into.

Search, as two questions

What you are looking for — names, and the text inside files — is asked apart from where to look. That is what lets "*.cs files containing TODO" be a search, which one box cannot express.

A shell chosen by the room

Wide, the file panel sits beside the editor, drag-resizes, and markdown previews as you type. Narrow, it is one pane at a time. There is no width at which this folds into a 44pt strip nobody can read.

A real docking surface

On a desktop the tree, the listing and the preview are tabbed groups that split, re-arrange and tear off into their own windows, and remember where you put them. On a phone the same page is one panel with a Back button.

Word, Excel, PowerPoint

Opened, rendered and edited in the browser, then saved back surgically, so the parts of the package you did not touch survive byte-identical.

SQLite, opened onto its tables

Schema, keys and indexes, rows edited in place, and a query pane with results in a grid. Everything runs on the device against the file where it lies — a database is never downloaded to be read.

A DDL designer that does not run

Creating a table, dropping a column, changing a type — each ends as a statement in the query window with Run beside it. Seeing the script is the difference between changing a column and hoping.

Git, written from scratch

Objects, refs, the index, diff, merge, smart-HTTP transport and submodules, in managed C#. libgit2 P/Invokes native code and does not survive iOS Native AOT, so there is no version of this that is a binding.

Every git operation you reach for

Clone, stage and unstage by file or by hunk, diff, commit and amend, log, branches, merge, fetch, pull, push, rebase, cherry-pick, revert — with continue, skip and abort for the ones that stop — stash, blame and submodules.

Accounts that stay signed in

GitHub, GitLab, Azure DevOps, Gitea and anything else. The token goes to the keychain and never into the database, which is why a restored device keeps its accounts and has to sign in to them again.

Ahead and behind, kept true

Remotes are reached in the background on each repository's own cooldown, not the last time somebody pressed Fetch. A remote that cannot be reached is a timestamp that does not move, rather than an error on the screen.

Mapped folders

Folders elsewhere on the device — a Documents folder, an external drive, a project tree, iCloud Drive — served without anything being copied in, and read-only if you want. Unmapping deletes nothing.

The photo library, as a folder

An album in each of yours, nothing copied. Everything comes out as JPEG whatever the phone stores, so HEIC opens in any browser — and a tile asks for the size it is going to draw, not a twelve-megapixel original.

Nearby sharing over Bluetooth

Hand a file to a Device Cloud device in the same room with no network involved. The other end sees who is sending, the name and the size — and the radio advertises nothing until you turn listening on.

Drag straight onto the window

On desktop, a file dragged from Finder, Explorer or Files lands in the folder you are standing in. The drag is claimed at the window and uploaded in-process, so a half-gigabyte video never goes through a WebView's heap.

Backup that rebuilds, not remembers

On Apple platforms the document database snapshots to your private iCloud container minutes after a change. A linked repository's history travels as a git packfile, so a restore rebuilds the clone rather than remembering its name.

Diagnostics you switch on

An optional record of what was created, changed and read. An optional recording of every request the server answered — both sides, headers and bodies — held in memory only, never written down, and off again every launch.

Still serving when you look away

The server keeps running when the app is not in front. Desktop heads add a status-bar item, because the useful state of a desktop file server is "is it serving, and at what address" — which is exactly what a minimised window hides.

Openers

One table decides what a file opens into

So the listing, the workspace and the viewer page cannot disagree about it.

FileWhat opens it
Source, markup, notesThe Monaco editor. Markdown adds a live preview beside what you are typing
ImagesA zooming viewer, and an editor — crop, rotate, draw, text annotations, undo/redo, export
Audio and videoA player with a transport bar that knows a sound file has no picture to go full screen with
PDFRendered page-at-a-time onto a canvas by a bundled pdf.js, because the Android WebView has no PDF engine of its own
SQLiteTables, schema, editable rows and a query pane. The one opener that never reads the file in the browser — the query runs on the device
Word, Excel, PowerPointOpened, rendered and edited in the browser, saved back surgically so untouched parts of the package survive byte-identical
Anything elseThe only honest offer, which is a download
Security model

Sharing is always a deliberate act

Every way off the device is a switch, and every switch starts off.

Off unless you turn it on

Share on this network
Needs a password first
Public tunnel
A public https:// address and a QR code
Nearby listening
Starts off every launch, every time
Writing to the photo library
A separate permission from reading it
Serve on loopback
The device's own Files tab

Loopback until you say otherwise. The server binds to the device alone until Share on this network or the tunnel is turned on.

No password, nothing served. Nothing off the device is answered until one is set — and the check lives on the server, not in the UI.

Sessions you can end. Visitors sign in and carry a cookie; Remember me keeps it 30 days, and changing the username or password ends every remembered session at once.

The owner is never challenged. The device's own Files tab is not asked for credentials. It is already inside.

Git off means 404. While git is off the tab is hidden and every /api/git route refuses — including to someone holding a share link. Hiding a link is presentation, not a permission.

Secrets live in the keychain. Tokens and the password are in the platform keychain, not in the settings file and not in the database.

Every incoming file is a question. A nearby transfer is accepted by hand at your end before a byte moves.

Under it

One app, one client, every screen

There is no separate web product and no separate phone product. The client that ships inside the app is the client a visitor gets on the other side of the tunnel — so what you see standing at the device is exactly what you are handing out.

Inside the app
runtime.NET 10, AOT- and trim-clean throughout
serverAn HTTP server embedded in the app, bound to loopback until you say otherwise
clientBlazor WebAssembly, published, zipped and embedded — then served to every visitor, the device included
gitWritten from scratch in managed C#. No native dependency, so it survives iOS Native AOT
filesThe app's own folder, folders mapped from elsewhere on the device, and the photo library
nearbyBluetooth, one file at a time, accepted by hand at the other end

Your files never left.

They were always on the device. Device Cloud just gives them an address — and gives you the switch.

macOS and Windows are coming soon.