AnnZarro 0.6.0
An About dialog and what a public site needs (imprint, privacy notice, a footer), set from the admin page; a Dataset information dialog with attribution, README and structure; last sessions listed instead of redrawn, and plots of a set too large for the browser refused one by one instead of crashing the tab; plot options that survive links and Duplicate; and a Publication preset for figures.
Added
- Last sessions. The welcome screen and the Load Panel Set dialog list up to three last sessions first ("Last session (autosaved 14:32)", the dataset and the panel count), each with Restore. A session whose tab ran out of memory while it was drawn is marked "did not finish loading" and offers Restore with the default subset; it is never restored by itself again.
- No fill in the Focused cell group (Plot Options) draws the focused marker as an open circle, its edge only, in 2D, 3D, gene and large plots, in exports and in links, panel sets and Apply to other panels. An edge width under 1 px is raised to 1 px when it is switched on, so the circle always shows.
- The Structure tab of the Dataset information dialog has a search box: it filters column names, keys,
unspaths, types and category labels as you type, marks the matches, opens the sections that hold them and counts them. A.*switch reads the query as a regular expression,Aamatches case (both remembered); an invalid or too slow pattern is said in words and the last result stays. Escape clears it,/and Ctrl/Cmd+F focus it. uns["annzarro"]is a versioned format (schemaannzarro.dataset-info,schema_version1.0; a dictionary without them is version 1). The reader ignores keys it does not know, reads a newer minor version in full and a newer major version for the fields that did not change (the dialog says so), and every field accepts a simple form and a richer one: a licence as{id, url, text}, authors with ORCID iDs, several contacts, funding and provenance.annzarro store annotatewrites the marker, takes--from-jsonfor the richer forms, and refuses a value the reader would ignore. The field table and the compatibility rules are in the deployment guide.- A Dataset information button beside the open dataset's name shows the dataset's attribution (title, licence, authors, citation with a copy button, DOI, source, contact), its README rendered as safe Markdown (raw HTML is shown as text, links only http, https and mailto, no images) and its AnnData structure (cells and genes, obs and var columns with types, flags, category labels and colours with a warning when the colour count differs from the category count, obsm, layers and the other slots with shapes and, for sparse matrices, density, raw, unknown groups, the
unstree). Each tab loads when first opened, with a loading state and a retry on failure; the dataset browser's details pane shows the same for a dataset that records it. Dataset owners write it intouns["annzarro"]anduns["README"], withannzarro store annotatefor a zarr store that is already written; CELLxGENE'suns["title"]anduns["citation"]are shown too. See "Dataset information and attribution" in the deployment guide. - Click the app name at the top left to see which version you are running, how to cite AnnZarro, and who develops and funds it (the Setty Lab at Fred Hutch Cancer Center, with the NIH award numbers), with links to the documentation, the repository and the changelog.
- A server can show who runs it and what it owes its visitors. Under
site:in the configuration, set an imprint, privacy notice, accessibility statement and terms of use, each as a link, a Markdown text or a Markdown file, plus an operator, a contact and the link labels (Impressum,Datenschutzfor German sites). A small footer line on every page, including the sign-in, account and admin pages, links them; the About dialog gets a "This site" block, and a click on the imprint opens it in place. The texts are also served at/site/imprint,/site/privacy,/site/accessibilityand/site/terms, which need no sign-in. Nothing appears until you configure it. site.robotstells search engines to stay away (by default on a server with login),site.security_contactserves/.well-known/security.txt, andsite.storage.persistent_convenience: falsekeeps the layout autosave and recent datasets only until the tab closes.- The Gene Set panel's question before it sends gene lists now says that each service also receives your IP address, and links the service's privacy policy.
site.software_credits: falsereduces the About dialog's credit for AnnZarro (lab logo, funding, citation) to its name, version, licence and links; it stays by default everywhere, below the site's own block.- The About dialog of the desktop app states what the app sends and where.
- The server warns at start when
integrations.external_requestsis"on"on a shared server, and whenbranding.contact_info.custom_htmlcontains a script, an iframe or an address on another server. - Public site on the admin page: every
site:setting (imprint, privacy notice, accessibility statement, terms, operator, contact, labels, footer, search engines, security contact, language, the AnnZarro credit, browser storage) can be set while the server runs, and the footer, About and the/site/pages show it at once. Each field explains itself on hover and links the public-site guide, a Markdown text has a live preview, a value the server would refuse at start is refused under its field, and a checklist says which of imprint, privacy notice, contact and accessibility statement are missing. Each text shows what is in effect and where it comes from, a text the configuration file reads from afilewith its path and as the pages show it. A save sends only what you changed: looking at another option, or a link or text left empty, changes nothing, and Not shown over the configuration file's text says that it hides it. An admin's value wins over the configuration file until Reset to config file;policy.locked: [site.imprint]keeps a key in the file's hands. A text'sfilecan only be set in the configuration file. - Data & privacy (
/site/data), generated from the running configuration: what the browser keeps, the cookies, what the Gene Set panel may send to which services and when, and that there are no analytics. Without a configured privacy notice it says plainly that it is not one./site/aboutshows the About dialog as a page.
Changed
- Every setting on the admin pages has an info mark and a Guide link. Hover or tab to the mark for what the setting does, its default and what it affects; Guide opens the explanation in the docs. This covers the Settings tab and the per-user settings, the Public site, the fields of the Users and Access panels, and Data sources. The admin page's introduction now states the real rule between the config file and the admin: an admin value overrides the file unless the key is in
policy.locked, and a restrict key can only be narrowed. - A new visit no longer redraws the last session by itself; a reload of the tab still does. A panel set kept on "All cells" and moved to a very large dataset could run the tab out of memory, and every reload drew it again.
ui.autosave.auto_restorenow takesreload(the default),always(the old behaviour, alsotrue) ornever(alsofalse);ui.autosave.show_in_listlists the last sessions and is on by default. Upgrade: setauto_restore: alwaysto keep the old behaviour. - The address names the open dataset. Every way of opening one (the dataset browser, the back button beside its name, a panel set, Restore, the desktop app, the dataset opened at start) writes
?dataset_path=(its path in the data directory, such as?dataset_path=bm_aging.zarr), with no panel open too, so a reload opens the dataset on screen. The address is replaced, not added to the history. - The bare address opens no dataset. A fresh visit to it no longer opens the dataset opened last; the welcome screen lists the last sessions and the recent datasets, with Browse datasets…. A data directory with only one dataset still opens it, and the desktop app still reopens the dataset opened last.
- The subset size you choose is kept for the tab. It still follows you from dataset to dataset and through a reload of the tab, but a fresh visit (a new tab, the address typed, a bookmark) starts on the server's default subset. Upgrade: a size kept by 0.5.5 is removed at the first load, not carried; choose it again once in each tab.
- Plots drawn at once are drawn in turn (a restored session, a dataset switch or a larger subset with plots open): each is checked against what the plots before it hold, the browser's allocation check included, so the later ones of a set too large for the browser are not drawn instead of running the tab out of memory. Each says what ran short ("Not drawn: not enough browser buffers", "... JS memory", "... browser memory", or "too many WebGL canvases") with Half the cells, Subset…, Close other plots and Draw anyway (with what it risks). A Cell or Gene Table of more rows than fit is not loaded, with the same choices.
- The Publication preset sets the font to Arial and draws a shorter colour bar with fewer ticks (40 % long, three ticks); Default puts the font back.
- The panel's text font now reaches the legend (title and items) and the colour bar (title and tick labels) as well as the axes, when you change it in Plot Options, press a preset, and in exports.
- Plot images are exported at twice the size set in Plot Options by default (2400 × 1600 pixels for the default 1200 × 800), so a figure stays sharp in print; the modebar camera follows the panel's export size. Untick Export at 2x for files of exactly the pixels set. A panel or link saved with the scale switched off keeps it off; one that never recorded it exports at 2x. SVG files keep the size set.
- A plot's toolbar (zoom, pan, reset, camera) sits in the top right corner of the plotting area instead of the figure's, so a legend or colour bar placed on the right, the default, no longer runs into it.
- A colour bar placed on top of or below a plot lies wholly outside the axes, with the margin it needs made for it, instead of over the top or bottom of the plot. It sits below the x-axis title at the bottom. A legend above or below a plot does the same, clear of the axes and the x-axis title, in short panels too.
- The About dialog says that the Setty Lab develops and funds AnnZarro (the software), so that a site that runs it is not mistaken for the lab's own.
- A server other people reach (login on, a network address,
server.hostedor a proxy) shows a footer line even with nothing configured: "About · Data & privacy", plus the configured texts and contact. The desktop app and a personal server show none until you configure something. - Such a server logs a warning at start when it publishes neither an imprint nor a privacy notice, naming the admin page's Public site section and the guide.
Fixes
- A dataset README longer than the 200,000 characters the dialog renders says that it was cut ("Showing the first 200,000 characters of … KB"); its end used to be left out without a note.
- The dataset browser's path field opens with / or ~ (the first character of the path, as in the macOS and GTK file dialogs), from the list or from an empty search box; a search box that holds text keeps the character. The hint reads "Type a path or URL: /" on every platform. It advertised Cmd+L, which Safari keeps for its address bar and never passes to the page; Ctrl+L and Cmd+L still work where the web browser passes them on. In the list,
/no longer moves to the search box. - Choosing "All cells" on a dataset the server shows in full anyway (up to its subsampling threshold) no longer carries every cell to the next, larger dataset: the kept size is forgotten and large datasets open on the server's default subset. Every cell chosen on a larger dataset is still carried.
- The subset dialog counts the array buffers of every open plot together. With six Cell Plots open on a 95.6-million-cell dataset, a computer with 128 GB let every cell through: its memory holds six large plots of 8 to 9 GB, but one browser tab holds about 16.6 GB of array buffers in Chrome and about 15 GB in Safari, and the tab ran out. Such a size is now refused with "Needs ~60 GB of browser buffers", and the dialog says up to which size the plots fit (about 26 million cells for six plots in Chrome, 23.6 million in Safari). A new or redrawn large plot is checked the same way beside the plots already open.
ui.memory.buffers_gbsets the limit; by default it is the browser's own. - After the tab ended while drawing large plots, the next page keeps the buffers it held as this browser's limit, so the same plots at the same size are not offered as fitting again. Before, a large-plot draw never left the crash marker that makes the guard more careful.
- The margin learned from a crash no longer applies to everything, forever. It grew by 0.25 with every crash, for every action of any size, and was never forgotten. It now applies only to actions of at least half the size of the one that crashed, is forgotten after a week or once an action that large succeeds, and a refusal that only it causes says so and offers Reset the margin (in the panel and the subset dialog). A margin kept by an earlier version is dropped.
- A new Cell Plot was refused although the browser had the memory, and allowed when it did not: the allocation check's answer was inverted (since 0.4.2) for a new or duplicated large plot, a full-resolution export, a recolour and hover labels of more than 256 MB. After closing a plot of every cell of a 95.6-million-cell dataset, or on a fresh page that opened it on every cell, the create tile said "Not enough browser memory" with nothing open, and kept saying it after the subset was reduced to 100,000 cells.
- The create and duplicate tiles are checked again when the number of cells shown changes (a smaller subset, another dataset), and a few seconds after a plot is closed, once its memory is freed. A tile refused at every cell stayed refused at 100,000 cells until another panel was opened or closed; a click on a refused tile also checks again.
- Every memory refusal names the limit that binds: the create tile's note, the panel's headline and its status tag say "JS memory", "browser buffers", "browser memory" or "WebGL canvases" instead of "browser memory" for all of them.
- The dataset information dialog shows the dataset's name on one line, cutting the start with an ellipsis (the full path is its tooltip), and tables and code in a README use the dialog's full width.
- A dataset's README, and the texts of a public site, render bare web addresses as links, and pipe tables, fenced and indented code blocks, horizontal rules, underlined headings and block quotes instead of showing their markup. Tables scroll sideways inside their own box when they are wider than the dialog, and show at most 500 rows and 30 columns.
- A category hidden with a click on the legend stays hidden when a Cell Plot linked to a filtered Cell Table removes or greys out the cells not in the table. Hiding moved to another category, so other cells disappeared and came back, and a category the table filter emptied came back shown. The hidden entries now follow their category, or colour group, through every redraw, in regular and large plots, until you colour by another column.
- A plot opened from a share link, a panel set, the autosave or Duplicate now looks as it did where it was made. Its axis lines, which the first draw took from the Grid switch, were missing whenever Grid was off, which is what the Publication preset does; so were the colours of the legend title and the toolbar, the tick colour, and Show Legend (the legend and the colour bar came back). Changing an axis, text or grid colour, or the font, in Plot Options now redraws every element that uses it, as opening the same plot does. Links made by earlier versions need no repair: the settings they carry were right, only the first draw ignored them.
- A new focus shows sooner in big Cell Plots. At 1M cells a click showed the cell's name after about 0.2 s and its marker after about 0.4 s, and kept the page busy for about 0.2 s; now both show within about 60 ms. Moving the marker no longer redraws every point through Plotly, and an open Cell Table no longer lists all its filtered rows each time the focus changes or the layout is autosaved; the periodic autosave also waits for a quiet moment, and leaving the page still saves at once.
- A categorical colour whose
uns["<column>_colors"]has fewer colours than the column has categories no longer repeats them, which gave different categories the same colour. As in scanpy, the stored colours are then set aside and the default palette is used, in regular and large plots, and the panel's status strip says so ("Default colours: see why"). - Clicking a cell in a Cell Plot focuses it every time. In plots of hundreds of thousands of cells, a click soon after the plot was drawn or resized, or while the previous focus change was still being shown, often did nothing. In large plots, a click made while the plot is still preparing click selection (which can take a while at tens of millions of cells) shows a busy cursor and "Preparing click selection…" in the status strip, and focuses the cell once it is ready, instead of doing nothing.
- A Cell Table or plot too large for any browser page (95.6 million rows against about 4 GB of JavaScript memory) now says "Too many rows for this browser" with the numbers, and offers "Show N cells" for the largest subset that fits (a table at most 1,000,000) and "Subset…". It no longer offers "Close other plots" when no other plot is open or closing them cannot help, nor "Draw anyway" above the browser's ceiling.
Docs
- New page Running a public site: who is responsible, what a public site owes its visitors (imprint, privacy notice, accessibility), what AnnZarro stores and sends, the
sitesettings, and privacy-notice templates in English and German. - The README and the licence page cite v0.5.5 by its DOI, 10.5281/zenodo.23440020.
Install
pip install annzarro==0.6.0 (PyPI), or a desktop app below. macOS: open the dmg, drag AnnZarro to Applications and open it. Windows: the build is not signed, so SmartScreen asks for More info > Run anyway. Details: https://annzarro.readthedocs.io/en/latest/getting-started/desktop-app.html (First launch). Verify downloads against SHA256SUMS.txt.