Skip to content

Contextual IDentity Management Engine (CIDME) - Giving an identity to, and storing contextualized information about people, organizations, places, and things. Your knowledge, connected.



Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

CIDME project banner logo - dual CIDME GitHub repo QR code - cidme://public/EntityContext/f35b23ca-27a9-4724-b047-e8a5c7267db1

CIDME GitHub repository CIDME ID/URL: cidme://public/EntityContext/f35b23ca-27a9-4724-b047-e8a5c7267db1

CIDME (Pronounced SID-MEE)

Contextual IDentity Management Engine (CIDME): Giving an identity to, and storing contextualized information about people, organizations, places, and things. Your knowledge, connected.

๐Ÿ“Œโ›”โš  IMPORTANT NOTE: This project is in it's very early stages. Therefore anything in this document may change at any time, and any information in this document may also be incorrect or outdated at any point!!!

Table of Contents


CIDME is an umbrella software project which encompasses a set of specifications as well as implementations of those specifications. The specifications deal with giving an identity to, and storing contextualized information about people, organizations, places, and things. In CIDME these are referred to as entities.

Back to TOC

Intended audience

CIDME is currently meant for use by software developers. CIDME is not an app, nor a program. CIDME is for use by other software developers / projects and is meant to be built upon.

Back to TOC


CIDME is an umbrella software project which encompasses a set of specifications as well as implementations of those specifications. The specifications deal with giving an identity to, and storing information about entities - people, organizations, places, and things.

In many cases, existing software projects attempt to lump all information about an entity into one place, when instead that information may be better separated into distinct parts, while still maintaining links to each other, forming parts of a whole. Contact information, for example. Let's give an example where a person has multiple jobs. They may have many phone numbers and email addresses, especially over time. A personal-use set of contact information, one set for one job, and still another set for the other job! The address books and contact managers we currently use tend to not easily allow us to manage information this way. You have no idea if a number is attached to a given job... only that it's labeled as 'work'. Additionally, as people drop old numbers and addresses and adopt new ones, history becomes muddled. When looking through old emails you may come across a cryptic address ( and wonder, who was that? The context has been lost. You've since deleted that email address from your contact manager because the person doesn't use it any more. You don't want to keep it listed for fear of accidentally sending a new email to that old address. But wouldn't it be nice to still have a way to keep it somewhere for posterity?

CIDME allows you to keep information, group it, and give it context. In the example situation above, we can create at least three contexts... one for personal-use information, and one for each of the two jobs. You can associate their personal/private contact information with the personal one, and the relevant items with the appropriate job-related contexts. When this person switches jobs you can still keep this information, but give it a date-range, so you know it was only valid at that time. You can also give it an inactive status, so it does not show up as an available address when creating new emails, sending texts, or making a phone call. The end result is you can go back and look up and note it related to our example person, and the fact that they used it while working at a certain job during a given time (date range), but know to not use this information for new contacts with this person. CIDME gives context to this identity information.

CIDME is all about managing this information. Not simply at one given point in time, but also as it ages and/or about an entity's state at different points in time. For example, both people and organizations change their names or contact information. Instead of just deleting or changing the existing information in your system about these entities, CIDME allows you to keep it, referencing it by dates in time or status (active/inactive). CIDME also allows for structured archiving and/or purging of old information. CIDME can be referred to as an engine to manage this information.

Hence the CIDME project acronym: Contextualized IDentity Management Engine.

At the heart of CIDME are the entities and entity contexts. These are realized via JSON-LD serialized strings and are referred to as resources. These resources themselves are natively operating system and programming language agnostic. This means any programming language which has support for JSON and/or JSON-LD has the functionality necessary to deal with CIDME resources.

An extremely minimal example of a CIDME entity resource for purely illustrative purposes:

  "@context": {
    "cidme": "",
    "rdf": ""
  "@type": "cidme:Entity",
  "@id": "cidme://Entity/db9b4bdb-50b7-483d-95a6-b3884ecd4137",

Please see the docs folder for more examples (annotated, even)!!!

As CIDME resources are just strings, they may be stored in many different ways. The CIDME project was envisioned to be able to be used by a very, very wide audience of developers on an equally wide variety of platforms. One goal of CIDME is that resources may be used on embedded platforms with very limited computational power and memory. It is also envisioned they may be used on extremely scaled up scenarios involving databases of millions upon millions of resources.

It is envisioned that CIDME may cover the gambit of being used in very simple ways, such as by a single developer working on a small home-brew project involving batch/shell scripts all the way to being scaled up for use in complex scenarios involving AI with semantic understanding of the linked data!

CIDME usage examples... CIDME does not necessarily DO all of the these items, but it does provide a standardized way of managing data that can enable these types of systems.


  • Storage of a user list for one application.
  • Contact/personal information (PIM) management / storage.
  • A method to provide a (structured/standardized) identity to nearly any type of object, tangible or not.
  • A way to add standardized/structured metadata to files in a file system.
    • Pictures and video as well.
    • Can also link subjects within the pictures and video to contacts.


  • Centralized storage of user / contact / entity management for multiple simultaneous applications.
    • Similar to a implementations of LDAP / Active Directory, while providing context functionality.
  • A personal or professional Farley File
  • Linking real world objects to metadata via QR codes.
    • Have CIDME entity or entity context ID placed in the QR code as a URL.
    • This QR code may provide a public CIDME ID. The entity scanning the QR code can create a new local entity and link the local one to the public one. Now the entity has its own copy for posterity and can add any data wished and/or link to other entities.


  • Usage in an AI-based system involving semantic and linked big data.

Back to TOC

Why the name CIDME?

After putting a considerable amount of thought into what this project was to be, as well as what it was not, the CIDME acronym was chosen as it's contents best accurately describes what the project provides. An engine to manage contextualized identity information.

The only other major usage of the term which turns up during web searches is a Dental clinic in Spain. The acronym was unique enough to use and build upon for a software project.

Back to TOC

Current project status

Back to TOC


This document serves as an overview of the various parts of the CIDME project.

Examples, and other docs, can be found in the docs directory.

There are a few different GitHub repositories for more information on specific portions:

Aside from these repositories, please refer to the vocabulary definition files. See the gh-pages branch of the CIDME GitHub repository to find the vocab directory.

There is also a project wiki, but it currently has limited information.

Back to TOC

Entity Relationship Diagram (ERD)

NOTE - This is a DRAFT and may change at any time!

DRAFT CIDME ERD Click here to view the entire diagram/file

Back to TOC

Other projects making use of CIDME

  • IMSFAY - Information Management System for Families, Adults, and Youth
    • Now a defunct project, used a previous prototype version of CIDME created with PHP and the Neo4j graphing database.

Back to TOC

Who is behind CIDME?

Well, um, currently, it's just me, Joe Thielen, project creator. But I'm hoping in time the project will grow and be joined by other individuals who share similar beliefs in the project goals / guidelines.

Please, feel free to drop me a line! I've created this project on GitHub specifically to help attract attention and make the project larger than myself.

Back to TOC

Who is Joe Thielen?

I've been creating fairly complex, but monolithic, LAMP apps for both non- and for-profit companies for over 25 years. My experience lies with small- and medium- sized organizations / businesses in the USA. Most of these apps have, in one form or another, made heavy use of, or even dealt primarily with, contact / identity information. The genesis of this project was to create a separate piece of software to provide this functionality, so as to be able to be used by other software projects.

View my LinkedIn Profile for more professional (or lack thereof) information.

Back to TOC


No releases published


No packages published