The app itself
Nothing to set up. The Files tab is a WebView on the loopback server — the same client every other device gets.
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.
One address per reach. Nothing beyond the first one is on until you turn it on.
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.
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.
Nothing to set up. The Files tab is a WebView on the loopback server — the same client every other device gets.
Nothing to set up. On My iPhone → DeviceCloud in Files, or DeviceCloud in the Android picker.
Send a file to Device Cloud from anywhere on the phone. It lands in Inbox and opens where it is best read.
A password, then Share on this network. Announced over Bonjour as _devicecloud._tcp.
A password, then Public tunnel. You get a public https:// address and a QR code for it. No account anywhere.
Bluetooth, one file at a time, accepted by hand at the other end. Nothing moves until the other device says yes.
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.
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.
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.
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.
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.
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.
Opened, rendered and edited in the browser, then saved back surgically, so the parts of the package you did not touch survive byte-identical.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
So the listing, the workspace and the viewer page cannot disagree about it.
| File | What opens it |
|---|---|
| Source, markup, notes | The Monaco editor. Markdown adds a live preview beside what you are typing |
| Images | A zooming viewer, and an editor — crop, rotate, draw, text annotations, undo/redo, export |
| Audio and video | A player with a transport bar that knows a sound file has no picture to go full screen with |
| Rendered page-at-a-time onto a canvas by a bundled pdf.js, because the Android WebView has no PDF engine of its own | |
| SQLite | Tables, 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, PowerPoint | Opened, rendered and edited in the browser, saved back surgically so untouched parts of the package survive byte-identical |
| Anything else | The only honest offer, which is a download |
Every way off the device is a switch, and every switch starts off.
Off unless you turn it on
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.
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.
They were always on the device. Device Cloud just gives them an address — and gives you the switch.
macOS and Windows are coming soon.