Cecil is a CLI application that merges plain text files (written in Markdown), images and Twig templates to generate a static website.

Overview

Cecil

Cecil logo

Your content driven static site generator.

Latest Stable Version Test Release cecil.phar License
Scrutinizer Code Quality Codacy Badge Coverage Status StyleCI SymfonyInsight

Cecil is a CLI application that merges plain text files (written in Markdown), images and Twig templates to generate a static website.

πŸ“„ Documentation | πŸ’» Demo | πŸ› Issue tracker | πŸ’¬ Discussion

Cecil CLI demo

Quick Start

Read the Quick Start documentation page.

Deploy to Netlify Deploy with Vercel Import this project into Forestry

Features

  • No server, no database, no dependency: performance and security
  • Content is stored in flat files, written in Markdown with YAML front matter
  • Powered by Twig, a flexible template engine, with theme support
  • Pagination, taxonomies, RSS, redirections, etc. are generated automatically
  • Download just one file and run it
  • Easy to deploy

Installation

Download cecil.phar from your browser or from your terminal:

curl -LO https://cecil.app/cecil.phar

Then install the binary globally:

mv cecil.phar /usr/local/bin/cecil
chmod +x /usr/local/bin/cecil

PHP 7.1+ is required.

Usage

  • Get help: cecil help
  • Create new website: cecil new:site
  • Build and serve it: cecil serve

Contributing

See Contributing.

Sponsors

Aperture Lab studio cecillie

License

Cecil is a free software distributed under the terms of the MIT license.

Cecil Β© Arnaud Ligny
Logo Β© CΓ©cile Ricordeau

