PHPackages                             projektgopher/scrawl - 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. [Parsing &amp; Serialization](/categories/parsing)
4. /
5. projektgopher/scrawl

ActiveLibrary[Parsing &amp; Serialization](/categories/parsing)

projektgopher/scrawl
====================

Lowest barrier to entry blogging solution for Laravel

v0.4.0(4y ago)216MITPHPPHP ^8.0

Since Sep 5Pushed 4y ago1 watchersCompare

[ Source](https://github.com/ProjektGopher/scrawl)[ Packagist](https://packagist.org/packages/projektgopher/scrawl)[ Docs](https://github.com/projektgopher/scrawl)[ GitHub Sponsors](https://github.com/ProjektGopher)[ RSS](/packages/projektgopher-scrawl/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (7)Dependencies (10)Versions (8)Used By (0)

[![](https://raw.githubusercontent.com/ProjektGopher/scrawl/main/resources/img/scrawl.svg)](https://scrawl.projektgopher.com/?ref=github)

verb. To write in a hurried or careless way.

### Just get writing.

[](#just-get-writing)

[![Latest Version on Packagist](https://camo.githubusercontent.com/e2ebfef61f02e70b0e5e3e187df42c1f18fb3c3d39b20c7843fee37326442a4f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f70726f6a656b74676f706865722f73637261776c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/projektgopher/scrawl)[![GitHub Tests Action Status](https://camo.githubusercontent.com/2dc8fbfdcb3c392ee637d42c0dcee4db7902fbe0f035cd0ea5b60db0d9e36b73/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f776f726b666c6f772f7374617475732f70726f6a656b74676f706865722f73637261776c2f72756e2d74657374733f6c6162656c3d7465737473)](https://github.com/projektgopher/scrawl/actions?query=workflow%3Arun-tests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/13a9dcaf87a04b11fd13bd894b73c6ca09bd2fb2d54d90467b9525510bdc76b0/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f776f726b666c6f772f7374617475732f70726f6a656b74676f706865722f73637261776c2f436865636b253230262532306669782532307374796c696e673f6c6162656c3d636f64652532307374796c65)](https://github.com/projektgopher/scrawl/actions?query=workflow%3A%22Check+%26+fix+styling%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/a64045547b9268729e53650248236c037cc264bc8fd563a7dff469ffd2837149/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f70726f6a656b74676f706865722f73637261776c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/projektgopher/scrawl)

Scrawl is designed to be the lowest friction markdown file based single user blogging solution for Laravel

Documentation
-------------

[](#documentation)

For the full documentation, visit the [Scrawl home page](https://scrawl.projektgopher.com/?ref=github).

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require projektgopher/scrawl
```

You can publish the config file with:

```
php artisan vendor:publish --provider="Projektgopher\Scrawl\BlogServiceProvider" --tag="scrawl-config"
```

This is the contents of the published config file:

```
return [

    /**
     * These folders are located in the resources directory. We suggest
     * storing them in a directory named md (markdown) to follow
     * with the conventions of the resources directory.
     */
    "unpublished_directory" => "md/scrawl/unpublished",
    "published_directory" => "md/scrawl/published",
    "blog_directory" => "md/scrawl",

    "author_bio" => "",
    "author_name" => "",
    "author_link" => "",
    "author_photo" => "",
    "author_photo_alt" => "",

    "route_group" => "blog",

    "view" => [
        /**
         * Read the list of driver options below, and
         * choose the option that best suits you.
         */
        "driver" => "standalone",

        /**
         * Use "none" if you'd like to return the data as JSON.
         * Particularly useful for Vue or React based blogs.
         */
        "none" => "",

        /**
         * Use "custom" if you don't have a main layout file
         * but also don't want to use the one provided.
         */
        "custom" => "",

        /**
         * Use "standalone" if you don't have a main layout
         * file. Great for just getting started quickly.
         * You can alawys move to a layout based
         * setup later on.
         */
        "standalone" => "",

        /**
         * Use "x-component" if your views include a blade
         * layout component such as
         */
        "x-component" => [
            "component" => "layouts.app",
        ],

        /**
         * Use "blade-layout" if your views extend a
         * base layout using the @extends method.
         */
        "blade-layout" => [
            "extends" => "layouts.app",
            "section" => "body",
        ],
    ],

];
```

Usage
-----

[](#usage)

Scrawl is desgined to be used on the CLI. It will automatically register the blog routes, and requires no database as this package is file based, and meant to have your content comitted to the project. Only posts saved in the 'published' directory will be publicly accessible.

```
php artisan blog:make 'long title that should be sluggified'
```

This command will ensure that the unpublished directory exists, copy the .md blog post stub into the 'unpublished' directory with a sluggified title.

Now you can just get into writing your post in github flavored markdown without worrying about all the details.

```
php artisan blog:publish 'name of blog you would like to move to the published directory'
```

```
php artisan blog:unpublish 'name of the blog you should not have published yet'
```

Testing
-------

[](#testing)

```
vendor/bin/phpunit --testdox
```

Support us
----------

[](#support-us)

We invest a lot of resources into creating [best in class open source packages](https://spatie.be/open-source). You can support us by [buying one of our paid products](https://spatie.be/open-source/support-us).

We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on [our contact page](https://spatie.be/about-us). We publish all received postcards on [our virtual postcard wall](https://spatie.be/open-source/postcards).

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](.github/CONTRIBUTING.md) for details.

Security Vulnerabilities
------------------------

[](#security-vulnerabilities)

Please review [our security policy](../../security/policy) on how to report security vulnerabilities.

Credits
-------

[](#credits)

- [Len Woodward](https://github.com/ProjektGopher)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

24

—

LowBetter than 31% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

 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.

###  Release Activity

Cadence

Every ~5 days

Total

7

Last Release

1731d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/63312522f1920cf5b3c34ea474511a484162b36166a33ae4b9fde6c65ab2c2fc?d=identicon)[ProjektGopher](/maintainers/ProjektGopher)

---

Top Contributors

[![ProjektGopher](https://avatars.githubusercontent.com/u/1688608?v=4)](https://github.com/ProjektGopher "ProjektGopher (66 commits)")

---

Tags

blogbloggingblogging-enginelaravelphplaravelmarkdownbloglaravel blogProjektGopherscrawl

###  Code Quality

TestsPHPUnit

Static AnalysisPsalm

Code StylePHP\_CodeSniffer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/projektgopher-scrawl/health.svg)

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

###  Alternatives

[spatie/laravel-permission

Permission handling for Laravel 12 and up

12.9k102.4M1.4k](/packages/spatie-laravel-permission)[spatie/laravel-pdf

Create PDFs in Laravel apps

1.0k4.8M46](/packages/spatie-laravel-pdf)[dedoc/scramble

Automatic generation of API documentation for Laravel applications.

2.1k11.2M97](/packages/dedoc-scramble)[spatie/laravel-passkeys

Use passkeys in your Laravel app

471890.7k37](/packages/spatie-laravel-passkeys)[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3914.6k](/packages/rawilk-profile-filament-plugin)[codewithdennis/filament-select-tree

The multi-level select field enables you to make single selections from a predefined list of options that are organized into multiple levels or depths.

329530.5k29](/packages/codewithdennis-filament-select-tree)

PHPackages © 2026

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