Fry3DX (Frying 3D Extreme): a 3D modeller that does what you'd expect. Pick a tool, click, drag.
  • C++ 90.5%
  • GLSL 6%
  • CMake 1.7%
  • Python 1%
  • Lua 0.5%
  • Other 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-21 17:08:13 +02:00
.github/workflows Fuzz test (tests/fuzz_test.cpp): random shapes through random edits and combines, broken scene and model files; in check and CI. Fixed what it found: Manifold given repeated or non-finite points (crash; the BSP takes those now), a damaged file's non-finite numbers (now 0), extruding both sides of a plane (NaN) 2026-10-21 08:38:39 +02:00
android Phones: sideways only; back from the background the Vulkan surface is made again (it was lost), the work saved on the way out and carried on with on the next start if the phone closed it 2026-10-21 00:16:22 +02:00
branding A new logo: a cube frying in a cast-iron pan, on a bevelled tile; tools/branding.py makes every size 2026-10-20 16:48:57 +02:00
cmake The crash screen in the app's own look (logo with smoke, the report in a well, Open it again / Copy / Report it on GitHub); sculpt mode's panels and status bar say what sculpting does; fry_scriptpanel; twelve new previews on the site (sculpt, materials, layout, render, scripts, light and the crash screen added) 2026-10-20 18:03:18 +02:00
content Plug-in mouse tools (fry.tool{name, help, click(at, normal, object)}): listed in the Toolbox, a click in the view calls it (one undo); Stamp comes as an example; the Plug-ins window: look for one, make your own copy of one that comes with Fry3DX 2026-10-21 08:10:24 +02:00
docs Camera: fly or orbit (View > Camera, Shift+C, kept): orbiting turns round what you look at on a right drag and the wheel zooms; the hints follow it; the site's 0.8 (getting round, smoother); fry_where for trying it 2026-10-21 10:02:04 +02:00
engine Close up no longer falls apart: how near the nearest thing is goes by each object's box (not a ball round it: inside a big or long flat one's ball it came to nothing, the near plane with it, and surfaces fought each other in blocks, jittering, the sky and grid gone), the near plane a quarter of the way to it; reference pictures count too. Grid lines meet exactly where their pieces join (no crawling dots): a streak's ends each face the eye, each its own width; pieces a quarter further from the eye each. The depth pre-pass waited on before the scene uses it; the same depth in both (invariant) 2026-10-21 17:08:13 +02:00
src Close up no longer falls apart: how near the nearest thing is goes by each object's box (not a ball round it: inside a big or long flat one's ball it came to nothing, the near plane with it, and surfaces fought each other in blocks, jittering, the sky and grid gone), the near plane a quarter of the way to it; reference pictures count too. Grid lines meet exactly where their pieces join (no crawling dots): a streak's ends each face the eye, each its own width; pieces a quarter further from the eye each. The depth pre-pass waited on before the scene uses it; the same depth in both (invariant) 2026-10-21 17:08:13 +02:00
tests Fuzz test (tests/fuzz_test.cpp): random shapes through random edits and combines, broken scene and model files; in check and CI. Fixed what it found: Manifold given repeated or non-finite points (crash; the BSP takes those now), a damaged file's non-finite numbers (now 0), extruding both sides of a plane (NaN) 2026-10-21 08:38:39 +02:00
tools macOS (Apple silicon and Intel): Fry3DX.app with its content in Resources and MoltenVK in Frameworks, OpenGL 4.1 when there's no Vulkan; the program's own path, memory, OS and CPU names on a Mac; files dropped on the window (and opened from the Finder) open; presets macos-arm64/macos-x64, a CI job, tools/package.py macos makes one universal app 2026-10-20 17:36:24 +02:00
.gitignore Getting round: the wheel closes in on what's under the mouse (an object, the ground; the sky: on that way), the whole camera with it, so far from everything it no longer creeps at a spot in the air; arrow keys move along the ground, Page Up / Down up and down (a flat view: closer, further), Shift faster; fry_hold and fry_wheel to try them; crash dumps and a.out out of the repository and ignored 2026-10-21 09:19:13 +02:00
CMakeLists.txt 0.8.0: version, README and site (what's new, three icons); the new commands in the menus too (history, select similar/loop/ring, spin, crease, slide, mirror editing, measure, workspaces, text, search), with your own keys shown; plug-in tools finger-sized on phones 2026-10-21 08:56:51 +02:00
CMakePresets.json macOS (Apple silicon and Intel): Fry3DX.app with its content in Resources and MoltenVK in Frameworks, OpenGL 4.1 when there's no Vulkan; the program's own path, memory, OS and CPU names on a Mac; files dropped on the window (and opened from the Finder) open; presets macos-arm64/macos-x64, a CI job, tools/package.py macos makes one universal app 2026-10-20 17:36:24 +02:00
LICENSE Fry3DX 0.5: builds for Windows, Linux and Android, a phone layout, Apache 2.0 2026-10-19 22:05:01 +02:00
README.md Camera: fly or orbit (View > Camera, Shift+C, kept): orbiting turns round what you look at on a right drag and the wheel zooms; the hints follow it; the site's 0.8 (getting round, smoother); fry_where for trying it 2026-10-21 10:02:04 +02:00
shell.nix Fry3DX 0.5: builds for Windows, Linux and Android, a phone layout, Apache 2.0 2026-10-19 22:05:01 +02:00

Fry3DX

Frying 3D Extreme — a 3D modeller that does what you'd expect.
Pick a tool, click, drag. On Windows, macOS, Linux and your phone.

Website · Download · Build it · made by Nexoniarz

Fry3DX

Why

Because the well-known modellers suck at being easy: a wall of panels, shortcuts nobody would guess, modes inside modes. Fry3DX is built the way people think — a toolbox like GIMP's, plain words on every button, tooltips everywhere — and keeps the useful parts (rounding, mirroring, combining, holes for screws, checks for 3D printing) one click away.

And it works on a phone. Not a viewer: the whole modeller, with big buttons and fingers.

Download

From Releases:

Windows (10 and 11, x64) Fry3DX-…-windows-x64.zip: unpack, run fry3dx.exe
macOS (13.3 and newer, Apple silicon and Intel) Fry3DX-…-macos.zip: unzip, open Fry3DX.app (the first time: right-click it, Open)
Linux (any distro from 2022 on, x64) Fry3DX-…-linux-x64.AppImage: make it executable, run it. Or the .tar.gz
Android (8.0 and newer, 64-bit, Vulkan) Fry3DX-…-android-arm64.apk: open it on the phone to install

Needs a graphics card (or phone) with Vulkan; on a PC, OpenGL 4.6 works too. On a Mac, Vulkan comes inside the app (MoltenVK, on Metal), and OpenGL 4.1 is the fallback.

What it does

Five tabs along the top: Model, Paint, Layout, Render, Print (Ctrl+1 to 5).

Finding things

  • Any command by name: F3 or Ctrl+Space, type a few letters. Round the mouse: hold Space for the tools, Shift+Space for the views. Give any command your own key (Help > Keys and mouse). Undo history (Edit > Undo history): go back to any step. Workspaces: the panels as you had them, kept under a name.

Making shapes

  • Shapes that stay editable: cube, rounded cube, plane, circle, cylinder, tube, cone, pyramid, sphere, capsule, torus, wedge, stairs, arch, and starter models (table, chair, shelf, barrel, bottle, pillar, door frame, crate). Their sizes stay changeable in Properties.
  • Draw shape (D): click an outline on the ground, on a side view's plane, or straight on any face of another object: a new part standing on it, added to it, or cut into it.
  • Move, turn, scale (W, E, R): the arrows turn with the object. Scale keeps the other side where it is; Shift scales both sides at once. Ctrl snaps: to steps, or to points and the middles of edges and faces.
  • Exact sizes: type a number while dragging (move, turn, scale, extrude, inset, round edges) and Enter for exactly that. Dimensions in Properties; measure anything (View > Measure). Drawing a shape shows each line's length: type one for exactly that, Shift holds it to 15° steps.
  • 3D text from any font (Add > Text). Spin: an outline turned round an axis into a vase or a wheel, or rising into a screw thread. Import STL, OBJ, 3MF, glTF and GLB (Ctrl+Shift+O).
  • Round, smooth, mirror any object, changeable any time, baked in when you like.
  • Materials: gold, chrome, steel, wood, ceramic, rubber and more, or how metal and rough it is; shown in the view (Solid too), exported with it. Your own: "Save its look as a material" in the picker keeps one for every file.

Editing the shape (Tab, or double-click)

  • Points, edges, faces (1, 2, 3). Extrude (X), inset (I), round edges (B), loop cut (C), knife (K), cut in four, smooth, merge (M), make a face, flip, separate (P), smooth points, push out / pull in along the surface (Alt+S), bridge two faces with a tunnel, edge slide (Alt+G).
  • Crease (Shift+E): picked edges stay sharp when the shape is smoothed. Mirror editing: both sides change together. Select similar (Shift+G), loops and rings.
  • Soft selection (Shift+O): points near what you move follow it, less the further they are; the wheel while dragging sets how far (Blender's proportional editing, Maya's soft select).
  • Hole (O): round (M2–M8 screw sizes ready), rectangle, triangle or hexagon (M2–M8 nut sizes, with room for prints); all the way through, a pocket, or only its outline as a new face.
  • Selecting: click, box, brush or lasso. Shift+click a whole loop, Shift+Ctrl+click an edge's ring, Ctrl+click adds or takes one.

Whole objects (the Object menu)

  • Add together, take one out of another, keep only where they overlap: exact (Manifold) and always closed, so always printable (Ctrl+Shift+ and Ctrl+Shift−).
  • Cut out, editable: the cutters stay objects. Move one, turn it, change its shape, and the hole follows; they go with what they cut. Apply makes it for good.
  • Copies in a row, round a circle, or along a path (turning as it turns); make it thick (a surface gets a back, a solid goes hollow); join objects; join flat faces.
  • Layers with folders inside folders, drag and drop, hide and lock whole groups, and a button on every row that brings the camera to it. Show only the selected (/ or Shift+H; again: everything).

Sculpting (the Paint tab's other side: Tab)

  • Raise, puff out, smooth, flatten, pinch and grab the surface (1 to 6); Ctrl goes the other way, Shift smooths, X does the same on both sides. A shape with too few points is made finer first, keeping its shape.

Painting

  • Paint on the model or on its flat picture, on both sides at once, or only inside a stencil you drag round an area. Paste any picture (Ctrl+V): it goes on like a sticker that bends over edges and corners; Enter locks it as a layer, clicking it in the Picture panel unlocks it again.
  • Layout tab: move, turn and size the flat frames of the surface yourself; the paint follows.

Seeing it

  • Getting round, as in games, Unreal or Unity: right drag turns the camera where it stands, and while it's held W A S D move where you look (Q / E: down, up). The arrow keys move any time (Page Up / Down: down and up), the wheel goes forward and back, Shift + wheel sets how fast it all goes. Alt + right drag orbits round what's picked; middle drag pans. Rather orbit, as in Blender? Shift+C (or View > Camera) switches: right drag turns round what you look at and the wheel zooms.
  • Solid view for modelling, Rendered with a real sky, sun and soft shadows (Z). Wireframe (Shift+Z), X-ray (Alt+Z). The Render tab: the sun, sky, ground, brightness, shadows, glow; F12 saves a picture of just the view.
  • Reference pictures for the front, side and top views, see-through, shown only in their own view if you like.

3D printing (the Print tab)

  • Your printer's plate in the view (Prusa, Bambu, Creality, Elegoo, Anycubic, or your own), sizes in millimetres, checks for holes and flipped faces with one repair button, overhangs in red, walls too thin in yellow, weight and filament, measuring, lay flat on a face, save 3MF or STL.
  • Size it: by percent, ×½, ×2, inches or centimetres to millimetres, or as big as fits the plate. Slice preview: one layer as the printer makes it, at any layer height.

Scripts (the Script panel, F5)

  • Lua with a fry library: add shapes and change their settings, combine them, move points by a formula, sculpt, set the materials and the sun, make your own materials (fry.material{}). One Ctrl+Z takes back all a script did; an error takes it back itself. Examples in Script > Examples; the ? button lists every function. It can't reach anything outside the scene (no files, no programs).
  • Kept in the file: the Script panel lists the .fry's scripts (new, examples, open, duplicate, rename, remove); they're saved with the model.

Plug-ins (Script > Plug-ins)

  • Scripts that stay loaded: put a .lua in the plug-ins folder and it can add commands to the Add, Object or Script menu (fry.command{name, menu, settings, run}; the settings are asked for in a small form first) and materials to the picker. Turn each on or off in the Plug-ins window, look for one, or make your own copy of one to change. Mouse tools too (fry.tool{name, click}): listed in the Toolbox, a click in the view calls it with the spot. Four come with it: stairs (straight and spiral), scatter copies, stamp (a mouse tool), and more materials.
fry.plugin{name = "Shelves", about = "A bookcase from the Add menu"}
fry.command{name = "Bookcase", menu = "add", settings = {{"shelves", 5}, {"width", 0.8}},
  run = function(s)
    for i = 0, s.shelves - 1 do
      fry.add("cube", {width = s.width, depth = 0.3, height = 0.02}).position = {0, 0, i * 0.35}
    end
  end}

The look: light or dark, or following the desktop (View > Appearance), in Niveus: keys that look like keys, fields set into the panel.

Files

  • .fry: Fry3DX's own file, everything in one, packed small. Autosave in the background, offered back after a crash; Save / Don't save / Cancel when closing. Drop a .fry, a script or a picture on the window to open it.
  • Export: GLB, glTF, FBX (Blender, Unity, Unreal, Maya), OBJ, 3MF, STL, PLY.

On a phone or tablet: everything bigger, the side panels when you want them, a bar of big buttons (undo, redo, Shift and Ctrl that stay down, edit the shape, delete, frame). One finger turns the view (or drags the arrows), two fingers move it and pinch to zoom, holding a finger still is a right-click. Files open and save through the phone's own file picker. It stays sideways, and going to another app and back keeps your work.

F1 in the app lists every key.

Build it yourself

Everything it uses is downloaded while building; you need CMake 3.25+, Ninja, a C++20 compiler (GCC 13+, Clang 17+, Xcode 15+ or clang-cl) and glslc (from shaderc or the Vulkan SDK). On NixOS, shell.nix has it all; on a Mac, brew install cmake ninja shaderc molten-vk.

git clone https://github.com/Nexoniarz/Fry3DX.git && cd Fry3DX
cmake --preset release && cmake --build build/release      # (NixOS: inside nix-shell)
build/release/bin/fry3dx [file.fry]
cmake --build build/debug --target check                     # the tests (after --preset debug)
Preset What
debug, release for working on it
portable a Linux build to hand out: SDL and the C++ library inside the program
windows Windows, cross-built from Linux with clang-cl (how)
macos-arm64, macos-x64 Fry3DX.app for Apple silicon / Intel (both build on either Mac); tools/package.py macos joins them into one app
android the Android library; android/build_apk.py makes the APK (how)

tools/package.py packs builds into the downloads (zip, tar.gz, AppImage, the Mac app). Pushing a tag v* makes GitHub build all of them and put them in a release (.github/workflows/build.yml).

What's where

src/app.cpp the app: panels, tools, the view, touch
src/mesh.*, tools.cpp, cut.cpp polygon meshes and the edits on them (tested without a window)
src/boolean.cpp, modify.cpp combining shapes, thickness, joining flat faces
src/shapes.* the shape library and starter models
src/scene.*, package.cpp objects, folders, materials, the .fry file
src/sculpt.* the sculpting brushes
src/script.* scripts: Lua and the fry library; examples in content/Fry3DX/scripts/
src/export.cpp, print.cpp GLB/glTF/FBX/OBJ/3MF/STL/PLY, checks for printing
src/uv.cpp, sticker.cpp, image.cpp flat layouts, stickers, pictures
engine/ window, Vulkan/OpenGL renderer, UI, files
android/, tools/, .github/ builds and packages
docs/ the website (GitHub Pages); its words are all in docs/content.js
tests/ mesh_test, script_test (every example script runs)

Coming

Animation; textures for materials (wood grain, brushed metal); dynamic detail while sculpting.

Licence

Apache License 2.0. Copyright 2026 Nexoniarz. Sky pictures: Poly Haven, CC0. Fonts: Instrument Sans and JetBrains Mono (SIL Open Font License), DejaVu (its own free licence). Lua: MIT. MoltenVK (in the Mac app): Apache 2.0.