Crystal can now open projects saved to AWS S3 cloud hosting,
which is a great location to archive very large projects to. Projects upgraded
to use the new Pack16 format are especially efficient to store in the cloud.
Crystal can now also publish archived websites to an AWS Lambda Function,
making them publicly available to anybody with a web browser.
-
Workflow improvements
- Crystal on AWS: Crystal can now serve an archived website directly
from AWS, making it accessible to anyone with a web browser.- Deploy with a single click using the Launch Stack button on the
wiki, or upload the CloudFormation template manually.
Only one parameter is required: the S3 URL of your.crystalproj. - Optionally add a custom domain (e.g.
mysite.example.com) using
AWS CloudShell. No local tools required. - Optionally password-protect the site
by setting a username and password in the CloudFormation template. - See Crystal on AWS in the wiki for full setup instructions.
- Deploy with a single click using the Launch Stack button on the
- Projects can now be opened from AWS S3 cloud hosting.
- Use File > Open Project from S3... in the menu bar to open
a project stored on S3. - See Projects on AWS S3 in the wiki for more information.
- Use File > Open Project from S3... in the menu bar to open
- Projects now support storing URL revisions in Pack16 format,
making them efficiently storable in storage systems with
a large minimum object size, such as AWS S3 Glacier- The Pack16 format bundles groups of 16 consecutive revisions together into
uncompressed .zip files, increasing the average file size in the revisions
directory from about 100 KB to about 1.5 MB. - The Pack16 format is significantly more efficient then Crystal's
default Hierarchical format when saving projects to storage systems
with a large minimum object size, such as AWS S3 Glacier
(which has a minimum billable object size of 128 KB).
- The Pack16 format bundles groups of 16 consecutive revisions together into
- Crystal on AWS: Crystal can now serve an archived website directly
-
Fidelity improvements
- Improve resilience against exceptional error scenarios such as
disk disconnection, disk full, bad blocks, filesystem corruption, and
sudden process termination when downloading files or editing a project.- All project operations are now fully atomic and durable unless documented
otherwise. See <doc/model_durability_and_atomicity.md> for details. - Failed transactions are now explicitly rolled back correctly.
- All project operations are now fully atomic and durable unless documented
- Improve resilience against exceptional error scenarios such as
-
Performance improvements
- The log drawer no longer slows down over time when many lines are written.
Old lines are automatically trimmed once the log exceeds 5,000 lines.
- The log drawer no longer slows down over time when many lines are written.
-
Shell changes
Resource.delete()andResourceRevision.delete()now are asynchronous
rather than synchronous, returning aFutureto track completion.
(Breaking Change)- This change is necessary to support safely deleting resources and
resource revisions in Pack16-format projects. - To make it easier to identify callers that aren't expecting a future
to be returned, a warning will be printed to stderr if the result of
the returned future is never checked
- This change is necessary to support safely deleting resources and
-
Documentation improvements
- Project format documented at: <doc/crystalproj_project_format.md>
-
Read-only project fixes
- Fix editable fields on the "Not in Archive" page to be correctly
disabled when the project is opened in read-only mode.
The name, URL pattern, source, group name, and download-immediately
checkbox were all previously editable even in read-only mode.
- Fix editable fields on the "Not in Archive" page to be correctly
-
Headless mode fixes
- UI progress dialogs will now never show in headless mode.
- wxPython is now never even loaded in headless mode.
Therefore Crystal can now be run (in headless mode) if wxPython isn't installed.
-
Development improvements
- WaitTimeout failures during automated tests take image screenshots
and text snapshots automatically when running remotely,
improving debuggability for AI coding agents. - For taking screenshots during tests, replace pyscreeze (which has a dependency on the heavy PIL library) with mss.
- WaitTimeout failures during automated tests take image screenshots
-
Support changes (Breaking Change)
- Python 3.13+ is now the minimum Python version.
Drop support for Python 3.11 and 3.12. - Fix install on Linux (from source) to work again by
upgrading wxPython 4.2.4 -> 4.2.5, which is compatible with
the latest version of Python's setuptools.
- Python 3.13+ is now the minimum Python version.