The SDE vApps app catalogue

By Paul Flanders · · Intermediate

Explore the SDE vApps app catalogue, learn how to add your own recipes, and understand the template building process. Ideal for engineers using SDE vApps, with a focus on open-source applications and efficient app management.

The open-source apps SDE vApps can build and publish for you, how to add a recipe of your own, and how templates are built and kept up to date.

Applies to: sde-vapps 0.5.10 · Audience: engineers running SDE vApps · Time: 5–15 minutes per template build

1. How the catalogue works

Each app in the catalogue comes from a recipe: the Debian packages and setup steps that install it, and the app(s) it publishes. sde-vapps builds a template from the recipe once per node, then clones a host from that template for each vApp. You don't build or patch the hosts by hand.

Open the admin page → Catalogue. Each card shows the app's category, licence, whether it's built in or imported, its recipe version, its notes, its templates per node, and What it installs (the packages, steps and app commands). Cards marked Uses the internet have Internet access on by default.

Screenshot: SDE vApps admin page, Catalogue tab, the Programming section with the Visual Studio Code card and its What it installs section open

2. The built-in apps

37 apps, all on Debian 13. Memory and CPU are the recipe's suggestion for one user, preselected in the editor; add about 1 GiB per extra active user. Internet is the default for the vApp's Internet access: with it off, the host reaches only DNS and the domain controllers.

