Skip to main content

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

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

meshlite-0.3.0.tar.gz (171.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

meshlite-0.3.0-py3-none-any.whl (193.2 kB view details)

Uploaded Python 3

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

Hashes for meshlite-0.3.0.tar.gz
Algorithm Hash digest
SHA256 0c9c5b9cc08d19ba7f35d8f9acb37beedb4c757415432bb1a7c4904363c9b11c
MD5 76cf8ce59637e112dc619e9a47e00019
BLAKE2b-256 ac7d8ce29d99020b8187188a0ed611b636bfb59b8ec2a6c41857604176ec804c

See more details on using hashes here.

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

Hashes for meshlite-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 31c38f1df646c7342a1e24a3d30ec0d77bb1c8630e30dff33027f08830bfdcec
MD5 37990fc39121c6e7cb1f41bc1a55d6eb
BLAKE2b-256 76ed388470ff49ee500dd530b292226658088b65f1ae9cf621cc1b4f3e5e4a03

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page