Updates

Record Field Actions

When working with traditional databases, relational fields are commonly tedious to manage and interact with. In SQL, for example, obtaining the destination record of a relational column requires increasing the size of the original query significantly, by adding JOIN statements, causing an RONIN deeply embeds relations into the way in which you write code, and exposes them to you in the most natural way possible: As nested fields of your records, which are automatically resolved for you, regardless of whether you are retrieving records, updating them, or even creating them. As an example, if your app requires a “Session” schema for managing the sessions of user accounts, you could create a new session like so:

Record Field Actions

When working with traditional databases, relational fields are commonly tedious to manage and interact with. In SQL, for example, obtaining the destination record of a relational column requires increasing the size of the original query significantly, by adding JOIN statements, causing an RONIN deeply embeds relations into the way in which you write code, and exposes them to you in the most natural way possible: As nested fields of your records, which are automatically resolved for you, regardless of whether you are retrieving records, updating them, or even creating them. As an example, if your app requires a “Session” schema for managing the sessions of user accounts, you could create a new session like so:

Types Package

As your web app or website grows over time, you will likely find yourself also wanting to offer an increasingly better experience to your customers, which often translates into an increased amount of complexity in your application stack. There are different ways to manage this complexity, and as teams grow, one of those will be creating more Git repositories for different projects or parts of the app, rather than sticking to a single monorepo that combines all of them. Once you’ve defined your RONIN schemas for one app, you will likely want to interact with the same data from multiple Git repositories. To accomplish this, you will need to set up private packages that can share code between repositories or find a similar approach of sharing code, which, in turn, requires setting up authentication, publishing, and the like. Overall, it’s therefore a rather complex process to go through.

Types Package

As your web app or website grows over time, you will likely find yourself also wanting to offer an increasingly better experience to your customers, which often translates into an increased amount of complexity in your application stack. There are different ways to manage this complexity, and as teams grow, one of those will be creating more Git repositories for different projects or parts of the app, rather than sticking to a single monorepo that combines all of them. Once you’ve defined your RONIN schemas for one app, you will likely want to interact with the same data from multiple Git repositories. To accomplish this, you will need to set up private packages that can share code between repositories or find a similar approach of sharing code, which, in turn, requires setting up authentication, publishing, and the like. Overall, it’s therefore a rather complex process to go through.

Image Optimization

