HTMLy is an open source Databaseless Blogging Platform or Flat-File Blog prioritizes simplicity and speed written in PHP. HTMLy can be referred to as Flat-File CMS either since it will also manage your content.
You do not need to use a VPS to run HTMLy, shared hosting or even free hosting should work as long as the host supports at least PHP 5.3.
Visit HTMLy demo as blog.
- Admin Panel
- Markdown editor with live preview and image upload
- Categorization with category and tags (multiple tagging support)
- Static Pages (e.g. Contact Page, About Page)
- Meta canonical, description, and rich snippets for SEO
- Pagination
- Author Page
- Multi author support
- Social Links
- Disqus Comments (optional)
- Facebook Comments (optional)
- Google Analytics
- Built-in Search
- Related Posts
- Per Post Navigation (previous and next post)
- Body class for easy theming
- Breadcrumb
- Archive page (by year, year-month, or year-month-day)
- JSON API
- OPML
- RSS Feed
- RSS 2.0 Importer (basic)
- Sitemap.xml
- Archive and Tag Cloud Widget
- SEO Friendly URLs
- Teaser thumbnail for images and Youtube videos
- Responsive Design
- User Roles
- Online Backup
- File Caching
- Online Update
- Post Draft
- i18n
- Menu builder
HTMLy requires PHP 5.3 or greater, PHP-XML package, and PHP-ZIP package for backup feature.
Install HTMLy using the source code:
- Download the latest version from the Github repo
- Upload and extract the zip file to your web server. You can upload it in the root directory, or in subdirectory such as
htmly. - Visit your domain. If you extract it in root directory visit
https://www.example.com/install.phpand if in subdirectory visithttps://www.example.com/htmly/install.php. - Follow the installer to install HTMLy.
- The installer will try to delete itself. Please delete the installer manually if the
install.phpstill exist.
Install HTMLy without downloading the source code and use the online installer:
- Download
online-installer.phpfrom the latest release - If you upload it in root directory visit
https://www.example.com/online-installer.phpor if in subdirectory visithttps://www.example.com/subdirectory/online-installer.php. - Follow the installer to install HTMLy.
- Please delete the installer manually if the
online-installer.phpandinstall.phpstill exist.
Set written permission for the cache and content directories.
In addition, HTMLy support admin user role. To do so, simply add the following line to your choosen user:
role = adminUsers assigned with the admin role can edit/delete all users' posts.
To access the admin panel, add /login to the end of your site's URL.
e.g. www.yoursite.com/login
The following is an example configuration for lighttpd:
$HTTP["url"] =~ "^/config" {
url.access-deny = ( "" )
}
$HTTP["url"] =~ "^/system/includes" {
url.access-deny = ( "" )
}
$HTTP["url"] =~ "^/system/admin/views" {
url.access-deny = ( "" )
}
url.rewrite-once = (
"^/(themes|system|vendor)/(.*)" => "$0",
"^/(.*\.php)" => "$0",
# Everything else is handles by htmly
"^/(.*)$" => "/index.php/$1"
)The following is a basic configuration for Nginx:
server {
listen 80;
server_name example.com www.example.com;
root /usr/share/nginx/html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log error;
index index.php;
location ~ /config/ {
deny all;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}Passwords can be stored in username.ini (where "username" is the user's username) in either plaintext, encryption algorithms supported by php hash or bcrypt (recommended). To generate a bcrypt encrypted password:
$ php -a
> echo password_hash('desiredpassword', PASSWORD_BCRYPT);
This will produce a hash which is to be placed in the password field in username.ini. Ensure that the encryption field is set to password_hash.
The built-in editor found in the admin panel, also provides you the ability to write to Markdown files offline by uploading them (see naming convention below) into the content/username/blog/category/type/:
usernamemust matchconfig/users/username.ini.categorymust match thecategory.mdinsidecontent/data/category/category.mdexcept theuncategorizedcategory.typeis the content type. Available content typepost,video,audio,link,quote.
For static pages you can upload it to the content/static folder.
The default category is Uncategorized with slug uncategorized and you do not need to creating it inside content/data/category/ folder. But if you write it offline and want to assign new category to specific post you need to creating it first before you can use those category, example content/data/category/new-category.md with the following content:
<!--t New category title t-->
<!--d New category meta description d-->
New category info etc.The slug for the new category is new-category (htmly removing the file extension). And for full file directory:
content/username/new-category/post/file.md
When you write a blog post and save it via the admin panel, HTMLy automatically create a .md file extension with the following name, example:
2014-01-31-12-56-40_tag1,tag2,tag3_databaseless-blogging-platform-flat-file-blog.md
Here's the explanation (separated by an underscore):
2014-01-31-12-56-40is the published date. The date format isyyyy-mm-dd-hh-mm-sstag1,tag2,tag3are the tags, separated by commasdatabaseless-blogging-platform-flat-file-blogis the URL
For static pages, use the following format:
content/static/about.md
In the example above, the /about.md creates the URL: www.yourblog.com/about
Thus, if you write/create files offline, you must name the .md file in the format above.
For static subpages, use the following format:
content/static/about/me.md
This will create the URL: www.yourblog.com/about/me
If you are writing offline, you need specify the content tags below:
Title
<!--t Title t-->Meta description
<!--d The meta description d-->Tags
This is just the tags display and for the slug is in the filename.
<!--tag Tag1,Tag2 tag-->Featured image
Post with featured image.
<!--image http://www.example.com/image-url/image.jpg image-->Featured youtube video
Post with featured youtube video.
<!--video https://www.youtube.com/watch?v=xxxxxxx video-->Featured soundcloud audio
Post with featured soundcloud audio.
<!--audio https://soundcloud.com/xxxx/audio-url audio-->Featured link
Post with featured link.
<!--link https://github.com/danpros/htmly link-->Featured quote
Post with featured quote.
<!--quote Premature Optimization is The Root of All Evil quote-->Example
Example of how your post would look like:
<!--t Here is the post title t-->
<!--d The meta description d-->
<!--tag Tag1,Tag2 tag-->
<!--video https://www.youtube.com/watch?v=xxxxxxx video-->
Paragraph 1
Paragraph 2 etc.- Fork and edit
- Submit pull request for consideration
For copyright notice please read COPYRIGHT.txt. HTMLy is licensed under the GNU General Public License Version 2.0 (or later).