A self-contained tree inference, annotation, and alignment workbench. All sequence processing runs in your browser. FastTree 2.1.11 double precision is bundled as WebAssembly and runs in a cancellable Web Worker. No runtime CDN, backend, authentication, or cross-origin isolation headers are required.
Open Structure or Linked views to use the bundled Mol* 5.11.0 viewer with EvoOnline-style per-chain Show/Map, cartoon, atoms, molecular surface and opacity controls. When Atoms and Cartoon are both enabled for a chain, only side-chain atoms are drawn; Atoms alone shows the whole chain. Pick reference/query rows from your alignment and color their differences on the structure (red by default, configurable). Protein and codon-aligned nucleotide input are supported. Mapping uses the BLOSUM62 profile/affine-gap local alignment strategy from the supplied HTML. See STRUCTURE.md for workflow, coordinate semantics, exports and validation.
Drag the visible divider grips to resize the workspace sidebar, tree/alignment split, stacked tree/structure split in Linked views, structure controls, and the open residue-inspection panel. Dividers also support arrow keys (Shift for larger steps), Home/End, and double-click to reset; Escape cancels an active drag. Reset layout resets panel sizes and visibility without changing data or annotations.
Structure controls start at 280 px, with independently scrolling controls and a flexible 3D viewport. Structure and Linked views initially hide the general workspace sidebar. Use Show workspace, Hide controls, Overview, Selection, and the residue-inspection summary to show/collapse entire panes. On narrow screens, structure controls overlay the viewer and can be hidden from the structure header. Chain representation controls reflow into compact cards when the sidebar is narrow.
Maximize structure hides surrounding panels and expands the molecule into almost the entire window. Restore layout or Escape returns to the previous view, pane widths and visibility. This is distinct from native browser fullscreen, and the maximized layout is saved in sessions. Requested widths are retained when a smaller window temporarily constrains the visible size. Resizing redraws the canvases without rerunning inference or profile mapping.
- Unzip this archive. Put its contents at the root of a new GitHub repository, including
.github/workflows/pages.yml(hidden folders can be missed by drag-and-drop). - In Settings → Pages → Build and deployment → Source, choose GitHub Actions. This one-time GitHub setting is required.
- Push to
mainormaster. The included workflow runs tests, verifies vendor checksums, builds the static directory, and deploys. If the initial workflow ran before step 2, rerun it from Actions. - Open the URL shown by the deployment. Every subsequent push to either configured branch deploys automatically. Pull requests run the same tests and build without deploying.
For a local folder and an existing empty remote:
git init -b main
git add .
git commit -m "Add Arbor phylogenetics workbench"
git remote add origin https://github.com/YOUR-ACCOUNT/YOUR-REPO.git
git push -u origin mainSet Pages to GitHub Actions as above. Organization policy may require enabling Actions or approving the github-pages environment. No personal tokens or repository secrets are needed. Relative asset paths support both project Pages (/repo/) and account Pages (/).
GitHub's workflow instructions: https://docs.github.com/en/pages/getting-started-with-github-pages/using-custom-workflows-with-github-pages
You can serve the shipped public/ directory immediately, without npm:
python3 -m http.server 8080 --directory publicOpen http://localhost:8080. Use an HTTP server rather than double-clicking index.html: browsers restrict module scripts and workers under file://. Any ordinary static host can serve public/ directly. Serve .wasm as application/wasm; GitHub Pages does this automatically.
For development and validation (Node 22+):
npm ci --ignore-scripts
npm test
npm run buildThe only npm dependency is jsdom, for tests. Production uses vendored local FastTree and Mol* assets, with no npm installation or runtime CDN needed. dist/ is a copy of public/ after vendor integrity checks.
- Aligned FASTA (full headers preserved), CLUSTAL/MUSCLE, and sequential relaxed PHYLIP imports. Quoted Newick names, scientific notation, comments, internal labels and exact zero edges are handled. Invalid names, duplicate tips, malformed lengths and incompatible alignments are rejected.
- Nucleotide GTR or JC69; protein JTT, LG or WAG. Fastest search, local SH-like support, gamma likelihood/length rescaling, reproducible random seed. Infer from the full alignment or the displayed regions; all taxa participate in inference, even when the display is filtered.
- Linked rectangular phylogram/cladogram and canvas alignment. Visible residue cells and tree rows are rendered by viewport. Overview selection, multiple disjoint regions, variable sites, ungapped-reference literal motif search, reference-match dots, residue/conservation colors and horizontal scrolling.
- Tip/clade selection, clade focus, collapse/expand, rotate, ladderize, reroot on an edge midpoint. Rerooting preserves patristic distances and keeps internal support on its edge. Rooting is a visualization choice.
- Branch and tip color annotation, editable display labels and notes, global label size, row spacing, tree width, branch width/colors, tip-label alignment, internal labels, and branch lengths. Original identifiers are never replaced by display labels.
- CSV/TSV categorical metadata, editable legend palette, taxon search and selection filtering.
- Portable JSON sessions preserve alignment, tree, annotations, metadata/palettes, regions, all application checkboxes and colors, inference options, selections, collapse/focus state, workspace view, open panels, scroll positions, text drafts, completed inference provenance, and the structure with its representations and camera. Save session downloads a self-contained file; Open session restores it. Version 1 sessions remain readable. Undo/redo keeps up to 25 snapshots in the current tab; its history is not stored in the file. Save before closing the tab.
- Combined tree/alignment SVG, tree-only SVG, viewport PNG, edited Newick, displayed-region FASTA, annotation JSON, raw FastTree Newick and exact-input provenance downloads.
Click Save session in the header to download arbor-session.json; use Open session later or on another computer. Both uploaded and PDB-fetched coordinates are embedded, so restoration needs neither a network request nor a manual structure re-upload. The file also preserves protein-chain Show/Map/cartoon/atoms/surface switches, opacity overrides, Show ligands (including glycans), mapping parameters, reference/query choices, the camera and chain-inspection page. Mapping is recomputed when the structure view opens.
Sessions store working data and application settings, not an in-flight inference/mapping job, undo history, a transient dialog/hover, or browser fullscreen. Fullscreen requires a new user gesture. Scroll positions are limited by the new window size. Unsaved edits are not autosaved.
- Regions are 1-based, inclusive alignment coordinates. Overlapping/adjacent ranges merge; output is sorted in original alignment order. A blank separator marks disjoint regions. Exported region FASTA concatenates those regions, excluding separators.
- FASTA export follows displayed tree order. A collapsed clade exports all its underlying sequences. Display-only filtering, focus and collapse do not change the next inference's taxon set.
- Full FASTA headers are identifiers. FastTree gets safe
seq0,seq1, … names; results are mapped back to the exact original names. An existing tree is retained when a newly loaded alignment matches all tips exactly. - Inputs must already be aligned. There is no MSA, ancestral reconstruction, recombination analysis, conventional bootstrap workflow, or model-selection implementation.
- FastTree is approximate maximum likelihood. Inferred internal labels are local SH-like support, not bootstrap proportions. Imported labels are retained without assuming what they mean.
-gammais FastTree's post-search likelihood and branch-length rescaling using a gamma model; it does not replace the CAT topology search. The real command and full engine log are available in Run details.?becomes a gap for inference. NucleotideUbecomesT. ProteinJ/O/U/*become unknownX. Entirely unobserved columns are excluded. Ambiguous observations otherwise retain FastTree's own semantics. Each taxon must have usable residues within the chosen region.- Provenance includes exact numeric FASTA, the identifier map, original 0-based retained site indices, command arguments, seed/model options, SHA-256, timestamp, duration, engine output/log, and the named Newick before display edits. Rerooting and annotation do not overwrite this record.
- Conservation = most common symbol / non-gap, non-
?symbols. Ambiguity codes count as symbols. Variable sites use this same definition. These are display statistics, not likelihood estimates. - Zero-length edges remain exactly zero in phylograms and Newick. Imported unspecified branch lengths default to zero. Cladograms explicitly ignore lengths. The display root does not establish evolutionary direction.
- Importing a different tree or completing a new inference resets node annotations because internal nodes may change. Metadata color mappings remain for inference. Save the old session if you need both results.
File imports are limited to 150 MiB, alignments to 100 million cells, and Newick nesting to 1500 levels. These are guardrails, not promises that every input at the limit will fit in browser memory. Single-threaded WASM uses 32-bit linear memory; practical inference capacity depends on the machine, alignment and browser. Undo snapshots can be expensive for large datasets. Tree layout and alignment statistics still examine the underlying data; viewport rendering does not eliminate all large-data costs.
SVG export is capped at 300,000 alignment cells; select a region/clade or export only the tree for larger data. Very tall tree SVGs can exceed downstream image-editor limits. PNG contains the visible viewport, rendered at 2× resolution. Desktop use is recommended for dense alignments. Unsaved work is not stored automatically, and there is no service worker/offline installation feature; serve the local folder for fully disconnected use.
Tests exercise the real shipped WASM for all five models, fixed-seed repeatability, gamma/fastest flags, name/coordinate validation, rerooting distances and DOM-level interface workflows (including real worker message logic, annotation/session/export integration). DOM tests stub canvas and do not replace visual testing in Chrome, Firefox and Safari. Cross-browser visual QA and an actual GitHub deployment have not been performed as part of this packaged delivery.
public/core.js— parsers, tree operations, regions, summaries, metadata and inference preparation.public/layout.js— pointer/keyboard splitters, panel visibility, maximized structure layout and session layout restoration.public/app.js— editor state, selection, SVG/canvas rendering, exports and orchestration.public/inference-worker.js— isolated Emscripten FastTree execution.public/structure/— Mol* viewer/controller, attachment-derived profile mapping worker and reference/query comparison.public/vendor/molstar/— pinned local Mol* runtime, styles and notices.public/vendor/— versioned WASM/glue, corresponding source, checksums, licenses and build notes.tests/— core, actual WASM and DOM integration checks.scripts/build.mjs— verified static packaging..github/workflows/pages.yml— CI and GitHub Pages deployment.
Inspired by, and adapting the undirected-edge rerooting approach from, MurrellGroup/SWIG, inspected at commit 874c32fadb97b36ace6d3df98839cfec1bda0799. SWIG's exact-input and linked-coordinate conventions informed this implementation; its immunogenetic reference data are not included.
This distribution uses GPL-3.0-or-later for Arbor's application code. FastTree's source carries GPL-2.0-or-later terms; this distribution follows GPLv3. SWIG-derived portions retain their MIT notice. See THIRD_PARTY_NOTICES.md, LICENSE and adjacent vendor files. Source is supplied, including the C source associated with the shipped FastTree version.