Parse Server

Self-hosted Backend-as-a-Service for Node.js with REST, GraphQL, real-time Live Query, cloud code, and pluggable adapters for any infrastructure.

21.4Kstars
4.8Kforks
Apache License 2.0
JavaScript

Parse Server is an open-source Backend-as-a-Service (BaaS) built on Node.js and Express that gives development teams a complete, production-ready backend without writing one from scratch. It exposes both a REST and a GraphQL API auto-generated from your data classes, handles user authentication with support for dozens of OAuth2 providers, and includes a real-time Live Query system that pushes data changes to clients over WebSocket without any polling.

The server is designed around a clean adapter architecture: storage (MongoDB and PostgreSQL with PostGIS), file storage (S3, Azure, GridFS, or local disk), cache (in-process or Redis), push notifications, email, and pub/sub are all swappable implementations that plug in at configuration time. This makes Parse Server deployable from a laptop to a Kubernetes cluster without changing application code.

Cloud Code lets developers run server-side JavaScript functions—lifecycle hooks such as beforeSave and afterSave, background jobs, and custom REST endpoints—directly alongside the server, enabling business logic enforcement and third-party integrations without a separate microservice. Full multi-tenancy support lets a single Parse Server process serve multiple isolated applications, each with their own database schema, user pool, and API keys.

The project has been community-maintained since Parse Inc. open-sourced it in 2016, and ships on an aggressive release cadence with parallel LTS branches for long-running deployments. It has over 21,000 GitHub stars, more than 300 contributors, and an active forum, Slack workspace, and Open Collective funding model.

What You Get

  • REST API - Auto-generated CRUD endpoints for every data class (e.g., /parse/classes/Post) with built-in ACL enforcement, query operators, pointer dereferencing, and relation traversal out of the box.
  • GraphQL API - A fully auto-generated GraphQL schema derived from your Parse classes, supporting custom resolvers, subscriptions, Relay-style pagination, and schema stitching for extending the API with your own types.
  • Live Query - A WebSocket-based real-time subscription system that pushes object creates, updates, and deletes to connected clients using MongoDB oplog tailing or PostgreSQL LISTEN/NOTIFY, with per-query regex timeout protection and query hash deduplication.
  • Cloud Code - Server-side JavaScript hooks (beforeSave, afterSave, beforeFind, afterFind, beforeLogin, and more), background jobs, and custom REST functions that run inside the Parse Server process without a separate deployment.
  • Pluggable File Storage - Adapter-based file handling with out-of-the-box support for AWS S3, Azure Blob Storage, MongoDB GridFS, and local disk; configurable URL signing and domain restriction prevent hotlinking.
  • Multi-Provider Authentication - Built-in support for username/password, anonymous sessions, email verification, password reset, MFA via TOTP, and OAuth2 adapters for Apple, Google, Facebook, GitHub, Microsoft, Spotify, Twitter, WeChat, and many more.
  • Multi-Tenancy - Run multiple isolated applications on one Parse Server instance, each with separate database collections, API keys, Cloud Code functions, and file namespaces.
  • Schema Migrations - Declarative schema definitions via DefinedSchemas that enforce class structure, field types, indexes, and CLPs at startup, enabling code-driven schema management and repeatable deployments.
  • Push Notifications - Integrated push adapter (APNS, FCM) with audience segmentation, scheduled delivery, and per-installation targeting backed by the _Installation class.
  • PostGIS Geospatial Queries - Native support for $near, $within, $geoWithin, and $nearSphere queries when using PostgreSQL with PostGIS, enabling location-based features without an external geo service.

Common Use Cases

  • Mobile app backend with no backend team - A small team ships an iOS and Android fitness app using the Parse iOS and Android SDKs; Parse Server handles user sign-up, object storage, file uploads, and push notifications, letting the team focus entirely on client code.
  • Real-time collaborative tools - A project management app uses Live Query to subscribe to task updates so every team member sees changes instantly across browser tabs and mobile devices without any long-polling infrastructure.
  • Multi-tenant SaaS platform - A B2B startup configures Parse Server’s multi-tenancy support to give each customer a fully isolated data namespace and API key pair while running a single shared server fleet.
  • Migrating off Parse.com - A company whose app was built on the original hosted Parse.com service migrates to self-hosted Parse Server, preserving all existing SDK integrations and data while regaining full control over infrastructure, scaling, and data residency.
  • IoT and device telemetry ingestion - An industrial monitoring company points hundreds of edge devices at a Parse Server REST endpoint to record sensor readings; Cloud Code hooks validate and aggregate telemetry before it hits the database.
  • Geolocation-aware consumer apps - A location-sharing or delivery-tracking app uses the PostgreSQL + PostGIS backend to run radius-based queries and sort results by distance without a separate mapping database.

Under The Hood

