# Developer Overview

The Competency and Skills System (CaSS) is an open-source platform for managing, tracking, and exchanging competency and skills data using Open Linked Data (opens new window). CaSS gives organizations a standards-based backbone for competency frameworks, learner assertions, crosswalks, and analytics — while keeping sensitive records private through client-side encryption and key-based access control.

This page provides a bird's-eye view of the system for developers who want to integrate with, extend, or self-host CaSS.

# Architecture

CaSS is composed of four major subsystems that can be deployed and scaled independently.

  • CaSS Server — A Node.js 24 / Express 5 REST API backed by Elasticsearch 9.x. The server stores, indexes, and serves JSON-LD objects, enforces key-based access control (KBAC), and hosts pluggable protocol adapters.
  • CaSS Library — A JavaScript SDK distributed as the cassproject (opens new window) npm package (v5.0.x). The library provides data-model classes, RSA/AES cryptographic identity, assertion processing, and interoperability helpers for both browser and Node.js environments.
  • CaSS Editor — A Vue 3 single-page application for framework authoring, competency crosswalks, bulk import/export, and user management. The editor communicates with the server exclusively through the CaSS Library.
  • Protocol Adapters — Pluggable cartridges that expose or consume external standards. Built-in adapters include CTDL-ASN, IMS CASE, ASN, Open Badges, xAPI, PNA, Ollama, MCP, JSON-LD, Replication, and SCD.

TIP

Each subsystem lives in its own repository under github.com/cassproject (opens new window). The system allows run the full stack with a single docker compose up, or deploy components individually.

# Technology Stack

Component Technology
Server Runtime Node.js 24
Web Framework Express 5
Database Elasticsearch 9.x
Client Library cassproject 5.0.x (npm)
Editor Frontend Vue 3 + Pinia + Vite 7
Event Processing RxJS 7.8
Transport HTTP/1.1, HTTP/2, WebSocket
Security RSA / AES (KBAC), OIDC, JWT, mTLS, FIPS 140-3
Container Docker (Debian, Alpine, Distroless)
Orchestration Kubernetes, Docker Compose

# Data Model

All CaSS objects are JSON-LD (opens new window) documents. Every object carries a standard set of metadata fields:

Field Purpose
@id Globally unique URL identifier
@type JSON-LD type (e.g. Framework, Competency)
@context Schema context URL
@owner[] Public keys of entities allowed to write
@reader[] Public keys of entities allowed to decrypt
@signature[] RSA signatures proving provenance
@version Monotonically increasing version counter

# Key Types

  • Framework — A collection of competencies with metadata such as name, description, source, and date created.
  • Competency — An individual knowledge, skill, or ability described with a name, description, and optional coded notation.
  • Relation — A typed link between two competencies. Supported relation types include narrows, requires, desires, isEnabledBy, isRelatedTo, isEquivalentTo, and implies.
  • Assertion — An encrypted claim about a person's competency level, always encrypted before leaving the browser.
  • Level — A named performance level within a framework (e.g. Beginner, Intermediate, Expert).
  • Directory — A curated collection of frameworks.
  • Person — A user identity, referenced by public key.
  • ConceptScheme / Concept — Taxonomy and vocabulary structures used alongside frameworks.

TIP

The full CaSS schema reference is published at schema.cassproject.org (opens new window).

# Security Model

CaSS implements a No-Knowledge security architecture: the server never has access to unencrypted private data or user credentials.

# Key-Based Access Control (KBAC)

Every authenticated request carries a Signature Sheet — a signed, timestamped token generated from the user's RSA key pair. The server verifies the signature without ever seeing the private key.

  • @owner — Public keys of entities permitted to modify or delete the object.
  • @reader — Public keys of entities permitted to decrypt the object. If empty, the object is public.
  • @signature — One or more RSA signatures proving the object has not been tampered with.

# Client-Side Encryption

Assertions and other sensitive objects are encrypted in the browser (or Node.js client) using AES before transmission. Only holders of the corresponding private key can decrypt the data.

# FIPS 140-3 Compliance

CaSS defaults to SHA-256 for hashing and supports the OpenSSL FIPS provider module for deployments that require FIPS 140-3 validated cryptography.

# External Identity Providers

In addition to built-in key management, CaSS supports federated login through OpenID Connect (OIDC) and JWT bearer tokens, with optional mTLS for service-to-service communication.

WARNING

The built-in username/password identity store is intended for development and testing. Production deployments should integrate an external identity provider.

# API Overview

The CaSS Server exposes several interfaces for interacting with competency data.

# REST API

The primary interface is a RESTful JSON-LD API rooted at /api/. Standard HTTP verbs map to CRUD operations:

GET    /api/data/{id}          — Read an object
POST   /api/data/{id}          — Create or update an object
DELETE /api/data/{id}          — Delete an object
GET    /api/data?q={query}     — Search (Elasticsearch Simple Query String)

# Interactive Documentation

Swagger / OpenAPI documentation is available at /api/swagger/ on any running CaSS server.

# WebSocket

A WebSocket endpoint provides real-time push notifications for object changes, enabling live-updating dashboards and collaborative editing.

# MCP Endpoint

An MCP (Model Context Protocol) (opens new window) endpoint at /api/mcp allows AI agents and large language models to query and manipulate CaSS data programmatically.

# Health Check

A lightweight health probe is available for container orchestrators:

GET /api/ping    — Returns 200 OK when the server is ready

# Getting Started

Ready to dive in? The following pages walk through setup and first steps:

  • Installation — Run CaSS locally with Docker, npm, or from source.
  • Configuration — Environment variables, Elasticsearch tuning, TLS, and OIDC setup.
  • Hello World — Create the first framework and competency with the CaSS Library in JavaScript, Node.js, Java, C#, or PHP.
  • Design Principles — Understand the architectural philosophy behind CaSS.
  • Fundamentals — Deep dives into CaSS objects, the repository API, identity, and assertion processing.