Open-source project
elementor/elementor avatar
elementor/elementor

Elementor on GitHub: what the open source plugin actually contains

The most advanced frontend drag & drop page builder. Create high-end, pixel perfect websites at record speeds. Any theme, any page, any design.

7,084 stars1,566 forksPHPGPL-3.0

At a glance

What is it?
Elementor is a GPL-3.0 WordPress page builder written in PHP, with a JavaScript editor on top. This review covers what the repository ships, how to install and build it, and where the free plugin stops and Elementor Pro begins.
Who is it for?
Adopt Elementor if you build WordPress sites and want a drag-and-drop editor that any theme can host, or if you write addons against its developer API. Do not adopt it expecting the GitHub repository to give you support: the README states plainly that no support is offered there, and Pro subscribers are routed to their purchase email or account page instead.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 2 days ago.
What is it written in?
Mainly PHP, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 27, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What the Elementor repository is, and who it is for

Elementor is a front-end drag-and-drop website builder distributed as a WordPress plugin. The repository is the GPL-3.0 source of that plugin, not a standalone application: elementor.php sits at the top level as the plugin entry point, with includes/, modules/, core/, app/, packages/, assets/ and migrations/ around it. The README frames the audience in three groups, a web designer chasing pixel-perfect output, a marketer who needs to get online quickly, and a developer who wants to extend the builder. Only the third group will find the repository layout meaningful on its own. The first two are really being pointed at the WordPress plugin directory and at Elementor's own site, because the README's support section states that no support is offered through the repository and asks people not to open issues or discussions for it. That split matters when you evaluate the project: the code is open, the help desk is not.

The repository is not archived, and the last push was on 2026-09-21, so development is current. Recent releases include 4.4.0-latest-1789988262 and 4.3.0-latest-1789990654, both dated 2026-09-21, plus a nightly build from 2026-09-08. The naming is worth reading carefully: those are build artifacts with timestamps appended, not the plain semver tags a library consumer might expect. The package.json version field reads 4.4.0, and the release branch script is create-release-branch, so versioning is managed inside the repository rather than only on GitHub. If you track Elementor for a client site, the WordPress plugin changelog is the surface you watch, not the release list here.

How the plugin is put together: PHP core, JS editor, packages workspace

The architecture visible in the repository is a PHP plugin with a separately built JavaScript editor. The PHP side is conventional WordPress: elementor.php bootstraps, includes/ and modules/ hold the runtime, migrations/ handles schema and data changes between versions, and vendor_prefixed/ plus php-scoper/ indicate that third-party PHP dependencies are scoped to avoid collisions with other plugins. That prefixing is a real design decision, and it exists because WordPress loads every active plugin into one PHP process where two libraries of the same name will fight.

