<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Capella | Capability Builders</title><link>https://capability.builders/tag/capella/</link><atom:link href="https://capability.builders/tag/capella/index.xml" rel="self" type="application/rss+xml"/><description>Capella</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Mon, 06 Apr 2026 00:00:00 +0000</lastBuildDate><image><url>https://capability.builders/media/logo.svg</url><title>Capella</title><link>https://capability.builders/tag/capella/</link></image><item><title>Running Capella and Papyrus systems engineering tools on Apple Silicon using Docker</title><link>https://capability.builders/blog/2026-04-06-running-capella-and-papyrus-on-apple-silicon-with-docker/</link><pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate><guid>https://capability.builders/blog/2026-04-06-running-capella-and-papyrus-on-apple-silicon-with-docker/</guid><description>&lt;p>When teaching systems engineering, I often ask students to install modeling tools such as Capella or Papyrus. However installation can sometimes be difficult for students. Debugging differences in operating systems, hardware, and software dependencies can quickly consume valuable teaching time.&lt;/p>
&lt;p>This post describes how to create Docker images for Capella and Papyrus, and run them in containers while accessing them using XPRA and a web browser. This approach allows students to run the tools without installing them directly, and also works well on Apple Silicon Macs.&lt;/p>
&lt;hr>
&lt;h2 id="background">Background&lt;/h2>
&lt;p>The students taking the Systems Engineering Workshop have a week of classroom-based teaching. During this time, they undertake a number of computer-based activities, which provide a realistic simulation of the experience they will have when doing systems engineering at work.&lt;/p>
&lt;p>
&lt;figure id="figure-student-learning">
&lt;div class="flex justify-center ">
&lt;div class="w-100" >&lt;img alt="Student Learning" srcset="
/blog/2026-04-06-running-capella-and-papyrus-on-apple-silicon-with-docker/education_hu8603355805873147109.webp 400w,
/blog/2026-04-06-running-capella-and-papyrus-on-apple-silicon-with-docker/education_hu10937165169848644837.webp 760w,
/blog/2026-04-06-running-capella-and-papyrus-on-apple-silicon-with-docker/education_hu1409062264011111146.webp 1200w"
src="https://capability.builders/blog/2026-04-06-running-capella-and-papyrus-on-apple-silicon-with-docker/education_hu8603355805873147109.webp"
width="324"
height="305"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Student Learning
&lt;/figcaption>&lt;/figure>
&lt;br>
Students learn through:&lt;/p>
&lt;ul>
&lt;li>hearing;&lt;/li>
&lt;li>seeing;&lt;/li>
&lt;li>doing.&lt;/li>
&lt;/ul>
&lt;p>The act of doing systems engineering and systems definition activities in the class helps to reenforce the theory and ideas that the students hear and see. Also, these activities provide the students with experience using a systems engineering application before they leave the classroom environment.&lt;/p>
&lt;h3 id="classroom-contact-time-is-valuable">Classroom contact time is valuable&lt;/h3>
&lt;p>I want to focus on teaching. I don’t want to use contact time dealing with systems engineering application installation issues. In other &lt;a href="https://www.capability.builders/blog/2015-08-30-creating-a-lubuntu-virtual-machine-for-computer-forensics-teaching/" target="_blank" rel="noopener">courses&lt;/a> I solved this problem using virtual machines. However, virtual machines are relatively heavy and require significant disk space and memory. Also there are potential license issues distributing propriety operating systems and applications within a virtual machine.&lt;/p>
&lt;p>Modern development workflows increasingly favor containers to provide lightweight and reproducible environments, which use GNU Linux distributions alleviating the licensing issues.&lt;/p>
&lt;h2 id="overview-of-the-architecture">Overview of the Architecture&lt;/h2>
&lt;p>The starting point for this solution is the excellent &lt;a href="https://github.com/dbinfrago/capella-dockerimages" target="_blank" rel="noopener">MBSE Docker images&lt;/a> repository created by DB InfraGO. Their repository provides Dockerfiles and scripts for running Capella and Papyrus inside Docker containers, including a mechanism for remote graphical access.&lt;/p>
&lt;p>Running applications inside a Docker container removes the need to run the modeling tools directly on the host machine. The graphical interface is exported using &lt;a href="https://xpra.org/index.html" target="_blank" rel="noopener">XPRA&lt;/a>, which allows the applications to be accessed through a web browser.&lt;/p>
&lt;p>The containers include:&lt;/p>
&lt;ul>
&lt;li>GNU Linux runtime environment&lt;/li>
&lt;li>Eclipse-based modeling tool&lt;/li>
&lt;li>XPRA server for remote display&lt;/li>
&lt;/ul>
&lt;p>The XPRA server exports the application&amp;rsquo;s graphical interface to a browser. This approach works well for teaching because students only need:&lt;/p>
&lt;ul>
&lt;li>Docker Desktop&lt;/li>
&lt;li>a web browser&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="why-xpra-instead-of-x11">Why XPRA Instead of X11&lt;/h2>
&lt;p>Often applications running in Docker containers use X11 forwarding to present the graphical interface to the user. However, this approach can be fragile on Mac OSX and requires additional software such as XQuartz.&lt;/p>
&lt;p>XPRA runs inside the container and exports the graphical interface through an HTTP server. The browser then connects to the application.&lt;/p>
&lt;div class="mermaid">flowchart LR
subgraph Container
A[Capella Application]
C[XPRA Server]
end
subgraph Host
D[Web Browser]
end
A --> C
C -->|HTTP| D
&lt;/div>
&lt;p>This approach has several advantages:&lt;/p>
&lt;ul>
&lt;li>no X server required on the host&lt;/li>
&lt;li>works well across operating systems&lt;/li>
&lt;li>easy access through a browser&lt;/li>
&lt;li>suitable for classroom environments&lt;/li>
&lt;/ul>
&lt;p>Note: The DB InfraGO images also offer Remote Desktop Protocol (RDP) as an alternative means of access to the application&amp;rsquo;s graphical interface. However, this requires the student&amp;rsquo;s computer to be running an RDP client.&lt;/p>
&lt;hr>
&lt;h2 id="building-the-capella-docker-image-arm64">Building the Capella Docker Image (ARM64)&lt;/h2>
&lt;p>The first step is to clone the DB InfraGO repository.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-zsh" data-lang="zsh">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> ~/devops
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone --recurse-submodules https://github.com/dbinfrago/capella-dockerimages.git
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Next, the Capella ARM64 distribution archive is downloaded.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-zsh" data-lang="zsh">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> ~/devops/capella-dockerimages/capella/versions/7.0.0/arm64
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl https://mirror.umd.edu/eclipse/capella/core/products/releases/7.0.0/capella-7.0.0.202407091438-linux-gtk-aarch64.tar.gz &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--output capella.tar.gz
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="building-the-base-docker-image">Building the Base Docker Image&lt;/h3>
&lt;p>The base image provides the common Linux environment used by the containers.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">cd ~/devops/capella-dockerimages
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker build -t base base
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="building-the-capella-image">Building the Capella Image&lt;/h3>
&lt;p>Next the Capella image is built for the ARM64 architecture.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">docker build -t capella/base capella \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--build-arg BUILD_TYPE=offline \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--build-arg CAPELLA_VERSION=7.0.0 \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--build-arg BUILD_ARCHITECTURE=arm64
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="building-the-remote-access-image">Building the Remote Access Image&lt;/h3>
&lt;p>The remote image includes XPRA and the configuration required to access the application from a browser.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">docker build -t capella/base/remote remote \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--build-arg BASE_IMAGE=capella/base
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="running-capella-in-a-browser">Running Capella in a Browser&lt;/h3>
&lt;p>Once the container image is built, Capella can be launched.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">docker run -d \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--name capella-xpra \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-p 10000:10000 \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-e CONNECTION_METHOD=xpra \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-e XPRA_SUBPATH=&amp;#34;/&amp;#34; \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-e AUTOSTART_CAPELLA=1 \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-e RESTART_CAPELLA=1 \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-v ~/data/capella/workspace:/workspace \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">capella/base/remote
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The Capella interface can then be accessed at:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">http://localhost:10000/?floating_menu=0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>At the time of writing, &lt;strong>Google Chrome works better than Safari&lt;/strong> for the XPRA interface.&lt;/p>
&lt;hr>
&lt;h2 id="building-the-papyrus-docker-image">Building the Papyrus Docker Image&lt;/h2>
&lt;p>Papyrus is another Eclipse-based modeling tool used for model-based systems engineering.&lt;/p>
&lt;p>Papyrus currently runs most reliably in the Apple ARM64 environment using AMD64 architecture containers. Docker on Apple Silicon runs AMD64 images using emulation.&lt;/p>
&lt;p>The Papyrus archive is downloaded and placed in the repository directory, for example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">capella-dockerimages/papyrus/versions/6.7.0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="building-the-papyrus-image">Building the Papyrus Image&lt;/h3>
&lt;p>First the base image is built for AMD64.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">cd ~/devops/capella-dockerimages
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker build \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--platform linux/amd64 \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-t base \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">base
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then the Papyrus base image is built.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">docker build \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--platform linux/amd64 \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-t papyrus/base:6.7.0 \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--build-arg BASE_IMAGE=base \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--build-arg PAPYRUS_VERSION=6.7.0 \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">papyrus
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Finally the remote-access image is built.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">docker build \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--platform linux/amd64 \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-t papyrus/remote:6.7.0 \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--build-arg BASE_IMAGE=papyrus/base:6.7.0 \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">remote
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="running-papyrus-in-a-browser">Running Papyrus in a Browser&lt;/h3>
&lt;p>Before starting the container, create a workspace directory.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">mkdir -p &amp;#34;$HOME/data/papyrus-workspace&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then run the container:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">docker run -d \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--rm \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--name papyrus-remote \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--platform linux/amd64 \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-p 10000:10000 \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-p 9118:9118 \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-e CONNECTION_METHOD=xpra \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-e XPRA_SUBPATH=/ \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-e AUTOSTART_PAPYRUS=1 \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-e RESTART_PAPYRUS=1 \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-v &amp;#34;$HOME/data/papyrus-workspace:/workspace&amp;#34; \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">papyrus/remote:6.7.0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The Papyrus interface can then be accessed in a browser at:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">http://localhost:10000/?floating_menu=0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="arm64-considerations">ARM64 Considerations&lt;/h2>
&lt;p>Running these modeling tools on Apple Silicon requires some attention to CPU architecture.&lt;/p>
&lt;h4 id="capella">Capella&lt;/h4>
&lt;p>Capella provides a native ARM64 Linux build, which allows the container to run directly on Apple Silicon.&lt;/p>
&lt;h4 id="papyrus">Papyrus&lt;/h4>
&lt;p>Papyrus Classic requires AMD64, so the container runs using Docker’s built-in emulation.&lt;/p>
&lt;p>While emulation introduces a small performance overhead, the application still runs well enough for teaching and demonstration purposes.&lt;/p>
&lt;hr>
&lt;h2 id="advantages-for-teaching">Advantages for Teaching&lt;/h2>
&lt;p>Using Docker containers for modeling tools offers several advantages:&lt;/p>
&lt;h4 id="consistent-environment">Consistent Environment&lt;/h4>
&lt;p>All students run the same software environment.&lt;/p>
&lt;h4 id="fast-setup">Fast Setup&lt;/h4>
&lt;p>Students only need Docker and a browser.&lt;/p>
&lt;h4 id="easy-reset">Easy Reset&lt;/h4>
&lt;p>Containers can be removed and recreated quickly.&lt;/p>
&lt;h4 id="cross-platform">Cross Platform&lt;/h4>
&lt;p>The containers work on:&lt;/p>
&lt;ul>
&lt;li>Mac&lt;/li>
&lt;li>Linux&lt;/li>
&lt;li>Windows&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="lessons-learned">Lessons Learned&lt;/h2>
&lt;p>Several lessons emerged from this work.&lt;/p>
&lt;h4 id="open-source-accelerates-development">Open Source Accelerates Development&lt;/h4>
&lt;p>The DB InfraGO Capella MBSE Docker image repository provided an excellent starting point.&lt;/p>
&lt;h4 id="xpra-works-well-for-gui-containers">XPRA Works Well for GUI Containers&lt;/h4>
&lt;p>XPRA provides a robust solution for running graphical applications inside containers.&lt;/p>
&lt;h4 id="containers-reduce-classroom-friction">Containers Reduce Classroom Friction&lt;/h4>
&lt;p>Containerized environments significantly reduce installation issues during workshops.&lt;/p>
&lt;hr>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>Using Docker containers to package Capella and Papyrus provides a reliable and reproducible teaching environment for systems engineering workshops.&lt;/p>
&lt;p>By building on the work published in the DB InfraGO MBSE Docker images repository, it was possible to create containerized modeling environments suitable for modern Apple Silicon systems.&lt;/p>
&lt;p>Using XPRA and a browser interface makes the tools easy to run and avoids many of the configuration issues associated with using graphical applications in containers.&lt;/p>
&lt;p>For teaching environments, containers provide a practical and flexible alternative to traditional virtual machines or direct application installation.&lt;/p></description></item></channel></rss>