VSCode-style 3D mesh processing desktop app, powered by MeshLib + ImGui.
Project description
meshlite
A desktop 3D mesh processing application with a VSCode-inspired interface, powered by MeshLib, moderngl, and Dear ImGui.
Features
15 mesh operations with full parameter control:
| Category | Operations |
|---|---|
| File | Open (STL / OBJ / PLY / GLB / OFF / 3MF), Save As |
| Repair | Fill Holes, Auto Repair, Remove Duplicates |
| Inspect | Mesh Info, Find Self-Intersections (Local + Voxel) |
| Mesh Edit | Decimate, Remesh, Subdivide, Laplacian Smooth |
| Boolean | Union, Intersection, Difference |
| Transform | Translate, Rotate, Scale, Mirror |
Professional UI:
- MeshInspector-style top toolbar with grouped icon buttons
- Activity bar + collapsible sidebar (Outliner, Operations, Search, Settings)
- Properties panel with auto-rendered parameter widgets
- Command palette with fuzzy search (
Ctrl+Shift+P) - Mesh Info panel with topology, geometry, and bounding box statistics
- Snapshot-based undo/redo (
Ctrl+Z/Ctrl+Shift+Z) - VSCode "Dark+" theme with codicon glyphs
- Drag-and-drop file loading (GLFW backend)
- Recent files list (File menu + command palette)
- Persistent user preferences (viewport, rendering, camera, history)
Architecture:
- Adding a new operation is a single-file change — zero edits to UI, toolbar, or registry
- 5-layer separation:
domain/ops/render/app_state/ui - Async worker dispatch — operations run on background threads
- 85 automated tests with architecture rule enforcement
- Cross-platform CI (Linux, Windows, macOS)
Install
From PyPI
pip install meshlite
meshlite
From source
git clone https://github.com/syedjameel/meshlite.git
cd meshlite
uv venv --python 3.13 .venv && source .venv/bin/activate
uv pip install -e ".[dev]"
python main.py
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Ctrl+Shift+P |
Command palette |
Ctrl+O |
Open mesh |
Ctrl+S |
Save mesh as |
Ctrl+Z |
Undo |
Ctrl+Shift+Z |
Redo |
F |
Frame all (fit viewport) |
| Drag file onto window | Load mesh |
User Preferences
All settings are persisted automatically between sessions:
- Viewport: Rotate / zoom / pan sensitivity
- Rendering: Background color, mesh color, selected color, lighting (ambient, specular)
- Camera: Field of view
- History: Undo depth, memory cap
Access via the Settings panel in the sidebar (gear icon in the activity bar).
Adding a New Operation
meshlite's architecture makes it trivial to add operations. Create one file:
# src/meshlite/ops/smooth/laplacian.py
@register_operation
class LaplacianSmoothOperation(Operation):
id = "smooth.laplacian"
label = "Laplacian Smooth"
category = "Mesh Edit"
schema = ParamSchema((
Param("iterations", "int", "Iterations", default=3, min=1, max=100),
Param("force", "float", "Force", default=0.5, min=0.01, max=1.0),
))
def run(self, mesh, params, ctx):
# ... meshlib calls ...
return OperationResult(mesh=mesh, message="Smoothed")
The operation automatically appears in the command palette, sidebar, properties panel, and toolbar — with zero edits to any other file.
Architecture
ui ───> app_state ──> ops ──> domain
| | |
└─> render ─┘ └──> domain
| Layer | Responsibility | Dependencies |
|---|---|---|
domain/ |
MeshLib wrapper (mrm_shim.py), mesh data, I/O |
meshlib, numpy |
ops/ |
Operations framework, registry, auto-discovery | domain |
render/ |
moderngl renderer, GPU mesh, camera, shaders | domain (read-only) |
app_state/ |
Document, CommandBus, undo, events, preferences | domain, ops |
ui/ |
ImGui panels, theme, toolbar, command palette | all layers (except domain directly) |
Tech Stack
- Python 3.11+
- MeshLib — mesh processing engine (GPL-3)
- imgui_bundle — Dear ImGui + hello_imgui
- moderngl — OpenGL rendering
- numpy + PyGLM
Contributing
See CONTRIBUTING.md for development setup, code style, and how to add operations.
License
GPL-3.0-or-later — matches MeshLib's license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file meshlite-0.3.0.tar.gz.
File metadata
- Download URL: meshlite-0.3.0.tar.gz
- Upload date:
- Size: 171.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Hatch/1.16.5 cpython/3.12.3 HTTPX/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c9c5b9cc08d19ba7f35d8f9acb37beedb4c757415432bb1a7c4904363c9b11c
|
|
| MD5 |
76cf8ce59637e112dc619e9a47e00019
|
|
| BLAKE2b-256 |
ac7d8ce29d99020b8187188a0ed611b636bfb59b8ec2a6c41857604176ec804c
|
File details
Details for the file meshlite-0.3.0-py3-none-any.whl.
File metadata
- Download URL: meshlite-0.3.0-py3-none-any.whl
- Upload date:
- Size: 193.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: Hatch/1.16.5 cpython/3.12.3 HTTPX/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31c38f1df646c7342a1e24a3d30ec0d77bb1c8630e30dff33027f08830bfdcec
|
|
| MD5 |
37990fc39121c6e7cb1f41bc1a55d6eb
|
|
| BLAKE2b-256 |
76ed388470ff49ee500dd530b292226658088b65f1ae9cf621cc1b4f3e5e4a03
|