Docker Desktop or a simple setup
Use bridge networking and connect by the host's IP address. Includes a host-local administration port.
Follow the quick start →MeshVault Server / Docker guide
Run MeshVault Server on your computer or NAS, keep your models in a folder you control, and connect from a browser or MeshVault client on your local network.
You need a running Docker installation with Docker Compose, a persistent folder for your models, and enough free space for your library and previews. On Windows or macOS, use Docker Desktop with Linux containers. On a Linux server or compatible NAS, use its Docker/Compose tools.
The published image is ghcr.io/xalies/meshvault-server-amd64:latest, for Intel/AMD x86-64 hosts. There is currently no native ARM64 Docker image. The container includes its .NET runtime; you do not need to install .NET on the host.
Use bridge networking and connect by the host's IP address. Includes a host-local administration port.
Follow the quick start →Use host networking when you want automatic LAN discovery. Choose a persistent NAS dataset or share for the library.
Follow the NAS setup →Choose one configuration for your server. The examples use the same container name, so run one at a time. Use these examples on a trusted local network and keep port 5225 within that network.
meshvault-server.MeshVaultLibrary folder beside it, or replace ./MeshVaultLibrary with the host path to your existing library. Keep the destination /library unchanged.services:
meshvault-server:
image: ghcr.io/xalies/meshvault-server-amd64:latest
container_name: meshvault-server
restart: unless-stopped
ports:
- "5225:5225"
- "127.0.0.1:5226:5226"
environment:
MESHVAULT_LIBRARY: /library
MESHVAULT_SERVER_CONFIG: /data/meshvault-server.json
XDG_DATA_HOME: /data
MESHVAULT_SERVER_URLS: http://0.0.0.0:5225;http://0.0.0.0:5226
MESHVAULT_DOCKER_ADMIN_PORT: "5226"
# Optional: set this to a 6-digit PIN if you do not want the server to generate one.
# MESHVAULT_SERVER_PIN: "123456"
volumes:
- ./MeshVaultLibrary:/library
- meshvault-server-data:/data
volumes:
meshvault-server-data:
The PIN example is commented out so the server generates one for you. If you enable it, replace 123456 with your own six-digit PIN before starting.
docker compose -f docker-compose.server.yml pull
docker compose -f docker-compose.server.yml up -d
docker compose -f docker-compose.server.yml logs --tail=100 meshvault-serverLook for Server PIN: in the logs, then open the library and sign in.
Keep the administration port local. Port 5225 is for your LAN clients. The 127.0.0.1:5226:5226 mapping is for administration on the Docker host only. Keep the 127.0.0.1 binding; do not expose port 5226 to your network.
For a Linux Docker host, including compatible TrueNAS SCALE and Unraid setups, download docker-compose.host-network.yml. Use this file instead of the bridge file.
Replace ./MeshVaultLibrary in the service's volumes list with your real dataset or share path. For example:
volumes:
- "/mnt/tank/models/MeshVault:/library"
- meshvault-server-data:/dataOn Unraid, the library might be a share such as /mnt/user/3D Models/MeshVault. Keep the quotes around paths containing spaces. The host folder must be writable by the container: MeshVault stores its database and images alongside your models.
docker compose -f docker-compose.host-network.yml pull
docker compose -f docker-compose.host-network.yml up -d
docker compose -f docker-compose.host-network.yml logs --tail=100 meshvault-serverIf your NAS provides a container dashboard, use its Compose/custom-app support with this configuration and read the PIN from the container logs.
Host networking uses port 5225 directly and allows mDNS discovery on the LAN. Leave out ports: mappings and make sure another service is not using that port. Docker Desktop users should keep the bridge setup and use a manual IP connection.
http://localhost:5225/config on the Docker host; this redirects to the local administration port.http://localhost:5225. From another device, open the host's LAN address, for example http://192.168.1.20:5225. Replace the example IP with your server's address.http://HOST-IP:5225/config#licence.Current Server builds start with a seven-day trial. After the trial, browsing remains available; importing, scanning, editing and generating thumbnails require an activated Pro licence. Keep the /data storage when updating so the server retains its activation.
Get a MeshVault licence if you need one. The licence is USD $19.99, includes lifetime updates and is not limited to a product version. Store pricing and taxes may vary.
Connecting from another device? localhost always means the device you are using. A phone or laptop must use the Docker host's IP address. In a MeshVault client or Connect, use that same server address and the PIN; automatic discovery is optional.
Upload through the browser library or send downloads with MeshVault Connect. You can also copy models and creator packs directly into the host folder mapped to /library.
After copying files outside MeshVault, click Refresh in the browser library. This scans the folder and generates missing thumbnails. Allow time for larger libraries and complex models; restarting the container is not a substitute for generating missing thumbnails.
The server reuses available artwork and embedded previews before rendering a fallback. A file being listed in the library does not guarantee an interactive preview or a generated thumbnail for every format.
The Docker server's thumbnail generation uses the CPU. You do not need to configure GPU passthrough. Interactive browser previews run in the connecting browser, so their performance also depends on that device.
For simultaneous access from several computers, connect the desktop clients to the server. Keep one server responsible for the library rather than opening the same database as separate local libraries on multiple devices.
Single-user mode uses the server PIN. If you want separate sign-ins, open Options → Mode & users from trusted local administration, create the Owner account and enable named-user mode. You can then add Browse, Manage or Owner accounts for the same library.
Initial account setup requires host-local administration; an ordinary LAN PIN session cannot enable it. Once enabled, sign in with a username and password. Owners manage server settings and licensing. The local administration port does not bypass account sign-in.
Use a browser on the server itself. If you already administer a host-network Linux server over SSH, you can instead forward its loopback connection to your computer:
ssh -L 15225:127.0.0.1:5225 user@NAS-IPKeep that SSH session open, then visit http://localhost:15225/config#access on your computer. This example is for the host-network configuration. For a bridge setup, forward host port 5226 instead, using the loopback-only mapping in the supplied file.
Accounts, sessions and personal user data are stored in /data. Preserve that storage alongside the library. Each client must support the server's chosen sign-in mode.
| Container path | Stored here | Host storage |
|---|---|---|
/library | Your models and the hidden .meshvault folder containing the library database, metadata and images. | ./MeshVaultLibrary, or the existing folder/dataset you choose. |
/data | Server settings, PIN, accounts, browser session keys, licence activation and the container's persistent machine key. | The Compose-managed meshvault-server-data volume. Its actual name normally includes your Compose project name. |
Before a backup, finish active imports and stop the server. Back up the entire library, including hidden files, plus the contents of the data volume using your Docker/NAS backup tools. A models-only backup does not include your library organisation; a library-only backup does not include the host's accounts and activation.
docker compose -f docker-compose.server.yml stopOnce the backup of both storage locations is complete, start the server again:
docker compose -f docker-compose.server.yml startUse docker-compose.host-network.yml in those commands if that is your configuration. Restore both storage locations before starting a replacement server. Keep the same mappings; selecting a new empty folder or volume will not restore the old data.
For Docker's volume backup and restore procedure, see Back up, restore or migrate data volumes.
Take a current backup, finish active work, and run these commands from the same setup folder:
docker compose -f docker-compose.server.yml pull
docker compose -f docker-compose.server.yml up -d
docker compose -f docker-compose.server.yml logs --tail=100 meshvault-serverFor host networking, use docker-compose.host-network.yml instead. Pull downloads the image; up -d recreates the container with the existing mounts. Restarting an old container alone does not install a new image.
Keep the Compose project name, setup directory and storage mappings consistent. Changing them can select a different data volume. For a fixed version, replace :latest with an available numeric release tag, without a leading v.
To stop without removing data, use docker compose -f docker-compose.server.yml stop. Avoid down -v when you want to retain the server: it removes the named data volume and its saved settings, accounts and activation.
If you downloaded the Docker server package from a MeshVault release, extract the outer archive first. Inside it are the Compose files and meshvault-server-image.tar.gz. Load that inner image archive:
docker load -i meshvault-server-image.tar.gzThen use the matching Compose file with up -d. Keep its image tag matched to the loaded image; a later pull updates it from the registry.
Check the container logs and confirm Docker is running Linux containers. Make sure the library folder exists, is writable, and ports 5225 and, for bridge mode, 5226 are available. An architecture or “exec format” error can mean the AMD64 image does not match the host.
For an older container reporting AppStoragePaths.GetRootFolderPath with an empty path, add XDG_DATA_HOME=/data, persist /data, and recreate the container.
Use http://HOST-IP:5225, not localhost. Check that both devices are on the same reachable LAN, that the host firewall permits the connection, and that bridge mode publishes 5225:5225. Guest Wi-Fi and client isolation can prevent devices from reaching each other.
Enter the server's LAN IP and port manually. Bridge networking can prevent mDNS discovery. Native Linux host networking supports the discovery path; Docker Desktop users should use the bridge setup and a manual address.
Read Server PIN: in the container logs, or use the local administration page on the Docker host. If MESHVAULT_SERVER_PIN is set, that value overrides the saved PIN. A new empty /data volume can also create a new identity and PIN.
Check the host path on the left side of the :/library mount. The server sees container paths, so a NAS path entered in the browser does not create a mount. Keep MESHVAULT_LIBRARY=/library, verify the mapped folder, then click Refresh. The trial or Pro licence must permit scanning.
Click Refresh in the browser library to scan and generate missing thumbnails. Confirm the library is writable and the trial or Pro licence is active. Thumbnail support depends on the format, available embedded artwork and model contents; complex renders may take time. Check the logs if generation fails.
Open Options → Licence and check trial/activation status. In named-user mode, also check the account's role: Browse accounts cannot manage library content, and only Owners manage host settings and licensing.
Still stuck? Contact MeshVault support with your server version, host/NAS type, network mode, mount layout and the relevant error. Remove PINs, licence keys and other credentials from logs or screenshots before sharing them.
| Variable | Purpose |
|---|---|
MESHVAULT_LIBRARY | /library: the path inside the container. Overrides the saved library path. |
MESHVAULT_SERVER_CONFIG | /data/meshvault-server.json: persistent server configuration. |
XDG_DATA_HOME | /data: the persistent application-data location. |
MESHVAULT_SERVER_URLS | Listen on 5225; bridge mode also listens on the local-admin port 5226. |
MESHVAULT_DOCKER_ADMIN_PORT | 5226 in the bridge file, with its host-loopback mapping. Empty in the host-network file. |
MESHVAULT_SERVER_PIN | Optional six-digit PIN. Omit it to generate and persist one automatically. |
Further Docker help: bind mounts, Compose networking and host networking.