A standalone dashboard for managing Parse Server apps with web interface and Express middleware integration
npx @tessl/cli install tessl/npm-parse-dashboard@7.4.0Parse Dashboard is a standalone web application dashboard for managing Parse Server apps. It provides a comprehensive interface for database administration, cloud code management, push notifications, user authentication, and configuration management. The dashboard can be deployed as a standalone application or integrated as Express middleware into existing Node.js applications.
npm install -g parse-dashboard (global CLI) or npm install parse-dashboard (middleware)const ParseDashboard = require('parse-dashboard');
const { startServer } = require('parse-dashboard/Parse-Dashboard/server');For ES modules:
import ParseDashboard from 'parse-dashboard';Note: The startServer function is used internally by the CLI but can also be imported for programmatic server creation.
parse-dashboard --appId myAppId --masterKey myMasterKey --serverURL http://localhost:1337/parse --appName "My App"const express = require('express');
const ParseDashboard = require('parse-dashboard');
const dashboard = new ParseDashboard({
apps: [{
serverURL: 'http://localhost:1337/parse',
appId: 'myAppId',
masterKey: 'myMasterKey',
appName: 'My App'
}]
});
const app = express();
app.use('/dashboard', dashboard);
app.listen(4040);Parse Dashboard is built around several key components:
Command-line interface for running Parse Dashboard as a standalone application with comprehensive configuration options and environment variable support.
// Main CLI command: parse-dashboard [options]
// Available options:
interface CLIOptions {
appId?: string; // Parse App ID
masterKey?: string; // Parse Master Key
serverURL?: string; // Parse Server URL
dev?: boolean; // Development mode
config?: string; // Path to configuration file
host?: string; // Host to bind (default: 0.0.0.0)
port?: string; // Port to listen (default: 4040)
allowInsecureHTTP?: boolean; // Allow HTTP connections
// ... 10+ additional options
}Factory function for creating Parse Dashboard middleware that can be integrated into existing Express applications.
/**
* Creates Parse Dashboard Express middleware
* @param config - Dashboard configuration object
* @param options - Optional middleware configuration
* @returns Express middleware function
*/
function ParseDashboard(config: DashboardConfig, options?: MiddlewareOptions): Function;
interface DashboardConfig {
apps: AppConfig[];
users?: UserConfig[];
agent?: AgentConfig;
useEncryptedPasswords?: boolean;
iconsFolder?: string;
trustProxy?: boolean;
enableResourceCache?: boolean;
enableSecurityChecks?: boolean;
}
interface MiddlewareOptions {
allowInsecureHTTP?: boolean;
cookieSessionSecret?: string;
cookieSessionMaxAge?: number;
dev?: boolean;
}Standalone server function for creating and starting a Parse Dashboard server (used by CLI).
/**
* Creates and starts standalone Parse Dashboard server
* @param options - Server configuration options including CLI options
*/
function startServer(options: ServerOptions): void;
interface ServerOptions extends MiddlewareOptions {
host?: string; // Host to bind (default: 0.0.0.0)
port?: string; // Port to listen (default: 4040)
mountPath?: string; // Mount path (default: /)
sslKey?: string; // Path to SSL private key
sslCert?: string; // Path to SSL certificate
trustProxy?: boolean; // Trust proxy headers
config?: string; // Path to configuration file
appId?: string; // Parse App ID (for CLI configuration)
masterKey?: string; // Parse Master Key (for CLI configuration)
serverURL?: string; // Parse Server URL (for CLI configuration)
graphQLServerURL?: string; // GraphQL Server URL (for CLI configuration)
appName?: string; // App display name (for CLI configuration)
agent?: string; // JSON string of agent configuration
}Comprehensive configuration system supporting multiple Parse Server apps, authentication, features, and advanced customization options.
interface AppConfig {
serverURL: string;
appId: string;
masterKey: string | (() => string);
appName: string;
graphQLServerURL?: string;
readOnlyMasterKey?: string;
masterKeyTtl?: number;
appNameForURL?: string; // Custom URL slug for the app
production?: boolean;
iconName?: string;
primaryBackgroundColor?: string;
secondaryBackgroundColor?: string;
columnPreference?: ColumnPreference;
classPreference?: ClassPreference;
scripts?: ScriptConfig[];
}
interface ColumnPreference {
[className: string]: ColumnConfig[];
}
interface ColumnConfig {
name: string;
visible: boolean;
preventSort?: boolean;
filterSortToTop?: boolean;
}
interface ClassPreference {
[className: string]: {
filters?: FilterConfig[];
};
}
interface FilterConfig {
name: string;
filter: FilterConstraint[];
}
interface FilterConstraint {
field: string;
constraint: string;
value?: any;
}
interface ScriptConfig {
title: string;
classes: string[];
cloudCodeFunction: string;
showConfirmationDialog?: boolean;
confirmationDialogStyle?: string;
}Multi-user authentication system with support for basic authentication, multi-factor authentication (TOTP), and read-only access controls.
interface UserConfig {
user: string;
pass: string;
readOnly?: boolean;
apps?: UserAppConfig[];
mfa?: string;
mfaAlgorithm?: string;
mfaDigits?: number;
mfaPeriod?: number;
}
interface UserAppConfig {
appId: string;
readOnly?: boolean;
}
class Authentication {
constructor(validUsers: UserConfig[], useEncryptedPasswords: boolean, mountPath: string);
initialize(app: Express.Application, options: AuthOptions): void;
authenticate(userToTest: any, usernameOnly?: boolean): AuthResult;
}
interface AuthOptions {
cookieSessionSecret?: string;
cookieSessionMaxAge?: number;
mountPath?: string;
}
interface AuthResult {
isAuthenticated: boolean;
matchingUsername: string | null;
otpMissingLength: number | false;
otpValid: boolean;
appsUserHasAccessTo: UserAppConfig[] | null;
isReadOnly: boolean;
}OpenAI-powered AI assistant that provides natural language interface for database operations and Parse Server management.
interface AgentConfig {
models: ModelConfig[];
}
interface ModelConfig {
name: string;
provider: string;
model: string;
apiKey: string;
}
// AI Agent API endpoint: POST /apps/:appId/agent
interface AgentRequest {
message: string;
modelName: string;
conversationId?: string;
permissions: {
createObject: boolean;
updateObject: boolean;
deleteObject: boolean;
createClass: boolean;
deleteClass: boolean;
};
}