An Interactive Design Tool for Continuous Flow Microfluidic Devices - 3DuF.org
The design of microfluidic Lab on a Chip (LoC) systems is an onerous task requiring specialized skills in fluid dynamics, mechanical design drafting, and manufacturing. Engineers face significant challenges during the labor-intensive process of designing microfluidic devices, with very few specialized tools that help automate the process. Typical design iterations require the engineer to research the architecture, manually draft the device layout, optimize for manufacturing processes and manually calculate and program the valve sequences that operate the microfluidic device. The problem compounds when the devices are intended for executing biological assays where engineers not only have to test the functionality of the chip but are also required to optimize them for robust performance. In this paper, we present an interactive tool for designing continuous flow microfluidic devices. 3DuF is the first completely open-source interactive microfluidic system designer that readily supports state-of-the-art design automation algorithms. Through various case studies, we show 3DuF can be used to reproduce designs from literature, provide metrics for evaluating microfluidic design complexity and showcase how 3DuF is a platform for integrating a wide assortment of engineering techniques used in the design of microfluidic devices as a part of the standard design work-flow.
Sanka, Radhakrishna, Joshua Lippai, Dinithi Samarasekera, Sarah Nemsick, and Douglas Densmore. "3DμF - Interactive Design Environment for Continuous Flow Microfluidic Devices." Scientific Reports 9, no. 1 (December 2019).
https://doi.org/10.1038/s41598-019-45623-z
Prerequisites:
- Node.js 16+
- npm
Run with CLI on the current branch (Neptune_Render):
git clone git@github.com:CIDARLAB/3DuF.git
cd 3DuF
git switch Neptune_Render
Use the command that matches your situation:
-
First-time setup (or when dependencies are missing):
npm run start3dufThis command checks required packages, installs missing dependencies, and starts the dev server. If you prefer a single command workflow, you can always use
npm run start3duffor both first-time and daily development. -
Daily development (fast start):
npm run vue-serveUse this when dependencies are already installed.
-
Clean reinstall from lockfile:
npm ci npm run vue-serveRun
npm cidirectly in the terminal (not inside annpm runscript).
Then open the URL printed by Vue CLI (typically http://localhost:8082).
Note: when running npm run vue-serve, Vue CLI may print:
Note that the development build is not optimized. To create a production build, run npm run build.
This is expected in development mode.
For production builds in this repository:
- Use
npm run build(recommended). This runs the Vue CLI production build. - Use
npm run vue-buildif you prefer the explicit Vue CLI command.
- Pan Canvas:
middle mouse buttonandarrowkeys - Reset Canvas View:
Fkey - Activate Select Tool/ Deselect Selected Components:
Esc - Activate Component Copy Mode:
ctrl+C->ctrl+V - Undo Last Edit:
ctrl+Z - Select All:
ctrl+A - Save JSON file:
ctrl+ S
Instructions for installation, build, and test are in the wiki.
Use the buttons in the menu (on the left) to select a feature type to place. The gear-shaped button will bring up a menu that will allow you to adjust the parameters for that feature type.
Click on a layer to select it. This will cause new features to be placed only into that layer. The currently-selected layer's color will be reflected in the button color of any selected feature.
Left click on the device canvas (on the right) to place a feature. Some features (such as Channels and Chambers) are determined by two points, and are placed by clicking and dragging.
Right click on a feature to select it. Right click and drag to select multiple features at once.
If a layer has been selected, only features on that layer can be selected this way.
Left click on any selected feature to bring up a dialog box which will allow you to edit its parameters. If more than one feature is selected, parameters will be inherited by all currently selected features of the same type as the one you clicked.
Fabricated chips need a closed cover so fluid can flow inside channels instead of open grooves. Above the Export buttons, use the ALL / PORTS toggle (same interaction pattern as FLOW / CTRL):
- PORTS keeps only the current flow (blue) and control (red) port circles and hides every other component and connection, so you can preview the cover layer.
- ALL restores the full design.
Use the sidebar Export section (not a separate Save menu) to download the current design:
- JSON · 3DuF — default interchange format. Reopen and share designs in 3DuF.
- DXF — CAD sketch for AutoCAD, Fusion 360, and other CAD / CAM tools. Multilayer biochips export one DXF per layer.
- SVG — vector graphics for documentation, illustrations, and laser-cutting prep.
- GCode — CNC / router programs for flow-layer geometry. Not available for multilayer biochips (export each layer as DXF or SVG instead).
Each format downloads as a zip that includes the full design and a matching ports-only file for cover-layer fabrication.
You can also save JSON with ctrl+S.
Use Import (drop zone or file picker, then Confirm) to load a 3DuF JSON or DXF file. You can also drag and drop a saved JSON onto the device canvas.
For DXF workflows:
- Use
Edit Borderto import a DXF border/outline into the current design canvas. - The main design interchange format for full-device load/save remains 3DuF JSON.
Neptune LFR user-designed parts (DIYCOMPONENT) load as built-in black-box placeholders, so they remain visible without a custom library entry.
As 3DuF continues to become a core component of the Microfluidics CAD Ecosystem, we have incorporated the ability to generate component dimensions, port locations, and default dimensions for all parametrically generated components supported by 3DuF.
The instructions for starting this server are as follows:
docker build -f primitives-server.Dockerfile -t primitives-server:latest .
docker run -p 6060:6060 primitives-server
This will enable the API on port 6060. This can be verified by either going to http://localhost:6060 or by running the following command:
curl http://localhost:6060
Alternatively you can install the dev version of the library if you want to debug it locally. (Primitives Server)
npm ci
cd src/server
npm ci
npm run dev
Error Logging and Tracking enabled by TrackJS
This branch was maintained and updated with new features in 2026 by Yangruirui (Ron) Zhou and Eric Xie.
Server deployment for this 2026 maintenance/update cycle was completed by Woo Zhong Han.
BSD 2-Clause License
Copyright (c) 2026, CIDAR LAB All rights reserved.
See LICENSE for more information.


