Interactive and accessible optical system design for tabletop optics.
This software is in development and has not yet stabilized. Do not expect backwards compatibility with previously-saved designs.
- Go to https://kmdouglass.github.io/cherry/.
- Select one of the examples from the menu at the top of the screen.
- Open one or more of the output windows such as the spot diagram or paraxial summary.
- Vary any of the specs, such as surface radius of curvature, and watch the outputs change.
If you have a question about how to use Cherry, then please do not hesitate to start a Q&A discussion. Feature requests can be made through the discussions space as well.
To report a bug, please open an issue with the Bug label.
Instructions for developing the app and library may be found in CONTRIBUTING.md.
Cherry is a tool for researchers, experimentalists and optical designers working on tabletop setups that answers the following questions:
- What is the effect of changing/rotating/tilting a component in an optical assembly such as a microscope?
- What are the basic parameters of this lens or system, such as focal length and system size?
- How can I easily share a design with others?
Cherry focuses on accessibility and interactivity to answer these questions effectively and within a research laboratory setting. The software is accessible on any device with a browser, including a smartphone. Calculations are performed and their results displayed immediately whenever a system parameter changes.
Cherry was designed primarily for microscopists, researchers, and educators working in optics labs on tabletop setups. As such, its goals are different from other optics software packages.
- If you want an open source and comprehensive Python tool for general purpose optical design, including non-sequential ray tracing, consider using Optiland.
- If you want an open source, practical, and lightweight ray tracing system in Python, consider RayOptics, which heavily inspired Cherry's initial design.
- If you want to perform physical optics propagation using an open source Python tool focused on telescope design, consider POPPY.
- If you want non-sequential ray tracing for graphics rendering, then Cherry (and probably optical design software in general) is not for you.
- If you want professional lens and system design capabilities, consider industry standards such as CODE V, Zemax OpticStudio, OSLO, or FRED.
Cherry might be for you if:
- you want an interactive tool that performs basic optical system calculations, produces real-time visualizations, and allows you to easily share designs with others,
- you are an educator and want a free application for teaching optical engineering concepts, or
- you code in Rust and want a library for optical systems design.
- Decenters/rotational offsets on surfaces
- Lens view for manipulating systems by lens instead of by surface
- Decenters/rotational offsets on lenses
- Help Wanted Annotate coordinate axes, the optical axis, and other elements in the cross-section view
- Galvo plus scan lens example
- Encode designs into URLs and enable sharing via tiny URLs
- Cooke triplet example
- Help Wanted mdbook to serve as the app's user documentation
- Surface coatings
- Systems with beam splitters
- Lens library/explorer
- Paraxial Gaussian beam propagation
- Backwards compatibility with saved designs
- Help Wanted 3D views
- Help Wanted Fuzzy search for materials
- Paraxial surface types
- Cardinal lens surface type for ideal objective models
- Microscope objective example (see https://opg.optica.org/josaa/fulltext.cfm?uri=josaa-32-11-2082)
Copyright (c) 2024-2026, ECOLE POLYTECHNIQUE FEDERALE DE LAUSANNE, Switzerland, Laboratory of Experimental Biophysics (LEB).
The cherry-rs library is licensed under the GNU Lesser General Public License v3.0 or later (LGPL-3.0-or-later). The compiled cherry GUI binary is licensed under the GNU General Public License v3.0 or later (GPL-3.0-or-later).
- Refractive Index Database - Material data
- Laikin, Lens Design, 4th ed., CRC Press, p. 251 (2007), https://doi.org/10.1201/9780849382796 - F-theta scan lens example
- Negrean and Mansvelder, Optimal lens design and use in laser-scanning microscopy, Biomed. Opt. Express 5, 1588 (2014), https://doi.org/10.1364/BOE.5.001588 - Galvo + scan lens example