AppCategoryWhat it isLicenceNotesMemory · CPUInternet
Blender3D and CAD3D modelling, animation and rendering.GPLContainers have no GPU, so the viewport and renders use the CPU: fine for teaching and light scenes. Heavy work belongs on a GPU desktop pool.4 GiB · 4 coresNo
FreeCAD3D and CADParametric 3D CAD for engineering and product design.LGPL4 GiB · 2 coresNo
OpenSCAD3D and CADCode-based 3D modelling, popular for 3D printing.GPL2 GiB · 2 coresNo
PrusaSlicer3D and CADPrepare 3D models for printing (G-code), for most FDM and resin printers.AGPL-3.0The host can't reach printers: export the G-code to the user's PC (Drive) and print from there.3 GiB · 2 coresNo
AudacityAudio and musicRecord and edit audio.GPLRecording needs the vApp's Microphone passthrough on.2 GiB · 2 coresNo
LMMSAudio and musicMusic production: beats, melodies, synths and mixing.GPL2 GiB · 2 coresNo
MuseScore 3Audio and musicMusic notation: write, play back and print scores.GPL2 GiB · 2 coresNo
Arduino IDEElectronicsWrite, compile and upload Arduino sketches. Comes with the AVR boards (Uno, Nano, Mega) installed; others from the Boards Manager.AGPL-3.0Uploading to a board needs USB, which a container can't take: sketches compile here, and boards connected with SDE Devices need a VM host (a Linux desktop pool). Internet access is on by default so the Boards and Library Managers work.3 GiB · 2 coresYes (on by default)
FritzingElectronicsBreadboard, schematic and PCB views for electronics projects (Arduino and others).GPL2 GiB · 2 coresNo
KiCadElectronicsElectronics design: schematics and PCB layout, with the standard symbol and footprint libraries.GPLThe 3D models package is left out (several GB), so the 3D viewer shows boards without component models.4 GiB · 2 coresNo
Godot 3Game development2D and 3D game engine and editor.MITContainers have no GPU, so the 3D editor and previews are slow: 2D games work best.3 GiB · 2 coresNo
0 A.D.GamesHistorical real-time strategy: build a civilisation and battle through ancient history.GPLContainers have no GPU, so the 3D runs on the CPU: expect low frame rates, best for small maps and skirmishes. Keyboard and mouse only.4 GiB · 4 coresNo
Battle for WesnothGamesTurn-based fantasy strategy with campaigns, skirmishes and a map editor.GPLTurn-based, so it plays well over a remote session.2 GiB · 2 coresNo
ChessGamesChess against the Stockfish engine (adjustable strength) or another player.GPL1 GiB · 1 coreNo
FreecivGamesTurn-based empire building, from the Stone Age to the Space Age (Civilization-style).GPLSingle-player games start their own local server.2 GiB · 2 coresNo
OpenTTDGamesBuild a transport empire with trains, road vehicles, ships and aircraft. With the free OpenGFX graphics, OpenSFX sounds and OpenMSX music.GPLLight on the CPU: plays well over a remote session.2 GiB · 2 coresNo
QGISGeographyMaps and geographic data (GIS).GPLOnline map layers need the vApp's Internet access on.4 GiB · 2 coresNo
darktableGraphicsPhoto workflow and RAW editing.GPL4 GiB · 2 coresNo
GIMPGraphicsPhoto editing and image creation.GPL3 GiB · 2 coresNo
InkscapeGraphicsVector graphics: logos, diagrams, illustrations, and files for laser and vinyl cutters.GPL2 GiB · 2 coresNo
KritaGraphicsDigital painting and illustration.GPL4 GiB · 2 coresNo
GNU OctaveMaths and scienceNumerical computing, largely compatible with MATLAB scripts.GPL2 GiB · 2 coresNo
LibreOfficeOfficeDocuments, spreadsheets and presentations, compatible with Microsoft Office files. Publish Writer, Calc or Impress as a vApp of its own. Publishes: LibreOffice Writer, LibreOffice Calc, LibreOffice Impress.MPL-2.02 GiB · 2 coresNo
Code::BlocksProgrammingC and C++ IDE, with the GCC compiler and GDB debugger.GPL2 GiB · 2 coresNo
GeanyProgrammingLight, fast code editor for many languages, with build and run buttons.GPL2 GiB · 2 coresNo
KateProgrammingPowerful text and code editor: tabs, split views, syntax highlighting for hundreds of languages, find and replace across files.LGPL2 GiB · 2 coresNo
NotepadqqProgrammingThe Linux take on Notepad++: tabs, syntax highlighting, search and replace with regular expressions.GPLLast released in 2018 and no longer developed; Kate is the better-maintained choice.2 GiB · 2 coresNo
SpyderProgrammingPython for science and data: editor, variable explorer and plots, with NumPy, SciPy, Matplotlib and pandas.MIT3 GiB · 2 coresNo
ThonnyProgrammingA beginner-friendly Python editor with a simple debugger.MITMicroPython boards over USB need a VM host, as for the Arduino IDE.1 GiB · 1 coreNo
Visual Studio CodeProgrammingMicrosoft's code editor, with Git, Python and a C/C++ compiler ready to use. Extensions from the Marketplace.Microsoft (free to use)Internet access is on by default for the Extensions Marketplace (and Git hosts); telemetry and self-updates are off. Microsoft's licence applies: for the open-source build, use VSCodium (also in the catalogue).3 GiB · 2 coresYes (on by default)
VSCodiumProgrammingVS Code built from its open-source code, without Microsoft's branding or telemetry. Git, Python and a C/C++ compiler ready to use; extensions from Open VSX.MITInternet access is on by default for the Open VSX extension registry (and Git hosts). A few Microsoft-only extensions (e.g. Live Share, the official C/C++ and Pylance) aren't on Open VSX: use the Visual Studio Code recipe if you need them.3 GiB · 2 coresYes (on by default)
DiaPublishingDiagrams: flowcharts, network and UML diagrams.GPL1 GiB · 1 coreNo
ScribusPublishingDesktop publishing: posters, leaflets, newsletters and print-ready PDFs.GPL2 GiB · 2 coresNo
Commodore 64Retro computingThe Commodore 64 in VICE, the most accurate C64 emulator, with the 1541 disk drive.GPLDebian's VICE leaves out Commodore's ROMs, so they come from the official VICE 3.9 release (checksum checked), as they do in VICE's own downloads. Load .d64, .prg and .t64 files from the user's mapped folders (turn Drive on). Keyboard only: VICE can map a joystick to the keys (Preferences, Input devices).1 GiB · 1 coreNo
ZX SpectrumRetro computingThe Sinclair ZX Spectrum (16K, 48K, 128K, +2, +3) in the Fuse emulator, with the original ROMs.GPLThe Spectrum ROMs come from Debian's spectrum-roms package (Amstrad allows them to be shared; Debian keeps them in non-free, which the build turns on only for that package). Load .tap, .tzx and .z80 files from the user's mapped folders (turn Drive on). Keyboard only: Fuse can map a joystick to the keys (Options, Joysticks).1 GiB · 1 coreNo
KdenliveVideoVideo editing with multiple tracks, effects and titles.GPLContainers have no GPU, so previews and renders use the CPU: fine for short projects.4 GiB · 4 coresNo
ShotcutVideoSimple, quick video editor.GPLContainers have no GPU, so previews and renders use the CPU: fine for short projects.4 GiB · 4 coresNo

