STLVault is a containerized 3D Model library manager and organizer, designed specifically for 3D printing enthusiasts. It provides a clean, modern web interface to manage your growing collection of STL, STEP, and 3MF files.
Note: This project is currently in Beta. While the core functionality (importing, organizing, viewing) works, expect changes and improvements.
- 📂 Nestable Folders: Organize your models into a deep hierarchy that makes sense to you.
- 🪄 Open in Slicer: Let's you open the model direclty in your slicer.
- 🔗 URL Import: Import multiple files from Printables URL, with granular file selection. (Only models URL)
- 🖱️ Drag n' Drop: Seamlessly import new models or move files between folders.
- 📦 Bulk Actions: Tag, move, delete, download, or upload multiple files at once.
- 👁️ 3D Preview: Integrated web-based 3D viewer for STL, 3MF, STEP and STP files, with Trackball/Orbit controls switch to allow full rotational freedom (beta)
- 🖼️ Custom Thumbnails: Generate a thumbnail of the model from the 3D viewer directly or upload an image to be shown as a thumbnail.
- 🏷️ Metadata Management: Add tags, descriptions, and metadata to your models for easy retrieval.
- 🔍 Global Search: Sidebar search and filtering to find models library-wide.
- Frontend: React (TS), Vite
- Backend: Python (FastAPI)
- Database: SQLite
- Package Manager: NPM, UV
- Containerization: Docker & Docker Compose
The recommended way to deploy STLVault is using Docker Compose or via a container management tool like Portainer.
services:
stlvbackend:
image: moddroid94/stlvault-backend:latest
pull_policy: build
environment:
- FILE_STORAGE=/app/uploads #DO NOT CHANGE, MODIFY THE BINDS
- DB_PATH=/app/data/data.db #DO NOT CHANGE, MODIFY THE BINDS
- WEBUI_URL: "${APP_URL}"
ports:
- '8998:8080'
volumes:
- YOUR_FOLDER_PATH:/app/uploads
- YOUR_FOLDER_PATH:/app/data
restart: always
stlvfrontend:
image: moddroid94/stlvault-frontend:latest
pull_policy: build
environment:
- TERA_API_URL: "${API_URL}"
- TERA_APP_URL: "${APP_URL}"
volumes:
- node_modules:/app/node_modules
ports:
- '8999:5173'
depends_on:
- stlvbackend
restart: always
volumes:
node_modules: null
-
Clone the repository:
git clone https://github.com/moddroid94/STLVault.git cd STLVault -
Configure Environment: Review the
.envfile. You can modify the ports/URL if necessary.# .env example APP_URL=http://192.168.0.17:8999 API_URL=http://192.168.0.17:8998 APP_PORT=8999 API_PORT=8998 UPLOAD_PATH=/your/mount/path DATA_PATH=/your/mount/otherpath -
Start the Stack:
docker-compose up -d
-
Access the App: Open your browser and navigate to
http://localhost:8999(or the port you configured).
You can deploy STLVault directly from any git deploy compatible docker manager using the repository as a stack source.
- Create a new Stack.
- Select Repository as the build method.
- Enter the repository URL:
https://github.com/moddroid94/STLVault. - Environment Variables: Define the environment variables in the Docker Manager UI.
The application requires two main volumes to persist data. If you are using the default docker-compose.yml, these are mapped automatically relative to the backend folder:
/backend/uploads: Stores your actual 3D model files./backend/data: Stores the SQLite database file.
- Basic File Management (Upload, Move, Delete)
- 3D Viewer (STL, 3MF, STEP)
- Open in Slicer settings
- Thumbnails / 3D viewer for STEP
- Model import via Printables URL with interactive models selection.
- Backend folder structure follows frontend
- "All models" folder Pagination to speedup large collection first load.
- Zip Import
- Root folder Scan and import
- Generate thumbnail from 3D Preview (to fix bad oriented models or to choose a better angle)
- Models Collections (to group models for projects or variants)
- Multi-User with Authentication
Contributions are welcome! Since this project uses a standard React + FastAPI stack, it is easy to set up for development.
- Fork the repository.
- Create a feature branch (
git checkout -b feature/AmazingFeature). - Commit your changes (
git commit -m 'Add some AmazingFeature'). - Push to the branch (
git push origin feature/AmazingFeature). - Open a Pull Request.




