Chisel CMS Architecture
In order to understand what Chisel really is, or does, it maybe helpful to understand the basic architecture of a Parse-Server environment. Chisel is a relatively small cog in a larger, more capable machine - but one that really focusses in on a specific use-case: Content Management.
High Level Application Architecture
Core Application Stack
Data
MongoDB - although Parse-Server also support Postgres (also a favourite of ours), we tend to focus on using MongoDB out of the box. I wish I could say that there was a particularly opinionated or enlightened reason for this, but there isn’t. MongoDB is fine, it can be a pain to manage and scale, but it works. I would recommend a managed MongoDB service when working in production and for scale - managing MongoDB global clusters, failover, sharding strategies are no joke. We use Atlas for our hosted managed service. I would also recommend RDBMS for Postgres too, like AWS Aurora. Both technology options are fine when working on small sites, locally and during development with the ability to scale using cloud-native managed services.
Redis - aside being the most commonly used in-memory cache ever (according to me), Redis is also used for live streaming / real-time messages with websockets. It is the basis for the LiveQuery capabilities of Parse-Server.
Application
Node.js - yes, so we all know it’s built on the Node.js runtime. If you didn’t, you do now.
Express - and furthermore, Parse-Server is build for Express, whereby it can be run standalone or within an existing Node / Express app.
Parse Server - so by now we know that Parse Server is a middleware that augments a fairly typical modern Node / Express / MongoDB (or Postgres) application architecture with PaaS-like qualitities.
Cloud Code - one of those PaaS-like qualities is “serverless functions”. Function-as-a-Service are a common “cloud native” feature, which basically just means single-purpose functions and business logic running on some machine somewhere and accessed via API. The benefits of running such processes on a server, rather than in the client app but not having to build and maintain a backend application and infrastructure unnecessarily. Cloud-native Serverless functions scale elastically when used through cloud provider products such as AWS Lambda, which is a benefit of course - no sense paying for resources when they are not required. Cloud Code has many of the benefits of Serverless Functions from an architectural standpoint, but also have some different characteristics. This post did a decent job comparing AWS Lambda and Cloud Code. Chisel uses Cloud Code quite a lot for Chisel-specific use-cases. Therefore, when using parse-server with Chisel, you need a start project that already contains the Chisel Cloud Code. The cool thing is, you can also extend the cloud code with your own custom functions to suit your specific application needs.
Live Query - With LiveQuery we get a websockets real-time functionality from Parse-Server. This is similar in my mind, to ActionCable in rails. When building content sites, not all content is equal. Some is slow moving and can be generated statically and build time, server side rendered and deployed to a CDN - that’s the core Jamstack way. Some content is more ephemeral (like comments, chat, discussions) and should be updated in more-or-less real-time. That’s where combining the build time content generation with real-time content makes for a potent combination.
REST API - The neat thing about Parse-Server is that it is so EASY to create an API-first application. Everything, all of your content models (classes), automatically get resource definitions and are available via the Parse Server REST API. This is the bedrock of a headless content system.
GraphQL API - Most of the best-in-class headless CMS solutions prefer to use GraphQL APIs instead of REST. Fortunately, with Parse-Server we have the choice, out of the box. GraphQL is a flexible query language that gives power to the client application developer to use the data that fits their needs. The Parse-Dashboard also supports playing around with our GraphQL API.
Client
Parse-Dashboard - an open source React client app that provides the Parse-Server (and Chisel CMS) instance owner a user-friendly view into their database, webhooks, jobs and notifications. Great resource for developers and maintainers.
Parse Client SDKs - all of the headless CMS platforms have to build tools that enable developers to easily integrate and consume the content service, for multiple platforms, frameworks and languages. The cool thing for Chisel is that there are already a bunch of client SDKs for Parse-Server, from Android and iOS, through Javascript, .NET & Xamarin all the way to MacOS, PHP and Unity. We can even bring our content to embedded C-based IoT devices and Arduinos.
We are now mostly focussed on the next level integration, the plugins ecosystem for the most popular web site and application frameworks such as NextJS, Gatsby, Nuxt, Gridsome and others…
Chisel CMS
With all of that greatness that we get with Parse-Server and the ecosystem, what remains is Chisel CMS, the bit that gets us over the line in our use-case of Parse-Server as a Headless CMS.
Documentation: Chisel Project
Code:
Chisel is a React application. It consumes and interacts with the APIs from Parse-Server using the API and Javascript SDK.
You can run Chisel as a standalone web application, that you can deploy to a static site hosting platform like Forge, Netlify or Vercel.
We also package and ship Chisel as a Mac and Windows application using Electron.
Download the latest client from the Releases section in Github:
The biggest benefit here is that you can run Chisel CMS once and connect to multiple Parse-Servers on your local machine using the Server Select window.
Hosting
The final thing to reinforce is that Chisel CMS won’t work with a vanilla Parse-Server instance - it requires some configuration and cloud code logic. For this reason, right now you cannot run Chisel on a Parse-Server provided by any of the Parse-Server hosting providers like Sashido and Back4App. You would need to deploy your own Parse-Server instance on a cloud provider like AWS or GCP or on a service like Heroku.
Start with our Parse Server Starter project:
We are in the process of building a managed hosting service for Chisel CMS and Parse-Server into a new “Apps” feature on Forge. If you would like to try it out let me know and I can give you BETA access.
That just about sums up the architecture of Chisel