Photo Credit: Bentley A, Brown R (2025). KUBI Herpetology Collection. Version 31.93. University of Kansas Biodiversity Institute. Occurrence dataset KUBI Herpetology Collection accessed via GBIF.org on 2025-07-08. https://www.gbif.org/occurrence/686688403
Release Announcement
Specify 7.11.0 is a major release that delivers powerful new capabilities, significant upgrades, and important stability fixes driven by the requirements of Specify Consortium members. The headline addition is robust Batch Edit support for editing relationships, making it easier than ever to manage complex data in bulk—including trees and nested relationships.
With WorkBench enhancements, expanded business rule coverage, improved querying tools, and important platform upgrades (including to Ubuntu 20.04, Python 3.9, and Django 4.2), this release is designed to improve both the power and reliability of Specify 7.
[!note] Asset Server Note
Before updating, if you are not already, make sure to specify your
WEB_ATTACHMENT_COLLECTION
in yourdocker-compose.yml
file (or in your.env
file).
New Features & Additions
- Batch Edit: Now with Relationship Support!
- Batch Edit can now handle both to-one and to-many data table relationships, including matching, creating, cloning, deleting, and updating of records in related tables.
- Batch Tree editing is supported for Taxon, Geography, Storage, Chronostrat, Lithostrat, Tectonic Unit.
- There is a user preference to enable/disable relationship support in Batch Edit for greater control.
- WorkBench Improvements
- Nested to-many relationships are now supported, enabling users to easily import citations, properties, determiners, and other nested -to-many records.
- Collection Relationships can be imported using Collection Object as the base table.
- Query & Record Set Enhancements
- New “Series” tool in Query Builder groups Collection Objects by consecutive catalog numbers, displaying them as a range.
- Any tree table field can now be queried for a selected rank.
- Ability to select a “Record Set” in one-to-many fields from the search dialog.
- Query combo boxes automatically determine searchable fields if not defined, simplifying setup.
- Business Rules & Validation
- All Specify 6 business rules have been migrated, including new uniqueness checks, collector scoping, and enforcement of single primary determiners and funding agents.
- Database & Security
- Environment variable support for
ALLOWED_HOSTS
andCSRF_TRUSTED_ORIGINS
improves deployment security.
- Environment variable support for
Environment Changes
- Platform & Dependency Updates
- Ubuntu upgraded from 18.04 LTS to 20.04 LTS (update to 24.04 LTS coming in v7.12.0).
- Django now 4.2, Celery 5.5.1, and Python 3.9 for improved performance and security.
Fixes & Stabilization
Numerous bugs and workflow issues have been resolved, including:
- Determinations now properly marked as “current” when created automatically.
- Read-only mode now correctly disables tree actions.
- Query Builder and WorkBench improvements:
- Queries from tree interface can now be saved.
- “Is Primary” collector field is now correctly cloned/carried forward.
- Record set merging no longer discards unsaved data.
- Preparations can’t be deleted while on loan, and negative values are prevented in loan returns.
- Queries with special characters in their names now download correctly.
- Better handling of attachments, record set remarks, and more.
For a complete list of fixes, see the full changelog below!
New & Improved Documentation
Changelog
7.11.0.2 (14 July 2025)
- Fixed an issue that could cause updates to Collection Object to set the incorrect Determination as current and updates to Collecting Event to set the incorrect Collector as primary (#7073)
7.11.0 (8 July 2025)
Added
- Extends Batch Edit to support relationships (Requested by everyone)
- Supports the following:
- to-one and to-many relationships
- matching existing records
- creating new records
- cloning, deleting, and updating records
- Extends Batch Edit to support editing trees (#6196)
- Taxon, Geography, Storage, Chronostrat, Lithostrat, and Tectonic Unit
- Supports the following:
- Any tree table field can now be queried for a selected rank (#6011)
- Nested -to-many relationships are now supported in the WorkBench (#2331 – Requested by Commonwealth Scientific and Industrial Research Organisation (CSIRO), National Herbarium of Suriname, Natural History Museum of Bern, Museu de Ciències Naturals de Barcelona, and many others)
- Collection Relationships can now be imported using Collection Object as the base table in the WorkBench (Requested by Commonwealth Scientific and Industrial Research Organisation (CSIRO) and South African Institute for Aquatic Biodiversity (SAIAB))
- Adds a Series tool to the Query Builder for Collection Objects to group records with consecutive catalog numbers and identical fields, displaying catalog number ranges (#4952)
- Adds user preference to enable/disable relationships in Batch Edit; disables rollback when relationships are enabled by default (#6509)
- Adds missing business rules from Specify 6, including new uniqueness rules, scoping for collectors, and enforcing single primary determiners and funding agents (#4892)
- Adds the ability to select a “Record Set” in one-to-many fields from the search dialog (#6352)
- Adds support for falling back on default
DataObjFormatters
when user-defined table formats and aggregations are not available for a table (#6324) - Query combo boxes will automatically determine which fields to search if not defined in the
TypeSearches
app resource (#6369) - Adds a new
spdatasetattachment
table to the database in preparation for WorkBench attachment support in a later update (#6269) - Improves security by adding new Django variables to allow self-hosted users to specify
ALLOWED_HOSTS
andCSRF_TRUSTED_ORIGINS
for the environment (instructions)
Changed
- Major dependency updates:
- Increases default form width from
1200px
to1600px
(#6497) - Changes the pronoun in the crash dialog (#6353 – Requested by Florida Museum of Natural History)
- Removes the “Return Loan Records” button in the query builder (#6340)
- The first added collector is now set as “primary” by default (#6348)
Fixed
- Fixes an issue where automatically created Determinations were not marked as “current” (#6581 – Reported by Ohio State University and Commonwealth Scientific and Industrial Research Organisation (CSIRO))
- Adds missing default insect XML files for the entomology discipline (#6383)
- Fixes an issue where tree actions were still accessible in read-only mode (#6337)
- Fixes an issue where queries generated from the tree interface could not be saved (#6342 - Reported by Beaty Biodiversity Museum)
- Fixes an issue preventing the Collector “Is Primary” field from being carried forward or cloned (#6331 – Reported by Institute of Research for Development, France)
- Fixes an issue in the Query Builder where only the second added line was auto-focused (#6376)
- Merging record sets no longer discards unsaved data by reloading the form (#6371)
- Fixes error when deleting a preparation that is currently on loan (#6374 – Reported by Florida Fish and Wildlife Research Institute (FWRI))
- Fixes unintended ability to merge embedded Collecting Event or Paleo Context records from the form meta menu by removing the merge button (#6372)
- Prevents the ‘Age’ field from being added to a table format or aggregation (#6373)
- Fixes query title not updating immediately by reloading the page after renaming (#6347)
- Fixes auto-created preparations not expanding when opening a Collection Object if
CO_CREATE_PREP
is enabled (#6362 – Reported by Herbier de Guyane and Institute of Research for Development, France (IRD)) - Fixes tree view from jumping back to the selected node when clicking empty space (#6367 - Reported by Royal Botanic Gardens Edinburgh)
- Fixes desynonymize dialog message to correctly show the preferred taxon name instead of the synonym name (#6354)
- Fixes crash when deleting the last record in “Browse in Forms” by closing the dialog automatically (#6355)
- Fixes an issue where the count field for Bulk Carry Forward cannot be cleared (#6363)
- Fixes an issue where Specify Users could be edited from the Reports dialog; they are now read-only (#6356)
- Fixes an issue where attachments could be accidentally deleted by adding a confirmation dialog before deletion (#6386 - Reported by The University of Kansas)
- Fixes taxon links in the prep dialog by displaying ‘Not available’ when no taxon is present (#6357)
- Prevents negative values being entered in quantity returned or resolved fields in Loan Return Preparations (#6341)
- Fixes an issue where loan preparations could be added without a quantity (#6358)
- Fixes an issue where collection objects without taxon determinations were excluded from queries using ‘Any’ filter (#6380)
- Improves Collection Object Type validation in the WorkBench (#6332)
- Fixes an issue with string comparison operators hidden in Query Builder, adding a user preference to show them for text-based fields (#3501 - Reported by Santa Barbara)
- Fixes an issue where Docker container failed to start due to missing shebang in
docker-entrypoint.sh
(#6424) - Fixes an issue where attachments failed to load due to incorrect
coll
parameter; now uses database name by default (#6176) - Fixes an issue where users could decrease a preparation’s count below the number currently loaned (#6438 - Reported by The University of Texas)
- Fixes an issue preventing the attachment gallery from loading all attachments visible on screen (#6400)
- Fixes an issue where data in read-only cells can be search and replaced in WorkBench (#6456)
- Fixes an issue where the WorkBench upload plan save is enabled without changes (#6458)
- Fixes an issue where remarks were not saved when creating a record set from a WorkBench dataset (#6494)
- Fixes cases where a missing record in a query combo box could cause a 404 (#5139)
- Fixes an issue where new pick list items are not deleted on roll back in the WorkBench and Batch Edit (#6514)
- Fixes an issue where Batch Edit incorrectly matches CollectionObjectAttribute records when the discipline uses CollectionObject as its PaleoContextChildTable (#6520)
- Fixes an issue parsing
isnull
field lookup filters (#6481) - Fixes an issue where queries with special characters (#, ?, etc.) in the name could not be downloaded (#5070 – Reported by The University of Kansas and Ohio State University Mollusks
- Fixes an issue that allowed users to add a Collection Object with an existing Collection Object Group (COG) parent to as a child to another COG (#6414)
The full changelog is available on GitHub
For source code go to the GitHub Specify 7 repository
For more information about Specify 7, or about this release, see Specify 7 | Specify Collections Consortium, or email support@specifysoftware.org.
Update Instructions
[!info] Specify Cloud
SCC hosted users will be automatically updated tov7.11.0
!For self-hosted users, these steps should be followed by an IT administrator.
You or an IT administrator will need to pull the Docker tag v7.11.0
to get the latest version of the specify7-service
:
docker pull specifyconsortium/specify7-service:v7.11.0
To deploy multiple Specify 7 instances for different databases, you will need to configure your docker-compose.yml
file accordingly.
You can take a look at the specifycloud deployment scheme we recommend on GitHub where you can automatically create this file, along with the Nginx configuration, to make this as easy as possible. If you need access to this file, please contact us at support@specifysoftware.org.
Here are the steps to do so, assuming your configuration mirrors the one linked above):
-
Use the
specifycloud
deployment method:- For
v7.11.0
, we recommend that you use thespecifycloud
deployment method over the alternatives (all-in-one
,just-specify7
, ormultiple-databases
). If you rely on the all-in-one configuration for the asset server or report runner, you can configure these in a separate docker compose file following the model fromall-in-one
.
- For
-
Configure Environment Variables:
- Inside of the
docker-compositions/specifycloud/
directory, you will need to first setup yourdefaults.env
file with the appropriate information for your config:
DATABASE_HOST=10.132.219.186 DATABASE_PORT=3306 MASTER_NAME=Master MASTER_PASSWORD=********* SECRET_KEY=******** ASSET_SERVER_URL=https://assets1.specifycloud.org/web_asset_store.xml ASSET_SERVER_KEY=******** REPORT_RUNNER_HOST=10.132.219.183 REPORT_RUNNER_PORT=8080 CELERY_BROKER_URL=redis://redis/0 CELERY_RESULT_BACKEND=redis://redis/1 LOG_LEVEL=WARNING SP7_DEBUG=false
- Then, in a new
spcloudservers.json
file, you will likely want to define two instances, one test and one production instance, though you can define just a test instance if this is being done locally:
{ "servers": { "ichthyology": { # The server name will be sp7demofish. "database": "ichthyology", # Use this database. If not specified use the servername with dashes replaced with underscores. "sp7": "v7.11.0", # The specify7-service image tag to be used. From https://hub.docker.com/r/specifyconsortium/specify7-service/tags. "sp6": "specify6803", # The version of Specify 6 matching the database version. Must correspond to a key in the "sp6versions" section below. "https": true, # Whether to configure nginx for https for this service. Optional; defaults to true. "sp7_only": true # Whether or not it should use the Specify 7 static files (should be true unless using a version prior to `v7.10.0`) }, "ichthyology-test": { # Test server. "database": "ichthyology_test", # Specify the test database "sp7": "v7.11.0", "sp6": "specify6803" }, "sp6versions": { # These are the Specify 6 versions that will be used. # The keys are arbitrary names that can be referenced from the servers section. # The values indicate the specify6-service image tag from https://hub.docker.com/r/specifyconsortium/specify6-service/tags. "specify6803": "6.8.03" } }
- Inside of the
-
Make:
- You can then run
make
to create the appropriatedocker-compose.yml
andnginx.conf
based on the templates provided, but these can be tweaked however necessary to deploy this.
- You can then run
-
Start the Services:
- Once you have created your
docker-compose.yml
file, run the following command to start your containers:
docker compose up
Watch the logs to make sure no errors take place after the first run, then you can start it detached:
docker compose up -d
- Once you have created your