Celastrina is a JavaScript framework for simplifying server-less compute in Microsoft Azure Functions. Celastrina attempts to simplify the configuration and connectivity of common PaaS services in the Azure Platform with a special emphasis on security.

Celastrina is flexible enough to support small open-source efforts and can easily scale up to large enterprise deployments. Celastrina is committed to maintaining compatibility with JavaScript libraries released by Microsoft and will continue to adapt and grow with the Microsoft Azure eco-system.

Latest Stable Version

  • Core: 4.7.27
  • HTTP: 4.4.5

Please find us on npmjs.com at https://www.npmjs.com/package/@celastrina/core.

Notice about prior versions and Add-Ons

Celastrinajs went through a major architecture change in version 4. The @celastrina/message, @celastrina/timer, @celastrina/semaphore, @celastrina/transact, and @celastrina/recaptcha are in the process of being updated to the new core version 4. Please be patient while we continue this effort.

Quick Start

Creating your first JSON Based HTTP Function:

const {LOG_LEVEL, CelastrinaError, Configuration} = require("@celastrina/core");
const {HTTPAddOn, JSONHTTPContext, JSONHTTPFunction} = require("@celastrina/http");

class MyFirstFunction extends JSONHTTPFunction {
constructor(config) {super(config);}

async _get(context) {
context.log("Welcome to Celastrina!", LOG_LEVEL.INFO, "MyFirstFunction ._get(context)");
context.send({name: "sample", message: }); // Return whatever object you'd like

const _config = new Configuration("MyFirstFunction");
const _httpconfig = new HTTPAddOn();

_config.setAuthorizationOptimistic(true); // Allow anon access, Celastrina defaults to pessimistic AuthN/AuthZ

module.exports = new MyFirstFunction (_config);

You will need to make a few updates to your function.json. You’ll need to add an “entryPoint” attribute with the value “execute” and insure your in/out bindings are named “req” and “res” respectively.

     "entryPoint": "execute", 
     "bindings": [ 
               "authLevel": "function", 
               "type": "httpTrigger", 
               "direction": "in", 
               "name": "req", 
               "methods": [ "get"]
               "type": "http", 
               "direction": "out", 
               "name": "res" 

All HTTP methods are supported, including custom ones. Simple add an async function to your class using the following naming convention:

_{method name}(context) {} Where {method name} is the HTTP method. Example:

async _post(context) {}
async _put(context) {}

Getting local app settings is fairly straight forward:

async _get(context) { 
     context.log("Welcome to Celastrina!", LOG_LEVEL.INFO, "MyFirstFunction ._get(context)"); 

     // From the app function Confiuration settings instead of process.env.
     let _property = await context.properties.getProperty("celastrinajs.test");
     // OR
     _property = await context.getProperty("celastrinajs.test");

     context.send({name: "sample", message: });  // Return whatever object you'd like

That’s it! This is the most basic form of function. At first glance, this may seem more complicated then the base example from Microsoft or frameworks like express.js. The real value in Celastrinajs comes from the integrations required to provide an end-to-end modern, n-factor, cloud application. To leverage security and other PaaS services within Azure, including JWT, Azure App Config, and Azure Key Vault, we recommend more advanced configurations. Please read the Framework Architecture below for the best practices of Celastrinajs.

Framework Architecture

History and Meaning