Comments
  • Dependencies.io troubleshooting

    Dependencies.io troubleshooting

    We're opening this issue to inform you about problems with your dependencies.io configuration or build failures.

    We'll add a comment here when we see problems. You can close this issue when you have things resolved -- we'll open it back up if we detect new problems.

    Helpful links:

    Note: To help keep your repo as clean as possible, this is the only issue that we're going to open and comment on. Feel free to delete the comments that are made as you resolve them, if you want to keep this issue short and tidy.

    opened by dependencies[bot] 9
  • PHP required intl extension installed

    PHP required intl extension installed

    Describe the bug

    Since https://github.com/Cecilapp/Cecil/pull/1463, running without php-intl installed will generate an error on build :+1:

    [ERROR] The Symfony\Component\Intl\Locale\Locale::setDefault() is not implemented. Please install the "intl" extension for full localization capabilities.                                         
    

    This doesn't seem to be installed by default with PHP7.4 (Ubuntu 20.04), so probably needs mentioning in the system requirements.

    (it's also complicated by the fact that that the error message doesn't make it clear if it's talking about a PHP extension or a Symfony one)

    To reproduce

    No response

    Expected behavior

    Ideally, a clearer error message and guidance in the quick start guide.

    Version

    7.5.0

    Operating System

    Ubuntu 20.04

    Relevant log output

    No response

    bug 
    opened by ahnlak 7
  • Template changes during watch

    Template changes during watch

    hi everyone, i'm really enjoying the cecil + netlifycms stack right now but i feel something is messing around ie. when i cecil serve it livereloads every assets except templates (twig files) and i have to cecil build again to see applied changes..

    i wanted to know if i can find a way to fix this ?

    bug 
    opened by maxperei 6
  • cecil serve is not working as expected

    cecil serve is not working as expected

    Describe the bug

    The serve command is not working as expected. The log isn't showing any error except some deprecation warnings. For the test, I was running php (8.1) - no container.

    To reproduce

    1. cecil new:site
    2. Give a title, rest confirm with enter
    3. cecil serve
    4. Open your browser on localhost:8000 you'll get a http status code 500 in the dev tools

    Expected behavior

    Expecting a running development server with hot reload etc.

    Version

    7.28.1

    Operating System

    Linux (openSUSE)

    Relevant log output

    cecil serve -vvv 
    
    Box Requirements Checker
    ========================
    
    > Using PHP 8.1.13
    > PHP is using the following php.ini file:
      /etc/php8/cli/php.ini
    
    > Checking Box requirements:
      βœ” The application requires the version "^7.4||^8.0||^8.1" or greater.
      βœ” The application requires the extension "fileinfo".
      βœ” The package "intervention/image" requires the extension "fileinfo".
      βœ” The package "spatie/image-optimizer" requires the extension "fileinfo".
      βœ” The application requires the extension "gd".
      βœ” The package "matthiasmullie/minify" requires the extension "pcre".
      βœ” The package "matthiasmullie/path-converter" requires the extension "pcre".
      βœ” The package "myclabs/php-enum" requires the extension "json".
      βœ” The package "scrivo/highlight.php" requires the extension "json".
      βœ” The package "scssphp/scssphp" requires the extension "json".
      βœ” The package "nikic/php-parser" requires the extension "tokenizer".
      βœ” The package "voku/html-min" requires the extension "dom".
      βœ” The package "voku/simple_html_dom" requires the extension "dom".
      βœ” The package "voku/simple_html_dom" requires the extension "libxml".
      βœ” The package "voku/simple_html_dom" requires the extension "simplexml".
      
                                                                                                                      
     [OK] Your system is ready to run the application.                                                                
                                                                                                                      
    
    Process: /usr/bin/php /home/benjamin/.local/bin/cecil build --config /home/benjamin/dev/demo/demo/config.yml -vvv
    
    Box Requirements Checker
    ========================
    
    > Using PHP 8.1.13
    > PHP is using the following php.ini file:
      /etc/php8/cli/php.ini
    
    > Checking Box requirements:
      βœ” The application requires the version "^7.4||^8.0||^8.1" or greater.
      βœ” The application requires the extension "fileinfo".
      βœ” The package "intervention/image" requires the extension "fileinfo".
      βœ” The package "spatie/image-optimizer" requires the extension "fileinfo".
      βœ” The application requires the extension "gd".
      βœ” The package "matthiasmullie/minify" requires the extension "pcre".
      βœ” The package "matthiasmullie/path-converter" requires the extension "pcre".
      βœ” The package "myclabs/php-enum" requires the extension "json".
      βœ” The package "scrivo/highlight.php" requires the extension "json".
      βœ” The package "scssphp/scssphp" requires the extension "json".
      βœ” The package "nikic/php-parser" requires the extension "tokenizer".
      βœ” The package "voku/html-min" requires the extension "dom".
      βœ” The package "voku/simple_html_dom" requires the extension "dom".
      βœ” The package "voku/simple_html_dom" requires the extension "libxml".
      βœ” The package "voku/simple_html_dom" requires the extension "simplexml".
      
                                                                                                                      
     [OK] Your system is ready to run the application.                                                                
                                                                                                                      
    
    Building website...
    Path: /home/benjamin/dev/demo/demo
    Config: /home/benjamin/dev/demo/demo/config.yml
    Cache: /home/benjamin/dev/demo/demo/.cache
    1. Loading pages
    [9/9] Files loaded
    2. Creating pages
    [1/9] Page "about" created
    [2/9] Page "blog/post-1" created
    [3/9] Page "blog/post-2" created
    [4/9] Page "blog/post-3" created
    [5/9] Page "blog/post-4" created
    [6/9] Page "blog/post-5" created
    [7/9] Page "blog/post-6" created
    [8/9] Page "index" created
    [9/9] Page "markdown" created
    3. Converting pages
    [1/9] Page "about" converted
    [2/9] Page "blog/post-1" converted
    [3/9] Page "blog/post-2" converted
    [4/9] Page "blog/post-3" converted
    [5/9] Page "blog/post-4" converted
    [6/9] Page "blog/post-5" converted
    [7/9] Page "blog/post-6" converted
    [8/9] Page "index" converted
    Asset "/favicon.c1af8a129a0cde81f9b94ffbf452e10b.png" saved
    [9/9] Page "markdown" converted
    4. Creating taxonomies
    [1/2] Vocabularies collection created
    [2/2] Terms collection created
    5. Generating pages
    [1/9] 5 "DefaultPages" pages generated
    [2/9] 0 "VirtualPages" pages generated
    [3/9] 0 "ExternalBody" pages generated
    [4/9] 7 "Section" pages generated
    [5/9] 3 "Taxonomy" pages generated
    [6/9] 1 "Homepage" pages generated
    [7/9] 4 "Pagination" pages generated
    [8/9] 2 "Alias" pages generated
    [9/9] 0 "Redirect" pages generated
    6. Creating menus
    [1/4] Page menu entry "main > about" created (weight: 999)
    [2/4] Page menu entry "main > index" created (weight: 0)
    [3/4] Page menu entry "main > markdown" created (weight: 500)
    [4/4] Page menu entry "main > blog" created (weight: 100)
    7. Copying static
    [1/1] Files copied
    8. Rendering pages
    Translation loader for format "yaml" found
    Translation loader for format "mo" found
    Asset "/assets/thumbnails/32/favicon.c1af8a129a0cde81f9b94ffbf452e10b.png" saved
    Asset "/assets/thumbnails/57/favicon.c1af8a129a0cde81f9b94ffbf452e10b.png" saved
    Asset "/assets/thumbnails/76/favicon.c1af8a129a0cde81f9b94ffbf452e10b.png" saved
    Asset "/assets/thumbnails/96/favicon.c1af8a129a0cde81f9b94ffbf452e10b.png" saved
    Asset "/assets/thumbnails/128/favicon.c1af8a129a0cde81f9b94ffbf452e10b.png" saved
    Asset "/assets/thumbnails/192/favicon.c1af8a129a0cde81f9b94ffbf452e10b.png" saved
    Asset "/assets/thumbnails/228/favicon.c1af8a129a0cde81f9b94ffbf452e10b.png" saved
    Asset "/assets/thumbnails/196/favicon.c1af8a129a0cde81f9b94ffbf452e10b.png" saved
    Asset "/assets/thumbnails/120/favicon.c1af8a129a0cde81f9b94ffbf452e10b.png" saved
    Asset "/assets/thumbnails/152/favicon.c1af8a129a0cde81f9b94ffbf452e10b.png" saved
    Asset "/assets/thumbnails/180/favicon.c1af8a129a0cde81f9b94ffbf452e10b.png" saved
    Asset "/assets/thumbnails/1200/cecil-card.c0bc77e003455fafeb15f3072e857d85.png" saved
    [ 1/22] Page "about" rendered with template(s) "cecil:_default/page.html.twig"
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    [ 2/22] Page "blog/post-1" rendered with template(s) "site:blog/page.html.twig"
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    [ 3/22] Page "blog/post-2" rendered with template(s) "site:blog/page.html.twig"
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    [ 4/22] Page "blog/post-3" rendered with template(s) "site:blog/page.html.twig"
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    [ 5/22] Page "blog/post-4" rendered with template(s) "site:blog/page.html.twig"
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    [ 6/22] Page "blog/post-5" rendered with template(s) "site:blog/page.html.twig"
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    [ 7/22] Page "blog/post-6" rendered with template(s) "site:blog/page.html.twig"
    [ 8/22] Page "index" rendered with template(s) "site:index.html.twig, cecil:_default/list.atom.twig"
    [ 9/22] Page "markdown" rendered with template(s) "cecil:_default/page.html.twig"
    [10/22] Page "404" rendered with template(s) "cecil:404.html.twig"
    [11/22] Page "robots" rendered with template(s) "cecil:robots.txt.twig"
    [12/22] Page "sitemap" rendered with template(s) "cecil:sitemap.xml.twig"
    [13/22] Page "xsl/atom" rendered with template(s) "cecil:feed.xsl.twig"
    [14/22] Page "xsl/rss" rendered with template(s) "cecil:feed.xsl.twig"
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    [15/22] Page "blog" rendered with template(s) "site:blog/list.html.twig, cecil:_default/list.atom.twig"
    [16/22] Page "tags/tag-1" rendered with template(s) "cecil:_default/list.html.twig, cecil:_default/list.atom.twig"
    [17/22] Page "tags/tag-2" rendered with template(s) "cecil:_default/list.html.twig, cecil:_default/list.atom.twig"
    [18/22] Page "tags" rendered with template(s) "cecil:_default/vocabulary.html.twig"
    [19/22] Page "page/2" rendered with template(s) "site:index.html.twig"
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    Since symfony/intl 5.3: Polyfills are deprecated, try running "composer require symfony/polyfill-intl-icu ^1.21" instead.
    [20/22] Page "blog/page/2" rendered with template(s) "site:blog/list.html.twig"
    [21/22] Page "page/1" rendered with template(s) "cecil:redirect.html.twig"
    [22/22] Page "blog/page/1" rendered with template(s) "cecil:redirect.html.twig"
    9. Saving pages
    [ 1/22] File(s) "_site/about/index.html" saved
    [ 2/22] File(s) "_site/blog/post-1/index.html" saved
    [ 3/22] File(s) "_site/blog/post-2/index.html" saved
    [ 4/22] File(s) "_site/blog/post-3/index.html" saved
    [ 5/22] File(s) "_site/blog/post-4/index.html" saved
    [ 6/22] File(s) "_site/blog/post-5/index.html" saved
    [ 7/22] File(s) "_site/blog/post-6/index.html" saved
    [ 8/22] File(s) "_site/index.html, _site/atom.xml" saved
    [ 9/22] File(s) "_site/markdown/index.html" saved
    [10/22] File(s) "_site/404.html" saved
    [11/22] File(s) "_site/robots.txt" saved
    [12/22] File(s) "_site/sitemap.xml" saved
    [13/22] File(s) "_site/xsl/atom.xsl" saved
    [14/22] File(s) "_site/xsl/rss.xsl" saved
    [15/22] File(s) "_site/blog/index.html, _site/blog/atom.xml" saved
    [16/22] File(s) "_site/tags/tag-1/index.html, _site/tags/tag-1/atom.xml" saved
    [17/22] File(s) "_site/tags/tag-2/index.html, _site/tags/tag-2/atom.xml" saved
    [18/22] File(s) "_site/tags/index.html" saved
    [19/22] File(s) "_site/page/2/index.html" saved
    [20/22] File(s) "_site/blog/page/2/index.html" saved
    [21/22] File(s) "_site/page/1/index.html" saved
    [22/22] File(s) "_site/blog/page/1/index.html" saved
    Built in 0.16 s (11.97 mb)
    Done! πŸŽ‰
    Starting server (localhost:8000)...
    
    bug 
    opened by benjaminhirsch 4
  • Best practice for a blog with images.

    Best practice for a blog with images.

    Hi, I'd like to manage a blog with a main image for every post. To avoid polluting the 'static' directory with all the images for the posts, I understand that I could have a subfolder for each post and inside a file index.md and the corresponding main image:

    Screen Shot 2020-06-26 at 21 47 08

    Inside my index.md:

    ---
    title: 'This is a sad post.'
    date: '2020-06-22'
    draft: false
    tags: ["sad"]
    categories: ["Social"]
    excerpt: Introduction to a sad post.
    image: 'main_image.jpg'
    ---
    This is the markdown content of the sad post.
    

    Then, inside the template for the page, I should have something like:

    {{ asset(page.image) }}	
    

    But unfortunately this is not working, the file is not found. Is there a better way to do that ? Thanks a lot, Cecil rocks!

    question 
    opened by thomascenni 4
  • Tags are not managed.

    Tags are not managed.

    Following the Quick Start documentation, create a new post and add a tag to it as explained here: https://cecil.app/documentation/content/#front-matter

    To Reproduce

    macbook:Desktop thomas$ ./cecil.phar new:site cecil-test
    Creating a new website...
    Done!
    macbook:Desktop thomas$ cd cecil-test/
    macbook:cecil-test thomas$ ls
    config.yml	content		layouts		static
    macbook:cecil-test thomas$ ../cecil.phar new:page blog/my-first-post.md
    File "content/blog/my-first-post.md" created.
    

    Then just add some tags to the post.

    cat content/blog/my-first-post.md
    ---
    title: 'my-first-post'
    date: '2020-06-21'
    draft: true
    tags: [tag 1, tag 2]
    ---
    

    Serve the application with:

    ../cecil.phar serve --drafts

    And you get this error:

    [ERROR] Template "cecil:_default/list.html.twig" line 19 (for page "tags/tag-1"): Neither the property "all" nor one of the methods "all()", "getall()"/"isall()"/"hasall()" or "__call()" exist and have public access in class "Cecil\Collection\Taxonomy\Term".

    Screen Shot 2020-06-21 at 15 13 51

    bug 
    opened by thomascenni 4
  • Bump symfony/property-access from 4.4.3 to 4.4.4

    Bump symfony/property-access from 4.4.3 to 4.4.4

    Bumps symfony/property-access from 4.4.3 to 4.4.4.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Automerge options (never/patch/minor, and dev/runtime dependencies)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 4
  • Prevent build errors due to incompatible cache content after update

    Prevent build errors due to incompatible cache content after update

    Related to a problem?

    Yesterday I updated Cecil from version 7.1.2 to the latest 7.11.1 and saw my build fail with the following error message:

    Building website...
    
     [ERROR] Template "/Users/paik/Projects/cecil/resources/layouts/partials/metatags.html.twig:114" (page: another-page):
             Neither the property "missing" nor one of the methods "missing()", "getmissing()"/"ismissing()"/"hasmissing()"
             or "__call()" exist and have public access in class "Cecil\Assets\Asset".
    

    I believe this to have been indirectly caused by the changes in #1490.

    The older version of Cecil populated the cache with asset data that has no 'missing' key. The newer Cecil version reads from the cache, expecting the key to exist, causing the error.

    A simple deletion has fixed the problem for me, but I spent some time chasing that problem down.

    Describe the solution you'd like

    Adding the current Cecil version to cache keys could be a simple and pragmatic solution to this kind of problem. Cache entries would be isolated between version, preventing any such incompatibilities.

    I have not looked into the Cecil code base too deeply, but this change could potentially be implemented inside the \Cecil\Assets\Cache class.

    Describe alternatives you've considered

    No response

    Additional context

    I would gladly attempt to provide an implementation if you believe this to be a good solution. Also, I'd be keen to hear of any other ideas you might have.

    enhancement 
    opened by hype09 3
  • Call to a member function getConfig() on null

    Call to a member function getConfig() on null

    Describe the bug

    Hello,

    When I try to add a new page, I get the following error:

    PHP Fatal error:  Uncaught Error: Call to a member function getConfig() on null in phar:///var/www/cecil.test/cecil.phar/src/Command/NewPage.php:70
    Stack trace:
    #0 phar:///var/www/cecil.test/cecil.phar/vendor/symfony/console/Command/Command.php(298): Cecil\Command\NewPage->execute()
    

    To reproduce

    1. Create a new website
    php cecil.phar new:site
    Creating a new website...
    - title: Test
    - baseline (~ 20 characters): Hello!
    - baseurl (e.g.: https://cecil.app/): https://www.example.com
    - description (~ 250 characters): 
    Done!
    
    1. Create a new page:
    php cecil.phar new:page test.md
    

    Expected behavior

    A new page generated.

    Version

    6.2.5

    Operating System

    Ubuntu

    Relevant log output

    PHP Fatal error:  Uncaught Error: Call to a member function getConfig() on null in phar:///var/www/cecil/cecil.phar/src/Command/NewPage.php:70
    Stack trace:
    #0 phar:///var/www/cecil/cecil.phar/vendor/symfony/console/Command/Command.php(298): Cecil\Command\NewPage->execute()
    #1 phar:///var/www/cecil/cecil.phar/src/Command/AbstractCommand.php(116): Symfony\Component\Console\Command\Command->run()
    #2 phar:///var/www/cecil/cecil.phar/vendor/symfony/console/Application.php(1028): Cecil\Command\AbstractCommand->run()
    #3 phar:///var/www/cecil/cecil.phar/vendor/symfony/console/Application.php(299): Symfony\Component\Console\Application->doRunCommand()
    #4 phar:///var/www/cecil/cecil.phar/vendor/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun()
    #5 phar:///var/www/cecil/cecil.phar/bin/cecil(82): Symfony\Component\Console\Application->run()
    #6 /var/www/cecil/cecil.phar(14): require('...')
    #7 {main}
      thrown in phar:///var/www/cecil/cecil.phar/src/Command/NewPage.php on line 70
    
    Fatal error: Uncaught Error: Call to a member function getConfig() on null in phar:///var/www/cecil/cecil.phar/src/Command/NewPage.php:70
    Stack trace:
    #0 phar:///var/www/cecil/cecil.phar/vendor/symfony/console/Command/Command.php(298): Cecil\Command\NewPage->execute()
    #1 phar:///var/www/cecil/cecil.phar/src/Command/AbstractCommand.php(116): Symfony\Component\Console\Command\Command->run()
    #2 phar:///var/www/cecil/cecil.phar/vendor/symfony/console/Application.php(1028): Cecil\Command\AbstractCommand->run()
    #3 phar:///var/www/cecil/cecil.phar/vendor/symfony/console/Application.php(299): Symfony\Component\Console\Application->doRunCommand()
    #4 phar:///var/www/cecil/cecil.phar/vendor/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun()
    #5 phar:///var/www/cecil/cecil.phar/bin/cecil(82): Symfony\Component\Console\Application->run()
    #6 /var/www/cecil/cecil.phar(14): require('...')
    #7 {main}
      thrown in phar:///var/www/cecil/cecil.phar/src/Command/NewPage.php on line 70
    
    bug 
    opened by magentix 3
  • Deprecated on PHP 8.1

    Deprecated on PHP 8.1

    Describe the bug

    Deprecated: Return type of _HumbugBox87c495005ea2\KevinGH\RequirementChecker\RequirementCollection::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in phar:///cecil.phar/.box/src/RequirementCollection.php on line 15
    
    Deprecated: Return type of _HumbugBox87c495005ea2\KevinGH\RequirementChecker\RequirementCollection::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in phar:///cecil.phar/.box/src/RequirementCollection.php on line 19
    

    To reproduce

    • PHP 8.1
    • Cecil 5.79.7
    docker run -it --rm php:8.1-cli bash -c "curl -LO https://cecil.app/cecil.phar && chmod +x cecil.phar && ./cecil.phar new:site"
    

    Same on macOS with PHP 8.1.1 (cli) (built: Dec 17 2021 22:38:05) (NTS)

    Expected behavior

    No Deprecated messages

    Version

    5.79.7

    Operating System

    No response

    Relevant log output

    No response

    bug 
    opened by ensimo 3
  • Import remote JSON data

    Import remote JSON data

    Related to a problem?

    It doesn't seem like a big deal, but maybe it would be better if this was realized? I just want to fetch JSON data from outside (remotely), and it looks like Cecil doesn't exist yet? #cmiiw

    Describe the solution you'd like

    I found this plugin on Jekyll, and that's pretty much what I wantedπŸ˜€ brockfanning/jekyll-get-json

    Describe alternatives you've considered

    No response

    Additional context

    Thanks for all the helpπŸ˜„

    enhancement question 
    opened by sooluh 3
  • deps prod(deps): bump twig/twig from 3.4.3 to 3.5.0

    deps prod(deps): bump twig/twig from 3.4.3 to 3.5.0

    Bumps twig/twig from 3.4.3 to 3.5.0.

    Changelog

    Sourced from twig/twig's changelog.

    3.5.0 (2022-12-27)

    • Make Twig\ExpressionParser non internal
    • Add "some" and "every" filters
    • Add Compile::reset(
    • Throw a better runtime error when the "matches" regexp is not valid
    • Add "twig *_names" intl functions
    • Fix optimizing closures callbacks
    • Add a better exception when getting an undefined constant via constant
    • Fix if nodes when outside of a block and with an empty body
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • deps prod(deps): bump twig/intl-extra from 3.4.2 to 3.5.0

    deps prod(deps): bump twig/intl-extra from 3.4.2 to 3.5.0

    Bumps twig/intl-extra from 3.4.2 to 3.5.0.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
Releases(7.28.3)
Owner
Cecil
Your content driven static site generator.
Cecil
WordPress static site generator for security, performance and cost benefits

WordPress static site generator for security, performance and cost benefits

Leon Stafford 1.3k Dec 30, 2022
Sculpin β€” Static Site Generator

Sculpin - PHP Static Site Generator Sculpin takes data sources such as text files (Markdown, Textile, etc.) and transforms them using Twig templates t

Sculpin 1.4k Jan 4, 2023
Phrozn is extremely flexible static site generator in PHP.

Phrozn Phrozn is extremely flexible static site generator in PHP. Philosophy Configurable: you should be able to tune it to your needs SCM-Enabled: no

Povilas Balzaravičius 459 Oct 30, 2022
PHP Static site generator

Spress - PHP Static site generator Spress is a static site generator built with Symfony components. License: MIT. Requirements Linux, Unix, Mac OS X o

Spress 375 Nov 28, 2022
Cecil is a CLI application that merges plain text files (written in Markdown), images and Twig templates to generate a static website.

Cecil is a CLI application that merges plain text files (written in Markdown), images and Twig templates to generate a static website.

Cecil 209 Jan 2, 2023
Site-builder is a simple static site generator. It allows you to create and manage a website out of simple text files and templates.

Site-builder is a simple static site generator. It allows you to create and manage a website out of simple text files and templates. This gives you many of the advantages of a CMS, but because the result is plain old HTML, it's more secure and has higher performance.

Matt Robinson 28 May 24, 2022
A package that uses blade templates to control how markdown is converted to HTML inside Laravel, as well as providing support for markdown files to Laravel views.

Install Install via composer. $ composer require olliecodes/laravel-etched-blade Once installed you'll want to publish the config. $ php artisan vendo

Ollie Codes 19 Jul 5, 2021
EmailReplyParser is a PHP library for parsing plain text email content, based on GitHub's email_reply_parser library written in Ruby

EmailReplyParser EmailReplyParser is a PHP library for parsing plain text email content, based on GitHub's email_reply_parser library written in Ruby.

William Durand 606 Dec 8, 2022
YCOM Impersonate. Login as selected YCOM user πŸ§™β€β™‚οΈin frontend.

YCOM Impersonate Login as selected YCOM user in frontend. Features: Backend users with admin rights or YCOM[] rights, can be automatically logged in v

Friends Of REDAXO 17 Sep 12, 2022
Generate pseudo-static pages from markdown and HTML files for Flarum

Flarum Pages Generator This is not a Flarum extension. This package provides a Flarum extender that you can use in the local extend.php to define cust

Clark Winkelmann 7 Feb 21, 2022
Parser for Markdown and Markdown Extra derived from the original Markdown.pl by John Gruber.

PHP Markdown PHP Markdown Lib 1.9.0 - 1 Dec 2019 by Michel Fortin https://michelf.ca/ based on Markdown by John Gruber https://daringfireball.net/ Int

Michel Fortin 3.3k Jan 1, 2023
Parser for Markdown and Markdown Extra derived from the original Markdown.pl by John Gruber.

PHP Markdown PHP Markdown Lib 1.9.0 - 1 Dec 2019 by Michel Fortin https://michelf.ca/ based on Markdown by John Gruber https://daringfireball.net/ Int

Michel Fortin 3.3k Jan 1, 2023
PHP library for parsing plain text email content.

EmailReplyParser EmailReplyParser is a PHP library for parsing plain text email content, based on GitHub's email_reply_parser library written in Ruby.

William Durand 606 Dec 8, 2022
A PHP component to convert HTML into a plain text format

html2text html2text is a very simple script that uses DOM methods to convert HTML into a format similar to what would be rendered by a browser - perfe

Jevon Wright 423 Dec 29, 2022
Sync Wordpress Pages and Posts (even custom post types + fields) from static Markdown + YAML files

Sync Markdown Files to WordPress Posts and Pages Static site generators let you use a revision-controlled tree of markdown files to make a site, but d

null 26 Sep 26, 2022
Docbook Tool for static documentation generation from Markdown files

Roave Docbook Tool Static HTML and PDF generator tool for generating documentation from Markdown files. Generates a deployable HTML file from Markdown

Roave, LLC 40 Dec 14, 2022
⚑ Flat-files and plain-old PHP functions rockin'on as a set of general purpose high-level abstractions.

Siler is a set of general purpose high-level abstractions aiming an API for declarative programming in PHP. ?? Files and functions as first-class citi

Leo Cavalcante 1.1k Dec 30, 2022
Joole Reflector - used to work with the properties of objects, their changes and merges

Joole Reflector allows you to change protected, as well as private properties of an object.

Ravil Sitdikov 1 May 7, 2022
This Laravel package merges staudenmeir/eloquent-param-limit-fix and staudenmeir/laravel-adjacency-list to allow them being used in the same model.

This Laravel package merges staudenmeir/eloquent-param-limit-fix and staudenmeir/laravel-adjacency-list to allow them being used in the same model.

Jonas Staudenmeir 5 Jan 6, 2023
Twig-lint - Standalone twig linter

twig-lint - Standalone twig linter twig-lint is a lint tool for your twig files. It can be useful to integrate in your ci setup or as the basis of edi

Alexander 118 Dec 21, 2022