vue-sandbox.landing Open editor

vue/sandbox

Vue Sandbox and Online Editor for Full Projects

Build a Vue application the way you would locally — Monaco editing, a real folder tree, packages, a terminal and Git — in a tab, on whatever machine you happen to be sitting at.

editorMonaco
packagesnpm panel
vcsisomorphic-git
installnone
project
src/
  components/  UserCard.vue  NavBar.vue
  composables/ useUser.ts
  stores/      user.ts
  router/      index.ts
  App.vue
  main.ts
package.json
12 files

01 platform

A workspace, not a scratch file

A sandbox that holds one file is a scratch pad. What makes this a development environment is that the second file, the package, the branch and the terminal are all already there.

  • A folder tree you can actually organize

    components/, composables/, stores/, router/ — the shape a Vue project grows into. Create, rename, move and nest without leaving the tab.

  • Packages that persist with the project

    Install once and the import map is written into the project. Reopen it next week and the dependency is still resolved.

  • Git with branches and history

    isomorphic-git gives you staging, commits, branches and a readable log, running locally and working with no connection.

  • An integrated terminal

    A real shell surface over your project files, for the moments when typing is faster than clicking through a GUI.

02 deep dive

Autocomplete that knows what a template is

A Vue template is not HTML. It has directives, bindings, slots and your own components in it, and completion that does not know the difference is completion you learn to ignore.

Components resolve to their definitions. Start typing <User in a template and the editor offers UserCard because it read the import, then completes the props with their declared types.

Directives complete with their modifiers. v-model offers .lazy, .number and .trim; @click offers .stop, .prevent and .once. The list is what Vue actually accepts, not a guess.

Errors surface where you made them. A missing prop or a typo in a binding is underlined in the template, on the line you typed it, before you look at the preview.

components
resolved from imports
props
typed from defineProps
directives
with modifiers
diagnostics
inline
Panel.vue
<template>
  <UserCard
    :name="user.name"
    :role="user.role"
    @select.once="open"
  />
</template>

03 workflow

A project from empty to committed

No scaffolding command, no dependency install, no dev server to keep alive. This is the whole thing, start to first commit.

session
  • new project → Vue
  • src/App.vue, src/main.ts, index.html
  • npm i pinia vue-router
  • resolved via esm.sh · import map updated
  • git init && git add -A
  • git commit -m "scaffold"
  • [main 4f2ab19] scaffold · 12 files
  • No install step to sit through

    Packages resolve through esm.sh into a native import map. There is no node_modules to populate and nothing to download to disk.

  • The repository is real

    Commits, branches and history are genuine Git objects. Push to GitHub, or pull an existing repository in and keep committing.

  • It survives the tab closing

    Projects, history and Git objects live in your browser's storage, so reopening is instant and offline.

04 features

What is in the workspace

Everything below is on the moment a project opens. There is no plugin list to curate and no environment to provision.

  • File management that behaves

    Create, rename, move, delete and restore. Per-project history with restore points, plus zip import and export when the code needs to leave.

  • An npm panel

    Search a package, click install, import by name. The import map is written for you and travels with the project.

  • Git, not a Git-like

    Stage, commit, branch, diff and read history. Import a repository from GitHub and keep working against its real history.

  • Preview where you want it

    Full width, split beside the code, inside device frames for responsive work, or popped into its own tab on a second monitor.

  • Multi-cursor and column select

    Hold Alt and click, or Shift-Alt and drag. The same shortcuts you use locally, because it is the same editor core.

  • Go to definition

    Ctrl-click a composable, a component or a type and land on the line that declares it, in whichever file that is.

  • Vim and Emacs bindings

    Switch modes in settings. Muscle memory is worth more than a preference panel, so it is one toggle rather than a plugin.

  • Over a hundred templates

    Ready-to-run starters, several of them Vue with Vue Router, Pinia and a UI kit such as Vuetify already wired together.

  • Everything on the device

    Projects are stored locally. Nothing is uploaded, so a half-finished experiment stays yours and the whole thing works with no connection.

05 deep dive

A layout that survives contact with a second developer

The point of a real folder tree is not tidiness. It is that a project laid out conventionally can be handed to somebody else, or to yourself in six months, without a guided tour.

Conventional paths mean conventional imports. @/components/UserCard.vue resolves the way a Vite project resolves it, so code written here pastes into a local project unchanged and vice versa.

Composables get their own directory because they get their own lifecycle. A useUser that lives beside the component using it is a helper; one that lives in composables/ is a unit other components can reach for.

Stores and routes are separated for the same reason. Pinia stores and route definitions are the two things most likely to be edited by someone who did not write the component, and burying them makes that harder.

The tree is the documentation. A newcomer opening src/ should be able to guess where anything lives. That is worth more than any README, and it costs nothing but discipline at the start.

aliases
@/ resolves
layout
Vite conventions
depth
unlimited nesting
moves
imports follow
main.ts
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import router from '@/router'
import App from '@/App.vue'

createApp(App)
  .use(createPinia())
  .use(router)
  .mount('#app')

06 pipeline

A project's life, from new to handed over

Four stages, none of which need a machine you have configured. This is the argument for a browser workspace over a local one for anything you did not start.

  1. Start

    Open a template or an empty project. The tree, the entry point and the preview exist immediately — there is no scaffolding command whose flags you have to remember.

  2. Grow

    Add components, install packages, split logic into composables. The import map updates as you install, so nothing has to be re-wired when a dependency arrives.

  3. Track

    Commit as you go. Branches let you try the risky version without losing the working one, and the history is real Git rather than a save-state list.

  4. Hand over

    Push to GitHub, or export a zip with the folder structure intact. Either way the recipient gets ordinary source, not an export from a proprietary format.

