{"id":45473912,"url":"https://github.com/Sam-Sims/salti","last_synced_at":"2026-03-07T16:00:55.809Z","repository":{"id":299268455,"uuid":"999808385","full_name":"Sam-Sims/salti","owner":"Sam-Sims","description":"A modern multiple sequence alignment browser - built for the terminal.","archived":false,"fork":false,"pushed_at":"2026-02-21T19:59:44.000Z","size":399,"stargazers_count":34,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-21T21:54:29.208Z","etag":null,"topics":["bioinformatics","hpc","msa","multiple-sequence-alignment","rust","tui"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Sam-Sims.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2025-06-10T20:21:59.000Z","updated_at":"2026-02-21T19:59:18.000Z","dependencies_parsed_at":"2025-06-15T17:49:57.067Z","dependency_job_id":null,"html_url":"https://github.com/Sam-Sims/salti","commit_stats":null,"previous_names":["sam-sims/salti"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/Sam-Sims/salti","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sam-Sims%2Fsalti","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sam-Sims%2Fsalti/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sam-Sims%2Fsalti/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sam-Sims%2Fsalti/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Sam-Sims","download_url":"https://codeload.github.com/Sam-Sims/salti/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sam-Sims%2Fsalti/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30221193,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T14:02:48.375Z","status":"ssl_error","status_checked_at":"2026-03-07T14:02:43.192Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["bioinformatics","hpc","msa","multiple-sequence-alignment","rust","tui"],"created_at":"2026-02-22T14:00:29.428Z","updated_at":"2026-03-07T16:00:55.802Z","avatar_url":"https://github.com/Sam-Sims.png","language":"Rust","funding_links":[],"categories":["MSA"],"sub_categories":[],"readme":"![GitHub Release](https://img.shields.io/github/v/release/sam-sims/salti?sort=date)\n![](https://anaconda.org/bioconda/salti/badges/version.svg)\n![crates.io](https://img.shields.io/crates/v/salti)\n\n[![test](https://github.com/Sam-Sims/salti/actions/workflows/test.yaml/badge.svg)](https://github.com/Sam-Sims/salti/actions/workflows/test.yaml)\n[![check](https://github.com/Sam-Sims/salti/actions/workflows/check.yaml/badge.svg)](https://github.com/Sam-Sims/salti/actions/workflows/check.yaml)\n\n# salti\n\n`salti` is a terminal based multiple sequence alignment (MSA) viewer for FASTA files.\nIt is designed for fast interactive browsing primarily on remote servers, and HPC environments, or anytime you dont want\nto leave the terminal.\n\u003cbr\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/splash_img.png\" /\u003e\n\u003c/p\u003e\n\n## Contents\n\n- [Features](#features)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Some notes on features](#some-notes-on-features)\n\n## Features\n\n### Fast\n\n`salti` is built for fast browsing and loading of large alignments, using [tokio](https://github.com/tokio-rs/tokio) for\nasync processing. This is in part achieved by:\n\n- Background threads handle tasks such as consensus/conservation calculation and file loading, allowing these to\n  complete dynamically without blocking the UI.\n- Rendering only the visible portion of the alignment, updating the view on state changes rather than every frame tick,\n  and caching consensus and conservation calculations in a window around the currently visible region.\n\nIt can handle alignments with thousands of sequences and \u003e200,000 positions without lag (tested with ~3k mpox\nalignments)\n\n### Transparent support for HTTP/SSH/Compressed files\n\nThanks to the cool [Paraseq](https://github.com/noamteyssier/paraseq) library `salti` can transparently load compressed\nfasta files, as well as files over\nHTTP/HTTPS or SSH. Just provide the URL or SSH path to the `load` command, e.g.\n`:load https://example.com/alignment.fasta` or `:load ssh://user@host/path/to/alignment.fasta`.\n\n### Command palette\n\nPress `:` to open a command palette for most actions. See [Usage](#command-palette-1) for details.\n\n![command_palette](assets/command_palette.gif)\n\n### Mouse support\n\n`Left click` to select a sequence/position, `Ctrl+left click` to select a region.\n\nHold middle mouse to pan around the alignment.\n\n![mouse](assets/mouse.gif)\n\n### Minimap\n\nPress `m` to open the minimap and drag to quickly pan around.\n\n![minimap](assets/minimap.gif)\n\n### Nucleotide and Amino acid support\n\n`salti` automatically detects whether your alignment is nucleotide (NT) or amino acid (AA), then applies the correct\nrendering mode.\n\n![nt/aa](assets/aant.png)\n\n### Translation\n\nCan translate NT codons to AA on the fly, with support for all 3 frames, although designed for browsing, rather than a\ndedicated translation tool.\n\n![translate](assets/translate.gif)\n\n### Useful viz tools\n\n- Collapse positions that match the reference or consensus to `.` for easier visualisation of differences.\n- Mouse selection to highlight regions or sequences\n- Pin important sequences fixed at the top while browsing.\n\n![viz](assets/viz.gif)\n\n### Themes\n\n`salti` supports multiple colour themes, which can be switched with the `set-theme` command. Available themes so far\nare:\n\n- `everforest-dark` - the default theme, based on the everforest colorscheme.\n- `solarized-light` - a light theme based on the solarized palette.\n- `tokyo-night` - a dark theme based on the tokyo night palette.\n- `terminal-default` - uses terminal-provided ANSI colours and defaults.\n\n![themes](assets/theme.gif)\n\n## Installation\n\n### Conda:\n\n![](https://anaconda.org/bioconda/salti/badges/platforms.svg)\n\n```\nconda install -c bioconda salti\n```\n\n### Binaries:\n\nPrecompiled binaries for Linux, MacOS and Windows are attached to the latest\nrelease.\n\n### Cargo:\n\nRequires [cargo](https://www.rust-lang.org/tools/install)\n\n```bash\ncargo install salti\n```\n\n### Build from source:\n\n#### Install rust toolchain:\n\nTo install please refer to the rust documentation: [docs](https://www.rust-lang.org/tools/install)\n\n#### Clone the repository:\n\n```bash\ngit clone https://github.com/Sam-Sims/salti\n```\n\n#### Build and add to path:\n\n```bash\ncd salti\ncargo build --release\nexport PATH=$PATH:$(pwd)/target/release\n```\n\nAll executables will be in the directory `salti/target/release`.\n\n## Usage\n\nI would recommend a modern terminal, with GPU acceleration and 24-bit colour (true colour) support for the best\nexperience.\nAdditionally, a font with Unicode support is required to render all characters correctly.\n\nI would also recommend a large terminal window for the best experience, but the app is designed to be usable\neven in smaller windows.\n\n`salti` is primarily developed and benchmarked in [Ghostty](https://ghostty.org/). I have tested it on several other\nterminals and it works well in most cases, though performance may vary. If you have responsiveness issues, please open\nan issue and include your terminal emulator and font information.\n\n```bash\nsalti \u003calignment.fasta\u003e\n```\n\nIf no file is passed, the app starts and waits for you to load one via the command palette.\n\n## Quick start keybinds\n\nI plan to add a help screen in the future for reference in app, but for now here are the most useful keybindings:\n\n### Global keybindings\n\n- `q` - Quit.\n- `:` - Opens the command palette.\n- `Up` / `Down` - Scroll vertically 1 row\n- `Left` / `Right` - Scroll horizontally 1 column.\n- `Shift` + `Left`/`Right`/`Up`/`Down` scrolls 10 columns/rows in that direction.\n- `Alt+Left` / `Alt+Right` - Scroll sequence name pane.\n- `Left cick` - Select a sequence or position. Click again to clear selection.\n- `Ctrl + Left click` - Select a range of sequences or positions\n- `Middle click + drag` - Pan.\n- `m` - Open the minimap\n\n### Command palette\n\nMost features can be accessed through the command palette (this is heavily inspired by the helix editors\nimplementation!).\n\nOpen with `:`, then type a command.\n\n- `Enter` confirms selection.\n- `Tab` / `Shift+Tab` cycles any candidates.\n- `Esc` closes the palette.\n\nCommands:\n\n- `jump-position` - Jump to a 1-based alignment position.\n- `jump-sequence` - Jump to a sequence by name\n- `pin-sequence` - Pin a visible sequence to the top of the alignment view.\n- `unpin-sequence` - Remove a sequence from the pinned group.\n- `set-filter` - Filter visible sequences by regex.\n- `clear-filter` - Clear the active filter.\n- `set-reference` - Set a reference sequence .\n- `toggle-translate` - Toggle AA translation.\n- `set-diff-mode` - Set diff rendering mode (`off`, `reference`, or `consensus`).\n- `load-alignment` (alias: `load`) - Load an alignment file.\n- `set-consensus-method` - Choose `majority` or `majority-non-gap`.\n- `set-translation-frame` - Set translation frame (`1`, `2`, or `3`).\n- `set-theme` - Set active theme (`everforest-dark`, `solarized-light`, `tokyo-night`, or `terminal-default`).\n- `set-sequence-type` - Override auto-detection if it fails (`dna`, `aa`, or `full`).\n- `check-update` - Check for updates and show the latest version.\n- `quit` - Quit the app.\n\n## Some notes on features\n\n### Fuzzy matching\n\nAll commands that take string input support fuzzy matching. For example, `jump-sequence` will match any sequence name\nthat contains the input string.\nIf multiple candidates match, you can cycle through them with `Tab` / `Shift+Tab`.\n\n### Consensus method\n\nTwo methods are available for consensus calculation:\n\n- `majority` - The most common character at each position, including gaps.\n- `majority-non-gap` - The most common character at each position, excluding gaps\n\nIf there is a tie for most common character, one is chosen at random.\n\nConsensus is calculated in the background\n\n### Pinned behaviour\n\n- Pinned sequences stay visible and remain at the top, even when they do not match the active filter.\n- Setting a sequence as reference removes it from pinned state and hides it as the reference row.\n\n### Data/Rendering\n\n- Input must be FASTA with equal sequence lengths across records.\n- Sequence type is auto-detected on load; you can override it if its wrong.\n    - It samples up to 100 random alignments and compares NT and AA character fractions. If neither crosses 50%, it\n      falls back to `full` mode.\n\n### Update check:\n\n`salti` will check for updates on startup and notify you if a new version is available. It does this by\nquerying the crates api: https://crates.io/api/v1/crates. However, no network connection is required, and will not cause\nany issues if the check fails.\n\nThis behaviour can be disabled entirely by setting `SALTI_SKIP_UPDATE_CHECK=true`. You can still check for updates\nmanually with the `check-update` command.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSam-Sims%2Fsalti","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FSam-Sims%2Fsalti","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSam-Sims%2Fsalti/lists"}