Progress Report - May 2024

Another full month here at Backpack. Both Jorge and Antonio have been missing this month, but that doesn't mean we don't have anything...

Cristian Tabacitu
Cristian Tabacitu

Another full month here at Backpack. Both Jorge and Antonio have been missing this month, but that doesn't mean we don't have anything for you. We do, and they're super-useful! Let's dig into it:


With Jorge on holiday, Karan has been holding down the fort all by himself. Fortunately, it's hasn't been a crazy month in terms of issues, not only has he helped our customers (you!) figure stuff out, but he's sneaked in a PR as well 😉 More on that later.


This month, Pedro has been crushed more 🪲 and made the codebase more solid. Sounds small in terms of numbers, but some of those have been A LOT of work (more on that later):

  • CRUD - 4 bug fixes
  • PRO - 3 bug fixes
  • FileManager - 1 bug fix
  • a few other fixes to our other free packages

New Features

FileManager Support in CKEditor

One of the biggest things our team has finished this month was the CKEditor-ElFinder integration. Pedro has spent A LOT of time making this work, but it's done! You can now start choosing files from the FileManager in your CKEditor fields! Check out the docs for more info.

Spoilers: it's as easy as doing 'elfinderOptions' => [] (yes, you can pass options as well).

Quick Button that Makes AJAX Calls

This is the PR I mentioned Karan has sneaked in. Like all good PRs, this was born out of necessity, and it provides a very simple solution for a problem that often comes up. You want to add a button that does a quick AJAX call... what do you do? We have a great solution now - use the Quick Button, it can now do AJAX calls as well. It's as easy as doing:

    'label' => 'Email',
    'icon' => 'la la-envelope',
    'wrapper' => [
        'href' => function ($entry, $crud) {
            return backpack_url("invoice/$entry->id/email");
    'ajax' => true,

and having a route and method that returns the response:

public function email($id)

    $user = CRUD::getEntry($id);

    if ($user->alreadyPaid()) {
        return abort(400, 'The user has already paid.');


    return response()->json([
        'message' => 'The payment reminder has been sent successfully.',

New Content

We've also been sharing quite a bit, on our blog and our Twitter. Here's what's new since last month:

If you haven't already, subscribe to our blog article digest to get these articles as soon as they're out. We also post PHP, Laravel and Backpack tips on Twitter. We're also accepting guest posts. So if you've got anything Backpack or Laravel-related to show our community, send us an email with your idea, happy to see if it's something we can include.

Discounts Next Month

As mentioned in the article about Backpack's 8-year history, we plan to do a discount campaign next month. If you were planning to buy... stay tuned! It'll be a GREAT time to buy. Discounts are limited though so... you gotta stay tuned.

Thanks for using Backpack. We love doing this for you.


Want to receive more articles like this?

Subscribe to our "Article Digest". We'll send you a list of the new articles, every week, month or quarter - your choice.

Reactions & Comments

What do you think about this?

I need something and without even mentioning about, it appears within weeks. Amazing job on Quick Button AJAX calls. Haven’t checked it yet but if it displays errors on frontend if I response with abort. It would be game changer.

Latest Articles

Wondering what our community has been up to?