Current project Maintained by Neoground

Open-source project · Framework

Charm

A compact, modular PHP framework for professional business applications, SaaS platforms, APIs, and high-quality websites — built for performance, productive development, and long-lived application architecture.

  • PHP
  • Web
  • API
Latest release
v3.9
License
MIT
Built for
PHP 8.4+
Charm PHP Framework architecture with application routes, controllers, Twig views, Eloquent models, services, queues, events, and API responses connected through a compact modular core
v3.9 Production-driven PHP framework for business applications and platforms

The PHP foundation behind Neoground

A professional application core between the micro-framework and the full-stack monolith.

Charm is the framework beneath Neoground’s web-based platforms, SaaS products, business applications, APIs, and websites. It combines a compact high-performance core with the practical architecture and recurring capabilities required by serious production systems. The framework is deliberately selective. Charm does not attempt to reproduce every feature found across the largest PHP ecosystems, nor does it leave each application to assemble its own routing, views, database layer, configuration, authentication, background work, and operational conventions. It provides a coherent professional foundation — and stays small enough to understand.

What it solves
Provide a fast, modular, and productive PHP foundation for building and operating maintainable business software, SaaS platforms, APIs, hybrid web applications, and content-rich websites.
Where it fits
Professional PHP development, founder-led SaaS products, internal business systems, customer platforms, APIs, backend services, hybrid applications, and websites that require more structure than a minimal router without the breadth and ceremony of a general-purpose enterprise framework.

Core capabilities

Designed around the work the project needs to perform.

01 · Built for real applications

The recurring foundation required by business platforms is already in place.

Charm starts with a structured MVC application rather than an empty collection of packages. Routes, controllers, models, Twig views, environment-aware YAML configuration, requests, responses, authentication, migrations, console commands, events, cron jobs, and queues share one coherent application model. That gives a new project enough structure to become maintainable software without forcing every team to design its framework before it can design the product.

Charm application foundation connecting MVC components, configuration, authentication, scheduled work, and API endpoints
02 · Compact by deliberate design

A focused core that grows only when the capability belongs across applications.

Charm is developed through daily production use. New abstractions enter the core when they solve recurring application needs — not merely because another framework includes them. The result is a smaller surface that remains easier to navigate, inspect, optimize, and maintain while still covering the substantial work expected from a professional web-application foundation.

Compact Charm framework core surrounded by optional application modules and reusable business capabilities
03 · Curated rather than reinvented

Proven PHP components, connected through a clearer application model.

Charm uses strong components where the PHP ecosystem already provides them: Twig for presentation, Eloquent for data access, Symfony components for console and configuration work, Monolog for logging, Guzzle for HTTP, Flysystem for storage, and established development tools. Neoground focuses its own engineering on the kernel, routing, application structure, module system, productive abstractions, and the integration required to make those components feel like one framework.

Charm framework integrating selected PHP ecosystem components through one modular application architecture

Additional capabilities

A practical foundation with useful depth.

01

High-performance routing

Define clear web and API routes through modern PHP attributes and dispatch them through a compact routing layer designed to keep request handling direct and efficient.

02

Structured MVC applications

Organize business logic, request handling, data models, presentation, jobs, middleware, migrations, and application services through a predictable wireframe.

03

Twig presentation layer

Build server-rendered websites and application interfaces with Twig, reusable layouts, components, filters, functions, and clean separation between presentation and PHP logic.

04

Eloquent ORM

Use Laravel’s established Eloquent model and query system without adopting Laravel’s complete application structure or surrounding framework conventions.

05

YAML configuration

Keep application, connection, module, language, and environment configuration readable through structured YAML files and environment-specific overrides.

06

Requests and responses

Work with concise abstractions for request values, uploaded files, redirects, rendered views, JSON payloads, downloads, errors, and other common HTTP outcomes.

07

APIs and JSON output

Create API controllers and structured JSON responses without building a separate application foundation, including straightforward pagination and model-filtering patterns.

08

Authentication for web and API

Use the integrated Guard and token capabilities for sessions, login handling, protected routes, remembered users, access tokens, and frontend or API authentication flows.

09

Events and listeners

Decouple application behavior through framework and custom events, with listeners organized inside the application rather than hidden across unrelated bootstrapping code.

010

Database migrations

Version application data structures alongside the codebase and manage schema changes through the project’s migration system and console workflow.

011

Scheduled jobs

Define application cron jobs as classes with readable schedules, execute them through one recurring system trigger, and keep scheduled behavior inside the application.

012

Background queues

Move suitable work into named priority-aware queues and process jobs independently from the user-facing request cycle.

013

Console commands

Build application-specific command-line operations on Symfony Console and run framework, maintenance, generation, migration, scheduling, and project commands through Bob.

014

Redis and application caching

Reduce repeated work through integrated caching, native or client-based Redis support, and simple remember-style access for frequently used application data.

015

Files and external services

Use integrated filesystem abstractions, SFTP support, outbound HTTP requests, email, image processing, dates, validation, and logging without creating a new integration layer in every application.

016