The JavaScript side is a monorepo. packages/ is a workspace, turbo.json drives the task runner, and package.json exposes granular scripts: build:packages runs turbo build, build:tools filters to ./packages/packages/tools/*, and build runs the packages build followed by node scripts/vite/build-all.mjs. Vite handles the asset pipeline, TypeScript is checked through packages/tsconfig.json, and the watch path runs turbo dev --parallel alongside tsc -w. This is a heavier toolchain than most WordPress plugins carry, and it means contributing to the editor requires a Node environment, not just a PHP one. The .nvmrc and packageManager field ([email protected]) pin the expected runtime.

For addon authors, the README points outward rather than inward: it names the Elementor Developers Center, the Developers Blog and the Developers Documentation as the places to learn how to extend the builder and create addons. The repository does include examples/example-plugin/, which is the closest thing to an in-tree starting point. The README does not document the widget registration API itself, so treat the repository as the implementation and the developer docs as the contract.

Installing Elementor and building it from source

For a normal WordPress site, Elementor is installed like any other plugin from the WordPress plugin directory, and the README's own links point to the Elementor site and the WordPress plugin page rather than to a manual install procedure. The repository is for people who want to run or modify the source. The install script is defined in package.json and combines npm and Composer:

bash
npm run install

That script expands to npm ci --ignore-scripts --no-audit followed by composer install, so you need both npm and Composer available before running it. The packageManager field pins [email protected] and .nvmrc pins the Node line. For a CI environment where you only want the JavaScript dependencies, the repository defines install:ci as npm ci --ignore-scripts --no-audit.

To produce a distributable plugin, the build path is:

bash
npm run build

According to package.json, this runs build:packages and then node scripts/vite/build-all.mjs. If you would rather not install Node and PHP locally, the repository ships a Dockerfile whose final stage copies /app/build into a scratch image, and package.json wraps it:

bash
npm run build:docker

The script removes docker-output, builds with --target output, extracts the result into ./docker-output/elementor and zips it, printing that the build output is available at ./docker-output/elementor/elementor.zip. Note the PHP version inside that Dockerfile: it installs php7.4-cli and the matching php7.4 extensions from the Sury repository, while the builder stage itself runs on node:20.19-bookworm. A local build on a modern PHP version is a different environment from the containerized one, and the repository does not claim they produce identical output.

For running the test suite, docker-compose.yml defines a mysql service on host port 3308 with MYSQL_DATABASE set to wordpress_test, plus a wordpress_phpunit service from the pojome/phpunit-local image with PHPUNIT_DB_HOST pointed at mysql. The .env.example file lists the variables the test tooling reads, including USERNAME=admin, PASSWORD=password and BASE_URL=http://127.0.0.1:9400.

Where Elementor stops being the right tool

The most concrete limitation is stated by the project itself: the README says support is not offered through the repository and asks users not to open issues or discussions for help requests. Bug reports are accepted only when you can reproduce the problem consistently after troubleshooting, and security issues go through the bug bounty programs rather than the issue tracker. If your evaluation depends on being able to file a ticket and get an answer, the free plugin's channel is the WordPress support forum or the Help Center, and personal support is tied to an active Elementor Pro subscription. That is a support boundary, not a code boundary, and it is the kind of thing teams discover too late.

The second constraint is the feature split. The README describes the plugin as free and open source and separately points readers to Elementor One and to Elementor Pro. The repository does not enumerate which capabilities live behind that boundary, so anyone planning a build should confirm feature by feature rather than assuming the plugin covers the whole editor they have seen in demos.

Third, the build environment is opinionated. The Dockerfile targets PHP 7.4 packages, the JavaScript toolchain expects Node 20.19 and npm 10, and the full install pulls both npm and Composer dependencies. On a shared host with no build tooling you will never run npm run build, which is fine, but it also means you cannot patch the editor without setting up the whole workspace. Finally, the release tags carry timestamp suffixes, so pinning to a specific build for a client site requires reading the tag rather than trusting a plain version number.

Elementor compared with hand-coded WordPress themes

The realistic alternative for most teams evaluating Elementor is not another plugin but the classic approach: a custom theme with template files and hand-written CSS, edited in a code editor. The difference is where the layout lives. In a custom theme, the structure is in PHP templates and the styling in a stylesheet, both under version control, and a change is a commit. In Elementor, the layout is data produced by the editor and stored in the database, while the plugin supplies the rendering code. That makes the plugin upgrade path a shared concern: the migrations/ directory exists precisely because stored layouts have to keep working as the plugin changes.

The trade-off is direct. A custom theme gives you a diffable history for every layout change and no dependency on a plugin's release cycle, at the cost of writing markup for each new page. Elementor gives non-developers the ability to assemble pages without touching templates, at the cost of layout living outside your Git history and of inheriting the plugin's compatibility surface. Teams that already have a component library and a deploy pipeline built around theme files will find Elementor's storage model works against them. Teams whose bottleneck is a designer waiting on a developer to ship a landing page will find the opposite. The repository's own structure reflects this: it is a plugin with its own migration system, not a theme.

Licence, maintenance and the cost of staying current

Elementor is licensed GPL-3.0, with license.txt at the repository root. For most WordPress users this is the same licence as WordPress itself, and it means you can redistribute and modify the plugin under the GPL's terms. It does not mean the commercial Elementor Pro product is covered by this repository, and the README treats Pro as a separate subscription with its own support entitlement. If your organisation has rules about which licences may enter a codebase, GPL-3.0 is a copyleft licence and its obligations are worth checking with whoever handles that for you; this is a description of what the repository states, not legal advice.

Maintenance looks current on the evidence available: the repository is not archived and the last push was on 2026-09-21, with release builds from the same day and a nightly from 2026-09-08. The upgrade cost sits mostly on the WordPress side. Because layouts are stored in the database and the plugin carries a migrations/ directory, a major version bump is not just a file replacement. The repository's own test infrastructure, the docker-compose.yml MySQL service and the wordpress_phpunit image, exists so that this can be exercised before release. If you maintain a site on Elementor, the practical question is not whether the plugin is maintained but whether your stored layouts survive the next migration, and the changelog.txt and readme.txt files at the root are where the project records what changed.

Editorial conclusion

Adopt Elementor if you build WordPress sites and want a drag-and-drop editor that any theme can host, or if you write addons against its developer API. Do not adopt it expecting the GitHub repository to give you support: the README states plainly that no support is offered there, and Pro subscribers are routed to their purchase email or account page instead. Before committing, verify three things: that your PHP version satisfies the Dockerfile's php7.4 packages and composer.json constraints, that a build from source with npm run build produces the same plugin you would get from the WordPress directory, and that every feature you need is in the free plugin rather than behind Elementor One.

Frequently asked questions

What is Elementor used for?

Elementor is a front-end drag-and-drop website builder for WordPress. The README describes it as a tool for creating high-end, pixel-perfect websites without code, aimed at designers, marketers and developers extending it.

Is Elementor in WordPress free?

The README states that the Elementor website builder is free and open source, and the repository is licensed GPL-3.0. The README also points to Elementor One and Elementor Pro, which are separate from the free plugin.

Is Elementor the same as WordPress?

No. Elementor is a plugin that runs inside WordPress, with elementor.php as its entry point. WordPress provides the site and the plugin system; Elementor provides the drag-and-drop editor on top of it.

What are the downsides of using Elementor?

The README states that no support is offered through the repository and asks users not to open issues or discussions for help, so free users rely on the WordPress support forum and Help Center. Layouts are also stored in the database rather than in theme files, and the plugin carries a migrations/ directory to move that data between versions.

How do I install Elementor in WordPress?

The README points to the WordPress plugin page and the Elementor site for installation rather than giving manual steps. Building from the repository source is a separate path, using npm run install for dependencies and npm run build for the plugin output.

Official sources

  1. elementor/elementor on GitHub
  2. License: GPL-3.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/elementor-elementor.svg)](https://hysenlabs.com/projects/elementor-elementor)