PHPackages                             restlessdev/sodapop - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. restlessdev/sodapop

ActiveLibrary[Framework](/categories/framework)

restlessdev/sodapop
===================

An easy to use MVC Framework

36PHP

Since Mar 9Pushed 2mo ago2 watchersCompare

[ Source](https://github.com/18thstreetmike/sodapop_framework)[ Packagist](https://packagist.org/packages/restlessdev/sodapop)[ RSS](/packages/restlessdev-sodapop/feed)WikiDiscussions master Synced 3d ago

READMEChangelogDependenciesVersions (1)Used By (0)

The Sodapop Framework
=====================

[](#the-sodapop-framework)

Sodapop is a simple PHP MVC framework.

Its syntax should be immediately familiar to anyone who has used Ruby on Rails, Zend Framework, or other Model-View-Controller frameworks.

A Quick Example
---------------

[](#a-quick-example)

A \[Controller\] [1](http://sodapop.restlessdev.com/documentation/controllers "Controllers"):

```

```

A \[View\] [2](http://sodapop.restlessdev.com/documentation/views "Views") Template:

```

```

A \[Model\] [3](http://sodapop.restlessdev.com/documentation/models "Models"): In typical CRUD-type operations, Sodapop doesn't require model classes to be explicitly defined. See  for more details.

Why Use Sodapop?
----------------

[](#why-use-sodapop)

You have many choices in frameworks; why should you consider this one?

Sodapop has several core values that guide its development.

1. Code should be well-organized; **everything should be easily discoverable** if one knows the basics of the framework.
2. **Boilerplate code is unnecessary.** Let computers handle the repetitive stuff, they enjoy it more.
3. **Convention over configuration.** You shouldn't have to state everything explicitly, but you can override defaults.
4. A framework should **get out of the way** and not make you change your style.

It has several features that support these values.

- The \[directory structure\] [4](http://sodapop.restlessdev.com/documentation/sodapop_directories "Directory Structure") is straightforward and consistent, and the (default) naming conventions make it easy to find things.
- Any changes to the \[routing\] [5](http://sodapop.restlessdev.com/documentation/routes_conf "Routing") system happen in a single file, routes.json, so they will be easy to manage.
- If one uses its default naming conventions (plural, underscore-separated table names and singular, camelCapped class names) for models, you don't need to declare classes.
- The framework lets you use PHP's built-in superglobals or its own wrappers, and doesn't force you to learn how to do everything in its own way.
- It is being developed from the ground up, slowly. It values consistency over feature-itis.

Themes
------

[](#themes)

One of the most important (and unique) features of Sodapop is that it is totally themeable. It allows you to place UI-oriented code (static files, view, and layout templates) in separate named theme directories and switch between them with a configuration option or programmatically. It also has a hostname-based \[configuration\] [6](http://sodapop.restlessdev.com/documentation/sodapop_conf "Configuration"), making it perfect for hosted solutions in which each customer will need to have a custom front-end site with a similar backend.

Please see  for more detail.

Getting Started
---------------

[](#getting-started)

If Sodapop sounds interesting to you, please head over to the \[Getting Started\] [7](http://sodapop.restlessdev.com/documentation/configuring_sodapop "Getting Started") page for instructions on next steps.

###  Health Score

21

—

LowBetter than 19% of packages

Maintenance57

Moderate activity, may be stable

Popularity8

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/65047ad35872a3a161b5b45976fe06484ae3229dc402a104589be9d96aecc3a8?d=identicon)[18thstreetmike](/maintainers/18thstreetmike)

---

Top Contributors

[![18thstreetmike](https://avatars.githubusercontent.com/u/40918?v=4)](https://github.com/18thstreetmike "18thstreetmike (69 commits)")

### Embed Badge

![Health badge](/badges/restlessdev-sodapop/health.svg)

```
[![Health](https://phpackages.com/badges/restlessdev-sodapop/health.svg)](https://phpackages.com/packages/restlessdev-sodapop)
```

###  Alternatives

[laravel/telescope

An elegant debug assistant for the Laravel framework.

5.2k67.8M192](/packages/laravel-telescope)[spiral/roadrunner

RoadRunner: High-performance PHP application server and process manager written in Go and powered with plugins

8.4k12.2M84](/packages/spiral-roadrunner)[nolimits4web/swiper

Most modern mobile touch slider and framework with hardware accelerated transitions

41.8k177.2k1](/packages/nolimits4web-swiper)[laravel/dusk

Laravel Dusk provides simple end-to-end testing and browser automation.

1.9k36.7M259](/packages/laravel-dusk)[laravel/prompts

Add beautiful and user-friendly forms to your command-line applications.

708181.8M596](/packages/laravel-prompts)[cakephp/chronos

A simple API extension for DateTime.

1.4k47.7M121](/packages/cakephp-chronos)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