Our mission at RONIN is to ensure your application loads as fast as possible, and without any loading animations (spinners, skeletons, etc). To accomplish this, we provide the fastest data platform in the industry, focused on building modern web applications. However, ensuring the most minimal latency possible between your app and your data is only half of the story, since your app might depend on other resources that must be loaded, and if those aren’t all fast, our job isn’t done. That’s why, today, we are announcing our brand-new Image Optimization feature, which reduces the byte size of every image loaded in your app (if those images are stored in

Image Optimization

Our mission at RONIN is to ensure your application loads as fast as possible, and without any loading animations (spinners, skeletons, etc). To accomplish this, we provide the fastest data platform in the industry, focused on building modern web applications. However, ensuring the most minimal latency possible between your app and your data is only half of the story, since your app might depend on other resources that must be loaded, and if those aren’t all fast, our job isn’t done. That’s why, today, we are announcing our brand-new Image Optimization feature, which reduces the byte size of every image loaded in your app (if those images are stored in

The Hono Client

With the recent launch of the RONIN TypeScript Client , we thrived to make retrieving and inserting data into your RONIN space as intuitive as possible by mimicking the patterns of the human language (English) and avoiding any configuration overhead by default. To ensure our TypeScript Client remains as straightforward to use as possible, regardless of your application architecture, we are now introducing an additional library built on top of the aforementioned piece of software: The RONIN Hono Client . Thanks to the Hono middleware included in the client, you can initialize RONIN a single time, after which it will read the RONIN_TOKEN variable (this is where you can define an app token of your space) from your Hono context and let you easily query RONIN throughout your app.

The Hono Client

With the recent launch of the RONIN TypeScript Client , we thrived to make retrieving and inserting data into your RONIN space as intuitive as possible by mimicking the patterns of the human language (English) and avoiding any configuration overhead by default. To ensure our TypeScript Client remains as straightforward to use as possible, regardless of your application architecture, we are now introducing an additional library built on top of the aforementioned piece of software: The RONIN Hono Client . Thanks to the Hono middleware included in the client, you can initialize RONIN a single time, after which it will read the RONIN_TOKEN variable (this is where you can define an app token of your space) from your Hono context and let you easily query RONIN throughout your app.

The TypeScript Client

In preparation for the upcoming release of RONIN 2.0, which focuses on improving the developer experience and performance of the platform even further in significant ways, we are now excited to announce the official RONIN database client, written in TypeScript. Previously, querying your database from your application required setting up complicated connection URLs, “init” functions, sometimes even hostnames, usernames, passwords, and often times the database client of your choosing would not even work on your desired runtime (e.g. edge workers). The RONIN TypeScript Client, which is also available on GitHub , provides a completely zero-config experience in code, and only requires a

The TypeScript Client

In preparation for the upcoming release of RONIN 2.0, which focuses on improving the developer experience and performance of the platform even further in significant ways, we are now excited to announce the official RONIN database client, written in TypeScript. Previously, querying your database from your application required setting up complicated connection URLs, “init” functions, sometimes even hostnames, usernames, passwords, and often times the database client of your choosing would not even work on your desired runtime (e.g. edge workers). The RONIN TypeScript Client, which is also available on GitHub , provides a completely zero-config experience in code, and only requires a

May 2024

It is now possible to copy the value of a field by hovering the field and pressing the button that is revealed as a result. This is especially useful for the Blob field type. RONIN CLI can now be used in CI to authenticate private types packages.

May 2024

It is now possible to copy the value of a field by hovering the field and pressing the button that is revealed as a result. This is especially useful for the Blob field type. RONIN CLI can now be used in CI to authenticate private types packages.

Image Component

Thanks to our recently released Image Optimization feature, changing the size, format, quality, and aspect ratio of your image is only a matter of passing While this solution is very flexible and can be used with any software stack and language, our goal at RONIN is to help you build the fastest web application possible , and since the best web apps out there are built with TypeScript and a framework like React on the frontend, we are now launching the In addition to providing the same easy-to-use querying interface as the TypeScript client , the React client also exposes two different components that make it a lot easier for you to render the values of your fields stored in RONIN:

Image Component

Thanks to our recently released Image Optimization feature, changing the size, format, quality, and aspect ratio of your image is only a matter of passing While this solution is very flexible and can be used with any software stack and language, our goal at RONIN is to help you build the fastest web application possible , and since the best web apps out there are built with TypeScript and a framework like React on the frontend, we are now launching the In addition to providing the same easy-to-use querying interface as the TypeScript client , the React client also exposes two different components that make it a lot easier for you to render the values of your fields stored in RONIN:

Blob Storage

While most database fields of web applications usually hold rather lightweight data types (such as strings, integers, booleans, and similar), certain kinds of fields (such as the avatar of an account or the preview image of a blog post) might hold larger values and therefore require a storage that is separate from the database. Due to the “heavy” nature of large binary objects (they require more space), different considerations than those of a database are required to ensure durability, consistency, and ideal performance when accessing those objects. This often leads to setting up additional services and having to make use of different programmatic interfaces. After all, however, binary objects, just like strings, integers, and booleans, are binary representations of a value, so why should you have to use different tools, just because the value is longer? The answer is that, with RONIN, you don’t have to:

Blob Storage

While most database fields of web applications usually hold rather lightweight data types (such as strings, integers, booleans, and similar), certain kinds of fields (such as the avatar of an account or the preview image of a blog post) might hold larger values and therefore require a storage that is separate from the database. Due to the “heavy” nature of large binary objects (they require more space), different considerations than those of a database are required to ensure durability, consistency, and ideal performance when accessing those objects. This often leads to setting up additional services and having to make use of different programmatic interfaces. After all, however, binary objects, just like strings, integers, and booleans, are binary representations of a value, so why should you have to use different tools, just because the value is longer? The answer is that, with RONIN, you don’t have to:

Snapshots

As the amount of features increases in your application, it is essential to ensure every additional change is thoroughly tested automatically, in order to prevent the increasing levels of complexity from affecting your app’s reliability and thereby the end-user experience. Nevertheless, in addition to preventing any kind of regression from making its way into production, it is indispensable to also prepare for the worst case in which a regression does find its way into production and ensure that such a case does not affect the operations of your business. In other words: In the rare case that something does go south, you need to be able to recover as quickly as possible, to affecting your customers. As your database provider, it is our duty to make such a recovery affecting your data as fast and frictionless as possible, which is why you can now easily revert to a previous iteration of your data with just a single click on the “Revert” button in the new “Snapshots” section available on the Advanced tab in your Space Settings.

Snapshots

As the amount of features increases in your application, it is essential to ensure every additional change is thoroughly tested automatically, in order to prevent the increasing levels of complexity from affecting your app’s reliability and thereby the end-user experience. Nevertheless, in addition to preventing any kind of regression from making its way into production, it is indispensable to also prepare for the worst case in which a regression does find its way into production and ensure that such a case does not affect the operations of your business. In other words: In the rare case that something does go south, you need to be able to recover as quickly as possible, to affecting your customers. As your database provider, it is our duty to make such a recovery affecting your data as fast and frictionless as possible, which is why you can now easily revert to a previous iteration of your data with just a single click on the “Revert” button in the new “Snapshots” section available on the Advanced tab in your Space Settings.