Development and debugging tools

Inspect errors, requests, routes, queries, timing, logs, and runtime context through development-mode integrations including Whoops, Kint, PHP Debug Bar, and application-aware diagnostics.

017

Modular application capabilities

Keep substantial functionality in reusable modules that can register services, configuration, routes, views, migrations, events, and application behavior as one coherent capability.

018

Optimized application bootstrap

Cache and consolidate stable initialization data where appropriate so production applications do not repeatedly rediscover the same framework and module structure.

Documentation

Learn the architecture, then follow the capability you need.

The Charm documentation covers installation, the application wireframe, MVC development, routing, configuration, modules, database access, requests and responses, authentication, caching, events, scheduled jobs, queues, console commands, and other core capabilities. The documentation is being progressively rewritten and expanded around the professional framework direction and the upcoming version 4 architecture. Because v4 is a substantial evolution, verify examples, package requirements, and migration guidance against the exact framework version used by the application.

Current release

Build with the current framework.

Charm 3.9 is the latest tagged public release in the current 3.x line. It is used in production and represents a stable beta foundation, while Charm 4 is the major rewritten milestone intended to complete and consolidate the framework’s long-term architecture. Version 4 contains breaking changes. New adopters should review the current repository, documentation, branch status, and migration guidance before deciding whether to begin on the tagged 3.x line or align a new project directly with the evolving v4 foundation. Pin production dependencies rather than following an unreviewed development branch.

Version
v3.9
Released
Requirements
PHP 8.4+

Support open work

Support the foundation behind Neoground’s open-source and product work.

Charm is Neoground’s most actively used open-source project. Continued development supports version 4, PHP compatibility, performance work, tests, documentation, migration guidance, issue investigation, the application wireframe, Bob tooling, and the less visible maintenance required by a framework used across production systems. Support can also take the form of a focused pull request, a reproducible issue, a regression test, careful documentation, a real compatibility report, or sponsorship that creates more dedicated time for the framework’s development.

Project questions

Before you adopt or contribute.

What exactly is Charm?

Charm is an open-source PHP framework and application foundation for business applications, SaaS platforms, APIs, hybrid web applications, and websites. It provides the framework core, project structure, routing, Twig presentation, Eloquent data access, configuration, requests, responses, authentication, migrations, events, queues, scheduled jobs, console tooling, caching, and recurring infrastructure expected across professional web systems.

What makes Charm different from Laravel or Symfony?

Laravel and Symfony are mature ecosystems with broad capabilities, large communities, substantial documentation, and many integrations. Charm is not attempting to duplicate their complete scope. Charm selects excellent ecosystem components — including Eloquent, Twig, and Symfony packages — and connects them through a smaller, business-focused application core. It is designed for developers who prefer a more direct structure, a narrower framework surface, strong performance, and fewer conventions that exist mainly to support every possible application category.

Is Charm a micro-framework?

No. Charm keeps a compact core, but it provides considerably more application structure and recurring functionality than a minimal HTTP router. Models, Twig views, configuration, authentication, migrations, events, scheduled jobs, queues, console commands, caching, APIs, and development tools are part of the intended application foundation.

Is Charm intended to replace every other PHP framework?

No. Framework choice depends on the application, team, ecosystem, hiring needs, integrations, operational model, and expected lifespan. Charm is particularly relevant where its performance, architecture, selected component stack, and business-application conventions match the work. A project that depends heavily on another framework’s ecosystem may be better served by that framework.

What kinds of applications suit Charm best?

Charm is designed primarily for business applications, SaaS products, customer and member platforms, internal tools, APIs, web backends, hybrid applications, and substantial websites. It can also support smaller applications, but its principal value appears where a project benefits from a consistent architecture, authentication, database work, background processing, scheduled behavior, integrations, and long-term maintenance.

Is Charm used in production?

Yes. Charm powers Neoground’s own web-based platforms, SaaS products, business applications, APIs, and websites. The framework evolves through this daily production use rather than through hypothetical feature planning alone. As with any framework, an individual application still requires appropriate design, testing, security review, deployment, monitoring, backups, and operational ownership.

How stable is the current framework?

The current 3.x line is a stable beta and has been used successfully in Neoground production applications. Version 4 is the upcoming major foundation intended to become the first feature-complete stable release. Because v4 is a major rewrite with breaking changes, external users should pin dependencies, review release notes, test upgrades, and avoid assuming automatic compatibility between major versions.

Should I begin a new project before Charm 4 is released?

That depends on the project timeline and tolerance for migration work. The current tagged framework is operational and used in production, but Charm 4 substantially revises and completes the long-term architecture. Review the active repository and migration status before choosing. A new project that can follow v4 development closely may align with the new foundation; a production project requiring a fixed dependency should use a reviewed tagged version and plan upgrades explicitly.

Which PHP version does Charm require?

The current v3.9 package requires PHP 8.4 or newer. The framework is developed around current PHP generations, and the version 4 work is optimized for modern PHP environments. Always use the Composer and Packagist metadata for the exact framework release rather than relying on a general project-page requirement.

