JS9: astronomical image display everywhere
JS9 brings astronomical image display to your browser and desktop:
  • display FITS images, tables, data cubes, multi-extension files
  • drag and drop FITS files and urls, PNG and JPEG images
  • retrieve and display data from astronomical archives
  • adjust the colormap and data scaling
  • pan, zoom, and blink images
  • perform image arithmetic, Gaussian smoothing
  • blend images and apply RGB image filters
  • configure mouse buttons and movements, touch events
  • create and manipulate geometric regions of interest
  • extend JS9 using plugins and the public API
  • perform data analysis (local and server-side)
  • configure and control JS9 via HTML elements in a web page
  • control JS9 externally, from a command shell or Python
  • print images, save images and sessions, multiple displays, ...
  • simplified desktop app for Mac

Drag and drop a FITS astronomical data file onto the display and JS9 functionality immediately becomes available: zoom, pan, colormaps, scaling, regions, WCS, image filters, smoothing ...

By extending JS9 with the plugin facility and the public API, you can perform local analysis on the displayed image: click the Plugins tab, create a region, move it around ...

Images loaded on the server, loaded via proxy (File menu), or uploaded (Analysis menu) all support server-side analysis. Results are displayed in your browser: click the Analysis tab, choose a task, create a region, move it around ...

Energy Spectrum Counts in Regions Radial Profile Light Curve
JS9 can be connected to a server-side (back-end) analysis system to run complex analysis tasks. Text and plot results can be displayed on the JS9 web page, or new images loaded into JS9. Virtually any analysis program can be added to the back-end.

Here is a quick introduction to server-side analysis using regions:

  • Create one or more regions using the JS9 Region menu.
  • Press the mouse inside a region and drag it to a desired location. (Use an annulus for radial profiles.)
  • Resize or rotate the region by clicking to select it, and then moving one of the handles.
  • Group regions by pressing the meta key and using mouse selection. You then can move/resize/rotate them together.
  • Choose an analysis to run on the server:
    • Energy Spectrum plots a histogram of the energy values of photons in the region(s).
    • Counts in Regions presents a text display of the number of photons found in the region(s).
    • Radial Profile plots the number of photons in each region of an annulus.
    • Light Curve plots a histogram of the time values of photons in the region(s).
  • Every time a region changes, the chosen task will run on the server, and results will be displayed here.
  • These tasks also can be run from the JS9 Analysis menu.
See the Plugins tab for a demo of local analysis.
Extend JS9 with Plugins, using the JS9 Public API to perform event-driven, local analysis. Create a region, move it around ...

Recent Public Releases:

Release 3.0 (01/06/20) pretty close to the full realization of a vision that arose one rainy Spring day in 2012 ... also upgrade to ES6, add rot90, flip, etc.

Release 2.5 (08/30/19) a checkpoint release with a few bug fixes, in preparation for widespread ES6 upgrade edits.

Release 2.4 (07/15/19) lots of work on the desktop version, including direct access to local data files and the ability to merge shared tools.

Release 2.3 (05/01/19) a wealth of UI improvements (especially regions and menus), a smattering of bug fixes, and a cool colormap-generating plugin.

Release 2.2 (10/09/18) adds support for synchronized images, separate/gather images, mosaic images, user-defined and Mac-style menus, browser-based counts in regions, coordinate grids.

Release 2.1 (05/10/18) adds a graphical toolbar plugin, the ability to separate and gather displays, load colormaps, create light windows, and many improvements/fixes for binning and regions.

Release 2.0 (09/27/17) use WebAssembly where possible to approach native processing speed, upgrade web site (https://js9.si.edu), many aesthetic improvements.

For more details, see the ChangeLog.

JS9 is distributed under the terms of The MIT License.

The JS9 current release tar file is available here: Untar this file to display FITS images with all essential functionality. Install JS9 to add functionality such as server-side analysis.

To run the demo pages, download the data tar file here:

The latest bug fixes and enhancements are available on GitHub:

Clone JS9 from GitHub once and then pull updates at any time:
    git clone https://github.com/ericmandel/js9
    git pull
For Mac users, a simplified desktop app is available on GitHub: The app provides an easy way to get started with a GUI-based desktop version of JS9, but with some limits on functionality.

In addition, the pyjs9 Python interface is available on GitHub:

It supports communication with JS9 using the public API.
We gratefully acknowledge the technologies that power JS9:
  • HTML5 for image display and most everything
  • jquery for programming ease (jquery.com)
  • emscripten for C-to-JavaScript (emscripten.org)
  • fabric.js for 2D graphics (fabricjs.com)
  • dynamic drive for light windows (www.dynamicdrive.com)
  • flot for plotting (www.flotcharts.org/)
  • swis for jquery.contextMenu (swisnl.github.io/)
  • arrive.js for MutationObserver (github.com/uzairfarooq/arrive)
  • spin.js for spinner support (spin.js.org/)
  • Marc J Schmidt for CSS element queries (github.com/marcj/css-element-queries)
  • HEASARC for CFITSIO (heasarc.gsfc.nasa.gov/fitsio/)
  • IPAC for Montage (montage.ipac.caltech.edu/)
  • SAO/TDC for WCS lib (tdc-www.harvard.edu/wcstools/)
  • Mark Calabretta for HEALPix (www.atnf.csiro.au/people/mcalabre)

With important suggestions (and sometimes code) from:

  • Doug Burke, CfA (research-level testing)
  • Brian Cherinka, JHU (multi-extension FITS, data cubes)
  • Joseph DePasquale, STScI (image blending techniques)
  • Karl Glazebrook, Swinburne (iPad support)
  • Kenny Glotfelty, CfA (toolbar and toolbar icons)
  • Matias Carrasco Kind, NCSA (Jupyter support)
  • Kathy Lestition, CfA (EPO)
  • Briehan Lombaard SAAO (telescope control)
  • John Roll, Facebook (design philosophy, analysis plugins)
  • Maria Henar Sarmiento, ESA (research-level testing)
  • Pat Slane, CfA (needs of research vs. education)
  • Oleg Smirnov, Rhodes University (Jupyter, large file support)
  • The Science Education Department, CfA (EPO)

JS9 development is supported by Smithsonian Institution, the Chandra X-ray Science Center (NAS8-03060), and NASA's Universe of Learning (STScI-509913).

Questions? Eric Mandel            Source code @GitHub