The Web browsers template (Chromium and Pale Moon, for modern and legacy web vApps) is also a built-in recipe. It's built from the Hosts tab and isn't listed on the Catalogue tab.

3. Limits that apply to every app

  • No GPU. Hosts are containers, so 3D, video and games render on the CPU. Heavy GPU work belongs on a GPU desktop pool.
  • No USB. A container can't take a USB device: the Arduino IDE compiles sketches but can't upload them, and Thonny can't reach MicroPython boards. For boards connected with SDE Devices, use a Linux desktop pool (a VM) with the app installed.
  • Keyboard and mouse only. RDP carries no gamepads. The emulators can map a joystick to keys.
  • One window. The app runs maximised, with no desktop, panel or menu. Closing it ends the session.
  • Files move between the app and the user's PC through the vApp's Drive (file transfer) passthrough, on by default for catalogue apps. It needs FUSE on the host (see troubleshooting).

4. Downloads from outside Debian

Most apps come straight from Debian's packages. These recipes also download something, and the build checks it against the checksum its maker publishes, failing if it doesn't match:

AppWhat's downloadedOther set-up
Arduino IDEThe official 2.3.10 AppImage (SHA-512 from Arduino's release file)The AVR boards are installed for every new user; the update check is off.
Visual Studio CodeMicrosoft's 1.143.0 .deb (SHA-256 from its update service)No Microsoft apt repository: update it by rebuilding the template. Telemetry, self-updates and experiments are off for every new user.
VSCodiumThe project's 1.140 .deb (SHA-256 from the release)Self-update checks off. Extensions come from Open VSX.
Commodore 64The VICE 3.9 release, for Commodore's ROMs (SHA-256 pinned)The build checks the KERNAL, BASIC, character and 1541 drive ROMs are there.
ZX SpectrumNothing: the ROMs are Debian's spectrum-romsThat package is in Debian's non-free section. The build turns non-free on for that one package, then puts the sources back as they were.
NotepadqqNothingIts editor's sandbox can't start in a container, so it's turned off (the container is the boundary).

5. Publish an app

  1. On the app's card, click Build template. sde-vapps picks the node with the most free memory; to choose a node, use Hosts → Templates, pick the app and a node, and click Build. Build it once on each node that will run the app if your nodes use local storage.
  2. When the card shows <node>: ready, click New vApp on the card.
  3. Check the name, choose Which app if the recipe publishes more than one (LibreOffice: Writer, Calc or Impress), set Who gets it, Users sign in with and Internet access, and click Create.
  4. sde-vapps clones a host (sde-app-<id>), sets up sign-in, the firewall and file transfer, then publishes the tile. Each vApp has a host of its own.

The fields are described in the settings reference.

6. Import and export a recipe

A recipe runs as rootIts packages and steps run as root, with internet access, while its template builds. Import only recipes from people you trust, and read What it installs on the card before you build.

6.1 Export

Click Export on any card, built in or imported. Your browser saves <id>.recipe.json. Use it as a starting point for a recipe of your own, or to move an imported recipe to another site.

6.2 Write or change a recipe

A recipe is a JSON file. A small one:

{
  "id": "gnumeric",
  "name": "Gnumeric",
  "category": "Office",
  "icon": "sheet",
  "licence": "GPL",
  "homepage": "http://www.gnumeric.org/",
  "version": 1,
  "description": "A light spreadsheet.",
  "notes": "Turn Drive on so users can open and save files on their PC.",
  "packages": ["gnumeric"],
  "script": [],
  "apps": [
    { "id": "gnumeric", "name": "Gnumeric", "exec": "gnumeric" }
  ],
  "memory": 1024,
  "cores": 1,
  "disk": 8,
  "internet": false
}
  • id: 1–31 lower-case letters, digits or dashes. It can't be web or the id of a built-in recipe.
  • packages: Debian 13 package names from main or contrib. A package from anywhere else needs steps in script that add its source (see the ZX Spectrum recipe), or the build stops with apt's exit 100.
  • script: shell lines, one per entry, run as root with sh -eu after the packages: any failing line stops the build. 64 KB at most. Lines that print VERSION <name> <version> are shown in the template's contents.
  • apps: 1–10 apps, each an id, a name and a command. The build fails with "app <id>: <program> isn't installed" if the command's program isn't there. Games in /usr/games are found.
  • memory (MiB), cores, disk (GiB): defaults 2048, 2 and 8.
  • version: raise it every time you change the recipe (section 8).

Every field is listed in the settings reference.

6.3 Import

  1. On the Catalogue tab, click Import recipe and choose the JSON file.
  2. sde-vapps checks it and says what's wrong if it can't be used ("Not imported: …"). Importing a file with the same id as an imported recipe replaces it; built-in recipes can't be replaced.
  3. Build its template and create a vApp, as in section 5.

Imported recipes are kept in the unit's data folder (recipes/, alongside the state) and the activity log records each import with its packages and script length. Delete on an imported card removes it from the catalogue; it's refused while a vApp uses it. Its templates stay until you remove them on the Hosts tab.

7. How a template is built

A build takes 5–15 minutes (the Web browsers template about 10). Its progress shows on the Hosts tab, step by step:

  1. downloading Debian 13: the Debian 13 container image, if the node doesn't have it.
  2. creating the container: an unprivileged container in the 7000–7099 range, 2 GiB and 2 cores, with the recipe's disk size, on vmbr0 (or the node's first bridge), named sde-tpl-<recipe>.
  3. starting.
  4. installing xrdp and <app>: the host kit (xrdp from Debian backports, the app-only session, PipeWire for sound, FUSE tools for mapped drives), the common base (locale, firewall, AD tools), then the recipe's packages and steps.
  5. sealing: SSH host keys and the machine id are removed, so every host cloned from it gets its own.
  6. converting to a template.

