MemberJunction (MJ) is an open-source, metadata-driven application development platform that unifies data management, business logic, and user interfaces through a comprehensive Common Data Platform (CDP). Built with TypeScript, Angular, and SQL Server, MemberJunction provides enterprise-grade capabilities while remaining accessible to organizations of all sizes.
๐๏ธ Unified Data Platform - Integrate data from multiple sources into a singular, well-organized repository
๐ Rich Metadata Layer - Comprehensive metadata system that drives UI generation, validation, and business logic
๐ MemberJunction Explorer - Powerful web application for browsing, searching, and managing your unified data
๐ค AI Integration - Built-in support for 15+ AI providers including OpenAI, Anthropic, Google, and more
๐จ Communication Framework - Send emails, SMS, and messages through multiple providers with template support
โก Actions System - Flexible framework for implementing and scheduling custom business logic
๐ Enterprise Security - Row-level security, field permissions, and integration with Auth0/MSAL
๐ ๏ธ Developer Friendly - Full TypeScript, comprehensive APIs, and extensive documentation
๐ฆ Modular Architecture - 100+ npm packages that can be used independently or together
MemberJunction was designed to solve common challenges in data management and application development:
Eliminate Data Silos - Bring all your data together in one place
Reduce Development Time - Auto-generate forms, APIs, and documentation from metadata
Ensure Consistency - Single source of truth for data structure and business rules
Scale Efficiently - From small non-profits to large enterprises
Stay Flexible - Extend and customize every aspect of the platform
Originally created to support non-profits and associations, MemberJunction is free to use and open source!
Extensive documentation is available at https://docs.memberjunction.org
Node.js 18+ (20+ recommended)
npm 9+
SQL Server 2019+ (or Azure SQL Database)
Angular CLI 18+
Git for cloning the repository
Clone the repository
git clone https://github.com/MemberJunction/MJ.git cd MJ
Copy
Install dependencies
npm install
Copy
Configure your environment
Copy install.config.json.example
to install.config.json
Update with your database connection and authentication settings
Set up environment variables for API keys (if using AI features)
Run the installation
node InstallMJ.js
Copy
This will:
Create the MemberJunction database schema
Install base metadata
Generate entity classes and GraphQL types
Set up initial configuration
Start the services
# Start the API server npm run start:api # In another terminal, start the Explorer UI npm run start:explorer
Copy
Access MemberJunction Explorer
MemberJunction uses a modular monorepo architecture with 100+ TypeScript packages. Each package is designed to be used independently or as part of the complete platform.
MJ / โโโ packages / # All npm packages โ โโโ Actions / # Action framework packages โ โโโ AI / # AI integration packages โ โโโ Angular / # UI components โ โโโ Communication / # Messaging packages โ โโโ ... # Core and utility packages โโโ SQL Scripts / # Database setup and migrations โโโ migrations / # Flyway migration scripts โโโ docs / # Additional documentation
Copy
Comprehensive AI integration supporting 15+ providers:
@memberjunction/ai - Provider-agnostic AI abstractions (works standalone!)
@memberjunction/aiengine - High-level AI orchestration
AI Providers - OpenAI, Anthropic, Google, Azure, Mistral, and more
Vector Operations - Embeddings, similarity search, duplicate detection
Recommendations - Pluggable recommendation engine
Multi-channel messaging with template support:
@memberjunction/communication-engine - Core messaging engine
Email Providers - SendGrid, Microsoft Graph, Gmail
SMS/Messaging - Twilio (SMS, WhatsApp, Messenger)
Entity Communications - Bulk messaging to entity record sets
Extensible business logic execution:
100+ Angular components for rapid development:
@memberjunction/ng-explorer-core - Explorer application shell
Data Components - Grids, forms, charts, timelines
AI Components - Chat interfaces, Skip integration
Generic Components - Reusable UI building blocks
# Build everything npm run build # Build specific package turbo build --filter= "@memberjunction/core" # Watch mode (auto-rebuild on changes) npm run watch # Start services npm run start:api # Start API server (port 4000) npm run start:explorer # Start Explorer UI (port 4200) # Code quality npm run lint # Run ESLint npm run format # Format with Prettier npm test # Run tests
Copy
Make changes in the relevant package under /packages
Build the package using npm run build
in the package directory
Test locally using the watch mode for rapid development
Run tests to ensure nothing is broken
Create a PR with your changes
Each package follows a consistent structure:
packages / MyPackage / โโโ src / # TypeScript source files โโโ dist / # Compiled output โโโ package . json # Package configuration โโโ tsconfig . json # TypeScript configuration โโโ README . md # Package documentation โโโ CHANGELOG . md # Version history
Copy
MemberJunction's core philosophy is metadata-driven development:
Entities define data structure and relationships
Fields specify data types, validation, and UI hints
Views control data access and filtering
Actions implement business logic
Forms are auto-generated or customized
Entities are the building blocks:
// Never instantiate directly - use Metadata const md = new Metadata (); const customer = await md . GetEntityObject < CustomerEntity >( 'Customers' ); await customer . Load ( customerId ); customer . Name = 'New Name' ; await customer . Save ();
Copy
MemberJunction generates code from metadata:
Entity subclasses with full TypeScript typing
GraphQL schemas and resolvers
SQL views and stored procedures
API documentation
Strict mode enabled for all packages
No any
types - use proper typing or unknown
Explicit return types for public methods
Interface-first design for extensibility
PascalCase for classes and interfaces
camelCase for variables and functions
UPPER_CASE for constants
Descriptive names over abbreviations
Single responsibility - one class, one purpose
Dependency injection where appropriate
Error handling with meaningful messages
Logging at appropriate levels
Tests for critical functionality
MemberJunction includes Docker configuration for containerized deployment:
# Build the Docker image docker build -f docker/MJAPI/Dockerfile -t memberjunction/api . # Run with docker-compose docker-compose up -d
Copy
Features:
Multi-stage build for optimal image size
Includes SQL Server tools and Flyway migrations
Environment-based configuration
Health checks and logging
Database changes are managed through Flyway migrations:
Versioned migrations in /migrations/v2/
Automatic execution on startup
Rollback support for safe deployments
Schema versioning for upgrade paths
MemberJunction includes enterprise-grade security features:
Authentication - Auth0 and Azure AD (MSAL) support
Row-Level Security - Fine-grained data access control
Field Permissions - Control access to sensitive fields
API Security - GraphQL query depth limiting and rate limiting
Audit Logging - Complete audit trail of all changes
MemberJunction is ideal for:
Non-Profit Organizations - Manage members, donors, and programs
Associations - Track memberships, events, and communications
Enterprise Applications - Build custom business applications
Data Integration - Unify data from multiple systems
AI Applications - Build AI-powered features with integrated vector search
We welcome contributions from the community!
MemberJunction is open source software licensed under the ISC License. See the LICENSE file for details.
Contributors - Thank you to all who have contributed code, documentation, and ideas
BrowserStack - For providing testing infrastructure
Open Source Community - For the amazing tools and libraries we build upon
Built with โค๏ธ by the MemberJunction community