PHPackages                             ketyl/vine - 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. ketyl/vine

AbandonedArchivedLibrary[Framework](/categories/framework)

ketyl/vine
==========

Simple PHP framework.

12[1 PRs](https://github.com/ketyl/vine/pulls)PHP

Since Dec 1Pushed 4y ago2 watchersCompare

[ Source](https://github.com/ketyl/vine)[ Packagist](https://packagist.org/packages/ketyl/vine)[ RSS](/packages/ketyl-vine/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (3)Used By (0)

Vine
----

[](#vine)

[![Tests](https://github.com/ketyl/vine/actions/workflows/tests.yml/badge.svg)](https://github.com/ketyl/vine/actions/workflows/tests.yml)

Vine is a simple PHP 8 micro-framework, written from the ground-up. This is more of a learning experience for me and is **not** intended to be production-ready, nor is it going to be in the future.

Inspired by popular PHP frameworks such as Laravel and Slim, Vine maintains a focus on developer experience. Its API is designed to be simple, intuitive, and consistent, all while using as little "magic" as possible.

### Features

[](#features)

- Flexible routing engine
- Service container
- Basic view support
- Basic middleware support
- Multiple return types

### Roadmap

[](#roadmap)

- Dependency injection
- Basic templating engine
- Adherence to PSR standards (routing, middleware, etc.)

### Installation

[](#installation)

The installation of Vine is like any other composer package. First, include the package as a dependency:

```
composer require ketyl/vine
```

Once installed, you may create an instance of `Ketyl\Vine\App`, add your routes, and run the application:

```
// Create a new application instance
$app = new App();
$router = $app->router();

// Add global middleware
$router->addMiddleware(function (Request $request, Response $response, $next) {
    $response->write('BEFORE');
    $response = $next($request, $response);
    $response->write('AFTER');

    return $response;
});

// Anonymous function
$router->get('/', fn () => 'Hello, world!');

// Adding route-specific middleware
$router->get('/', fn () => 'Hello, world!')
    ->addMiddleware(function (Request $request, Response $response, $next) {
        $response->write('BEFORE');
        $response = $next($request, $response);
        $response->write('AFTER');

        return $response;
    });

// Class-based route using a method
$router->get('/posts', [PostController::class, 'index']);

// Class-based route using __invoke
$router->get('/download', DownloadController::class);

// Route parameters
$router->get('/param/{foo}', fn ($foo) => $foo);

// Route parameters with RegEx restriction
$router->get('/regex-a/{foo:\d+}', fn ($foo) => $foo);

// Basic RegEx restriction
$router->get('/regex-b/\d+', fn ($foo) => $foo);

// Return a view
$router->get('/view', fn () => view(__DIR__ . '/../views/index.html'));

// Attempt to match the request's URI with the registered routes
$app->run();
```

###  Health Score

17

—

LowBetter than 6% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity31

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/5354591b27072de79689793211f5f156ef001226b850d67fba15fc5e59b8ddb0?d=identicon)[zaknesler](/maintainers/zaknesler)

---

Top Contributors

[![zaknesler](https://avatars.githubusercontent.com/u/7189795?v=4)](https://github.com/zaknesler "zaknesler (54 commits)")

### Embed Badge

![Health badge](/badges/ketyl-vine/health.svg)

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

###  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)
