{"id":53923,"date":"2025-10-22T07:53:15","date_gmt":"2025-10-22T07:53:15","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=53923"},"modified":"2026-02-21T08:27:59","modified_gmt":"2026-02-21T08:27:59","slug":"what-is-tart-virtualization","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/what-is-tart-virtualization\/","title":{"rendered":"What is Tart Virtualization?"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">1. What is Tart Virtualization?<\/h2>\n\n\n\n<p>Tart is a command-line virtualization toolset designed specifically for <strong>Apple Silicon Macs<\/strong> (e.g., M1\/M2\/M3 series). The key goals are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Build, run and manage VMs (virtual machines) of <strong>macOS<\/strong> <em>and<\/em> <strong>Linux<\/strong> on Apple Silicon hardware.<\/li>\n\n\n\n<li>Use Apple\u2019s native virtualization support (via the Virtualization.Framework) so performance is near-native, minimal overhead.<\/li>\n\n\n\n<li>Treat VM images like container images: you can push\/pull to OCI-compatible registries, version them, share them easily.<\/li>\n\n\n\n<li>Integrate seamlessly into CI\/CD pipelines, automation workflows, developer labs, and large-scale Mac fleets.<\/li>\n<\/ul>\n\n\n\n<p>In other words: if you have a Mac with Apple Silicon, and you want reproducible VM environments (macOS + Linux) that you can script, version, share, that spin up fast, Tart gives you a modern workflow.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">2. Major use-cases of Tart Virtualization<\/h2>\n\n\n\n<p>Here are the scenarios where Tart really shines:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>CI\/CD runners for macOS &amp; Linux<\/strong>\n<ul class=\"wp-block-list\">\n<li>If you build macOS or iOS apps, you need macOS build agents. Tart lets you turn Apple Silicon Macs into reproducible, clean \u201cgolden images\u201d for builds, tests, etc.<\/li>\n\n\n\n<li>Also helpful for Linux runners on Apple Silicon hosts.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Developer sandbox \/ testing labs<\/strong>\n<ul class=\"wp-block-list\">\n<li>Developers or Mac administrators can spin up VMs for testing new OS versions, messing with configurations, MDM enrollment, experimentation, without risking the host.<\/li>\n\n\n\n<li>You can snapshot and reuse states, share images with your team.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Image management &amp; sharing<\/strong>\n<ul class=\"wp-block-list\">\n<li>Because Tart supports \u201cclone\/pull\/push\u201d workflows with OCI-compatible registries, you can bake an image (install all tools, MDM profiles, settings), then distribute it to other hosts\/teams: reproducibility.<\/li>\n\n\n\n<li>Useful for large teams, teams with many Macs, or labs where you want identical VM images.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Fleet \/ scale management<\/strong>\n<ul class=\"wp-block-list\">\n<li>In large environments (Mac build farms, remote macOS desktops, device labs) Tart supports orchestration (via a companion tool called \u201cOrchard\u201d in its ecosystem) so you can manage many hosts, many VMs, automatically.<\/li>\n\n\n\n<li>Helps when you have dozens\/hundreds of Apple Silicon Macs and you want to operate them like \u201cVM nodes\u201d.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Cost\/efficiency optimised<\/strong>\n<ul class=\"wp-block-list\">\n<li>Because it uses native virtualization (no heavy emulation) and supports versioned images, you can cut boot\/setup times, reduce drift in build agents, and manage infrastructure more efficiently.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>If you summarise: Tart is ideal when you need <strong>repeatable<\/strong>, <strong>automated<\/strong>, <strong>versioned VM environments<\/strong> on Apple Silicon, for dev\/test\/CI, rather than just running a desktop VM for fun.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">3. How Tart Virtualization works<\/h2>\n\n\n\n<p>Here is the architecture and internal workings in more detail:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Platform foundations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>On Apple Silicon Macs, Apple provides the <code>Virtualization.Framework<\/code> API: it enables user-mode code to create hypervisor-style VMs, manage virtual CPUs, memory, devices, network and storage.<\/li>\n\n\n\n<li>Tart sits atop that framework, exposing a CLI that handles image download, disk management, configuration, registry push\/pull, and VM lifecycle (create, run, stop, delete).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Key concepts<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Images \/ VM definitions<\/strong>: You obtain or build VM images (macOS or Linux). These are stored locally under your home directory (by default) and can be cloned from remote image registries.<\/li>\n\n\n\n<li><strong>OCI registry support<\/strong>: Tart treats VM images like container images. You can push your VM image to an OCI-compatible registry (e.g., GitHub Container Registry, ECR, Harbor) and later pull it on another host.<\/li>\n\n\n\n<li><strong>Commands<\/strong>: Typical CLI commands are: <code>tart install\/clone\/pull<\/code>, <code>tart run<\/code>, <code>tart set<\/code> (to adjust CPU\/memory\/disk), <code>tart delete<\/code>.<\/li>\n\n\n\n<li><strong>Resource configuration<\/strong>: When you create a VM you can define how many virtual CPUs, how much memory, how large the virtual disk, display resolution, maybe networking. After creation you can use <code>tart set<\/code> to adjust some parameters.<\/li>\n\n\n\n<li><strong>Shared directories \/ host \u2194 guest file mounting<\/strong>: Tart supports mapping host directories into guest VMs (via virtio-fs) so files can be shared.<\/li>\n\n\n\n<li><strong>Disk &amp; caching management<\/strong>: Tart caches downloaded images and IPSW files. It auto-prunes old caches to avoid disk bloat, though you can tune or disable that.<\/li>\n\n\n\n<li><strong>Nested virtualization \/ limitations<\/strong>: Because Tart relies on Virtualization.Framework, it is subject to the underlying limitations: nested virtualization (a VM inside a VM) is limited or not supported depending on chip and OS version.<\/li>\n\n\n\n<li><strong>macOS guest specifics<\/strong>: For macOS VM images, typically you create from an IPSW (Apple firmware file) or clone a prepared base image. After installation you might set up auto-login, enable SSH, disable password lock etc for automation.<\/li>\n\n\n\n<li><strong>Linux guest specifics<\/strong>: For Linux guests (ARM64 distributions) you can use an ISO image; you may need to install SSH manually inside the guest, and for shared directories you may need to mount virtio-fs manually.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Workflow summary<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Pull or create a VM image.<\/li>\n\n\n\n<li>Adjust configuration (CPU\/memory\/disk).<\/li>\n\n\n\n<li>Launch the VM using <code>tart run<\/code>.<\/li>\n\n\n\n<li>Optionally connect via GUI or SSH.<\/li>\n\n\n\n<li>Use the VM (install software, test).<\/li>\n\n\n\n<li>If desired, push the VM image to registry.<\/li>\n\n\n\n<li>On other hosts you can clone\/pull and run the image.<\/li>\n\n\n\n<li>Clean up unused VMs\/caches.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Why performance is good<\/h3>\n\n\n\n<p>Because the host (Apple Silicon Mac) and the guest (macOS or ARM64 Linux) share the same architecture, and because Virtualization.Framework provides hardware acceleration (no need to emulate x86), the overhead is very low. The result: very fast boot, near-native performance in many cases.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">4. How to install Tart on a Mac<\/h2>\n\n\n\n<p>Here\u2019s a step-by-step installation guide, updated for late 2026.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Prerequisites<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A Mac with Apple Silicon (M1, M2, M3, etc).<\/li>\n\n\n\n<li>Running macOS 13 (Ventura) or later (newer OS versions are fully supported).<\/li>\n\n\n\n<li>Homebrew (or another package manager) is strongly recommended for simplicity.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Installation steps<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open Terminal.app on your Mac.<\/li>\n\n\n\n<li>Ensure Homebrew is installed: <code>brew update<\/code> If Homebrew is not installed, install it via the official method.<\/li>\n\n\n\n<li>Install the Tart CLI: <code>brew install cirruslabs\/cli\/tart<\/code><\/li>\n\n\n\n<li>Verify the installation: <code>tart --version<\/code> You should see the version number, indicating the CLI tool is installed correctly.<\/li>\n\n\n\n<li>(Optional) Configure any environment variables or preferences you want; e.g., set <code>TART_HOME<\/code> if you want to store VM images in a custom location instead of the default <code>~\/.tart<\/code>.<\/li>\n\n\n\n<li>After installation you may want to run a simple test: pull a known VM image and run it (see next section).<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Note on licensing &amp; usage<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>On <strong>personal<\/strong> computers (workstations), usage is generally free, under the terms specified by the tool\u2019s maintainers.<\/li>\n\n\n\n<li>In <strong>organizational<\/strong> \/ server-tier usage (clusters, many hosts), you may need to comply with licensing (e.g., number of hosts, cores).<\/li>\n\n\n\n<li>Always check the latest licensing terms before deployment in a large-scale environment.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">5. Basic Tutorials: complete lifecycle of VMs using Tart<\/h2>\n\n\n\n<p>In this section I will walk you through the full lifecycle of a VM using Tart: from pulling\/creating image, to configuring, running, sharing, and cleaning up.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">A. Pulling \/ cloning a pre-built image<\/h3>\n\n\n\n<p>This is the fastest route.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Example: clone a macOS base image (prepared by community\/maintainer)<\/span>\ntart <span class=\"hljs-keyword\">clone<\/span> &lt;image-registry&gt;\/macos-base:latest my-mac-vm\n\n<span class=\"hljs-comment\"># Example: clone a Linux base image<\/span>\ntart <span class=\"hljs-keyword\">clone<\/span> &lt;image-registry&gt;\/ubuntu:latest my-ubuntu-vm\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>You provide the remote image identifier and a local VM name (<code>my-mac-vm<\/code>, <code>my-ubuntu-vm<\/code>).<\/li>\n\n\n\n<li>The command downloads the manifest and disk image; the size may be large (dozens of GB).<\/li>\n\n\n\n<li>After download, the VM definition is available locally (usually under <code>~\/.tart\/vms\/<\/code>).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">B. Creating a VM from scratch<\/h3>\n\n\n\n<p>If you don\u2019t want to use a pre-built image:<\/p>\n\n\n\n<p><strong>For macOS guest:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">tart create --<span class=\"hljs-keyword\">from<\/span>-ipsw=latest macos-vanilla\ntart run macos-vanilla\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>This downloads an IPSW file (a macOS firmware image) and begins the VM creation process.<\/li>\n\n\n\n<li>You will boot into the macOS installer inside the VM; complete installation, create an admin user.<\/li>\n\n\n\n<li>Recommended post-install steps: enable auto-login for the admin user, enable SSH (Remote Login), disable screen-lock or password prompt for convenience in automation.<\/li>\n<\/ul>\n\n\n\n<p><strong>For Linux guest:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">tart create --linux ubuntu-arm64\ntart run --disk ~<span class=\"hljs-regexp\">\/Downloads\/u<\/span>buntu-arm64-desktop.iso ubuntu-arm64\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>After installation you SSH in; ensure <code>openssh-server<\/code> is installed and enabled, allow SSH in firewall.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">C. Configuring resources<\/h3>\n\n\n\n<p>Once the VM is created (or after pulling), you may want to adjust its configuration:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">tart <span class=\"hljs-keyword\">set<\/span> my-mac-vm --cpu 4 --memory 8192  # 4 vCPU, 8 GB RAM\ntart <span class=\"hljs-keyword\">set<\/span> my-ubuntu-vm --disk-size 50      # 50 GB disk\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>CPU, memory, disk size and display resolution are common parameters.<\/li>\n\n\n\n<li>On macOS guests you might also adjust display size or graphics resolution.<\/li>\n\n\n\n<li>For Linux you may need to expand the filesystem inside the guest after increasing disk size.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">D. Running the VM<\/h3>\n\n\n\n<p>Once configured:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">tart run my-mac-vm\n<\/code><\/span><\/pre>\n\n\n<p>or<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">tart run my-ubuntu-vm\n<\/code><\/span><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>The VM window opens (for macOS typically a window with the VM\u2019s display).<\/li>\n\n\n\n<li>Inside the VM you log in with the default credentials (for many base images username <code>admin<\/code>, password <code>admin<\/code>).<\/li>\n\n\n\n<li>For automation you may prefer to enable SSH and connect from the host: <code>ssh admin@$(tart ip my-vm-name)<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">E. Mounting host directories into the VM<\/h3>\n\n\n\n<p>Very useful for sharing code\/projects between host and VM:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">tart run --dir=project:~<span class=\"hljs-regexp\">\/Code\/<\/span>Project1 my-mac-vm\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>Here <code>project<\/code> is the mount-name visible inside the VM, <code>~\/Code\/Project1<\/code> is the host path.<\/li>\n\n\n\n<li>Inside a macOS guest the mount point is by default: <code>\/Volumes\/My Shared Files\/project<\/code>.<\/li>\n\n\n\n<li>Inside Linux guests you may need to manually mount: <code>sudo mount -t virtiofs com.apple.virtio-fs.automount \/mnt\/shared<\/code> And then access <code>\/mnt\/shared\/project<\/code>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">F. Using the VM: install software \/ test \/ build<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use the VM as you would any machine: install tools, build code, run tests, configure environments.<\/li>\n\n\n\n<li>For macOS guests you might install Xcode, configure MDM profiles, test configurations.<\/li>\n\n\n\n<li>For Linux guests you might install Docker, development tools, test scripts.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">G. Capturing &amp; pushing a VM image for reuse<\/h3>\n\n\n\n<p>Once your VM is prepared (all software installed, configuration baked):<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">tart push my-mac-vm myregistry.io\/org\/macos-golden:2025-10\n<\/code><\/span><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>You tag the image and push it to an OCI registry.<\/li>\n\n\n\n<li>On another host you can do:<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">tart <span class=\"hljs-keyword\">clone<\/span> myregistry.io\/org\/macos-golden:<span class=\"hljs-number\">2025<\/span><span class=\"hljs-number\">-10<\/span> team-vm\ntart run team-vm\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>This enables teams to share standardized images, or CI pipelines to use identical build agents.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">H. Stopping, listing, deleting, pruning<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>To list all VMs: <code>tart list<\/code><\/li>\n\n\n\n<li>To stop a VM: shut it down from inside the VM (recommended) or close the window.<\/li>\n\n\n\n<li>To delete a VM: <code>tart delete my-mac-vm<\/code><\/li>\n\n\n\n<li>To prune caches (free disk space): Tart auto-prunes caches when pulling\/cloning and low disk space. You can also disable auto-prune or adjust limit via environment variable.<\/li>\n\n\n\n<li>Note: deleting a VM removes the definition and disk image; pushing an image does <em>not<\/em> push the suspend snapshot or host-specific data.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">I. Putting it all together: Example workflow<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Install Tart on your Mac.<\/li>\n\n\n\n<li>Clone a base image: <code>tart clone registry\/org\/macos-vanilla:latest mac-vanilla tart set mac-vanilla --cpu 4 --memory 16384 --disk-size 80 tart run mac-vanilla<\/code><\/li>\n\n\n\n<li>Inside VM: create admin user, enable SSH, install Xcode or your tooling.<\/li>\n\n\n\n<li>Exit VM and push image: <code>tart push mac-vanilla registry\/org\/macos-golden:v1<\/code><\/li>\n\n\n\n<li>On another machine (or CI worker): clone and run: <code>tart clone registry\/org\/macos-golden:v1 build-vm tart run build-vm<\/code><\/li>\n\n\n\n<li>After use: delete VM, prune if needed.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">6. Key limitations &amp; best practices<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Limitations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Requires Apple Silicon host (Intel Macs are not supported).<\/li>\n\n\n\n<li>Nested virtualization (VM inside VM) is either unsupported or limited depending on chip\/OS.<\/li>\n\n\n\n<li>Some guest OS features (e.g., Secure Enclave emulation, certain Apple-ID\/activation flows) may be constrained by Virtualization.Framework.<\/li>\n\n\n\n<li>When using macOS guests you must comply with Apple\u2019s licensing (e.g., running macOS VMs on Apple hardware).<\/li>\n\n\n\n<li>Disk resizing for macOS guests can be more complicated (you might need to handle the APFS container and recovery partition manually).<\/li>\n\n\n\n<li>Shared directory mounting for Linux guests sometimes requires manual mount commands.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <strong>versioned image tags<\/strong> when pushing images (<code>:v1.0<\/code>, <code>:2026-10-22<\/code>, etc) so you can roll back or reproduce builds.<\/li>\n\n\n\n<li>Bake your \u201cgolden\u201d images with all required software and settings once, then reuse them rather than always rebuilding from scratch.<\/li>\n\n\n\n<li>Keep your <code>TART_HOME<\/code> location on a sufficiently large and fast disk (preferably SSD) because VM images are large (tens of GB).<\/li>\n\n\n\n<li>Monitor disk usage \u2013 cached images and IPSW files can accumulate; configure auto-prune limits to avoid host disk fill-up.<\/li>\n\n\n\n<li>For automation\/CI: use SSH or headless mode, script <code>tart ip<\/code>, <code>ssh admin@$(...)<\/code>, etc, so you can drive the VM from your pipeline.<\/li>\n\n\n\n<li>Use shared directories to mount code into the VM rather than copying files every time; it speeds up workflows.<\/li>\n\n\n\n<li>Clean up old images\/unused VMs regularly to keep disk space tidy.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. What is Tart Virtualization? Tart is a command-line virtualization toolset designed specifically for Apple Silicon Macs (e.g., M1\/M2\/M3 series). The key goals are: In other words: if you have&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[11138],"tags":[],"class_list":["post-53923","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/53923","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=53923"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/53923\/revisions"}],"predecessor-version":[{"id":59845,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/53923\/revisions\/59845"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=53923"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=53923"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=53923"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}