07 ecosystem

One project, many stacks

A .vue file can sit beside a .jsx one and a Python script; the compiler is chosen per file, not per project.

  • React
  • Vue
  • Angular
  • Svelte
  • SolidJS
  • Lit
  • HTMX
  • Vite
  • TypeScript
  • JavaScript
  • HTML
  • CSS
  • SCSS
  • Less
  • Pug
  • Tailwind
  • Bootstrap
  • Vuetify
  • Ant Design
  • shadcn/ui
  • Phaser
  • Node.js
  • Python
  • Java
  • C++
  • C#
  • Go
  • Rust
  • Ruby
  • PHP
  • Kotlin
  • Swift
  • SQL
  • Bash

08 languages

Everything the editor understands

Highlighting and IntelliSense cover 70+ languages. These are the ones XCODX also compiles or executes for you.

Compiled in your browser11

Zero build step. Transform runs on a Web Worker, so typing never blocks.

  • JSX
  • TSX
  • TypeScript
  • Vue SFC
  • Svelte
  • Angular (JIT)
  • SolidJS
  • SCSS
  • Sass
  • Less
  • Pug

Rendered natively8

Straight to the live preview, no transform in the way.

  • HTML
  • CSS
  • JavaScript
  • JSON
  • Markdown
  • Jupyter (.ipynb)
  • SVG
  • YAML

Executed on demand22

70+ languages run through a self-hosted Piston engine. stdout, stderr, images and tracebacks land in the console.

  • Python
  • Java
  • C
  • C++
  • C#
  • Go
  • Rust
  • Ruby
  • PHP
  • Kotlin
  • Swift
  • Lua
  • Scala
  • Perl
  • Haskell
  • Elixir
  • Dart
  • R
  • Julia
  • SQLite
  • Bash
  • PowerShell

09 questions

The Vue sandbox — common questions

Questions about using this as a working environment.

Can a real project live here, or is it for demos?

A real one. A folder tree, packages, version control and a terminal are the things that make a project a project, and all four are here rather than simulated for a screenshot.

Is this really Monaco, the VS Code editor?

Yes — the same editor core Microsoft ships in Visual Studio Code, running client-side. That is why the command palette, multi-cursor and the keybinding set behave identically rather than approximately.

Does autocomplete work inside a template, not just the script?

Yes. Templates get component completion resolved from your imports, directive completion with modifiers, and prop completion typed from defineProps. A template is treated as Vue, not as HTML with extra attributes.

Can I format with Prettier?

Yes, on demand rather than on a timer. Formatting a .vue file handles all three blocks in one pass, so the template, the script and the style stay consistent with each other.

Do Vim keybindings work?

Yes — Vim and Emacs modes are both available from settings. They are built in rather than installed, so there is no extension to find and no first-run configuration.

Do I need to install a Vue extension?

No. Vue language support is on from the first keystroke. There is no marketplace to browse and no version of the extension to keep in step with your Vue version.

Where do my files actually live?

In your own browser's storage, on your device. Nothing is uploaded to a server, which is also why the sandbox works with no connection once it has loaded.

Is the terminal real, or a mock?

It is a working shell surface over your project files. It is not a Linux VM — there is no Node process behind it — so it covers file and project operations rather than arbitrary system commands.

How big a project can it hold?

Comfortably the size of a real Vue application — dozens of components, a store, a router and their dependencies. The limit is your browser's storage quota, not a plan tier.

Can I get my project out again?

Yes. Export the whole thing as a zip with its folder structure intact, or commit and push. It is ordinary source from that point on, with no proprietary format in the way.

Can two people work on the same sandbox project?

A project lives in one browser's storage, so it is single-owner by default. Sharing means handing over the project — a link, a pushed branch or an exported zip — rather than two cursors in one file at the same time.

What happens if I clear my browser data?

The project goes with it, the same way deleting a folder removes a local project. That is the trade for storing nothing on a server. Commit and push, or export a zip, for anything you would be unhappy to lose.

Does it work on a tablet or Chromebook?

Yes. The workspace is a responsive web app, so a Chromebook or an iPad gets the same file tree, the same compilers and the same preview a laptop does.

Do I need to install anything to use XCODX Studio?

No. XCODX Studio is a browser-based IDE — the editor, the compilers and the preview all run client-side. There is no download, no package manager to set up and no configuration file to write. Opening the editor is the whole setup step.

Where is my code stored?

In your own browser. Projects, file history and Git objects live in local storage on your device and are never uploaded to a server. That also means XCODX works offline: it is a Progressive Web App, so you can install it and keep coding with no connection.

Is XCODX Studio free?

Yes. The editor, the live preview, the 70+ language runtimes, npm installs, Git and the integrated terminal are all free to use.

Can I use XCODX on a tablet or Chromebook?

Yes. The editor is a responsive web app, so a Chromebook, an iPad or an Android tablet gets the same compilers and the same preview a laptop does — there is no desktop-only build, because there is no build to install at all. The layout adapts to the screen rather than shrinking a desktop UI into it.

Can I export a project or move it to my own machine?

Yes. Export the whole project as a zip with its folder structure intact and open it locally, or commit it and push. It is ordinary source on disk from that point on — no proprietary format and no lock-in, which is also why importing an existing repository from GitHub works the same way in reverse.