State of the Browser, 2016

It’s been a while since we posted on here*, and while the JBrowse-o-sphere has not been silent (there’s been plenty of chatter on the gmod-ajax mailing list and the GitHub issues tracker, for example) we think it’s high time for an update on the main site.

In part, this update is triggered by the (near-)completion of a state-of-the-JBrowse paper, which should be published soon. That paper describes what’s been happening in JBrowse over the past few years, code-wise. You can get a sense of that from the release notes. The (complementary) goal of this blog post is to give some idea of the direction we’re headed in.

Kicking the Perl Habit

JBrowse was the spiritual child of GBrowse, and GBrowse was built on the good ship Perl. Sadly, those days belong to a glorious past that has not yet been resurrected in the name of vintage kitsch. Speaking as a hacker who still dreams in Perl (and sometimes talks to myself in Perl while riding the train) I’m proud to be a national monument and I’d be happy to share my memories of the 80’s with you… but even I have to admit that I teach Python to my undergrads these days. They need jobs.

The ancient Perl timbers that support JBrowse are showing their age; and that’s why we’ve been adding more and more features that allow the JBrowse client to leave its BioPerl exoskeleton behind. Most of that exoskeleton is oriented toward slurping data out of object relational databases like Chado, or from flatfiles, so as to generate JBrowse-specific JSON-based index files (using Nested Containment Lists) that allow the client to do fast range queries on feature sets.

Fans of Chado need not worry: the JBrowse distribution will keep that functionality around, but the Perl part is less fundamental: the JavaScript client can load many file formats natively now, and can make use of other (more standard) indices, like tabix and faidx in SAMTools.

A direct benefit of this is that it’s possible to use JBrowse like a desktop browser, opening local files directly; either by firing up a web browser and pointing it at a JBrowse instance, or by using the new desktop version of JBrowse (built using Electron). The reduced dependency on JBrowse-specific indexing scripts also makes it conceptually a little simpler to feed data to a JBrowse instance from a server.

Repos, Man

Several plugins have been developed for JBrowse and Apollo (indeed, Apollo itself is also a plugin) and there are more on the way, both from our team and from third parties. To help admins find cool plugins, we are developing a plugin repository which will allow developers to register their plugins at

We are also close to publishing a registry of publicly accessible JBrowse instances. Over the past year, our analytics suggest that there are at least 2,600 active JBrowse hosts out there. Keeping a central, accessible list of active instances will help model organism databases and other small genome projects become more “discoverable”.

Fresh Tracks

We’re constantly adding new kinds of track, and there are several in the pipeline. The latest release has NeatFeatures, which finally brings intron hat cartoons to JBrowse.

Mitch Skinner, the visionary and pragmatist who was the first full-time lead dev of JBrowse, once said that “HTML can draw any shape you want, as long as it’s a rectangle”. Well, that may have been true back in the day, but 97% of web users now have Canvas support (and 99.9% of JBrowse users), and we feel comfortable drawing some diagonal lines.

We’re also working on SVG-based tracks that remove some of the ancient legacy limitations imposed on track classes, and can play nicely with d3 for some truly cool viz. Watch for new SVG-based tracks for visualizing population-level variation in the near future.

Tips for the Server

JBrowse can be described as a static site generator: after running the indexing tools, you don’t need to execute any code on the server. Just serve up the indices to the client as static files, and you’re set. This has some important benefits, notably for performance (it relieves the processing burden on the server and makes distributed servers much easier) and security (e.g. you can in principle use a super-secure webserver like publicfile). However, it’s also limiting for some applications.

There’s nothing stopping admins from setting up JBrowse as part of a larger dynamic web application, and there are plenty of hooks in the JavaScript code that allow developers to interface to dynamic code. However, up until this point, a systematic “recommended” way to write dynamic JBrowse apps has been lacking.

That’s going to change soon: JBrowse is finally growing a server-side. Although, in keeping with our general philosophy about how to do things on the bioinformatics web, our approach to this will be minimal — and compatible with a wide range of different back-ends.