Which databases can Charm use?

Database access is based primarily on Eloquent and its supported connection drivers. Current Charm documentation covers MariaDB, MySQL, PostgreSQL, SQLite, and SQL Server environments. Exact database and server versions depend on the selected Charm, Eloquent, PHP, and driver versions.

Why does Charm use Eloquent instead of creating its own ORM?

Eloquent is a capable and widely understood ORM with expressive models, relationships, query building, casting, pagination, and database support. Charm’s purpose is not to replace strong ecosystem components merely to make the framework appear self-contained. It integrates Eloquent into a different application structure and adds Charm-specific conventions where they improve recurring business-application work.

Why does Charm use Twig?

Twig provides a mature and expressive presentation layer with inheritance, includes, macros, filters, escaping, and a strong separation between templates and application logic. Charm uses Twig for server-rendered applications and websites while remaining suitable as an API backend for JavaScript or other frontends.

How are routes defined?

Controller actions can declare routes through PHP attributes, including the HTTP method, path, route name, and relevant filters. This keeps request handling close to the code that owns it while the framework performs route discovery, matching, parameter handling, and dispatch.

Does Charm support APIs?

Yes. Controllers can return structured JSON responses, files, redirects, rendered views, or other output types through the same application model. Authentication tokens, request access, HTTP integrations, filtering, pagination, validation, queues, and events support common API and backend requirements.

Does Charm include authentication?

Charm includes integrated session-based authentication and token capabilities for web and API use cases. The current Guard system covers login and logout behavior, remembered sessions, route protection, password handling, throttling, and related authentication work. Applications remain responsible for designing their authorization model, roles, permissions, security policies, and risk-appropriate controls.

How does Charm handle background and scheduled work?

Scheduled jobs are defined as application classes and executed through Charm’s scheduling system from a recurring system cron or timer. Longer-running or deferred tasks can be added to named, priority-aware queues and processed outside the user-facing request cycle.

What is Charm Wireframe?

Charm Wireframe is the standard starting structure for a Charm application. It provides the project directories, entry points, configuration layout, example web-server files, Composer setup, Bob integration, and the application space where controllers, models, views, routes, jobs, migrations, and modules are built.

What is Bob?

Bob is the Charm command-line toolkit. It can create a new project from Charm Wireframe, start a local PHP development server, dispatch application console commands, update itself, and provide a consistent entry point for framework and project operations.

Can Charm applications be modular?

Yes. Modularity is a central architectural principle. Reusable capabilities can package their own behavior and integrate with the framework and application without placing all code inside one central project namespace. The exact public module and package conventions are continuing to be consolidated as part of the version 4 foundation and documentation.

Does Charm support Redis?

Yes. Redis can be used for application caching and supporting high-performance workloads. Current packages support a Redis client, while the native PHP Redis extension can be used where available. Applications should still design expiration, invalidation, failure handling, persistence, and operational monitoring according to their own data and reliability requirements.

Is Charm suitable for beginners?

A developer who understands modern PHP, Composer, HTTP, MVC, databases, and basic Linux or web-server operation should be able to follow Charm’s architecture. It is not positioned primarily as a teaching framework for somebody encountering PHP for the first time. Its conventions are designed around professional application development, and the documentation is still expanding toward the complete v4 release.

Does Charm provide the same ecosystem as Laravel or Symfony?

No. Charm has a much smaller public ecosystem and contributor base. It compensates through a focused core, selected mature dependencies, direct Neoground stewardship, and daily use across Neoground systems. Projects that require a large marketplace of third-party bundles, extensive community training material, or broadly available framework specialists should account for that difference during technology selection.

Can I use any Composer package with Charm?

Standard Composer packages can generally be added like they can in other PHP applications, subject to their PHP requirements, dependencies, initialization model, and compatibility. A package does not need a Charm-specific wrapper unless tighter configuration, lifecycle, module, or application integration is useful.

How should I upgrade a production application?

Pin the current dependency, review the framework changelog and package requirements, preserve application configuration, run automated and application-specific tests, inspect database migrations, and deploy through a controlled environment. Version 4 is a breaking major release and should be treated as an application migration rather than an unattended Composer update.

How can I report an issue?

Use the GitHub issue tracker for reproducible framework defects. Include the exact Charm and PHP versions, operating environment, relevant configuration, minimal reproduction, expected result, actual result, logs, and stack traces needed to investigate the problem. Remove credentials, tokens, personal data, internal source code, and sensitive infrastructure details before publishing diagnostic material.

How can I contribute?

Useful contributions include focused bug fixes, regression tests, PHP-version compatibility work, documentation, examples, performance analysis, migration notes, security observations, and improvements to the core, wireframe, or Bob toolkit. Discuss large architectural changes before implementing them so they remain compatible with Charm’s compact-core philosophy and the direction of version 4.

What license does Charm use?

Charm is released under the MIT License. Applications must also respect the separate licenses of Twig, Eloquent and Illuminate components, Symfony packages, Monolog, Guzzle, Flysystem, Redis clients, development tools, and any other dependencies they include.