2026-09-14 12:18:45 +02:00
2026-09-14 12:18:45 +02:00

VernierCAD

VernierCAD is a local Linux parametric solid modeller using Rust, an OCCT kernel, and a native Wayland-capable winit window. It is GPL-3.0-or-later.

Install a local release

Provide a directory containing executable vernier-app and vernier-worker, then install it without modifying the source checkout:

scripts/install-local.sh /path/to/release 0.0.1-alpha "$(git rev-parse HEAD)"
~/.local/bin/vernier

The installer stores binaries under ~/.local/share/vernier/releases/<commit>, atomically updates current, keeps the prior target as previous, and writes a desktop entry. It checks executable bits and missing shared libraries with ldd. Existing user data and releases owned by another commit are preserved. Use --dry-run to inspect destinations; use --prefix DIR for a self-contained staging prefix.

The launcher does not depend on the checkout or a working directory. It keeps the current log and one rotated log under ${XDG_STATE_HOME:-~/.local/state}/vernier/logs. It does not force an obsolete X11 backend; native Wayland is the intended path.

Basic workflow

The Projects dashboard opens on launch. Choose New for an empty managed project, or Open to register an existing native document. Choose a sketch plane, draw a closed profile, and extrude it. Select faces or edges for available modelling operations, then use Save to write the native document. Open restores a saved document. Switching projects uses Save/Discard/Cancel; Cancel leaves the current document untouched. Duplicate creates an independent copy, and Archive hides a library entry without deleting its files. Recovery state is offered after an interrupted session through the app's recovery controls.

The current alpha covers sketching, constraints, extrude, editing, direct modelling, and the delivered multi-body core. Loft is end-to-end in the GUI; advanced guided lofts, G1/G2 endpoint matching and periodic closure are not available. Back up both the .vernier document and its .vernier.names sidecar. Managed projects and recovery stay under ${XDG_STATE_HOME:-~/.local/state}/vernier/{projects,recovery}; installation and rollback do not move them.

To roll back, stop VernierCAD, inspect ~/.local/share/vernier/previous, and replace current with that managed target atomically, for example:

root=${XDG_DATA_HOME:-$HOME/.local/share}/vernier
if [ -L "$root/previous" ]; then
    ln -sfn "$(readlink "$root/previous")" "$root/current.rollback" &&
        mv -Tf "$root/current.rollback" "$root/current"
else
    echo "No previous local release is installed."
fi

The same paths under DIR/share/vernier apply to a --prefix DIR install.

Development checks

For a source checkout, use the workspace's normal Rust commands:

fish scripts/check-fast.fish                    # everyday development feedback
fish scripts/check.fish                         # exhaustive release gate
cargo run --release -p vernier-cli -- --selftest   # 45 end-to-end checks, JSON report on stdout

--selftest runs 45 end-to-end checks headlessly and writes a JSON report; the driven-GUI gate in scripts/check.fish runs all registered workflows after it. The full gate builds the release driver, worker and CLI once, then invokes those binaries directly. GUI workflows still run twice in separate processes, compare every frame digest, check exported geometry and PNG goldens, and require RADV. Rust unit tests and the dedicated recovery tests retain their debug checks.

Each full-gate command prints its duration and exit code, and records them in a unique target/gate/timings-*.tsv file (seconds, exit code, command). Sort that file with sort -nr to find the slowest stages. The gate still stops at the first unexpected failure; a negative control must return exactly 1. A cold release build costs more than a warm run, so compare those timings separately.

The OCCT development libraries, a C++ toolchain, and a Vulkan driver are needed for a full build and viewport run.

S
Description
No description provided
Readme GPL-3.0
18 MiB
Languages
Rust 95.9%
C++ 3.1%
Shell 0.6%
Python 0.3%