{"id":50147989,"url":"https://github.com/cmzmasek/archaeopteryx-js","last_synced_at":"2026-05-24T06:05:25.615Z","repository":{"id":37927751,"uuid":"67834920","full_name":"cmzmasek/archaeopteryx-js","owner":"cmzmasek","description":"Archaeopteryx.js is a software tool for the visualization and analysis of highly annotated phylogenetic trees.","archived":false,"fork":false,"pushed_at":"2026-02-24T00:45:43.000Z","size":7853,"stargazers_count":41,"open_issues_count":0,"forks_count":15,"subscribers_count":6,"default_branch":"master","last_synced_at":"2026-02-24T07:32:14.999Z","etag":null,"topics":["analysis","archaeopteryx","archaeopteryx-js","evolution","javascript","phylogenetic-trees","phylogenetics","visualization"],"latest_commit_sha":null,"homepage":"https://sites.google.com/site/cmzmasek/home/software/archaeopteryx-js","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cmzmasek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-09-09T21:49:39.000Z","updated_at":"2026-02-24T00:45:47.000Z","dependencies_parsed_at":"2024-01-11T00:51:40.547Z","dependency_job_id":"bff0fdf9-b163-4671-91dd-ea039411916e","html_url":"https://github.com/cmzmasek/archaeopteryx-js","commit_stats":{"total_commits":313,"total_committers":4,"mean_commits":78.25,"dds":"0.25559105431309903","last_synced_commit":"69d3f0f08a52980c63d8e9022fb96f0a2eca5193"},"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"purl":"pkg:github/cmzmasek/archaeopteryx-js","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmzmasek%2Farchaeopteryx-js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmzmasek%2Farchaeopteryx-js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmzmasek%2Farchaeopteryx-js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmzmasek%2Farchaeopteryx-js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cmzmasek","download_url":"https://codeload.github.com/cmzmasek/archaeopteryx-js/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmzmasek%2Farchaeopteryx-js/sbom","scorecard":{"id":294509,"data":{"date":"2025-08-11","repo":{"name":"github.com/cmzmasek/archaeopteryx-js","commit":"7666fcb7182e7ed4f365d0a7d75b9bb5da8c63cb"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":5,"reason":"7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU Lesser General Public License v2.1: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-17T19:08:17.038Z","repository_id":37927751,"created_at":"2025-08-17T19:08:17.038Z","updated_at":"2025-08-17T19:08:17.038Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33423286,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T22:14:44.296Z","status":"online","status_checked_at":"2026-05-24T02:00:06.296Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analysis","archaeopteryx","archaeopteryx-js","evolution","javascript","phylogenetic-trees","phylogenetics","visualization"],"created_at":"2026-05-24T06:05:14.343Z","updated_at":"2026-05-24T06:05:25.608Z","avatar_url":"https://github.com/cmzmasek.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Archaeopteryx.js\nArchaeopteryx.js is a software tool for the visualization and analysis of highly annotated phylogenetic trees.\n\n\n### Website\nhttps://sites.google.com/view/archaeopteryxjs\n\n### npm\nhttps://www.npmjs.com/package/archaeopteryx\n\n### GitHub\nhttps://github.com/cmzmasek/archaeopteryx-js\n\n\n### Examples\n\n* [Bcl-2 gene family](http://www.phyloxml.org/archaeopteryx-js/bcl2_js.html)\n* Eukaryotic tree of life:\n  * [collapsed with initial depth = 5](http://www.phyloxml.org/archaeopteryx-js/euk_tol_collapsed_js.html)\n  * [uncollapsed](http://www.phyloxml.org/archaeopteryx-js/euk_tol_js.html)\n* [Influenza HA H3 collapsed by Country](http://www.phyloxml.org/archaeopteryx-js/influenza_collapsed.html)\n* [Amphibian phylogeny](http://www.phyloxml.org/archaeopteryx-js/amphi_frost_js.html)\n* Visualizations:\n  * [Herpesviridae DNA polymerases](http://www.phyloxml.org/archaeopteryx-js/hg1001_js.html)\n* RAxML examples:\n  * [bipartitions](http://www.phyloxml.org/archaeopteryx-js/raxml_bipartitions_bcl2_js.html)\n  * [bipartitionsBranchLabels](http://www.phyloxml.org/archaeopteryx-js/raxml_bipartitions_branchlabels_bcl2_js.html)\n* MSA Residue Visualization:\n  * [Bunyaviridae Glycoprotein](http://www.phyloxml.org/archaeopteryx-js/bunya_glycoprotein.html)\n  * [Bcl-2 protein](http://www.phyloxml.org/archaeopteryx-js/bcl2_msa.html)\n* Preset search fields:\n  * [H3N2](http://www.phyloxml.org/archaeopteryx-js/h3n2_search_js.html)\n* Grouping of species and years for visualization:\n  * [Viral Strains](http://www.phyloxml.org/archaeopteryx-js/many_species_js.html)\n* SARS-CoV-2 with mutations and PANGO lineages:\n  * [SARS-CoV-2](http://www.phyloxml.org/archaeopteryx-js/sars_cov_3.html)\n\n\n### Detailed developer documentation\nhttps://docs.google.com/document/d/1COVe0iYbKtcBQxGTP4_zuimpk2FH9iusOVOgd5xCJ3A/edit\n\n### Version History\nhttps://github.com/cmzmasek/archaeopteryx-js/wiki/Archaeopteryx.js-Version-History\n\n### Dependencies\nArchaeopteryx.js has the following dependencies:\n * forester.js: https://www.npmjs.com/package/archaeopteryx\n * phyloxml.js: https://www.npmjs.com/package/phyloxml\n * d3.js (version 3): https://www.npmjs.com/package/d3/v/3.5.17\n * jQuery (1.12.4): https://www.npmjs.com/package/jquery/v/1.12.4\n * jQuery UI (1.12.1): https://www.npmjs.com/package/jquery-ui/v/1.12.1\n * sax.js (1.2.4): https://www.npmjs.com/package/sax/v/1.2.4\n \nFor file (Newick/New Hampshire, phyloXML) and graphics (PNG, SVG)\ndownload/export, the following five libraries are required as well:\n * canvg: https://www.npmjs.com/package/canvg\n * rgbcolor: https://www.npmjs.com/package/rgbcolor\n * Blob.js: https://github.com/eligrey/Blob.js\n * canvas-toBlob.js (needed in some versions of Internet Explorer and Opera): https://github.com/eligrey/canvas-toBlob.js\n * FileSaver.js: https://github.com/eligrey/FileSaver.js\n \nAdditionally, Archaeopteryx.js also requires the following CSS:\n * jquery-ui.css: https://code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css\n\n\n## Basic Example of HTML for launching Archaeopteryx.js\n\nExample of HTML page to launch a basic Archaeopteryx.js instance:\n```\n\u003c!DOCTYPE html\u003e\n\u003cmeta charset=\"utf-8\"\u003e\n\u003chead\u003e\n   \u003ctitle\u003eArchaeopteryx.js Basic Demo\u003c/title\u003e\n\n   \u003c!-- For MS IE/Edge compatibility:--\u003e\n   \u003cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=100\"\u003e\n\n   \u003c!-- D3.js, jQuery, and jQuery UI:--\u003e\n   \u003cscript src=\"http://d3js.org/d3.v3.min.js\"\u003e\u003c/script\u003e\n   \u003cscript src=\"https://code.jquery.com/jquery-1.12.4.js\"\u003e\u003c/script\u003e\n   \u003cscript src=\"https://code.jquery.com/ui/1.12.0/jquery-ui.js\"\u003e\u003c/script\u003e\n\n   \u003c!-- SAX XML parser:--\u003e\n   \u003cscript src=\"http://www.phyloxml.org/js/dependencies/sax.js\"\u003e\u003c/script\u003e\n\n   \u003c!-- Archaeopteryx.js requires forester.js and phyloxml.js:--\u003e\n   \u003cscript src=\"http://path/to/phyloxml.js\"\u003e\u003c/script\u003e\n   \u003cscript src=\"http://path/to/forester.js\"\u003e\u003c/script\u003e\n   \u003cscript src=\"http://path/to/archaeopteryx.js\"\u003e\u003c/script\u003e\n\n   \u003c!-- CSS for jQuery UI: --\u003e\n   \u003clink rel=\"stylesheet\" href=\"https://code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css\"\u003e\n\n   \u003cscript\u003e\n       function load() {\n           var options = {};\n           options.backgroundColorDefault = '#f0f0f0';\n           var settings = {};\n           var loc = 'https://raw.githubusercontent.com/cmzmasek/archaeopteryx-js/master/test/data/phyloxml_trees/apaf.xml';\n\n           jQuery.get(loc,\n                   function (data) {\n                       var tree = null;\n                       try {\n                           tree = archaeopteryx.parseTree(loc, data, true, false);\n                       }\n                       catch (e) {\n                           alert(\"error while parsing tree: \" + e);\n                       }\n                       if (tree) {\n                           try {\n                               archaeopteryx.launch('#phylogram1', tree, options, settings);\n                           }\n                           catch (e) {\n                               alert(\"error while launching archaeopteryx: \" + e);\n                           }\n                       }\n                   },\n                   \"text\")\n                   .fail(function () {\n                               alert(\"error: failed to read tree(s) from \\\"\" + loc + \"\\\"\");\n                           }\n                   );\n       }\n   \u003c/script\u003e\n\u003c/head\u003e\n\n\u003cbody onload=\"load()\"\u003e\n\u003cdiv\u003e\n   \u003ch2\u003eArchaeopteryx.js Basic Demo\u003c/h2\u003e\n   \u003cdiv id='phylogram1'\u003e\u003c/div\u003e\n   \u003cdiv id='controls0' class='ui-widget-content'\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/body\u003e\n```\n\n\n\n\n# forester.js\nforester.js is a general suite for dealing with phylogenetic trees.\n\n## forester.js Example\n\nThis basic example shows how to parse a New Hampshire formatted String\ninto to a object representing a phylogenetic tree.\nFollowed by pre- and post-order traversal,\nand writing back to a New Hampshire formatted String.\n\nChange './forester' to 'forester' if you use this code outside of this package\n\n```\nvar forester = require('./forester').forester;\n\nvar newHampshireFormattedString = \"(((a:1,b:1,c:1)N:2,(d:1,e:1)M:4)O:4,f:1)R:1;\";\nvar phylogeneticTree = forester.parseNewHampshire(newHampshireFormattedString);\n\nconsole.log('Pre-order traversal:');\nforester.preOrderTraversalAll(forester.getTreeRoot(phylogeneticTree), function (n) {\n    console.log(n.name + ':' + n.branch_length);\n});\n\nconsole.log('Post-order traversal:');\nforester.postOrderTraversalAll(forester.getTreeRoot(phylogeneticTree), function (n) {\n    console.log(n.name + ':' + n.branch_length);\n});\n\nconsole.log('In New Hampshire format:');\nvar nh = forester.toNewHampshire(phylogeneticTree);\nconsole.log(nh);\n```\n\nExpected output:\n\n```\nPre-order traversal:\nR:1\nf:1\nO:4\nM:4\ne:1\nd:1\nN:2\nc:1\nb:1\na:1\nPost-order traversal:\na:1\nb:1\nc:1\nN:2\nd:1\ne:1\nM:4\nO:4\nf:1\nR:1\nIn New Hampshire format:\n(((a:1,b:1,c:1)N:2,(d:1,e:1)M:4)O:4,f:1)R:1;\n```\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmzmasek%2Farchaeopteryx-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcmzmasek%2Farchaeopteryx-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmzmasek%2Farchaeopteryx-js/lists"}