a language for making art using mathematics
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/ISSUE_TEMPLATE Update issue templates Aug 7, 2018
cmake cmake builds libcurv/version.h bug #41 Oct 5, 2018
curvc copyright notice update for 2019 Feb 21, 2019
docs Update index.md Jan 8, 2019
examples picker labels may contain embedded spaces Feb 20, 2019
extern upgrade ordered-map to version 0.8.1 Feb 17, 2019
ideas ideas update Feb 21, 2019
libcurv copyright notice update for 2019 Feb 21, 2019
.gitignore `curv --version` is accurate and precise Jul 27, 2018
.gitmodules live editing, Viewer: preserve picker values across program reload Jan 13, 2019
BUILD.md Update instructions for Ubuntu server Jan 10, 2019
CMakeLists.txt use gl_test to write unit tests for Geometry Compiler Feb 18, 2019
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md Aug 8, 2017
CONTRIBUTING.md Curv no longer depends on the glslViewer project Jun 18, 2018
LICENSE update copyright notices Apr 8, 2018
Makefile fix bug in 'make clean': rm libcurv/version.h Oct 28, 2018
NOTICE copyright notice update for 2019 Feb 21, 2019
README.rst Update README.rst Nov 11, 2018


Curv: a language for making art using mathematics

By Doug Moen <doug@moens.org>

twistor shreks_donut

Curv is a programming language for creating art using mathematics. It's a 2D and 3D geometric modelling tool that supports full colour, animation and 3D printing.


  • Curv is a simple, powerful, dynamically typed, pure functional programming language.
  • Curv is easy to use for beginners. It has a standard library of predefined geometric shapes, plus operators for transforming and combining shapes. These can be plugged together like Lego to make 2D and 3D models.
  • Coloured shapes are represented using Function Representation (F-Rep). They can be infinitely detailed, infinitely large, and any shape or colour pattern that can be described using mathematics can be represented exactly.
  • Curv exposes the full power of F-Rep programming to experts. The standard geometry library is written entirely in Curv. Many of the demos seen on shadertoy.com can be reproduced in Curv, using shorter, simpler programs. Experts can package techniques used on shadertoy as high level operations for use by beginners.
  • Rendering is GPU accelerated. Curv programs are compiled into fragment shaders which are executed on the GPU.
  • Curv can export meshes to STL, OBJ and X3D files for 3D printing. The X3D format supports full colour 3D printing (on Shapeways.com, at least). These meshes are defect free: watertight, manifold, with no self intersections, degenerate triangles, or flipped triangles.

Getting Started

  • To install the software, see BUILD.md.
  • The documentation is here: docs/README.rst.
  • Mailing list: https://groups.google.com/d/forum/curv. You can join the mailing list using your Google account (or you'll be prompted to create an account). If you don't want to have a Google account, then send email to doug@moens.org and I will send you an invitation to join the list.
  • To contribute, see CONTRIBUTING.md.

Hardware Requirements

Two platforms are currently supported: Linux and Macintosh. I currently test on Ubuntu LTS and MacOS 10.11. Windows support is planned but not scheduled.

Curv uses OpenGL 3.2. It requires direct access to a GPU made by Intel, AMD or Nvidia, using the vendor supplied GPU driver. On Macintosh, you just need MacOS 10.7 or later. On Linux, the GPU needs to be modern enough to be supported by the latest driver version from the GPU vendor. Any GPU from 2012 or later will work. Some older GPUs may work: check the list of supported hardware for the driver.

  • On Linux, you have 3 choices:
    • Nvidia has the best GPU hardware. You will need to use the Nvidia closed source driver, not the open source Nouveau driver. Any GPU supported by the latest Nvidia driver will work with Curv. Eg, see this supported hardware list: https://www.geforce.com/drivers/results/137276
    • An Intel GPU, using the Intel supplied open source driver (based on Mesa). Intel is your choice if you want to use a driver that is free software. Any GPU supported by the latest Intel driver will work with Curv. You need Intel HD Graphics -- earlier GPU technology is not supported.
    • An AMD GPU, using the AMDGPU-PRO (closed source) driver, which is only officially supported on Ubuntu LTS, Red Hat EL (not Fedora), and SUSE. Unfortunately, the open source AMD driver (based on Mesa) is too buggy to work with Curv right now. Your choice of Linux distro is very restricted with AMD.
  • If Curv is invoked within a VNC session, then it might not have direct access to GPU hardware. Curv requires a GPU accelerated VNC server. Try TurboVNC combined with VirtualGL.
  • If Curv is run inside a VM, then it might not have direct access to the GPU. You need to ensure that the VM is GPU accelerated.