Skip to content

v2.3.0

Latest

Choose a tag to compare

@davidfstr davidfstr released this 03 Apr 02:44
· 36 commits to main since this release

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.
    • 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.
    • 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).
  • 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.
  • 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.
  • Shell changes

    • Resource.delete() and ResourceRevision.delete() now are asynchronous
      rather than synchronous, returning a Future to 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
  • 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.
  • 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.
  • 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.