JBrowse 1.11.0: hierarchical track selector, easier configuration, summary mode

JBrowse 1.11.0 is out today, with some major new features, and, as always, quite a lot of smaller bugfixes and improvements.

But first, the download links:

Firstly, JBrowse has added a third track selector type alongside the existing Simple (small) and Faceted (large) track selectors called Hierarchical.  It looks like the old Simple track selector (which was the default), except it pays attention to the “category” key in a track’s metadata, and if it is present, it organizes the tracks into nested, collapsible panes based on that.  Also, instead of the drag-and-drop paradigm used by the Simple track selector, the Hierarchical track selector turns tracks on and off by just checking and unchecking the box next to each track.  I think the checkboxes are probably easier for new users to understand, as well, the Hierarchical track selector is now enabled by default.  Those that prefer the old Simple selector can always turn it on by setting trackSelector.type to “Simple” in the jbrowse_conf.json file or the new jbrowse.conf file, which brings me to my next item.

Secondly, JBrowse now has a additional text configuration format that is designed to be easier to hand edit, and can coexist and interoperate with existing JSON configuration files.  Users of GBrowse will find the syntax very familiar, since its design borrows heavily from GBrowse’s configuration syntax.  Here’s a side-by-side comparison of what you would write in the old JSON and new text configuration formats to make JBrowse use the old Simple track selector.

jbrowse_conf.json jbrowse.conf
"trackSelector": {
  "type": "Simple"
type = Simple

It’s easier to configure tracks in the new format, as well.  Here’s a typical BAM Alignments2 track configuration in both formats, for comparison.

"tracks": [
    "storeClass"  : "JBrowse/Store/SeqFeature/BAM",
    "urlTemplate" : "../../raw/volvox/volvox-sorted.bam",
    "label"       : "volvox-sorted-bam",
    "type"        : "JBrowse/View/Track/Alignments2",
    "key"         : "My BAM track"
storeClass  = JBrowse/Store/SeqFeature/BAM
urlTemplate = ../../raw/volvox/volvox-sorted.bam
type        = JBrowse/View/Track/Alignments2
key         = My BAM track

And for the final headline feature of this release, JBrowse CanvasFeatures, CanvasVariants, and Alignments2 tracks can now be configured to show feature density histograms or coverage plots when zoomed too far out to display individual features.  They can take this quantitative data from any type of JBrowse data store (including REST stores), but most users would want to use a BigWig store.    One caveat: this isn’t a full-featured quantitative display like a Wiggle/XYPlot track, so quantitative values need to all be greater than 0, and all you can really change about how it looks is its color.  Here’s an example in the new text configuration syntax of an Alignments2 track that will display either alignments from a BAM file or a coverage plot from a BigWig file, depending on zoom level.


storeClass  = JBrowse/Store/SeqFeature/BAM
urlTemplate = my_alignments.bam

type        = JBrowse/View/Track/Alignments2
key         = My BAM track

histograms.storeClass = JBrowse/Store/SeqFeature/BigWig
histograms.urlTemplate = my_alignments.bam.coverage.bw
histograms.description = coverage plot
histograms.color = #dcdcdc

Of course, there are many smaller improvements and bug fixes.  Read on for the complete release notes.

Release 1.11.0

Major improvements

  • Introduced density/coverage histogram support for CanvasFeatures,
    CanvasVariants, and Alignments2 tracks. These track types now
    support an optional histograms configuration subsection that can
    contain a definition for a second datastore that holds quantitative
    data (usually either coverage depth or feature density) to be
    displayed when zoomed further out than featureScale (or if
    featureScale is not set, the scale determined by the store’s
    feature density divided by maxFeatureScreenDensity). Thanks to
    Richard Hayes for pushing hard for this feature.
  • Added a new “Hierarchical” track selector that shows tracks in a
    hierarchy of collapsible categories, which is now the default track
    selector. To assign categories and subcategories to your tracks,
    set category or metadata.category attributes on each configured
    tracks in your trackList.json. Thanks to the many users who have
    requested this at one time or another.
  • JBrowse now supports a new plaintext configuration format that
    users of GBrowse will find very familiar, since it is designed to
    be very similar to it. This syntax is also much easier to
    hand-write than JSON. The JSON configuration syntax is not going
    away, and will continue to be supported.

    Thanks to Erik Derohanian for the original implementation of this
    configuration adaptor, and Richard Hayes and Keiran Raine for
    motivating the work to polish and more fully integrate it.

  • Variables in configuration files can now be based on the contents
    of other variables. For example, setting

    “myCustomVariable”: “/some/custom/path”,
    “include”: “{myCustomVariable}/conf.json”

    will try to include a configuration file located at
    “/some/custom/path/conf.json”. Interpolation is done as the final
    step in configuration loading, so variables can come from anywhere
    in the configuration.

  • When JBrowse is started, if there are no reference sequences found
    in the default dataRoot, but the dataset selector is configured,
    JBrowse shows a simple list of links to available datasets instead
    of the “Congratulations, JBrowse is on the web” page. Thanks to
    Saulo Aflitos for the idea and its initial implementation.
  • For users wishing to convert existing JSON configuration files to
    the new format, there is a new script, bin/json2conf.pl, that
    does a fair job. Run bin/json2conf.pl -? for details on how to
    use it.
  • Added a new REST backend for name lookup and autocompletion. See
    for details. Thanks to Erik Derohanian for implementing this, and
    Ben Booth for suggesting an API design (issue #267).
  • Major performance and scalability improvements for
    generate-names.pl. Now uses a different algorithm that is faster
    and more scalable than before, and no longer relies on BerkeleyDB
    for temporary storage. This should also alleviate the need to run
    generate-names.pl with --safeMode in Perl 5.10 and earlier. In
    fact, the --safeMode argument to generate-names.pl no longer has
    any effect. Thanks to Cris Lawrence for pointing out the
    continuing need for more scalability.

Minor improvements

  • Detail popups for CanvasVariants and HTMLVariants tracks now
    display the reference sequence itself instead of just “ref” in
    genotype displays. Thanks to Cris Lawrence for requesting this.
  • Added a “save as FASTA” button to default feature detail popups
    that downloads a FASTA file with the displayed piece of reference
    sequence (issue #299).
  • chunkSizeLimit for VCF files now defaults to 1 MiB. It used to
    be 15 MiB, which was really far too big for browsers to handle.
  • Added support for a --nameAttributes argument to
    flatfile-to-json.pl that takes a comma-separated list of feature
    attributes to index for name searching and completions, or ‘none’
    to not make names searchable.
  • Added support for a nameAttributes variable in biodb-to-json.pl
    track configurations that can be set to an array of feature
    attribute names to to index for name searching and completions, or
    ‘none’ to not make names searchable.
  • Add a --category argument to bin/wig-to-json.pl that can be used
    to set the metadata.category of a track.

Bug fixes

  • Fixed a bug in NCList data backed in which feature histograms were
    often calculated very incorrectly.
  • Fixed a bug in the VCF data backend that caused not all VCF
    features to be shown in some files at some zoom levels.

About Robert Buels

JBrowse Lead Developer
This entry was posted in Software releases. Bookmark the permalink.