Cloudinary Blog

Get Ready for Cloudinary’s Next- Generation JavaScript SDKs

Announcing the Next Generation Cloudinary JavaScript SDKs

Since its founding in 2012, Cloudinary has released software development kits (SDKs) in over a dozen languages and frameworks, adding feature after feature for numerous technologies. So far, those releases have proceeded in an evolutionary manner. We’re now overhauling them to serve developers even better, starting with the JavaScript (JS) SDK. For details, see our recent post on Cloudinary’s next-generation developer SDKs.

A New Dawn

While building SDKs, we always ask ourselves these three same questions:

  • What’s the right balance between abstraction and primitives?
  • How do we future-proof our internal features?
  • How do we future-proof the JavaScript (JS) technology stack and browser updates?

The answers are ever more important because, to meet the requirement of backwards compatibility, once the decisions are made and development proceeds, backtracking would be an astronomical task..

Hence, we’re brainstorming how to improve our entire stack of JS SDKs by modernizing our toolkit.

Even though the process is still in the early stage, we’d like to share with you our current thinking and solicit your feedback.

Our SDK Goals

We’re aiming for four goals for our new SDKs:

simplicity, enhanced semantics, smaller bundle size, and code reuse.

Simplicity More Desirable Than Flexibility

Instead of offering a jack-of-all-trades SDK, we’ll focus on ease of use, which matters the most to developers. Ease of use is different things to different people, however. To us, it means that you can read your code as easily as running it.

As flexible as our APIs are, that flexibility comes at the price of readability. Consider this snippet:

Copy to clipboard
tag = cl.image('sample.jpg', {
          crop: "scale",
          width: "auto:breakpoints",
        })

The current API accepts a map of configuration parameters, which, though easily extensible, are difficult to decipher in complex transformations.Plus, their seemingly unrelated properties (siblings) add to the confusion.

We propose the following instead for much-improved readability in output along with grouping of relevant properties:

Copy to clipboard
Let img = New TransformableImage('sample.jpg')
    .addAction(scale().width('auto'))

In the current SDK, the relativity of the scale and width properties above is hidden. The new syntax clearly shows that they are related.

Furthermore, we plan to use types behind the scenes since all modern IDEs feature the much desired auto-completion capability.

Semantics As a First-Class Citizen

For optimum flexibility, the Cloudinary URL represents an expression, not functionality. The current SDK syntax bridges the functionality gap but falls short by merely renaming arguments and making them more accessible. Also lacking is an in-depth understanding of how the properties, such as scale and width interact.

As a contrast, the new SDK syntax takes semantics seriously. We’ll define all the operations that are performed on assets as actions, e.g., resizing, scaling, and adjusting assets. Along with proper namespaces, enhanced semantics translates to a superb developer experience, enabling you to discover features much more readily.

Minimum Bundle Size Through Tree Shaking

The large footprint of the SDK has long been a sour point at Cloudinary. As more features are added, the SDK bundle size correspondingly grows. Additionally, the current SDK is one-size-fits-all. Even if you use only a small subset of its features, you must download the entire package.

The new SDK will be ESM (ES Module) friendly, complete with full support for tree-shaking. That is, you bundle only what you use and throw away the rest.

Also, in the works are new plugins you can install instead of having to incorporate them in the main bundle. See this example:

Copy to clipboard
Import * as Resize, {scale, resize, /* and more */  } from @cloudinary/resize

Share Functionality Across SDKs

Since our SDKs were not developed in unison, some features exist in multiple versions but with slight variations. For consistency and uniformity, we’ll unify all the code into shared libraries to support an ever-growing array of frameworks. That’s the right formula for proper growth!

The Endgame

For all that the above goals won’t be easy to achieve, we’re committed to delivering the best developer experience possible. After all, coding should be a delight, not a chore.

Our code has been open source from Day One so feel free to track its progress on GitHub.Above all, send us your thoughts.

We’ll be back soon with more updates.

The Cloudinary SDK team

Recent Blog Posts

Create Lightweight Sites With Low-Code and No-Code Technology

Consumers expect modern websites to be mainly visual. But, the more compelling and complex the related media is, the more data is involved, compounding the site’s weight. In today’s content-craving world, delivering unoptimized media can cost you because it leads to sluggish page loads, resulting in visitors abandoning your site in search of a faster alternative. In fact, a page load that takes more than three seconds can cause as many as 40% of your visitors to bounce. Given this competitive, digital-first environment, you can’t afford to lose page views, for time is of the essence.

Read more
A Blueprint for AWS-Secured Webhook Listeners for Cloudinary

tl;dr: An AWS-secured and optimized Cloudinary webhook listener for extending the Cloudinary service

Code: Github

A webhook is a communication medium for sending notifications from one platform to another about events that occurred. In place are user-defined HTTP callbacks that are triggered by specific events. When a triggered event takes place on the source site, the webhook listens to the event, collects the data, and sends it to the URL you specified in the form of an HTTP request.

Read more
New Accessibility Features for Cloudinary’s Product Gallery Widget

Cloudinary’s Product Gallery widget, which launched in 2019, has enabled many brands to effectively and efficiently showcase their products in a sleek and captivating manner, saving countless hours of development time and accelerating release cycles. By adding Cloudinary’s Product Gallery widget with its customizable UI to their product page, retailers reap numerous benefits, often turning visitors into customers in short order.

Read more
Why Successful Businesses Engage With and Convert Audiences With Visual Media

Most business buyers prefer to research purchase options online, as do many shoppers. No wonder online retail sales in the U.S. rose by 32.4% in 2020—an impressive gain of $105 billion.

For B2B and B2C businesses, text-heavy websites are no longer adequate in attracting shoppers. Instead, engaging visual media—spin images, videos, 3D models, augmented reality—are becoming a must for conveying eye-catching details and differentiators about products or services.

Read more
Making User-Generated Content (UGC) Shoppable With Cloudinary

User-generated content (UGC) is a powerful marketing tool. Not only does video complement marketing efforts for e-commerce by enabling customers to explore products in greater detail, but UGC also adds an element of trust. As a bonus, user-generated video is an exceptional opportunity for e-businesses to attract website traffic without their marketing team having to create promotional videos from scratch. User-generated content drives conversions and brand loyalty as a direct result of authentic interaction.

Read more