Coot is a powerful macromolecular model-building tool for analysing X-ray data and models (i.e. proteins, ligands, RNA and DNA). There are many tools for model manipulation and building, such as minimization, molecular superposition, fragment rotation/translations, rotamer-fitting, de novo building and refinement.
Coot is used by scientists using X-ray crystallography or cryo-EM for analysis of proteins, electron density maps, protein interactions and drug design.
Screenshots
Observed history
| App | Change | Version | When ↑ |
|---|---|---|---|
| updated | 1.3.3 | 24 Sept 2026 |
Upstream releases
Release notes supplied by the developer. These dates are not Flathub package publication times.
1.3.313 Aug 2026
- o BUG-FIX: Fix the problem of unresponsive Left-mouse after Edit Chi Angles
1.3.210 Aug 2026
- o FEATURE: Add AI button: for people who want to use an LLM to communicate with Coot
- o FEATURE: Rotate/Translate Zone: the fragment can now be moved by click-dragging on the atoms and rotated about its centre using ctrl-shift-drag
- o FEATURE: Command terminal with command completion and a natural-language command interface [Jordan Dialpuri]
- o FEATURE: Cremer-Pople puckering sphere visualization for carbohydrate ring analysis [Jordan Dialpuri]
- o FEATURE: Altona-Sundaralingam ribose pucker calculation [Jordan Dialpuri]
- o FEATURE: Read and write PDBQT files (AutoDock/Vina docking)
- o FEATURE: Multi-pick delete waters
- o FEATURE: Cavity detection (KVFinder-style) with subpocket segmentation
- o FEATURE: Carbohydrate: N-linked glycan building ("N-linked Glycan LMA") reworked in C++; fixes for glyco link bugs
- o FEATURE: Layla: "Search for Similar" - find monomers in the monomer library using acedrg atom types
- o FEATURE: Layla: "Show Alerts" structural-alert highlighting
- o FEATURE: Layla: CCP4i2 mode, multi-format save dialog and SMILES I/O [Jakub Smulski]
- o FEATURE: Hydrogen-bond information now included in the atom overlap dots analysis
- o FEATURE: Scripting API additions: get_cremer_pople(), get_monomer_name(), get_InChI(), get_hetgroups(), delete_all_waters(), delete_all_hetgroups(), get_monomer_restraints_as_json(), read_interesting_places_json(), servalcat_refine_xray_with_keywords(), get_sequence_view(), split_multi_model_molecule_and_merge()
- o CHANGE: First startup dialog now saves preferences immediately rather than on exit
- o CHANGE: Ligand-fitting code made more robust
- o CHANGE: Fluorine atoms are now drawn slightly blue
- o CHANGE: EM maps now use a coarser contour-level step (0.3 sigma)
- o CHANGE: Rework the code that gives ions big radii
- o CHANGE: Non-drawn bonds now also apply to the B-factor and occupancy representations
- o CHANGE: NCS ghost generation is skipped for molecules with more than 100 chains
- o CHANGE: ALA and GLY no longer get rotamer validation information
- o CHANGE: -h command line option now works like --help
- o CHANGE: Python docstrings are now generated for many more of the scripting API functions
- o CHANGE: Icons updated to their symbolic counterparts for recent Adwaita [Jakub Smulski]
- o BUG-FIX: Fix NVIDIA driver crash on GL context re-realize (HUD instanced draw)
- o BUG-FIX: Fix abort in instanced-mesh setup when there are zero instances
- o BUG-FIX: Fix map memory not being released on closing a map molecule
- o BUG-FIX: Fix memory leak in the CA-CA distance spots
- o BUG-FIX: Fix missing heteroatom labels in Layla (all atoms were shown as carbon; also on older Pango)
- o BUG-FIX: Layla: fix generator dialog progress bar stuck after the job exits
- o BUG-FIX: Fix the placement of the SVG widget in the FLE View dialog
- o BUG-FIX: Fix the placement of buttons and overall spacing of the Superpose Ligands dialog
- o BUG-FIX: Fixes for match_torsions()
- o BUG-FIX: Fix URL encoding in the recent-new-ligands browser so that PDBe queries work
- o BUG-FIX: Fix the residue type look-up for the chi angles buttons
- o BUG-FIX: Better margins for SSM dialog
- o BUG-FIX: Fix user-defined atom colours leaking into other colouring modes
- o BUG-FIX: Fix the vertical scrolling of the sequence view
- o BUG-FIX: Ligand-fitting: Conformer option now insensitive without conformer generation
- o BUG-FIX: Copy Fragment molecule selector now has a default
- o BUG-FIX: Now we use the user-defined colour for symmetry-related atoms
- o BUG-FIX: Fix crash when using Flatpak binary on contact dots for a molecule without contacts [Jiang Haizhu]
1.314 May 2026
- o FEATURE: Map caps ("sliced apple" view): a 2D coloured cross-section of the electron density on a clipping plane, stitched seamlessly to the trimmed 3D isosurface behind the plane: add_density_map_cap()
- o CHANGE: MoleculesToTriangles meshes now use material-based lighting
- o CHANGE: Default material tweaked: ambient raised from 0.1 to 0.2 and diffuse lowered from 1.0 to 0.5, giving softer highlights and less blown-out surfaces for objects that don't set their own material
- o CHANGE: Improved depth-of-field shader
- o CHANGE: Reworked depth fogging in the moleculestotriangles shader; objects drawn with draw_meshed_generic_display_object_meshes() now also use depth fogging
- o BUG-FIX: Fix the colour rotation of the difference map negative level
- o BUG-FIX: Fix the residue-number colour ramp for colorRampChainsScheme: the ramp range now uses only amino-acid residues (waters and other heteros were skewing the min/max), each chain gets its own ramp colour scheme, and the HSV saturation is bumped from 0.4 to 0.6 for more vivid rainbow chains. Problem seen in 4zzn.
- o BUG-FIX: Screenshot resolution now uses framebuffer_scale instead of a hardcoded 2x
- o FEATURE: "Symmetry as C-alphas" button added to the Coot: Symmetry dialog
- o CHANGE: Atom labelling reworked so that it happens on mouse button up
- o BUG-FIX: Fix the rotation jump after zooming
- o BUG-FIX: Fix scaling and offsets in graphics_ligand_mesh_molecule_t::draw()
- o BUG-FIX: Fix the NCS jumping centre
- o FEATURE: Molecular Placement for cryo-EM maps
- o FEATURE: hiranuma_inversion() added - converts the pLDDT scores (0-100 confidence values) that AlphaFold stores in the B-factor column of its predicted models into physically meaningful isotropic B-factors, so that AlphaFold models can be used with refinement, density-scoring and validation tools that expect real B-factors
- o BUG-FIX: Fix action mutate_base_to_type_U name
- o BUG-FIX: Restraints lock now acquired when updating NBCs in minimize()
- o BUG-FIX: Atom indexing error fixed in update_extra_restraints_representation_geman_mcclure()
- o BUG-FIX: For ramp_chains, the polymer range is now known
- o FEATURE: "Proportional editing" rotation added
- o FEATURE: Delete symmetry waters from the rotation centre
- o BUG-FIX: Fix behaviour of the residue range selection in renumber residue range
- o BUG-FIX: Fixups for environment distances
- o FEATURE: NCS validation graph enabled
- o CHANGE: distortion_bond_mini_stats() and distortion_angle_mini_stats() now also calculate nZ, the normalised z-score of the deviation from the target value (deviation / sigma)
- o FEATURE: Current-residue marker added to the Ramachandran plot
- o CHANGE: Density correlation validation graph sped up
- o CHANGE: Pucker analysis geometry fixed up
- o BUG-FIX: Close the validation Ramachandran box when a molecule is closed; refresh_ramachandran_plot_model_list() now called in close_molecule()
- o CHANGE: Drug fetch now uses ChEMBL instead of DrugBank (DrugBank is blocked by Cloudflare)
- o FEATURE: Lhasa extended IO: import and export for various data formats
- o FEATURE: Lhasa can now read and write RDKit pickles
- o CHANGE: FLEV SVG output now has width and height before the viewBox
- o CHANGE: Compile guards so Lhasa/Layla still compile when RDKit has no Coordgen support
- o BUG-FIX: Fix rotation and overall jankiness in coordgen mode
- o BUG-FIX: coordgen error no longer printed when there is no coordgen support in RDKit
- o FEATURE: Browser for new ligands added
- o CHANGE: recent_new_ligands.py reworked to use the new PDBe API
- o BUG-FIX: Fix the inner ring bond positioning
- o FEATURE: Functions added to control the lighting of maps
- o FEATURE: brighten_maps() added to the Coot API
- o CHANGE: EMDB map download reworked: now uses an in-window progress bar; recentre message no longer shown for map download; download-emdb-map-label is no longer used in fetch_emdb_map()
- o CHANGE: Reading a map again moves to the middle of the box
- o BUG-FIX: Fix the download directory for maps
- o FEATURE: Cmd++ to increase the font size in the virtual terminal
- o FEATURE: VTE terminal as a replacement for the Python entry, with coot_vte_repl.py
- o FEATURE: Servalcat outliers JSON input (servalcat_outliers_json_for_coot.py)
- o BUG-FIX: Prevent double-running of startup scripts
- o CHANGE: new_startup functions renamed to startup
- o FEATURE: --dictionary-with-mol added to the command-line options
- o BUG-FIX: Re-enable command line scripts in run_command_line_scripts_callback()
- o FEATURE: Aniso and H-atom filtering in the Save Coordinates dialog
- o FEATURE: "Edit -> Residue info": "Apply occupancy to atom with alt conformation" checkbox restored
- o FEATURE: "NCS Ligands" user interface added
- o BUG-FIX: Fix crash in display control delete button
- o BUG-FIX: Widget protection in on_display_control_delete_molecule_button_clicked()
- o BUG-FIX: Fix TER atom counting in AMBER trajectory processing [eunos-1128]
- o BUG-FIX: Fix names of the entries in the NCS ligands frame
- o FEATURE: GUI item added for "Sort Chains"
- o FEATURE: Residue info shown in the status bar when hovering over circles in the Ramachandran plot
- o FEATURE: Atom Overlaps display now controlled via a toolbar toggle button; "Delete All Generic Display Objects" now correctly prevents overlaps from reappearing after refinement
- o FEATURE: "Local B-factors" now activates display immediately when the menu item is clicked
- o FEATURE: GUI control for map generic objects added
- o CHANGE: Validation graph correlation colours reworked: more red at mid-range values, muted professional colour palette
- o BUG-FIX: Fix the alt conf occupancy slider in the rotamer dialog after "Add Alt Conf": the slider now has an adjustment, draw_value, marks at 0.0/0.5/0.99, and 0.01 step granularity
- o BUG-FIX: Fix "Go To Atom" dialog raising from the macOS Dock
- o BUG-FIX: Validation graphs now updated after side-chain 180 flip and peptide flip
- o BUG-FIX: "Add OXT" now respects the current bonding mode
- o BUG-FIX: Fix duplicate entries in the "Add OXT" molecule combobox when reused
- o BUG-FIX: Fix the sequence view to extend to the end of the residue range (ligands and waters were being clipped)
- o FEATURE: Active residue is now highlighted in the sequence view; sequence view is now updated on model modification
- o FEATURE: add_picked_atom_info_to_status_bar() added
- o CHANGE: Molecular representation's mesh_vbox is now inside a GtkScrolledWindow
- o CHANGE: Clear Atom labels item moved
- o BUG-FIX: Stop picking of symmetry atoms when symmetry is not displayed
- o BUG-FIX: Fix the active item of refinement control comboboxes
- o BUG-FIX: Close the side panel when the difference map peaks box is closed
- o BUG-FIX: Fix drag-and-drop file dropping
- o FEATURE: rebox_map() and apply_translation_to_molecule()
- o FEATURE: get_map_cap_mesh() on molecule_t and molecules_container_t, for headless map cap rendering
- o FEATURE: delete_links_containing_residue_py() added
- o FEATURE: to_generic_object_add_tori() added
- o CHANGE: render function made const
- o BUG-FIX: Check for LIBRSVG version before using rsvg_handle_render_cairo()
- o BUG-FIX: Fix backward.hpp for PowerPC
- o CHANGE: Eigen3 is now required at configure time
- o CHANGE: GSL autobuild install now links against libcblas so that libgsl.so carries DT_NEEDED libcblas (or libgslcblas) which eliminates the --as-needed cblas_* undefined-reference failure
- o BUG-FIX: Use CMake for RDKit in Lhasa; pre-install Eigen for Lhasa
- o BUG-FIX: Fix nanobind resolution for venvs
- o BUG-FIX: Fix nanobind find_package broken without -Dnanobind_DIR
- o BUG-FIX: Fix linking of maeparser and libexpat
- o BUG-FIX: Fix non-/usr-based Chapi build
- o CHANGE: Removed --with-enhanced-ligand-tools from coot configure
- o CHANGE: maeparser and coordgen added to build-it-3-3; eigen updated to 5.0.1
1.231 Mar 2026
- o FEATURE: Side-by-side stereo mode (cross-eye and wall-eye) with configurable stereo angle
- o FEATURE: High-resolution screenshots now work for both basic and fancy rendering modes
- o FEATURE: Material properties added to instanced-object shaders
- o FEATURE: Anisotropic thermal ellipsoid "empty" representation with multi-ring display
- o FEATURE: Gaussian surface opacity control
- o FEATURE: Bond smoothness toggle
- o FEATURE: Shadows for "other meshes" (generic display objects)
- o FEATURE: Single-model view for CA+Ligands representation with colour-by-dictionary-and-chain
- o FEATURE: Distance labels display can now be toggled with set_show_distance_labels()
- o FEATURE: scale_up_graphics() and scale_down_graphics() now added to the API
- o CHANGE: Improved default secondary structure colours
- o CHANGE: Rainbow ribbons are less bright
- o CHANGE: Aniso probability scale now goes to 0.99
- o CHANGE: Ribbon coils restored with radius multiplier for spline representation
- o CHANGE: End-caps added for worm representations
- o CHANGE: Max SSAO kernel samples doubled to 512
- o CHANGE: Reduced step size for front clipping plane changes
- o CHANGE: Don't include hydrogen atoms in Local B-factor display
- o CHANGE: x-ray Sharpen/Blur Map slider now displays the value
- o CHANGE: Difference map peaks now shows closest atom not position
- o BUG-FIX: Now the Recover Session works as expected [Kevin Jude]
- o BUG-FIX: Fix the rotation jump after panning
- o BUG-FIX: Fix peptide straggle-bond when displaying alt-confs
- o BUG-FIX: Fix texture indexing in TextureMesh
- o BUG-FIX: Fix framebuffer rendering with transparency
- o BUG-FIX: Fix the map colour button in single-map properties dialog
- o BUG-FIX: Fix ribbon surface normal computation and spline frame orthonormality [Martin Noble]
- o FEATURE: Post-Translational Modifications (PTMs) can now be applied to residues, with a database of common PTMs
- o FEATURE: Improved jiggle-fitting for Local Fitting in Cryo-EM
- o FEATURE: Add Residue by Map Fit function
- o FEATURE: Ephemeral overlay labels for transient annotations
- o FEATURE: Key-binding R for Refine with auto-accept
- o FEATURE: Key-binding Ctrl-E for Python scripting entry
- o FEATURE: Mutate-and-auto-fit improvements
- o BUG-FIX: Fix self-deadlock in make_moving_atoms_graphics_object() for CA bond mode
- o BUG-FIX: Fix single-strand test in ideal nucleic acid builder
- o BUG-FIX: Fix PHE/TYR nomenclature error side chain atom swapping
- o FEATURE: Phenix .geo file validation for bonds, angles, chirals and non-bonded contacts with colour-coded display
- o FEATURE: Validation graphs can now be undocked [Jakub Smulski]
- o FEATURE: Rotamer probability now shown in validation graph
- o FEATURE: Refinement results mini-statistics (bond and angle distortions) returned from refinement
- o FEATURE: Atom geometry distortion info now includes atom specs
- o CHANGE: Molecule mesh display control toggles relocated
- o BUG-FIX: Fix rotamer probability in validation graph model list refresh
- o FEATURE: Ligand Builder (Lhasa) added to the Ligand menu
- o FEATURE: Fetch Ligand Restraints Dictionary callback added
- o FEATURE: Pyrogen integration via RDKit mol pickle base64 API
- o FEATURE: Curlew extension download and install function
- o CHANGE: Ligand fitting dialog is now scrollable
- o BUG-FIX: Fix the bond-order combobox default in acedrg link dialog
- o BUG-FIX: Fix Lhasa molecule centering [Jakub Smulski]
- o BUG-FIX: Fix RDKit stereochemistry handling and isomeric SMILES output [Jakub Smulski]
- o FEATURE: NetCDF support for reading AMBER trajectories
- o FEATURE: Slurpable maps recognized as EM maps
- o CHANGE: Improved map-based occlusions
- o FEATURE: JSON-RPC server, MCP Bridge and Skills for Agentic Coot
- o FEATURE: RPC server menu item added
- o FEATURE: Python API function documentation improvements across the board
- o FEATURE: coot_ping() function for connectivity testing
- o FEATURE: get_function_descriptions() added to the bridge
- o FEATURE: Shift-click on an atom shows atom info in the status bar
- o FEATURE: "Delete all water" menu item
- o FEATURE: EM Placement dialog with Phaser integration
- o FEATURE: Git commit hash and build date shown in About dialog
- o FEATURE: Improved "Recover Session" dialog
- o FEATURE: Generic Display Objects dialog now shows button state
- o FEATURE: Interesting places JSON file reading with atom-spec parsing
- o CHANGE: Copy Fragment combobox now sets the active item
- o CHANGE: Don't include hydrogen atoms in Local B-factor display
- o CHANGE: Sharpen/Blur Map slider now displays the value
- o CHANGE: Difference Map Peaks now shows closest atom
- o BUG-FIX: Fix validation graph combobox g_warning()
- o BUG-FIX: Better handling for unknown monomer types in PTM dialog
- o BUG-FIX: Remove duplicate entries from PTM combobox
- o BUG-FIX: Fix Copy Fragment combobox active item
- o NEW FUNCTION: get_molecule_diameter()
- o NEW FUNCTION: get_torsions_for_residues_in_chain()
- o NEW FUNCTION: get_hydrogen_bonds_py() - pythonic hydrogen bond info
- o NEW FUNCTION: set_residue_properties()
- o NEW FUNCTION: get_computed_acedrg_atom_types()
- o NEW FUNCTION: pyrogen_from_rdkit_mol_pickle_base64()
- o NEW FUNCTION: get_rdkit_mol_pickle_base64() with pickling options
- o NEW FUNCTION: add_residue_by_map_fit()


