Repository navigation
Community poll: what should I build next in dxf-render / dxf-vuer?Β #8
Description
π³οΈ Community poll: what should we build next in dxf-render / dxf-vuer / dxf-react / dxf-lit?
Hey everyone! The dxf-render engine and its framework wrappers β dxf-vuer (Vue 3), dxf-react (React 18+) and dxf-lit (a <dxf-viewer> Web Component usable from Angular / Svelte / vanilla) β share one long roadmap, and I'd love to hear from you which features matter most for your use cases.
Most features land in the shared engine (and the dxf-interaction layer) and ship across all three wrappers at once, so your vote counts no matter which one you use.
- Leave a comment with your top 3 features (just paste the IDs, e.g.
R-1, I-1, UI-3). - Briefly describe your use case β it helps us prioritize features that solve real problems.
Viewing only for now β DXF editing is explicitly out of scope.
π¨ Rendering β more DXF coverage
New entity types
- R-1 Β· IMAGE / WIPEOUT β raster images embedded in DXF (parser ready, needs render)
- R-2 Β· 3DSOLID β ACIS solids (at least wireframe / bounding box)
- R-3 Β· VIEWPORT β render model-space content inside paper-space viewports
- R-4 Β· TABLE (ACAD_TABLE) β tables with cells and styles
- R-5 Β· TOLERANCE β GD&T feature control frames
βοΈ R-6 Β· REGION β 2D regions, rendered by borrowing the bounding HATCH's boundary edges (done in dxf-render 1.6.0)
Existing entity improvements
- R-7 Β· SHX fonts β AutoCAD SHX support (conversion or custom parser)
- R-8 Β· Vertical text β TEXT/MTEXT with vertical flow direction
- R-9 Β· Bidirectional text β correct RTL ordering (Arabic, Hebrew)
- R-10 Β· Full DIMSTYLE coverage β all DIMSTYLE variables
- R-11 Β· Full MLINESTYLE β fills, end caps, joints
- R-12 Β· Gradient HATCH β gradient fills (currently solid + patterns only)
- R-19 Β· CJK / Unicode font fallback β fallback chain (e.g. Noto Sans SC/JP/KR) in glyph triangulation; today unknown glyphs render as
? - R-20 Β· Draw order (SORTENTSTABLE) β honor source order / SORTENTSTABLE so thick polyline / SOLID meshes can sit above thin lines
- R-21 Β· MTEXT
\Tand\Ainline codes β character tracking (\T<n>;) and baseline shift (\A<n>;) for inline sub/superscript; parser currently swallows them with no visual effect
Paper Space / Layouts
- R-13 Β· Layout switching β toggle between Model Space and Paper Space
- R-14 Β· Title blocks & sheets β borders, title blocks, sheet scales
- R-15 Β· Layout selector prop/component
DWG support
- R-16 Β· DWG parsing β DWG β DXF via WASM lib (LibreDWG / ODA File Converter) or a native binary parser
- R-17 Β· Format auto-detection β detect DWG/DXF by file signature and handle transparently
- R-18 Β· DWG version coverage β R14 / 2000 / 2004 / 2007 / 2010 / 2013 / 2018
β‘ Performance & scalability
- P-1 Β· Streaming parser β incremental parsing for large DXFs (>50 MB)
- P-2 Β· Level of Detail (LOD) β geometry simplification at low zoom
- P-3 Β· Frustum culling β skip off-screen objects
- P-4 Β· GPU instancing β
InstancedMeshfor mass INSERT blocks - P-5 Β· Lazy block loading β defer rendering blocks outside viewport
- P-6 Β· Memory optimization β BufferGeometry reuse, proper dispose on file switch
- P-7 Β· Progressive rendering β show partial scene during load
π§ Navigation & interaction
Camera
- N-1 Β· Minimap β overview navigator in the corner
- N-2 Β· Named views navigation β jump to VPORT / Named Views from DXF
βοΈ N-3 Β· Zoom to selection βviewer.zoomToEntity(handles[])(done in dxf-vuer 2.5.0)
βοΈ N-4 Β· Zoom to layer extents βviewer.zoomToLayer(layerName)+getZoomBoxForLayer()(done in dxf-vuer 2.6.0) - N-5 Β· Navigation history β undo/redo camera positions
- N-6 Β· Animated transitions β smooth camera tweens on fit/zoom
Measurements & info
βοΈ I-1 Β· Distance measurement tool β ruler between two points (done in dxf-vuer 3.0.0)
βοΈ I-2 Β· Area measurement β closed region (done in dxf-vuer 3.0.0)
βοΈ I-3 Β· Angle measurement (done in dxf-vuer 3.0.0)
βοΈ I-4 Β· Snap to geometry β vertices, midpoints, centers (done in dxf-vuer 3.0.0)
βοΈ I-5 Β· Entity inspector β entity-click event with { handle, type, layer, text?, entity?, association? } (done in dxf-vuer 2.5.0)
βοΈ I-6 Β· Attribute search β findEntitiesByText(dxf, query) across TEXT/MTEXT/ATTRIB/ATTDEF/DIMENSION/MULTILEADER (done in dxf-render 1.4.0)
βοΈ I-7 Β· Search by layer / type β findEntitiesByLayer(dxf, layerName) and findEntitiesByType(dxf, type | type[]) return handles, symmetric with findEntitiesByText (done in dxf-render 1.5.0)
Selection
βοΈ S-1 Β· Click to select β pickingEnabled prop, entity-click event, built-in highlight overlay (done in dxf-vuer 2.5.0)
βοΈ S-2 Β· Rectangle selection β marquee select (done in dxf-vuer 3.0.0)
βοΈ S-3 Β· Layer hover highlight β emphasize all entities on layer hover (done in dxf-vuer 3.0.0)
- S-4 Β· Spatial association heuristic β heuristic association of leader/dimension to the nearest geometry pointed to by the arrow (optional flag, experimental β DXF does not store this association)
βοΈ S-5 Β· Precise selection highlight β highlight by real entity geometry instead of the entity's bounding box (done in dxf-vuer 3.0.0)
βοΈ S-6 Β· ACAD_GROUP associations β emitgroupassociations from the ACAD_GROUP dictionary (requires OBJECTS-section parsing) (done in dxf-render 1.7.0)
Bonus shipped in dxf-render 1.4.0 / dxf-vuer 2.5.0 (not originally in the poll): Semantic associations β
buildAssociations(dxf)derives MULTILEADER, LEADERβTEXT (DXF 340), INSERT+ATTRIB and DIMENSION groups strictly from DXF data; events and the built-in highlight automatically expand to all members.
Bonus shipped in dxf-render 1.6.0 (not originally in the poll): Standard arrowhead blocks β all 18 standard AutoCAD arrowhead names (closed-filled, open, datum, dots, ticks, boxes, origin, integral, none) honoured at DIMENSION endpoints and LEADER tips via DIMSTYLE codes 342/341 and
$DIMBLK. MTEXT scoped formatting β inline{ β¦ }push/pop format scope plus\W<n>;/\Q<n>;width/oblique runs. DIMSTYLE accuracy βDIMCLRD/DIMCLRE/DIMCLRT,DIMTIH/DIMTOH,DIMDEC/$DIMADEC, architectural fractions, radial state machine, outside-arrow flip for short dim lines. STYLE.widthFactor, correct binary-DXF rejection, layer flag bit 2.
πΌοΈ UI & UX
Panels
βοΈ UI-1 Β· Properties panel β details of the selected entity (done in dxf-vuer 3.0.0)
- UI-2 Β· Blocks panel β list all INSERT blocks with navigation
- UI-3 Β· Text/dim style panel β overview of styles in use
- UI-4 Β· Extended statistics β charts of entity/layer distribution
- UI-5 Β· Breadcrumbs β Layout > Block > Entity path
- UI-6 Β· Context menu β right-click β Zoom to / Properties / Copy coords
βοΈ UI-7 Β· Rulers β horizontal & vertical rulers around the canvas with adaptive tick scale, pan/zoom-synced ticks, optionalshowRulers/rulerUnitsprops and a cursor marker (done in dxf-vuer 3.0.0)
Layer panel
βοΈ L-1 Β· Layer search filter β text filter by layer name (done in dxf-vuer 2.4.0)
βοΈ L-2 Β· Layer grouping β auto-group by prefix (A-WALL, A-DOOR β group A) (done in dxf-vuer 3.0.0)
- L-3 Β· Drag-and-drop layer order
βοΈ L-4 Β· Persist visibility β remember layer state across sessions (localStorage) (done in dxf-vuer 2.6.0) - L-5 Β· Visibility presets β quick configs ("architecture only", "electrical only")
Toolbar
- T-1 Β· Button groups β visual separators between groups
Styling
βοΈ UI-8 Β· Stable class hooks β single-class, low-specificity selectors (e.g. .dxf-viewer-toolbar) documented as public CSS hooks so user CSS / Tailwind @apply reliably wins over defaults (done in dxf-vuer 3.0.0)
βοΈ UI-9 Β· classes prop (Headless UI-style) β a map of class overrides per named element: { toolbar, layerPanel, loadingSpinner, errorOverlay, β¦ }; covers Tailwind / utility-CSS users without going full headless (done in dxf-vuer 3.0.0)
π€ Export & integration
Export
- E-1 Β· SVG export β vector export of visible layers
- E-2 Β· PDF export β preserving scale and layers
- E-3 Β· PNG export options β resolution, DPI, transparent background
- E-4 Β· Copy to clipboard β screenshot current view
- E-5 Β· Print layout β print prep with border and scale
- E-6 Β· Print-friendly CSS β
@media printstyles
Loading
βοΈ E-7 Β· Load from ArrayBuffer / Blob β file-storage integration (done in dxf-vuer 2.4.0)
- E-8 Β· Authenticated URL loading β custom headers on URL fetch
- E-9 Β· .dxf.gz support β auto gzip decompression
βΏ Accessibility
βοΈ A-1 Β· ARIA attributes β aria-label on all controls (done in dxf-vuer 2.6.0)
-
A-2 Β· Keyboard navigation β Tab/Enter/Space across UI
βοΈ A-3 Β· Keyboard pan/zoom β arrows to pan, +/- to zoom (done in dxf-vuer 2.6.0) -
A-4 Β· Screen reader announcements β loading, errors, layer changes
-
A-5 Β· Focus management β visible focus, correct tab order
βοΈ A-6 Β· prefers-reduced-motion β disable TAA and transitions (done in dxf-vuer 2.4.0) -
A-7 Β· High contrast mode β Windows High Contrast support
π§© API & extensibility
DXFViewer
βοΈ API-1 Β· v-model for layer visibility β two-way binding (done in dxf-vuer 3.0.0)
βοΈ API-2 Β· Events: entity-click / entity-hover β with entity data and association (done in dxf-vuer 2.5.0)
βοΈ API-3 Β· Programmatic API β viewer.zoomToEntity(handles[]), viewer.highlight(handles[]), viewer.clearHighlight(), viewer.getAssociations(), viewer.findAssociationsByHandle(), viewer.getPickingIndex() (done in dxf-vuer 2.5.0)
- API-4 Β· Plugin system β register custom entity renderers
Other
- API-5 Β· Headless mode β server-side rendering (Node + headless GL) for thumbnails
βοΈ API-6 Β· React wrapper βdxf-reacton top of dxf-render (done in dxf-react 0.1.0)
βοΈ API-7 Β· Web Component on Lit β<dxf-viewer>custom element built with Lit; one package usable from React/Angular/Svelte/vanilla via native DOM (props as attributes, events asCustomEvent, slots like Vue) (done in dxf-lit 0.1.0)
β Quality
- Q-1 Β· Visual snapshot tests β reference DXF vs. rendered image diff
- Q-2 Β· Parser fuzz testing β resilience to malformed DXF
- Q-3 Β· Performance benchmarks β 1 MB / 10 MB / 50 MB files
- Q-4 Β· E2E tests β Playwright for core scenarios
- Q-5 Β· Storybook / Histoire β interactive component catalog
- Q-6 Β· API Reference β auto-generated from TSDoc
- Q-7 Β· Reference DXF suite β compatibility across AutoCAD / BricsCAD / LibreCAD / QCAD
- Q-8 Β· Migration guide β upgrade documentation between major versions
- Q-9 Β· Integration examples β Nuxt, Vite, webpack, CDN starter recipes
- Q-10 Β· Compatibility report β automated render diff against an AutoCAD reference set
π‘ Missing something?
If your must-have isn't listed, just comment below!
Thanks for helping shape the roadmap!
Activity
snakefood3232 commentedon Apr 22, 2026
Iβm working with large-format CAD exports that often exceed 50MB, so P-1 (streaming parser) would unblock our pipeline on DXFs that currently time out or crash. Iβd implement an incremental SAX-style tokenizer that yields entities as chunks arrive, keeping the existing API surface intact. Can have a PR up within 48 hours. Iβve built streaming parsers for SVG and STEP files in the past, so the pattern is familiar.
arbaev commentedon Apr 22, 2026
Hi @snakefood3232! Thanks a ton for jumping in β SVG/STEP streaming experience is exactly the right background for this.
A few things before you cut a PR, so we're aligned:
One caveat: parseDxfAsync takes a string today, so the whole file is already in memory before we start. True streaming wants ReadableStream or similar β worth thinking about whether the input type should grow. Curious how you'd approach it.
Progressive consumption (onEntity callback, async iterable) is interesting but out of scope for v1 β let's prove the streaming path works behind the existing API first.
Tokenizing is maybe 20% of the work β the rest is not breaking existing behavior. If you want to land this incrementally (streaming scanner first, then section-by-section), that's very welcome and much easier to review than one big PR.
Want to make sure we're fixing the thing you're actually hitting.
No rush on 48h β quality > speed. Looking forward to the sample!