v4.0.3 Release
Hello all! We are happy to announce this new major version update to JBrowse 2
There are a lot of improvements large and small
New "Collapsed introns" view
Users can right-click a gene and launch a 'Collapsed introns' view that focuses on just the exonic regions. The RNA-seq alignments work with this view also, with sashimi arcs connecting across the different regions
New "Canvas features" track type
We have replaced the SVG feature renderer with a new HTML5 canvas feature renderer. This has improved user experience and also comes with new functionality including:
- Per-transcript mouseover and feature clicks
- Ability to show only the "Longest transcript" for gene glyphs with many subtranscripts
- Improved performance
- Directional chevrons
Screenshot showing the "Longest transcript" option
Alignments track performance improvements
Our BAM and CRAM parsers were updated with a variety of performance optimizations. We analyzed the entire stack and added
- low level binary for parsing CIGAR strings
- using WASM for parsing
- using mosdepth style coverage calculations
- improved speed for deep RNA-seq data
And much more
Alignments track mouseovers and new features
We also added many usability improvements to the alignments tracks like adding the ability to mouseover and click individual insertions, mismatches, deletions, etc.
Users can also optionally turn off drawing mismatches entirely...sometimes it's not what you care to see!
"Linked read display" improvements
In v3.7.0 we announced the "Linked read display" mode (https://jbrowse.org/jb2/blog/2025/11/07/v3.7.0-release/#create-linked-read-display-for-alignments-tracks) which connects paired end or split long reads. This new release allows drawing mismatches on the reads, and generally behaves a lot like the normal alignments track!
Screenshot showing an inversion with split long reads (the red->blue->red chain indicates a single split long read flipping orientation in the middle) and paired-end short reads (blue and green reads indicate aberrant pairing)
Display color legends on screen
We added the ability to show legends on a variety of display types, which will help users understand the meaning of colors on the screen!
"Save track data"
Users can now export data in the visible region in a variety of formats, tailored to the track type and file type of interest. This was a commonly requested feature, so we are excited to finally solve it
Simplified configuration
Users no longer have to explicitly supply 'sequenceAdapter' to BAM and CRAM files. It will infer the sequence adapter from the assembly. Anyone who directly works with JBrowse configuration files will benefit from this simplification!
Screenshot showing a simplified config for a CRAM track
Much faster load time for large tracklists
Previously, when a JBrowse instance had more than a couple thousand tracks, the startup time would slow down dramatically. We made internal changes to our track loading that now makes these load times virtually instant now! This was enabled by making track configuration models instantiated only when the track is opened, which plugin authors should be aware of
Graph showing the load time of different tracklist sizes in v3.7.0 and v4.0.0, showing runaway showness with v3.7.0 after just a couple thousand tracks that is now under control in v4.0.0
Easily filter variant samples by genotype
This allows users to easily filter the variants in the feature detail widget by genotype. It can also be toggled to filter by 'dosage' which is helpful for polyploid organisms
New "Workspaces" feature for tiled window management!
We added the Dockview (https://dockview.dev) window manager to the app interface, so you can now create left-right splits, top-bottom splits, new tabs, and more in jbrowse web and desktop. This enables a large variety of extra layouts compared with the previous vertical-stack-only limitation of previous JBrowse 2 versions!
Screenshot showing left-right split
Improved user-experience when side-scrolling
Wiggle and Hi-C tracks will now stay on the screen while new renderings (e.g. change to y-axis scale) are re-computing. It is a subtle change that we hope improves user-experience!
Breaking changes
There are a large number of internal changes, and it would be hard to fully enumerate all the changes, but some of the changes include
- Splitting renderProps (for webworker renderer) and renderingProps (main thread)
- Changing mobx-state-tree to @jbrowse/mobx-state-tree https://github.com/GMOD/mobx-state-tree
- Changing jexl to @jbrowse/jexl https://github.com/GMOD/jexl
- Removal of @jbrowse/plugin-svg, automatically remapping to CanvasFeatureRenderer
- Make all packages "pure-ESM", may affect node.js usage
A variety of other internal changes took place. If you see any problems after migration, please let us know and we will be happy to work with you to help
User survey
We have started a new survey here https://forms.gle/dy41TWmKe8KPRews7 to help gather user experiences with JBrowse. We know that it is not always easy to get the courage to create github issues but any feedback large or small is welcome!
Downloads
To install JBrowse 2 for the web, you can download the link above, or you can use the JBrowse CLI to automatically download the latest version. See the JBrowse web quick start for more details.
Changelog
bug
- Fix smaller genomic region being shown when using &tracklist=true URL params (#5388) @cmdcolin
- Fix color by CDS / calculation of phase on BED12/bigbed files (#5384) @cmdcolin
- Fix hot module reload losing app state (#5374) @cmdcolin
- Fix issue where multiple sub-menus could open up at once (#5308) @cmdcolin
- Avoid changing displayed regions set when using "Center at feature" in synteny view (#5281) @cmdcolin
- Avoid 'polynomial regex' in assembly name parsing (#5258) @cmdcolin
- Fix export of SVG hanging if track had error (#5234) @cmdcolin
- Reduce coarseStripHTML regex complexity to address codeql warning (#5233) @cmdcolin
- Fix click-and-drag starting from a inter-region padding block (#5226) @cmdcolin
- Add cancellation stop tokens for linear read arc/cloud displays (#5221) @cmdcolin
dependencies
- Update to jest 30 (#5223) @cmdcolin
documentation
- Add PAG 2026 user tutorial (#5340) @garrettjstevens
enhancement
- Show full dotplot when zoomed all the way out (#5387) @cmdcolin
- Switch to pnpm as package manager and add ESM "exports" to packages (#5382) @cmdcolin
- Re-organize 'track action' menu items into a submenu (#5378) @cmdcolin
- Remove BroadcastChannel from SessionLoader (#5375) @cmdcolin
- Allow plugins to make custom radio items for synteny import forms (#5373) @cmdcolin
- Allow easily filtering samples in the variant feature details by genotype/dosage (#5366) @cmdcolin
- Allow clicking transcript subfeatures of a gene glyph (#5363) @cmdcolin
- Add --excludeTracks to jbrowse text-index (#5354) @cmdcolin
- Use custom 'jexl' fork with multi-statement evaluation and template strings (#5353) @cmdcolin
- Search indexedDB for old sessions when using a local- type URL (#5346) @cmdcolin
- Filter out defaults from session snapshots (#5339) @cmdcolin
- Add general concept for showing legends on tracks (#5337) @cmdcolin
- Improve mouseover and clicking on mismatches/modifications on SNPCoverage (#5336) @cmdcolin
- Create layout optimizations for deep RNA-seq data (#5330) @cmdcolin
- Filter sashimi arcs by score (#5329) @cmdcolin
- Multiple optimizations for alignments tracks (#5326) @cmdcolin
- Add WASM code for unzipping in CRAM, BAM, BigWig, Tabix, etc. (#5320) @cmdcolin
- Optimizations for multi-wiggle tracks (#5318) @cmdcolin
- Add optional directional 'chevrons' to the gene glyphs (#5317) @cmdcolin
- Collapse introns transcript selector (#5316) @cmdcolin
- Avoid "import form flash" during loading (#5314) @cmdcolin
- Avoid drawing tick labels that overlap block boundaries (#5312) @cmdcolin
- Create pluggable glyph system for canvas feature renderer (#5311) @cmdcolin
- Create optimizations for alignments track (#5310) @cmdcolin
- Improve bigwig Y-scalebar label legibility (#5307) @cmdcolin
- Make BAM and CRAM adapters use assembly sequence adapter (#5305) @cmdcolin
- Add gridlines option for SVG export (#5303) @cmdcolin
- Aggregate insertion stats in on SNP coverage track (#5301) @cmdcolin
- Add "tiled window manager" to JBrowse apps (#5300) @cmdcolin
- Aggregate insertion stats for tooltip (#5294) @cmdcolin
- Simplify VCF feature descriptions (#5292) @cmdcolin
- If &loc= is not specified in URL bar, then show all regions of the genome (#5289) @cmdcolin
- Improve track drag-n-drop re-ordering on linear genome view (#5288) @cmdcolin
- Allow rendering inter-chromosomal contacts with Hi-C renderer (#5284) @cmdcolin
- Add better source maps in error stack trace on desktop app (#5280) @cmdcolin
- Increase lazy loading of some react components (#5278) @cmdcolin
- Add ability to click and mouseover RNA-seq junction arcs (#5277) @cmdcolin
- Add ability to mouseover and click on 'insertions' on SNPCoverage track (#5276) @cmdcolin
- Refactor the renderer and RPC stack (#5270) @cmdcolin
- Allow putting helpText on WidgetType (#5268) @cmdcolin
- Allow rapid clicking of zoom in and out buttons (#5266) @cmdcolin
- Use SanitizedHTML on category names (#5264) @cmdcolin
- Improve performance of track list using custom virtualization routines (#5263) @cmdcolin
- Add ability to show longest transcript only and easily filter out gene glyphs (#5259) @cmdcolin
- Fix scrolling on multivariant display types (#5256) @cmdcolin
- Create new 'renderingProps' concept for the 'rendering' react component as a complement to 'renderProps' for renderer (#5255) @cmdcolin
- Floating labels optimizations (#5251) @cmdcolin
- Optimize the search box using uncontrolled component style (#5250) @cmdcolin
- Optimizations for fast updating linear genome view scroll elements (#5249) @cmdcolin
- Refactor VcfFeature for speed and clarity (#5247) @cmdcolin
- Use numeric encodings for SEQ and CIGAR fields for BAM (#5246) @cmdcolin
- Allow drawing transcript subfeature labels on canvas features (#5245) @cmdcolin
- Limit showing mismatch mouseovers on alignments tracks (#5241) @cmdcolin
- Allow clicking on mismatches and insertions on alignments track to get more info (#5238) @cmdcolin
- Add ability to draw hierarchical tree from clustering on multi-sample variant view (#5236) @cmdcolin
- Globally stop swipe action from producing back/forward actions on jbrowse-web (#5229) @cmdcolin
- Preserve old visualization during block re-rendering (#5227) @cmdcolin
- Scroll only the matrix part of the multi-sample variant viewer (#5222) @cmdcolin
- Scroll only pileup part of the alignments track (#5220) @cmdcolin
- Add mismatches to linked reads display, and make linked read and read arc webworker rendered (#5218) @cmdcolin
- Add 'super-compact' display mode for alignments tracks (#5217) @cmdcolin
- Optimizations for granular rect layout (#5214) @cmdcolin
- Add canvas based renderer for regular gene feature tracks (#5213) @cmdcolin
- Add some micro-optimizations for gridlines and scalebar labels (#5210) @cmdcolin
- Add some help text to display types (#5207) @cmdcolin
- Remove react-dom/server usage in webworker (#5205) @cmdcolin
- Vendor @jbrowse/mobx-state-tree (#4938) @cmdcolin
- Optimizations to support large tracklists (#4499) @cmdcolin
- Save track data method on base track model (#3439) @cmdcolin
housekeeping
- Create simplified browser test suite using puppeteer (#5267) @cmdcolin
internal
- Use mobx-state-tree patches instead of full snapshots for undo manager (#5309) @cmdcolin
- Change JBrowse CLI to use 'fetch against the filesystem' with file:/// (#5304) @cmdcolin
- Vendor tss-react/mui dependency (#5271) @cmdcolin
- Fix
depcheckwarnings (#5257) @cmdcolin - Remove use-query-params library (#5248) @cmdcolin
- Use 'gh CLI' for release (#5235) @cmdcolin
- Add explicit github workflow permissions (#5232) @cmdcolin
- Remove unused makeStyles classes (#5208) @cmdcolin