<commit_before>---
title: Spree 2.4.0
section: version
---

## Major/new features

### Return Authorization Rewrite

Return Authorizations have received a major rewrite, and can be read more about in the updated [Returning Orders](http://guides.spreecommerce.com/user/returning_orders.html) guide.

The previous return authorization code has been extracted into an extension if you would like to continue using it:
[https://github.com/spree-contrib/spree_legacy_return_authorizations](https://github.com/spree-contrib/spree_legacy_return_authorizations)

### Extendable line items

Provided hooks for extensions to seamlessly integrate with the order population workflow.
  Extensions make use of the convention of passing parameters during the 'add to cart'
  action https://github.com/spree/spree/blob/master/core/app/models/spree/order_populator.rb#L12
  with a prefix like [:options][:voucher_attributes] (in the case of the spree_vouchers
  extension).  The extension then provides some methods named according to what was passed in
  like:

  https://github.com/spree-contrib/spree_vouchers/blob/master/app/models/spree/order_decorator.rb#L51

  to determine if these possible line item customizations affect the line item equality condition and

  https://github.com/spree-contrib/spree_vouchers/blob/master/app/models/spree/variant_decorator.rb#L3

  to adjust a line item's price if necessary.

  https://github.com/spree/spree/blob/master/core/app/models/spree/order_contents.rb#L70
  shows how we expect inbound parameters (such as the voucher_attributes) to be saved in a
  nested_attributes fashion.

### HTML Email Templates

There are now default HTML email templates, which use [Zurb Ink](http://zurb.com/ink/templates.php) and [Premailer-Rails](https://github.com/fphilipe/premailer-rails) for responsive styling.

### Guides moved into core repository

The previous spree-guides repository has been merged into the [Spree Core](https://github.com/spree/spree) repository.  Any documentation updates to this website should now be submitted with pull requests to [https://github.com/spree/spree](https://github.com/spree/spree)

## Upgrade Tips

If you have implemented your own authentication system instead of using spree_auth_devise,
or you have implemented your own adjustment source please ensure you change your
concerns to the new namespace:

<% ruby do %><commit_msg>Remove extendable line items from notes.<commit_after>---
title: Spree 2.4.0
section: version
---

## Major/new features

### Return Authorization Rewrite

Return Authorizations have received a major rewrite, and can be read more about in the updated [Returning Orders](http://guides.spreecommerce.com/user/returning_orders.html) guide.

The previous return authorization code has been extracted into an extension if you would like to continue using it:
[https://github.com/spree-contrib/spree_legacy_return_authorizations](https://github.com/spree-contrib/spree_legacy_return_authorizations)

### HTML Email Templates

There are now default HTML email templates, which use [Zurb Ink](http://zurb.com/ink/templates.php) and [Premailer-Rails](https://github.com/fphilipe/premailer-rails) for responsive styling.

### Guides moved into core repository

The previous spree-guides repository has been merged into the [Spree Core](https://github.com/spree/spree) repository.  Any documentation updates to this website should now be submitted with pull requests to [https://github.com/spree/spree](https://github.com/spree/spree)

## Upgrade Tips

If you have implemented your own authentication system instead of using spree_auth_devise,
or you have implemented your own adjustment source please ensure you change your
concerns to the new namespace:

<% ruby do %>
{'fraction_non_alphanumeric': 0.08533333333333333, 'fraction_numerical': 0.0034666666666666665, 'mean_word_length': 5.011217948717949, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 16, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5200548', 'n_tokens_mistral': 1076, 'n_tokens_neox': 1037, 'n_words': 375}