We’re going to begin with basic infrastructure that most server applications will need: specifically, pub-sub messaging for notifying the client of updates. We then want to build some analysis capabilities into JBrowse — or, more precisely, hook JBrowse up to existing analysis engines. Everyone’s favorite workflow manager Galaxy will be top of the list. As usual (and this is something we view as a good sign), the community has gotten there before us: Eric Rasche, who also built an excellent Docker image for JBrowse, has developed a JBrowse Galaxy tool, which we will certainly be hoping to build on.

We recognize that there are other web-based job control shells apart from Galaxy, and some (e.g. iPlant) are already working with JBrowse. Our current plan is to write a (thin) abstraction layer that allows JBrowse to talk to Galaxy or other web shells for job control.

Dashes and Mashes

We think a big part of the future of JBrowse is in building rich, integrated bioinformatics web apps of which the genome browser is just one component. The kind of thing that used to be called a mashup but now (rather more professionally and stylishly) is known as a dashboard.

OK, technically mashups and dashboards are different: a mashup combines visualizations of multiple data sources, while a dashboard combines multiple controls in a single interface. Bioinformatics web apps, though, typically do both.

Some examples of what one might do with this sort of hybrid:

  • a phylogeography dashboard, combining genome/popgen views with geographical views (e.g. Google Maps)
  • a systems biology dashboard, combining genome view with gene network/ontology browsers, allowing visualization of RNA-seq experiments at pathway level (e.g. using Cytoscape) as well as the reference-aligned reads
  • a molecular evolution dashboard, with integrated browsing of phylogenetic gene trees and multiple sequence alignments (e.g. using BioJS components), alongside species trees and syntenic relationships between genomes

And so on… now, to be clear, lots of people are dreaming about, or doing, things like this. We want to make JBrowse play well with those efforts, and with future dashboards/mashups in the same vein. Some critical steps are required.

First, on the UI side, JBrowse must play nicely inside a DIV or inside a jQuery element (this is in process), and must be 100% programmatically controllable via the JavaScript API (this is mostly true already).

Second, on the server side, some aspects of the basic infrastructure need to be fleshed out; for example, notifications of changes to the sequence and/or track sets. As noted above, this is very much a part of our plans.

Social, Personal

Like Mark Zuckerberg, we really just want to connect people. Some of the coolest applications that has been built with JBrowse are the collaborative ones for distributed and/or crowdsourced curation of genome features, like Apollo and Afra. We’re also very excited to make JBrowse work better with personal genomics sites like

We want to enable more stuff like this, and are offering several Google Summer of Code projects this year. At least one of these is social in nature (developing a chat plugin for JBrowse) and another, offered by François Moreews and Thomas Darde, uses Docker to deploy personal JBrowse instances.

That’s All For Now

Watch this space for more updates!


Updated 2/25: There are a lot of issues still on the GitHub tracker that we plan to get to but I haven’t mentioned here. James Gilbert on Twitter asked about flipping the view to the reverse strand, which is issue #170 on GitHub. Rest assured that just because I didn’t necessarily mention every last one of them here, that doesn’t mean we’ve forgotten about them. We do still plan to get to those issues and to keep upgrading and refining the UI.

* OK, there was the 1.12 release, but you know. A while since we just pontificated for the hell of it.

Posted in Development, News, Roadmap | Leave a comment

JBrowse-1.12.0: Open new genome from FASTA, in-line refseqs, NeatFeatures, Desktop

We are happy to announce JBrowse 1.12.0 release! This new release includes some exciting new features including the ability to load new genomes from FASTA and indexed FASTA formats; in-line refseqs, and server-free desktop applications for Windows and OSX (based on Electron).  New plugins beautifully enhances feature rendering with intron hats and gradients in both HTML and canvas tracks, provide URL links to call up tracks by category URL, among others.  Improvements include the ability to load custom histograms for tracks loaded from; a new wiggle track option scoreType: ‘avgValue’, which helps preserve continuity when zooming in on certain tracks like GC-content; and the ability to specify the set of startCodons and stopCodons in the config.  In addition, several bugs have been addressed.

