A second adversarial round (with empirical reproduction against the
vendored image 0.25) found the budget contract still had holes:
- The probe billed 4 bytes/px, but 16-bit formats allocate their
native layout during decode (8/px for RGBA16 PNG; TIFF stacks ~3x
codec scratch on top). In-budget 16-bit images were falsely refused
with self-contradictory notes, and the decode transient could exceed
the budget the tiers claimed to enforce. The probe now reads the
color type alongside the dimensions and bills the real peak (native
layout + RGBA where they coexist, plus the TIFF codec factor), so
refusals are honest and per-platform-correct, and the TIFF allowance
follows the same accounting.
- GIF: the probe reads the LOGICAL SCREEN, but a crafted frame may
declare itself arbitrarily larger (empirically: a 10x10 probed
screen with an 8192x8192 frame — 320 MB and 29 s from a
probe-claimed-400-byte image). The GIF frame buffer is now capped
to the probed size plus slack; frame bombs refuse like any other
oversize.
- Remote bodies on web streamed incrementally with the 64 MB cap
enforced DURING the read (array_buffer() materialized a hostile
chunked reply in full before any check could fire), aborting and
cancelling the reader the moment the cap is crossed.
- Degenerate raster entities (zero/non-finite size or vectors) no
longer produce NaN placement math that aborted whole PDF exports —
they resolve to the broken-reference placeholder.
- Same-name resolution now has a deterministic winner (newest
registration, via insertion order) instead of HashMap iteration
order; URL query strings no longer break by-name matching; the
image pick matches its refusal note by the quoted file name
(substring collisions like a.tif/2011.tif attributed errors to the
wrong file); a dropped remote outcome at the queue cap triggers one
unconditional catch-up re-resolution instead of waiting for another
event; the unknown-size refusal says so instead of printing 0x0;
and the build script fails cleanly when there are no fonts to
verify.
(cherry picked from commit c6db94e8)
Ported onto main (#1717 review): the build-web.sh hunk stays out with
the wrapper; the new messages are cataloged (image refusal under the
file group it is looked up in, plus the extraction cap, shared-copy
warning and plot-preview task title that were missing), and the web
SAVEALL failure reuses the existing SAVEALL message.
English · Български · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Ελληνικά · Magyar · Italiano · 日本語 · 한국어 · ລາວ · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية
Open CAD Studio
Open-source 2D drafting and 3D modeling for desktop and web, built with Rust.
Launch the web app · Download the desktop app · Join the discussion
Overview
Open CAD Studio is a cross-platform application for technical drawing, layout work, and solid modeling. It reads and writes DWG and DXF drawings natively, with a shared editing core across the desktop and browser versions.
The project is under active development. Keep backups of important production drawings and report reproducible problems through GitHub Issues.
Highlights
- Native drawing workflow — open, edit, recover, and save DWG and DXF files without a conversion service.
- Precise 2D drafting — lines, polylines, curves, splines, hatches, object snaps, tracking, layers, blocks, and external references.
- Documentation tools — text, dimensions, leaders, tolerances, tables, model space, paper space, viewports, and plot styles.
- Kernel-backed 3D modeling — solid primitives, extrusion, revolution, sweep, loft, Boolean operations, and ACIS entity tessellation.
- GPU rendering — accelerated 2D and 3D viewports through
wgpu, with orthographic and perspective cameras. - Extensible workflows — native plugins, command scripts, headless conversion, and a line-based JSON automation API.
File workflows
| Format or workflow | Support |
|---|---|
| DWG | Read and write; versioned save targets from R14 through 2018 |
| DXF | Read and write; versioned save targets from R14 through 2018 |
| BAK / SV$ | Open drawing backups and autosave files |
| OBJ | Import polygon meshes |
| LandXML | Import CgPoint survey points |
| STL | Export 3D mesh data |
| STEP AP203 | Export 3D mesh data |
| Plot layouts and selected geometry on desktop | |
| CSV | Extract entity property data |
| CTB / STB | Load and edit plot style tables |
Desktop or web
Use the web app for immediate access with no installation. Drawings are selected through the browser and saved as local downloads.
Use the desktop application for native file associations, file-manager thumbnails, system printing, PDF output, external plugins, command scripts, and headless automation. Release builds are available for Windows, Linux, and Apple Silicon macOS.
Install
Download all current packages from the latest release.
Windows
Choose one of these signed x86-64 packages:
OpenCADStudio-*-windows-x86_64-installer.msi— recommended installer with Start Menu shortcuts, DWG/DXF file associations, and drawing thumbnails.OpenCADStudio-*-windows-x86_64-portable.exe— standalone application; no installation required.
Linux
Download the x86-64 AppImage, make it executable, and run it:
chmod +x OpenCADStudio-*-linux-x86_64.AppImage
./OpenCADStudio-*-linux-x86_64.AppImage
Or install it as a Flatpak from FlatPark, which installs the official AppImage and follows new releases:
flatpak remote-add --if-not-exists flatpark https://dl.flatpark.org/flatpark.flatpakrepo
flatpak install flatpark io.github.HakanSeven12.OpenCadStudio
The Flatpak opens and saves drawings through the file chooser. External references and underlays that point at other files need home access:
flatpak override --user --filesystem=home io.github.HakanSeven12.OpenCadStudio
macOS
The published macOS package supports Apple Silicon:
- Download
OpenCADStudio-*-macos-arm64.dmg. - Open the image and drag
OpenCADStudio.appinto Applications. - If Gatekeeper blocks the first launch, approve the app from System Settings → Privacy & Security.
The application is ad-hoc signed but is not currently notarized by Apple.
Languages
Open CAD Studio can follow the system language or use any of these 22 interface languages:
Arabic · Brazilian Portuguese · Bulgarian · Czech · Dutch · English · Finnish · French · German · Greek · Hindi · Hungarian · Italian · Japanese · Korean · Lao · Polish · Russian · Simplified Chinese · Spanish · Traditional Chinese · Turkish
Change the language from the application settings. The browser version also uses the browser's preferred locale when System is selected.
Build from source
Desktop
Requirements:
- Git
- Current stable Rust toolchain
- Platform graphics and font development libraries
On Ubuntu or Debian, install the native dependencies with:
sudo apt update
sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \
libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \
libfreetype6-dev
Then build and run:
git clone https://github.com/HakanSeven12/OpenCADStudio.git
cd OpenCADStudio
cargo build --release --bin OpenCADStudio
The resulting binary is written to target/release/OpenCADStudio (OpenCADStudio.exe on Windows).
Web
Install the WebAssembly target and build tools once:
rustup target add wasm32-unknown-unknown
cargo install trunk wasm-bindgen-cli
Start the development server:
trunk serve
Automation
The desktop binary supports one-shot conversion, a persistent headless server, and a client-neutral MCP endpoint for AI applications:
OpenCADStudio --export input.dwg output.dxf
OpenCADStudio --export input-r12.dxf output.dwg --target-version R14
OpenCADStudio --serve
OpenCADStudio --serve --port 4242
OpenCADStudio --mcp
The automation server exchanges one JSON object per line over standard input/output or a local TCP socket. The self-contained MCP endpoint exposes the live desktop editor through the same tools to every compatible client. Its audit and save_verified operations check an explicit DWG/DXF target version, lossy records, raw DXF handle references, reopen the output, compare its semantic manifest, and return a SHA-256 hash. To connect a client, configure it to launch OpenCADStudio --mcp. See the MCP control guide.
Plugins
Desktop plugins run in separate processes and communicate with the host through the versioned plugin API. The browser build does not load native plugins.
Project documentation
Contributing
Bug reports, focused pull requests, translations, documentation improvements, and plugin contributions are welcome.
- Search existing issues before opening a new report.
- Use Discussions for questions and ideas.
- Report vulnerabilities privately by following the security policy.
Application translations live in locales/*/opencadstudio.ftl; source labels map through
src/locale_catalog.rs. After editing translations, run python3 scripts/export-locales.py
to refresh web and desktop packaging labels. Validate with python3 scripts/test_site.py
and cargo test --lib i18n::tests.
Project growth
Stars
Release downloads
Support the project
If Open CAD Studio helps your work, support continued development through GitHub Sponsors or Patreon.
License
Open CAD Studio is distributed under the GNU General Public License v3.0.