The building container needs the internet (or a Debian mirror) throughout. If a step fails, the row shows the error (and a Build log when there's no working template on that node), and the half-built container is removed. If a template already existed on that node, it stays in use until a new build succeeds, then the old one is removed. Hosts already cloned from it keep running.

File transfer on new templatesA new template has no FUSE. The sde-vapps-fuse.timer that the Proxmox bootstrap script installs turns it on within 2 minutes, for templates and hosts alike.

8. Out of date templates and rebuilds

Each template records the recipe version it was built from, the host kit version, the sde-vapps version that built it, and what the build reported (xrdp, browser and package versions). The Hosts tab's Templates table shows these.

You seeWhyWhat to do
Out of date: rebuild (Hosts), <node>: out of date (card)The recipe's version is higher than the one the template was built from: the recipe changed, or a new sde-vapps brought a new version of a built-in recipeRebuild the template, then Rebuild host on each vApp that uses it.
Readiness: "built before vApps had sound, so its hosts play none"The template holds an older host kit, without PipeWireThe same: rebuild, then Rebuild host.
Readiness: "over 45 days old"Its packages haven't been updated for a whileRebuild it for security updates. Monthly is a good habit.
Recipe removed, or Readiness "its recipe is gone from the catalogue"The imported recipe was deletedRemove the template (Hosts → Templates, the bin button) once nothing needs it.

Rebuilding a template doesn't touch hosts already running: Rebuild host on a vApp replaces its container with a fresh clone of the current template (users on it are disconnected). Settings changes and new sde-vapps versions reach existing hosts without a rebuild, because sde-vapps sets each host up again whenever its settings or setup script change. Only what's installed in the template needs a rebuild.

A template can't be removed while a vApp is waiting for a host from it.

SDE vApps knowledge base · App catalogue

person people found this useful.