New features

  • Added ability to open a new genome in FASTA format from the browser. Also supports indexed FASTA. Thanks to Bradford Powell for the original indexed FASTA contribution (issue #495issue #647).
  • Support for inline reference sequence configurations.
  • Created stand-alone desktop version of JBrowse using the Electron platform for OSX, Windows (issue #647).

New plugins

  • NeatHTMLFeatures – Add the drawing of introns and gradient features to HTML tracks.
  • NeatCanvasFeatures – Add the drawing of introns and gradient features to Canvas tracks.
  • CategoryUrl – Implements a cat= URL option to display tracks for a given category (issue #618).
  • DebugEvents – a plugin to display global publish and milestone events on the debug console.
  • HideTrackLabels – Adds a toolbar button to toggle the display of track labels on and off (issue #614).

Minor improvements

  • Added new menu format to support loading your own genome. The open genome option can be hidden via hideGenomeOption in config, and the classic menu style can be restored via classicMenu in config.
  • Added ability to load custom histograms for tracks loaded from (i.e. override a pre-existing histogram store). See (issue #612).
  • Added these options to –clip_marker_color , –bg_color , –height (issue #510).
  • Added an option for Wiggle tracks, scoreType: ‘avgValue’, which helps preserve continuity when zooming in on certain tracks like GC-content. It complements the scoreType: ‘maxValue’ introduced in 1.11.6. Thanks to Han Lin for the pull request (issue #504).
  • Clarify track filter box description and feature search box “placeholder” text. (issue #611)
  • Implement option to have a separate location box from search box (issue #611issue #652).
  • Move CSS files into css folder.
  • Added ability to specify the set of startCodons and stopCodons in the config files. Thanks to Eric Rasche for the contribution (issue #657)!

Bug fixes

  • Add Travis-CI and jshint linting to build (issue #628).
  • Fixed a bug where the BAM popup boxes would display some incorrect info due to byte packing. Thanks to Thomas Downs for contributing the fix.
  • Fixed a bug where grid lines wouldn’t render at some particular zoom levels (issue #514).
  • Fixed a bug where the user’s –workdir parameter would be deleted which could have unintended side effects if the –workdir was pointing to important data, but this is uncommon (issue #563).
  • Allow falsey values to be used in browser.cookie.
  • Fix minor issue where sometimes the length field of refSeqs.json was missing.
  • Fix some issues that occurred when a reference sequence was named ‘0’ (issue #662issue #610).
Posted in News, Software releases | 1 Comment

JBrowse-1.11.6 maintenance release

I’m pleased to announce JBrowse 1.11.6 is now available! Everybody’s feedback, bug reports, pull requests, and feature requests have been invaluable for making this happen. This release includes new UI options for easily setting “Log scale” on wiggle tracks and dynamically changing strandedness on RNA-seq according to multi-segment template flags and splice site (XS) flags. It also includes bug fixes for calculating SNP positions on certain flag combinations in BAM files and for reporting the correct genotypes on certain VCF tracks. Enjoy!

Minor improvements

  • Added the ability to customize the contents of HTMLFeatures and CanvasFeatures mouseover tooltips more extensively. Thanks to David Muller for the original bug report and Colin Diesh for the fix (issue #480).
  • Added new options for BigWig files to use min/max summary values when zoomed out using scoreType. Thanks to Scott Cain for reporting the issue and to Colin Diesh for the fix (issue #518).
  • Added a checkbox for wiggle type tracks to have log scale. Thanks to Han Lin for the pull request (issue #502).
  • Added the ability to display paired-end reads in the same direction on Alignments2 tracks with the “Use reverse template” option. Thanks to Tomaz Berisa and Colin Diesh for their contributions (issue #485).
  • Added the ability to parse boolean literals from the .conf files.
  • Added the ability to specify a codon table (or partial codon table) for the Sequence track.
  • Added the ability to show or hide the main menu bar using the configuration file.

Bug fixes

  • Fixed “boolean is not a function” error when using CanvasFeatures tracks with the Segments glyph in some situations.
  • Fixed a dialog box display issue for VCF variants with “no call” specified (issue #513).
  • Fixed loading files from certain filepaths with special characters. Thanks to Ben Bimber for reporting and helping diagnose the bug (issue #508).
  • Fixed popup-dialog callbacks not being called on BAM Alignments tracks in 1.11.5.
  • Fixed systemwide installations of JBrowse perl modules when using Module::Build.
  • Fixed a bug when displaying SNPs on hard clipped reads. Thanks to Thon de Boer for the bug report and to Colin Diesh for the fix (issue #516).
  • Fixed a bug when displaying SNPs on spliced alignments. Thanks to GitHub user 09140930 for the bug report and to Colin Diesh for the fix (issue #523).
  • Fixed a bug that affected some VCF and GFF popup dialogs in some browsers, particularly Chrome 38 (issue #522).
  • Fixed a bug with the incremental indexing with generate-names that associated the wrong track with the name store. Thanks to Richard Hayes for reporting this issue and to Colin Diesh for the fix (issue #526).
  • Fixed the --workdir parameter in (issue #506).
  • Fixed the display of alternative alleles in the genotype for VCF pop-ups (issue #533).
  • Fixed an issue where some paired-end read data wouldn’t display properly if they had the same start position (issue #521).
  • Output .htaccess file for when using the compress option. Thanks to Sebastien Carrere for reporting the bug (issue #541).
  • Fixed a small bug with being able to scroll past end of chromosome when using the --sizes option to (issue #535).
  • Fixed a small internal code inconsistency with the positioning of the vertical position line. Thanks to Anurag Priyam for the fix (issue #545).
  • Fixed a small bug with some stylesheets not being able to be used for the CanvasFeatures coloring, for example, LESS stylesheets. Thanks to Anurag Priyam for reporting the issue (issue #527).
  • Fixed a small bug with mouseovers on Wiggle type tracks. Thanks to Han Lin for finding and fixing this bug (issue #503).
  • Removed XS tag from the strand calculation for alignments and made it an optional rendering option for BAM files with the “Use XS” option. Thanks to Kieran Raine and the pull request (issue #473).
  • Added a bugfix that prevented viewing the details of haploid VCF files. Thanks to Colin Diesh for finding and fixing this bug (issue #536).
  • Added a bugfix for an issue that made browsing very buggy when using private browsing mode in Safari.
  • Fixed the shortDescription option for the mouseover description of tracks in the Hierarchical track list (issue #553).
  • Re-added filter options that were missing for SNPCoverage tracks.
Posted in News, Software releases | Leave a comment

JBrowse-1.11.5 maintenance release

A new JBrowse release has arrived! JBrowse 1.11.5 incorporates many valuable contributions and feedback from the community which has been overwhelmingly positive. Some notable bugs have been fixed, including a long-standing VCF file parsing bug, a scrolling bug that affected popup boxes for variants on JBrowse 1.11.4, and a patch for build errors. There are also some new configuration options for the tracklist and dialog boxes, and the ability to use tablet and touch-screen devices has been fixed!

Minor improvements

  • Added the ability to disable sorting on the Hierarchical track selector using the sortHierarchical flag. Thanks to Chris Childers for the suggestion and Colin Diesh for the implementation (issue #477).
  • Added saving of the display mode setting on the CanvasFeature based tracks. Thanks to Jon Hinton for the idea and Colin Diesh for the fix (issue #469).
  • Added configurable click event handlers for Wiggle type tracks. Thanks to Richard Hayes for implementing this feature (issue #489).
  • Added more configuration options for ‘View details’ popups as well as the ability to customize the ‘About track’ popups. Thanks to Colin Diesh for the idea and implementation (issue #494).
  • Added the ability to load the category attribute from trackMetaData files to be used for the Hierarchical track selector.
  • Added the ability to specify initially collapsed categories in the Hierarchical track selector (issue #507).
  • Added beta touch-screen and tablet support by fixing a related bug. Thanks to Paul Hale and Kieran Raine for reporting bugs and to Emily Greenfest-Allen for the suggested fix (issue #505).

Bug fixes

  • Fixed a bug with VCF tabix file parsing that caused unnecessary chunkSizeLimit errors. Thanks to Richard Hayes for finding and debugging this issue (issue #486)!
  • Fixed a bug where the Variant popup boxes would not display complete genotype information in previous 1.11.* versions. Thanks to Nando for reporting the bug and Colin Diesh for the bugfix (issue #488).
  • Fixed a small error that occured when using variant type tracks with the REST API.
  • Added a bugfix that caused problems scrolling in dialog boxes for variant type tracks in 1.11.4 (issue #492).
  • Fixed the use of the –refs flag on Thanks to Audrey for finding & fixing this bug (issue #497).
  • Added missing template length flag to the Alignments popup dialogs. Thanks to Kieran Raine for the suggestion and Colin Diesh for the fix (issue #471).
  • Fixed the functionality of the –incremental flag in the script. Thanks to Richard Hayes and Colin Diesh fixing the issue (issue #478).
  • Fixed legacy support when running due to samtools build modifications (issue #501).
Posted in News, Software releases | Leave a comment

JBrowse-1.11.4 maintenance release

I am happy to announce the release of JBrowse 1.11.4. This is the first release after Rob’s leave, and it represents the great community effort to keep things going. There are some exciting new developments in this version, including high-resolution rendering of canvas-based tracks and a basic GTF file parser. There are also several important bug fixes, including an update to the script in order to maintain compatibility with the latest BioPerl.

Minor improvements

  • Added high-resolution rendering for CanvasFeatures, SNPCoverage, BigWig tracks, and histograms. This allows rendering for canvas- based tracks to look much sharper on high-resolution displays and can even look sharper when zooming. The high-resolution rendering is disabled by default to avoid conflicts with existing instances, but feel free to test it out by setting “highResolutionMode” in jbrowse.conf. Thanks to Colin Diesh for the idea and implementation (issue #456)
  • Added the ability to run jbrowse scripts outside of the JBrowse root directory. Thanks to Chien-Chi Lo for the patch (issue #465).
  • Added basic GTF parser that can open files from the File->Open menu or by using the in-memory adaptor. Big thanks to Andrew Warren for the contribution (issue #453).
  • Added a change to the highlight button to allow the user to more easily clear highlights. Thanks to Paul Hale for the suggestion and Colin Diesh for the fix (issue #445).

Bug fixes

  • Fixed help page icons not loading since JBrowse 1.11.2. Thanks to Colin Diesh for catching the bug and fixing it (issue #460).
  • Fixed updating of the y-axis scale when using the resize quantitative tracks feature. Thanks again to Evan Briones for the original implementation and Colin Diesh for the fix (issue #461).
  • Changed the CanvasFeatures ‘View details’ pages to display the name and description of features in the dialog box. Thanks to Colin Diesh for the fix (issue #463).
  • Added a bugfix for non-compliant servers that add a trailing slash to the URL. Thanks to Colin Diesh for the fix (issue #462).
  • Fixed a broken link in the documentation for biodb-to-json.
  • Updated to maintain compatibility with the latest BioPerl. Thanks to Thomas Sibley and Scott Cain for helping with this issue (issue #468).
  • Fixed a long standing bug with the coloring of nucleotides on the SNPCoverage/Alignments2 track. Thanks to Long Le for reporting this on the mailing list.
  • Fixed a long standing bug with the scrollbar in the dialog box on Chrome and Safari browsers. Thanks to the #dojo irc channel and and Colin Diesh for helping fix this problem (issue #386).
  • Fix a small rendering problem that causes one pixel gap to appear on Safari due to subpixel rendering issues. Thanks to Colin Diesh for the preliminary fix (issue #341).
  • Fix a bug with CanvasFeatures based tracks loading huge amounts of data to generate histograms instead of using pre-generated histograms. Thanks to Daniel Troesser for reporting this on the mailing list and Colin Diesh for the fix (issue #475).


Posted in News, Software releases | Leave a comment

JBrowse 1.11.3 maintenance release

JBrowse 1.11.3 has been released, with quite a few improvements and bugfixes, including a new coloring scheme for BAM alignment tracks (Alignments2 tracks), a fix for some annoying bugs with the feature arrowheads, and some nice new configuration variables for customizing the display of certain fields in the default feature detail popup dialog boxes (see the JBrowse Configuration Guide for details).

In addition, this will be my last JBrowse release in my position as JBrowse lead developer.  Thank you all for the past two years of development; we’ve made some exciting strides, and it’s been great!

Files for download:

Minor improvements

  • Added a “Zoom to this” item in the default right-click menus for
    canvas-based feature tracks. Thanks to Paul Hale for the initial
    implementation of this.
  • Allow the user to set the document.domain property via jbrowse.conf
    which can be helpful especially if jbrowse is embedded in a iframe.
    Thanks to Kieran Raine for the idea and Colin Diesh for the bugfix
    (issue #440)
  • Improved the graphic design of the “Add sequence search” dialog box
    to make it clearer how to switch between providing an amino acid
    and a nucleotide sequence. Thanks to Kevin Mohamed for the initial
    implementation of this (issue #436).
  • Expanded the default color set of Alignments2 tracks to show
    different shades of color indications of reads with missing mate
    pairs, improperly aligned reads, and reads with mate pairs on
    different reference sequences. Thanks to Keiran Raine for
    implementing this (issue #443).
  • Added support to customize specific parts of the ‘View details’
    popups using callback functions. Thanks to Kieran Raine for the
    idea and Colin Diesh for the implementation (issue #421).
  • The File->Open tool will now can add files named *.coverage.* or
    *.density.* as histograms to newly-opened tracks if the file
    basenames match. For example, if both mysample.bam and are present, will be
    added as a histogram source for mysample.bam. Thanks to Keiran
    Raine and Alexander Stoddard for suggesting this (issue #423).

Bug fixes

  • Fixed a problem where the feature arrowhead would get stuck in the
    middle of the screen at high zoom levels. Thanks to Colin Diesh for
    the fix (issue #449).
  • Disabled the FASTA download button in the “View details” page on
    Safari (issue #412). This feature can’t be supported in Safari at
    this time, but it is still supported in most other browsers. Rob
    Buels and Colin Diesh contributed fixes to this issue.
  • Fixed a bug in the client-side GFF3 parser pointed out by Andrew
    Warren. Thanks Andrew! (issue #452).
  • Fixed the problem of translation frames being switched around at
    different zoom levels. Thanks to Kieron Taylor for the bug report
    and Colin Diesh for the bugfix (issue #435)
  • Fixed a bug where gene features in GFF tracks would not have
    arrowhead markers. Thanks to Colin Diesh for finding and fixing
    this issue (issue #454)
Posted in Software releases | Leave a comment

Tutorial: exploring structural variation using JBrowse, from the tomato 150+ re-seq project

We recently used JBrowse in the 150 Tomato Genome ReSequencing project, and it worked great!

The aim of the 150 Tomato Genome ReSequencing project ( is to reveal and explore the genetic variation available in tomato. Tomato has been selected as target crop because it is economically one of the most important crop species for the Dutch breeding industry, and is one the most important vegetables globally. However, since the tomato shows only limited genetic diversity in commercial breeding lines, valuable alleles will be available in wild tomato relatives. Since breeding and selection was targeted at only a narrow range of desirable agricultural traits, also old breeding material could be source of interesting alleles that have been lost during domestication.

In order to identify the sequence diversity within tomato, 83 genotypes including 10 old varieties, 43 land races and 30 wild accessions were seqeunced. These wild tomato species represent the full range of expected genetic variation around S. lycopersicum that can still be used as potential breeding material.

Sequences have been mapped against the reference genome of S. lycopersicum cv. Heinz (SL2.40) and SNP and INDEL variation has been determined.

JBrowse is a fast, embeddable genome browser built completely with JavaScript and HTML5, with optional run-once data formatting tools written in Perl.

The SNP and INDEL variants have been made available using JBowse ( and an tutorial ( on how to explore this data resource by the community has been written.

In addition to variants from the 150+ Tomato Genome ReSequencing project, we will add publicly available variant datasets as well.

Posted in Data releases, News, Sites using JBrowse | Leave a comment

JBrowse 1.11.2 maintenance release

JBrowse 1.11.2 has been released, with some new controls to adjust the size of quantitative tracks (thanks to Evan Briones at University of Arizona!), added support for the new text-based tracks.conf files to, and quite a few other small improvements.

Files for download:

Minor improvements

  • Added some user interface elements to set the height in pixels of a
    single quantitative track, or of all visible quantitative tracks.
    Thanks to Evan Briones for implementing this!
  • Added a JBrowse/View/FeatureGlyph/Diamond glyph that draws
    diamond-shaped features instead of boxes. Thanks to OICR Co-op
    student Kevin Mohamed for implementing this!
  • Reference sequence tracks now display a “no sequence” message
    instead of a bunch of blank blocks when the reference sequence
    basepairs aren’t available. Thanks to Kevin Mohamed for
    implementing this (issue #422).
  • Persistent session state is now stored on a per-dataset basis,
    which improves user experience when switching between multiple
    datasets in JBrowse. Thanks to Richard Hayes for pointing this
    issue out, and Kevin Mohamed for the fix (issue #410).
  • “Hide sites not passing …” settings in VCF track menus now show
    the filter’s long description when hovered over. Thanks to Keiran
    Raine for suggesting this (issue #420).
  • Tweaked display of track labels and added a slight border at the
    top edge of each track to make it more clear which track data
    belongs to. Thanks to Keiran Raine for suggesting this, and Kevin
    Mohamed for the initial implementation (issue #432).
  • Added a --config option to that accepts
    additional configuration variables that will be merged into the top
    level of the track configuration. Thanks to Mikael Brandström
    Durling for the initial implementation of this.

Bug fixes

  • now indexes VCF files from track definitions in
    tracks.conf files. Thanks to Paul Halle for pointing this out
    (issue #434).
  • Added a missing dependency for the server side formatting tools on
    List::MoreUtil 0.28 or higher. Thanks to Cris Lawrence and Keiran
    Raine for troubleshooting this!
Posted in Software releases | Leave a comment

JBrowse 1.11.1 maintenance release

JBrowse 1.11.1 has been released, with a number of bug fixes and some nice improvements to Alignments2 tracks. Most of the Alignments2 improvements were thought up by Keiran Raine at Sanger, thanks Keiran! Thanks also to Cris Lawrence and Richard Hayes, who were helpful in finding some other bugs and opportunities for improvements.

Files for download:

Minor improvements

  • Alignments2 tracks now include right-click menu items to view the
    location of an alignment’s mate pair or next segment in a popup or
    a new tab. Thanks to Keiran Raine for suggesting this (issue #406).

  • Alignments2 tracks now draw gaps and deletions in reads regardless
    of zoom level, as long as the alignment is at least 3 pixels wide
    in the display. Thanks to Keiran Raine for pointing out the need
    for this (issue #403).

  • Added support for a histograms.max variable for
    CanvasFeatures-based tracks that can be used to manually set the
    max value of a histogram display. Thanks to Keiran Raine for
    pointing out the need for this.

  • Added support for drawing clip markers (with their color set by
    histograms.clip_marker_color) in CanvasFeatures-based
    tracks. Thanks to Keiran Raine for pointing out the need for this
    (issue #402).

  • Canvas-based feature tracks now try to draw histograms, if
    available, when the data backend throws a data-overflow error (like
    when the BAM backend exceeds the chunkSizeLimit). Thanks to Keiran
    Raine for motivating this (issue #405).

  • Make it easier to set JS loading baseUrl by moving it into the
    initial dojo configuration. Thanks to Jillian Rowe for pointing
    out the need for this.

  • Enhanced new text-based config syntax to support arrays of values
    in a list like:

    sources =
      + data/mymeta.csv
      + data/more_meta.csv

Bug fixes

  • When a number is typed into the location box, JBrowse first checks
    if it is the name of a feature in the names index, and only
    interprets it as a coordinate if it is not found in the names
    index. Thanks to Richard Hayes for pointing this out (issue #407).

  • Fixed bug that caused client-side GFF3 tracks to appear as
    “Loading” forever if the GFF3 is malformed (like malformed GFF3
    files that are opened with the File->Open tool).

  • Fixed bug in which no default value for
    maxFeatureSizeForUnderlyingRefSeq was being set, which made
    default feature detail popups try to fetch and display a feature’s
    underlying reference sequence even if it is way too large, unless
    the variable was set explicitly in the configuration.

  • JBrowse now shows a more understandable error message when trying
    to open an uncompressed BAM file. Thanks to Keiran Raine for
    pointing this out (issue #404).

  • Fixed jbrowse.conf faceted track selector configuration examples
    not working as written. Thanks to Cris Lawrence for pointing this

  • Fixed a bug in which right-clicking on feature labels in an
    HTMLFeatures-based track did not bring up the right-click menu for
    a feature. Thanks to Cris Lawrence for pointing this out (issue #408).

Posted in Software releases | Leave a comment

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 =
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/, that
    does a fair job. Run bin/ -? 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 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 with --safeMode in Perl 5.10 and earlier. In
    fact, the --safeMode argument to 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 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
    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/ 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.
Posted in Software releases | Leave a comment