kulmanlab.com — A fast, professional 2D CAD application that runs entirely in your browser. No installation. No subscription. No files uploaded to any server.
KulmanLab is a web-based CAD editor built for engineers, designers, drafters, and makers who need a capable 2D drawing tool without the overhead of desktop software. Open a DXF file, make changes, and export — all without leaving your browser.
- Features at a Glance
- Drawing Tools
- Edit & Modify Commands
- Dimensioning & Annotation
- Layers
- Snap & Precision Input
- Grip Editing
- Selection
- DXF Import & Export
- File Management
- Keyboard Shortcuts
- User Interface
- What KulmanLab Does Not Support
- Who Is It For
- Tech Stack
- Development
- Full 2D drawing toolkit: lines, polylines, arcs, circles, ellipses, splines
- Hatch fills with a built-in pattern library (ANSI31 and other standard patterns) plus custom
.patfile upload via Hatch Manager - Complete dimensioning suite: linear, aligned, radius, diameter, angular, continue
- Multileader annotations with customizable arrowheads
- Layer management: freeze, lock, isolate, color, linetype, lineweight
- DXF import and export (AC1032 format)
- Grip editing — drag geometry directly on canvas
- Object snapping: endpoint, intersection, perpendicular, angle lock
- Undo / redo with per-file history
- Local file storage via IndexedDB — your drawings stay on your machine
- Print and PDF export with page setup
- Dark and light theme
- Works in any modern desktop browser — no plugins, no accounts required
KulmanLab provides a full set of 2D drawing commands accessible via the toolbar, the command terminal, or keyboard shortcuts.
| Tool | Description |
|---|---|
| Line | Draw individual line segments. Click to set start and end points. Chainable into connected sequences. |
| Polyline | Create multi-segment paths as a single LWPolyline entity. Supports open and closed paths, plus AutoCAD-style tangent arc segments via an Arc toggle (press A) mixed freely with straight ones. |
| Rectangle | Draw an axis-aligned rectangle by two corner points (typed as X,Y or clicked), or press D after the first corner to switch to typed width × height entry — move the cursor to pick which of the four quadrants the rectangle extends into, then click to place it. The last-entered width/height is remembered as the default next time. Stored as a closed LWPolyline. |
| Circle | Define by center point and radius. Supports typed numeric radius input. |
| Arc | Draw a circular arc through three points on the circumference. |
| Ellipse | Define by center, major axis endpoint, and minor-to-major ratio. Supports partial ellipses. |
| Spline (Fit) | Draw a smooth B-spline curve that passes through each clicked fit point. |
| Spline (CV) | Draw a B-spline curve defined by control vertices for precise shape control. |
| Tool | Description |
|---|---|
| Hatch | Click a point inside any closed boundary (lines, arcs, circles, ellipses, polylines, or splines meeting end to end) to fill it with a pattern. Islands — closed shapes nested inside the region — are left unfilled. Grip-editable boundary; pattern, scale, angle, and origin are all adjustable per-hatch. |
Patterns come from a shared library managed by Hatch Manager: built-in defaults (including SOLID) plus any .pat files you upload, which shadow built-ins of the same name — the supported way to bring in Autodesk's authoritative acad.pat definitions.
| Tool | Description |
|---|---|
| Text | Insert single-line or multiline text with configurable height, rotation, and attachment point. |
| Multileader | Add an arrow, leader line, and text block. Arrowhead style and size are configurable. |
| Command | Works On | Description |
|---|---|---|
| Move | All entities | Relocate selected objects by base point and displacement. |
| Copy | All entities | Duplicate selected objects to a new location. |
| Rotate | All entities | Rotate around a base point by a specified angle. A Copy toggle (press C) rotates duplicates instead of the original selection. |
| Mirror | All entities | Reflect across a mirror axis defined by two points. |
| Scale | All entities | Resize from a base point by a numeric scale factor. |
| Offset | Line, Circle, Arc, Ellipse, Polyline | Create a parallel copy at a specified distance. |
| Trim | Line, Arc, Circle, Ellipse, Polyline | Remove the portion of an entity between two intersection points. |
| Extend | Line, Arc, Ellipse, Polyline | Stretch an entity's endpoint to reach a boundary. |
| Fillet | Line, Arc, Polyline (straight or arc segments) | Round a corner with a tangent arc of a specified radius. Rounding two segments of the same polyline folds the arc into it in place; filleting anything involving an open polyline instead merges both sides into a single new polyline joined by the fillet arc. Already-tangent corners (no real angle to round) are rejected. |
| Chamfer | Line and Polyline (straight segments) | Bevel a corner with a straight cut. On a Polyline, both picks must be true adjacent neighbor segments. |
| Delete | All entities | Remove selected objects from the drawing. |
| Explode | Polyline | Break a polyline into its individual Line and Arc entities, one per segment, in place. |
| Match Properties | All entities | Copy color, layer, linetype, and lineweight from one entity to others. |
KulmanLab includes a complete dimensioning suite for annotated technical drawings.
| Dimension Type | Description |
|---|---|
| Linear | Horizontal or vertical dimension between two points. |
| Aligned | Dimension parallel to the measured line at any angle. |
| Radius | Radial dimension for arcs and circles, with optional center mark. |
| Diameter | Diameter dimension with two-arrow display through the center. |
| Angular | Measure the angle between two lines. |
| Continue | Chain a sequence of dimensions from the endpoint of the previous one. |
All dimension entities are stored as standard DXF DIMENSION objects and are compatible with LibreCAD and other DXF tools.
Every drawing entity belongs to a layer. KulmanLab provides full layer management through the Layer Panel.
Layer properties:
- Name — unique identifier
- Color — ACI color index, applied to all entities set to ByLayer
- Linetype — Continuous, Dashed, ByLayer, and others
- Lineweight — controls printed line thickness
- Frozen — hides the layer and excludes it from snap detection
- Locked — layer is visible but entities cannot be selected or modified
- Plot — controls whether the layer is included in print output
Layer commands:
- Set a layer as current for new entities
- Isolate a single layer (freeze all others)
- Unfreeze all layers at once
- Copy an entity's layer assignment to other entities via Match Properties
KulmanLab provides object snapping and angle lock to ensure accurate geometry placement.
Snap modes:
- Endpoint — snaps to the start or end point of lines, arcs, and polyline vertices
- Intersection — snaps to the crossing point of two entities on screen
- Perpendicular — available via angle lock on line commands
- Angle lock — while drawing lines, automatically constrains direction to 45° increments when the cursor is close to a principal axis
Numeric input:
- Type a distance or radius value on the keyboard at any prompt to enter an exact numeric value
- Backspace corrects the last digit
- Enter confirms the value
Snap points on frozen layers are automatically skipped.
Select any entity and colored grip handles appear at key points. Drag a grip to reshape geometry directly on the canvas without entering a command.
| Entity | Grips | Behavior |
|---|---|---|
| Line | Start, midpoint, end | Stretch endpoints; drag midpoint to move |
| Circle | Center + 4 cardinal points | Move by center; resize by cardinal grips |
| Arc | Center + start/end + radius point | Move, resize, and rotate arc extents |
| Polyline | Each vertex + center | Drag any vertex to reshape; center moves entire entity |
| Ellipse | Center + 4 axis endpoints | Move and resize both axes independently |
| Text | Insertion point | Reposition text |
| Dimensions | Extension points + text | Adjust witness lines and text placement |
Type a numeric value while dragging a grip to set an exact displacement or distance.
| Method | Behavior |
|---|---|
| Click | Select the entity nearest to the cursor |
| Drag right (window) | Strict selection — only entities fully inside the box |
| Drag left (crossing) | Crossing selection — any entity that touches the box boundary |
| Ctrl+A | Select all entities in the drawing |
| Click empty space | Deselect all |
Selecting many entities shows a filter icon in the property panel header. It opens a popup with live checklists for Type, Layer, Color, Lineweight, and Linetype — built from what's actually in the selection — so you can narrow a large, mixed selection down before bulk-editing. The canvas selection itself is narrowed to match as you check and uncheck values, not just the property panel's display.
KulmanLab reads and writes AC1032 DXF files, the most widely supported version across CAD tools.
| DXF Entity | Supported |
|---|---|
| LINE | Yes |
| CIRCLE | Yes |
| ARC | Yes |
| ELLIPSE | Yes |
| LWPOLYLINE | Yes |
| SPLINE | Yes (fit points and control vertices) |
| TEXT / MTEXT | Yes |
| MULTILEADER | Yes |
| DIMENSION | Yes (all subtypes) |
| INSERT / BLOCK | Parsed, not rendered |
| HATCH | Yes (boundary geometry plus pattern name/scale/angle; inline pattern-line definitions are not read — the name is resolved against KulmanLab's own pattern library instead) |
| 3DFACE / SOLID | Not supported |
| POINT | Not supported |
| XREF | Not supported |
Exported DXF files are valid and open correctly in LibreCAD, FreeCAD, QCAD, BricsCAD, and other DXF-compatible software. All entity properties — color, layer, linetype, lineweight, handles — are preserved on export.
Hatches are not yet included in DXF export (along with dimensions and multileaders) — use the native .json export format to keep a drawing's hatches intact.
Drawings are stored locally in your browser using IndexedDB. Nothing is sent to a server.
- Open, save, rename, and delete drawings from the File Manager
- Recent files menu for quick access
- Each file has its own independent undo/redo history
- Export to DXF at any time via the Export Manager
| Shortcut | Action |
|---|---|
Ctrl+Z / Cmd+Z |
Undo |
Ctrl+Shift+Z / Cmd+Shift+Z |
Redo |
Ctrl+A / Cmd+A |
Select all |
Delete / Backspace |
Delete selected entities |
Escape |
Cancel active command or close dialog |
Scroll wheel |
Zoom in / out |
Middle-click drag |
Pan |
Middle-click double |
Fit drawing to view |
Type command names directly into the terminal at the bottom of the screen. Suggestions match letters anywhere in a command's name, not just the start, ranked by match quality and then by how often you actually use each command — the list is mouse-clickable, scrolls to keep the selected suggestion in view while cycling with Tab, and highlights just the matched letters in place.
| Command | Alias |
|---|---|
line |
l |
polyline |
pl |
circle |
c |
arc |
a |
rectangle |
rec |
ellipse |
el |
spline |
spl |
text |
t |
move |
m |
copy |
co |
rotate |
ro |
mirror |
mi |
scale |
sc |
offset |
o |
trim |
tr |
extend |
ex |
fillet |
f |
chamfer |
cha |
delete |
del |
Use Tab to cycle through autocomplete suggestions. Use the Up/Down arrow keys to navigate command history.
- Canvas — full-screen 2D drawing area with live coordinate display
- Command terminal — type commands, enter values, view command history
- Toolbar — one-click access to common draw and edit tools
- Layer Panel — manage all layers in the drawing
- Properties Panel — view and edit properties of the selected entity
- Hatch Manager — browse the hatch pattern library and upload custom
.patpattern files - File Manager — open, save, and manage drawings stored locally
- Print Manager — configure page size, scale, and print or export to PDF; choose a print style — Default (full color), Monochrome (solid black ink), or Blueprint (white ink on a Prussian-blue page with a reference grid)
- Dimension Styles — configure arrow size, text height, and extension line offsets
- Dark / Light theme — toggle between themes; preference is saved across sessions
KulmanLab is focused on 2D drafting. The following are outside its current scope:
| Capability | Status |
|---|---|
| 3D modeling (solids, surfaces, meshes) | Not supported |
| Block definitions and INSERT references | Parsed on import but not rendered |
| Hatch export to DXF | Hatches can be drawn, imported, and saved to .json, but are not written to exported DXF files yet |
| Xrefs (external references) | Not supported |
| Paper space / multiple layouts | Single model space only |
| Associative dimensions | Dimensions are static; not linked to geometry |
| Attributes (ATTRIB / ATTDEF) | Not supported |
| Chamfer on arcs or curved polyline segments | Not supported — Chamfer is line/straight-segment only; Fillet handles arcs and curved segments |
| Mobile / touchscreen use | Desktop browsers only |
| Collaborative real-time editing | Not supported |
| Cloud storage or sync | Drawings are local to your browser |
| Parametric or constraint-based modeling | Not supported |
KulmanLab is a good fit if you:
- Need a quick, capable 2D CAD tool without installing software
- Work with DXF files for CNC machining, laser cutting, or fabrication
- Want to sketch, annotate, or review a technical drawing on any desktop browser
- Need a lightweight browser-based tool for simple DXF editing tasks
- Prefer a tool where your files never leave your computer
KulmanLab is not the right tool if you:
- Need 3D modeling or solid/surface design
- Rely on blocks, xrefs, or parametric constraints
- Need to work on a tablet or phone
- Require multi-user collaboration on shared drawings
| Technology | Role |
|---|---|
| Angular 21 | Component framework and application structure |
| TypeScript | Strongly typed language throughout the codebase |
| Canvas 2D API | All drawing and rendering — no WebGL |
| Angular Material | UI components (panels, dialogs, buttons) |
| RxJS | Reactive state and event management |
| IndexedDB | Local drawing persistence |
All geometry algorithms — snap, intersection, hit testing, DXF parsing, DXF serialization — are implemented in-house with no external CAD libraries.
npm install
npm run dev # dev server at http://localhost:4321
npm run build # production build → dist/
npm run preview # preview the production build locallyAlways build before deploying — Firebase serves whatever is in dist/:
npm run build && firebase deploy --only hostingDocs are part of the same Astro site under src/content/docs/ and are served at /docs.
MIT