Architecture Parse Server follows a layered, controller-driven architecture where an Express application mounts a set of specialized routers—one per resource domain (classes, users, files, sessions, roles, Cloud Code functions, push, LiveQuery, GraphQL, hooks, and security)—each backed by a corresponding controller that encapsulates business logic. The ParseServer class acts as the composition root, instantiating controllers with injected adapter implementations at startup time so the HTTP layer never directly touches the database or cache. Storage, cache, file handling, push, pub/sub, and email are all abstract interfaces with concrete adapter implementations that are dynamically loaded and validated at boot. Cloud Code triggers and custom validators are stored in per-application-ID prototype-free registries to prevent prototype pollution attacks, and the trigger dispatch system enforces class-level permissions before any hook fires. This design means the entire persistence backend can be swapped from MongoDB to PostgreSQL by changing a single configuration string.

Tech Stack The server is written in JavaScript (ES2022 via Babel) with a growing TypeScript layer covering the entry point, LiveQuery server, logger, and type definitions. The HTTP layer uses Express 5 with @as-integrations/express5 bridging to Apollo Server 4 for GraphQL. Data persistence uses the official mongodb Node.js driver for MongoDB and pg-promise with pg-monitor for PostgreSQL. Redis is supported via the redis client for caching and rate limiting with rate-limit-redis. Real-time features run over ws WebSockets with the LiveQuery server subscribing to object change events through a pluggable pub/sub adapter. Authentication tokens are validated with jsonwebtoken and jwks-rsa for OAuth2 JWT flows, and MFA is implemented with otpauth. Email templates are rendered with Mustache. The build pipeline uses Babel for transpilation and @semantic-release for automated versioned releases on GitHub Actions.

Code Quality Parse Server maintains an extensive Jasmine-based test suite with well over 130 spec files covering authentication adapters, account lockout policies, aggregate queries, Cloud Code validators, schema migrations, and security checks. Async/await is used consistently throughout the codebase with explicit error propagation using typed Parse.Error instances rather than generic throws, giving clients predictable error codes. The DatabaseController defines an explicit internal-field registry that documents every underscore-prefixed field’s read and write permissions, making authorization logic auditable at a glance. ESLint and Prettier enforce consistent style, JSDoc is generated from source, and Codecov tracks coverage. The adapter pattern means core business logic is tested independently of any real database using in-memory mocked adapters.

What Makes It Unique Parse Server’s defining characteristic is that it ships a complete application backend—not a framework for building one—while remaining fully open and self-hostable. The combination of auto-generated REST and GraphQL APIs derived from the same schema, a first-class real-time subscription layer, server-side Cloud Code co-located with the server process, and a uniform SDK available for iOS, Android, JavaScript, Flutter, and Unity means a single Parse Server deployment can serve every client platform a product needs. The security posture is notably deliberate: VM-sandboxed regex execution with timeout enforcement protects against ReDoS in Live Query, atomic database-level operations eliminate race conditions in account lockout tracking, and a readOnlyMasterKey with IP allowlisting gives read-only analytics access without exposing write permissions.

Self-Hosting

Parse Server is released under the Apache License 2.0, a permissive open-source license that allows commercial use, modification, and redistribution without any copyleft restrictions on your application code. You can embed Parse Server in a commercial product, charge customers for a hosted service built on top of it, and keep your own application code proprietary. The only obligations are attribution—preserving the Apache license notice and the NOTICE file—and not using the Parse community trademarks for your own branding.

Running Parse Server yourself means you are responsible for the full operational stack. At minimum this requires a Node.js runtime (versions 20, 22, or 24 as of the current release cycle), a MongoDB 7 or 8 instance or PostgreSQL 16–18 with PostGIS for geospatial support, and optionally Redis for distributed caching and rate limiting. For production you will want to handle database replication and backups, TLS termination in front of the Node.js process, horizontal scaling behind a load balancer (Parse Server is stateless between requests, but LiveQuery connections are sticky), log aggregation, and monitoring. The project ships official Docker images and documents Kubernetes-ready deployment, but cluster configuration, database failover, and capacity planning are your responsibility. The codebase receives frequent security patches (multiple CVEs were addressed in the 9.5.0 release cycle alone), so staying current with releases is a real ongoing maintenance commitment.

There is no official commercial or cloud offering from the Parse community itself. Back4App and Moralis are third-party managed services built on Parse Server that offer hosted environments with dashboards, backups, auto-scaling, and SLAs—features you give up when self-hosting. The community provides support through a Discourse forum and a Slack workspace, but there are no guaranteed response times or escalation paths. Teams that need enterprise support contracts, managed upgrades, or 99.9%+ uptime SLAs backed by a vendor should evaluate those managed tiers before committing to self-hosted operations.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack

No spam. Unsubscribe anytime.

Join 750+ subscribers
No spam. Unsubscribe anytime.

Search