Business class content management for Node.js (plugins, server cluster management, data-driven pages)

Overview

dependencies Coverage Status Build Status bitHound Overall Score Join the chat at https://gitter.im/pencilblue/pencilblue

PencilBlue

A full featured Node.js CMS and blogging platform (plugins, server cluster management, data-driven pages)

First and foremost: If at any point you have questions, comments or concerns you can find us hanging out on twitter @getpencilblue and on our subreddit. We're always happy to help and pull requests (plugin or core) are always welcome.

To learn how to build websites with PencilBlue, read our tutorials.

The first open source content management system to meet all the needs of a modern website:

  • Full blogging capabilities, out of the box
  • Relational data creation and management, through the admin interface
  • An expansive plugin framework that allows for modification of even core platform functionality
  • Designed for the cloud, with built in support for server clustering and high availability websites
  • Built in support for some of the latest and most popular web technologies, including MongoDB, Redis, Bootstrap, AngularJS, and jQueryUI
  • 100% mobile ready through responsive web design
  • Touch friendly, drag and drop website management experience that's easy for non-technical users to learn

Read the Quickstart Guide

Installation

LAUNCH ON OpenShift

The instructions below assume that Node.js [0.11, 6] and MongoDB [2, 3) are installed on your machine. If they are not then please visit http://nodejs.org and http://www.mongodb.org to install them.

PencilBlue Command-line interface
  1. Install the pencilblue-cli module: sudo npm install -g pencilblue-cli
  2. Run pbctrl install [directory] where [directory] is the directory you want PencilBlue to be installed to.
  3. Follow the install instructions
  4. After the installation is done, cd into the folder where you installed PencilBlue
  5. Run pbctrl start
Manual installation
  1. Clone the PencilBlue repository
  2. cd into the cloned repository's folder
  3. Run npm install to retrieve PencilBlue's dependencies. Depending on your system access privileges, you may have to run sudo npm install
  4. (Optional) Install Redis for caching
  5. (Optional) Create a custom configuration file using the provided sample.config.js. The file can reside in two places: within the root folder of your installation as config.js or at /etc/pencilblue/config.js. The installation root takes precedence. If running all services locally, no configuration file is needed, but a configuration file is necessary for overriding specific settings.
  6. Start PencilBlue. You can simply run node pencilblue, but we recommend using nodemon for development and forever for production. Nodemon will restart PencilBlue on file changes and forever will ensure that PencilBlue is always running.
# development
nodemon pencilblue

OR

# production
sudo forever start pencilblue.js
  1. Navigate to the site root you specified in a configuration file or http://localhost:8080 by default.
Roadmap

0.5.0 Release:

Target Date: Mid-December 2015 New Features:

  • Multisite support
  • #501 - Route localization

The full list can be found here.

Features in progress: Check out our Waffle board.

Help & Support

Aways start with our wiki or code level documentation. The source never lies. Additionally, always feel free to leave questions on our issues page or reach out to us on Twitter at @GetPencilBlue.

Submitting Issues: When submitting an issue or request for help please provide the following information.

  1. Step by step instructions to reproduce
  2. Configuration overrides (minus any credentials)
  3. Environment details: Linux, windows, hosting provider, local, etc.
  4. Log output. Set your logging.level configuration property to "silly".

Submitting a Pull Request:

  1. Provide a detailed description of what changed.
  2. Reference any related issues by number so they can be tracked and linked back to the PR.
  3. Document any new functions so they show up in our auto-generated documentation
  4. Create tests for any new functionality
  5. RUN npm test
  6. Bug fixes should be merged to master & features should be merged to the next release branch
Comments
  • Running instance on AWS and cant seem to get the urls right

    Running instance on AWS and cant seem to get the urls right

    Hi guys appreciate your help. I have PB running on my dev server and it installed like magic. Very nice product! Tried to install it on my AWS server and for some reason the site urls are screwed up. Here is the config.js file that I am running - there is more to it but the only fields I am changing from the sample are listed here:

    "siteName": "Linked-2",
    "siteRoot": "http://54.153.86.84:3000",
    "sitePort": 3000,
    
    "siteIP": "0.0.0.0"
    

    Another thing - when I want to kill the server - is there a clean way to do it? I have been "ctrl-z'ing" it, which kills the console but the processes don't seem to want to die.

    Many thanks. Looking forward to my first project by the way.

    opened by nuhuxi 27
  • Feature Request: Add language to Routing.

    Feature Request: Add language to Routing.

    Hey guys,

    I love the fact that the localization is based on the user's browser. However, I have read that it is better for SEO to be able to link to the different languages that the site supports. So technically someone who speaks English but lives in France would land on the French site. Then this user could change to English with one click.

    I know how complicated this would be with how the routes are implemented currently. I just wanted to get your thoughts.

    enhancement 
    opened by cchatham 25
  • Latest master does not persist active theme.

    Latest master does not persist active theme.

    Custom theme templates are not being routed to as of the latest revision of the master branch. The active theme becomes undefined or defaulted to the pencilblue theme even though a custom theme is set to active.

    bug 
    opened by adamslogic 23
  • Admin panel progress dialogs don't complete

    Admin panel progress dialogs don't complete

    Description:

    (Some?) progress bars in the admin panel don't complete. However, all the ones I've tried don't seem to.

    Specific cases I can recall:

    • installing a new plugin
    • adding a site

    Steps to Reproduce:

    With a new install of 0.7.0

    • Login as admin
    • Go to the admin panel, (for example) plugins->manage
    • Click on the "install" button for the portfolio plugin
    • Watch the progress dialog open, advance to 12%, then halt, with some log entries listed below.
    • Open the Javascript console to watch continual POSTs to /api/jobs/get/

    50% seems to be the halt point for the other dialogs I've seen. The dialog never closes. Sometimes the job is completed anyway, and a reload will get past the problem, in the case of the plugin install, it does not.

    An example of the dialog list content for the case of the portfolio install:

    2016-11-30T12:56:15.330Z:[1] INSTALL_PLUGIN_portfolio: Verifying that plugin portfolio is not already installed
    2016-11-30T12:56:15.334Z:[1] IS_AVAILABLE_portfolio: Updating job [f1e19381-14c2-457d-8887-62325eb6fd88:IS_AVAILABLE_portfolio] by 0 percent with status: 
    2016-11-30T12:56:15.382Z:[1] IS_AVAILABLE_portfolio: Inspecting plugin on disk at: /home/pencilblue/src/plugins/portfolio/details.json
    2016-11-30T12:56:15.419Z:[1] IS_AVAILABLE_portfolio: Updating job [f1e19381-14c2-457d-8887-62325eb6fd88:IS_AVAILABLE_portfolio] by 12 percent with status: 
    2016-11-30T12:56:15.471Z:[1] IS_AVAILABLE_portfolio: Updating job [f1e19381-14c2-457d-8887-62325eb6fd88:IS_AVAILABLE_portfolio] by 12 percent with status: 
    2016-11-30T12:56:15.530Z:[1] IS_AVAILABLE_portfolio: Updating job [f1e19381-14c2-457d-8887-62325eb6fd88:IS_AVAILABLE_portfolio] by 12 percent with status: 
    

    Configuration Details:

    module.exports = {
    siteName: "<redacted>",
    siteRoot: "<redacted>",
    sitePort: 8700,
    siteIP: "127.0.0.1",
    logging: {
        level: "debug"
    },
    db: {
        type:"mongo",
        servers: [
          "127.0.0.1:27017"
        ],
        name: "pencilblue",
        writeConcern: 1
    },
    cache: {
        fake: true,
        host: "localhost",
        port: 6379
    },
    settings: {
        use_memory: false,
        use_cache: false
    },
    templates: {
        use_memory: true,
        use_cache: false
    },
    plugins: {
        caching: {
    	use_memory: false,
    	use_cache: false
        }
    },
    registry: {
        type: "mongo"
    },
    session: {
        storage: "mongo"
    },
    media: {
        provider: "mongo",
        max_upload_size: 6 * 1024 * 1024
    },
    cluster: {
        workers: 1,
        self_managed: true
    },
    multisite: {
        enabled: true,
        globalRoot: 'http://localhost:8700'
    }
    };
    

    Log Output:

    Snippet from appropriate part of log, truncated:

    {"level":"debug","message":"Response Time: 19ms URL=[POST]/api/plugins/install/portfolio CODE=200","timestamp":"2016-11-30T12:25:37.775Z"}
    {"level":"debug","message":"INSTALL_PLUGIN_portfolio: Verifying that plugin portfolio is not already installed","timestamp":"2016-11-30T12:25:37.787Z"}
    {"level":"debug","message":"IS_AVAILABLE_portfolio: Updating job [a5a0bacd-360e-4b3c-9ead-0c26ac17160b:IS_AVAILABLE_portfolio] by 0 percent with status: ","timestamp":\
    "2016-11-30T12:25:37.794Z"}
    {"level":"debug","message":"IS_AVAILABLE_portfolio: Inspecting plugin on disk at: /home/pencilblue/src/plugins/portfolio/details.json","timestamp":"2016-11-30T12:25:37\
    .863Z"}
    {"level":"debug","message":"Response Time: 10ms URL=[POST]/api/jobs/getLogs/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:37.893Z"}
    {"level":"debug","message":"IS_AVAILABLE_portfolio: Updating job [a5a0bacd-360e-4b3c-9ead-0c26ac17160b:IS_AVAILABLE_portfolio] by 12 percent with status: ","timestamp"\
    :"2016-11-30T12:25:37.913Z"}
    {"level":"debug","message":"Response Time: 7ms URL=[POST]/api/jobs/get/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:37.960Z"}
    {"level":"debug","message":"IS_AVAILABLE_portfolio: Updating job [a5a0bacd-360e-4b3c-9ead-0c26ac17160b:IS_AVAILABLE_portfolio] by 12 percent with status: ","timestamp"\
    :"2016-11-30T12:25:37.980Z"} 
    {"level":"debug","message":"IS_AVAILABLE_portfolio: Updating job [a5a0bacd-360e-4b3c-9ead-0c26ac17160b:IS_AVAILABLE_portfolio] by 12 percent with status: ","timestamp"\
    :"2016-11-30T12:25:38.026Z"} 
    {"level":"debug","message":"Response Time: 21ms URL=[POST]/api/jobs/get/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:39.090Z"}
    {"level":"debug","message":"Response Time: 8ms URL=[POST]/api/jobs/getLogs/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:40.006Z"}
    {"level":"debug","message":"Response Time: 7ms URL=[POST]/api/jobs/get/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:40.193Z"}
    {"level":"debug","message":"Response Time: 11ms URL=[POST]/api/jobs/get/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:41.302Z"}
    {"level":"debug","message":"Response Time: 18ms URL=[POST]/api/jobs/getLogs/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:42.112Z"}
    {"level":"debug","message":"Response Time: 6ms URL=[POST]/api/jobs/get/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:42.404Z"}
    {"level":"debug","message":"Response Time: 6ms URL=[POST]/api/jobs/get/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:43.512Z"}
    {"level":"debug","message":"Response Time: 9ms URL=[POST]/api/jobs/get/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:44.625Z"}
    {"level":"debug","message":"Response Time: 19ms URL=[POST]/api/jobs/get/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:45.757Z"}
    {"level":"debug","message":"Response Time: 12ms URL=[POST]/api/jobs/get/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:46.867Z"}
    {"level":"debug","message":"Response Time: 5ms URL=[POST]/api/jobs/get/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:47.972Z"}
    {"level":"debug","message":"Response Time: 6ms URL=[POST]/api/jobs/get/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:49.070Z"}
    {"level":"debug","message":"Response Time: 6ms URL=[POST]/api/jobs/get/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:50.159Z"}
    {"level":"debug","message":"Response Time: 10ms URL=[POST]/api/jobs/get/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:51.275Z"}
    {"level":"debug","message":"Response Time: 17ms URL=[POST]/api/jobs/get/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:52.382Z"}
    {"level":"debug","message":"Response Time: 6ms URL=[POST]/api/jobs/get/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:53.472Z"}
    {"level":"debug","message":"Response Time: 6ms URL=[POST]/api/jobs/get/a5a0bacd-360e-4b3c-9ead-0c26ac17160b CODE=200","timestamp":"2016-11-30T12:25:54.590Z"}
    ...
    

    PencilBlue Version: 0.7.0-RC1

    Node.js Version: v4.6.2

    Environment Description:

    Debian "Wheezy" Webserver Firefox 50.0 on Ubuntu Precise Chomium 37.0.2062.120 Ubuntu 12.04 (281580) (64-bit)

    help wanted question 
    opened by wu-lee 21
  • Question about Media/Proxy

    Question about Media/Proxy

    Hey guys,

    So another question. Here's how I've got our site set up:

    • on a server with IP address xx.xxx.xx.xxx
    • site root is http://xx.xxx.xx.xxx:4321
    • site port is 4321
    • in the config file, "siteIP" is 0.0.0.0

    With this config, you can view the site directly at the IP xx.xxx.xx.xxx:4321, in order to log into the admin panel. However, the place we'll actually be sending traffic to is domain.com/pbsite/ .. I've got a location block in my nginx.conf file for the server to proxy the content: location /pbsite { proxy_pass http://0.0.0.0:4321 }

    I've been able to get all of the content to load correctly, except for the /media folder which means all images are broken in the posts. Do you know a work-around that I can implement to achieve the desired results, getting the images to load at domain.com/pbsite/? It would be ok if images were broken at the IP address, as long as they load correctly in the customer-facing content.

    Thanks!

    help wanted 
    opened by weaverhe 20
  • Error viewing article in portfolio theme

    Error viewing article in portfolio theme

    Description:

    500 error on a new site when viewing a newly created article when the portfolio theme is active.

    Steps to Reproduce:

    (Note, This is as I have done so far, I've not had time to verify this is repeatable, and there have been diversions)

    • install pencilblue (multi-tenant mode)
    • enable portfolio plugin
    • enable portfolio theme
    • create a new article called "An Article" with the default generated url (/article/An-article)
    • save it
    • view it (need to type in the url, as there is no navigation link)

    The result for me is a 500 error page, with the following stack trace

    TypeError: Cannot read property 'article_topics' of undefined
    at /home/pencilblue/src/plugins/portfolio/controllers/blog.js:442:37
    at /home/pencilblue/src/include/service/entities/plugin_setting_service.js:108:13
    at /home/pencilblue/src/include/service/simple_layered_service.js:95:17
    at /home/pencilblue/src/node_modules/async/lib/async.js:789:30
    at /home/pencilblue/src/node_modules/async/lib/async.js:167:37
    at /home/pencilblue/src/include/service/simple_layered_service.js:76:21
    at callback (/home/pencilblue/src/include/service/db_entity_service.js:92:13)
    at /home/pencilblue/src/include/dao/dao.js:144:12
    at /home/pencilblue/src/include/dao/dao.js:272:17
    at handleCallback (/home/pencilblue/src/node_modules/mongodb/lib/utils.js:96:12)
    

    Configuration Details:

    module.exports = {
    siteName: "<redacted name>",
    siteRoot: "http://<redacted url>",
    sitePort: 8700,
    siteIP: "127.0.0.1",
    logging: {
        level: "silly"
    },
    db: {
        type:"mongo",
        servers: [
          "127.0.0.1:27017"
        ],
        name: "pencilblue",
        writeConcern: 1
    },
    cache: {
        fake: true,
        host: "localhost",
        port: 6379
    },
    settings: {
        use_memory: false,
        use_cache: false
    },
    templates: {
        use_memory: true,
        use_cache: false
    },
    plugins: {
        caching: {
    	use_memory: false,
    	use_cache: false
        }
    },
    command: {
        broker: "mongo"
    },
    registry: {
        type: "mongo"
    },
    session: {
        storage: "mongo"
    },
    media: {
        provider: "mongo",
        max_upload_size: 6 * 1024 * 1024
    },
    cluster: {
        workers: 1,
        self_managed: true
    },
    multisite: {
        enabled: true,
        globalRoot: 'http://localhost:8700'
    }
    };
    

    Log Output:

    (Look for "An-article" and "An error occurred during controller execution") snippet.log.txt

    PencilBlue Version: 0.7.0, master branch commit 370058e0dc83

    Node.js Version: v4.6.2

    Environment Description:

    Firefox 50.0 on Ubuntu precise. Debian "Wheezy" webserver.

    help wanted question 
    opened by wu-lee 18
  • [0.5.0] Navigation section error

    [0.5.0] Navigation section error

    Multiple errors occurring When you create more than one nav menu:

    1. Only the last one appears in the navbar
    2. When you navigate to /admin/content/navigation it goes to /admin/content/navigation/new so none of the menu maps appear for reorder or editing
    bug 
    opened by jahlomp 18
  • Redis Connections on constant increase

    Redis Connections on constant increase

    Hey guys!

    We are seeing a constant increase of connections with Redis that eventually causes our app servers to fail (in AWS). I wanted to see if anyone else had seen this issue.

    We are looking into a fix but any help would be appreciated. Thanks!

    help wanted 
    opened by cchatham 18
  • Errors on Installing Dropbox-Pencilblue plugin

    Errors on Installing Dropbox-Pencilblue plugin

    Hello!,

    after installing on the cloud http://connorhindley.com/2014/11/25/pencilblue-on-openshift/ I get this error: captura de pantalla 2015-05-07 a las 14 44 03

    Do you know what the cause can be? thanks.

    help wanted 
    opened by t0t 18
  • How to create a plugin for admin?

    How to create a plugin for admin?

    I am working on an admin plugin where I am confused these part:

    • How to show the Admin navigation on the plugin template page?

    There is not much documents available for it, please help. Thanks Gaurav T

    help wanted question 
    opened by gauravt 18
  • Local media upload needs to manually create folders (breaking on Windows)

    Local media upload needs to manually create folders (breaking on Windows)

    I tried creating a new article this morning and attempted to upload new image (from media tab). However, it isn't working.

    I came out of the article editor, went to the main Media Manager and attempted to upload the images from there, again didn't work.

    The console output is throwing out the following error; {"level":"error","message":"RequestHandler: An error occurred during controller execution. URL=[POST:/actions/admin/content/media/upload_media] ROUTE={"path":"actions/admin/content/media/upload_media","pattern":"^/actions/admin/content/media/upload_media[/]{0,1}$","path_vars":{},"expression":{},"themes":{"pencilblue":{"POST":{"method":"POST","path":"/actions/admin/content/media/upload_media","access_level":1,"auth_required":true,"content_type":"text/html"}}}}\nError: ENOENT, open 'C:\Users\Administrator\desktop\node_projects\pb-dma\public\media\2014\9\540ae62ebc6b451825000010-1410000430988.jpg'","timestamp":"2014-09-06T10:47:10.988Z"}

    Any ideas?

    bug OS specific 
    opened by DaveAuld 18
  • docs: Fix simple typo, overriden -> overridden

    docs: Fix simple typo, overriden -> overridden

    There is a small typo in controllers/api/api_action_controller.js, controllers/form_controller.js, include/config.js, include/service/entities/plugins/plugin_dependency_service.js, include/service/entities/template_service.js, include/system/command/command_service.js, plugins/pencilblue/controllers/actions/admin/content/objects/types/edit_type.js, plugins/sample/controllers/random_text_view.js.

    Should read overridden rather than overriden.

    opened by timgates42 0
  • Set false value by default in boolean field

    Set false value by default in boolean field

    Description: In new plugin, with field type boolean in custom_object, the value always true.

    Sometimes it's necessary that the value be false by default.

    Steps to Reproduce:

    1. Create plugin
    2. Create custom object in plugin
    3. In custom object, set boolean type in field
    4. Install plugin in admin site
    5. Enter in /admin/content/objects/types and click in custom object of plugin
    6. Click in add. The value of field boolean always true

    Configuration Details:

    Log Output:

    PencilBlue Version: 0.8.0

    Node.js Version: v6.10.3

    Environment Description:

    opened by thealex87 1
  • added the

    added the "navigation" sub-list into localization data structure for …

    …navigation items' localization and correspond changes to the include/theme/top_menu.js to get navigation items' localization. Fixes #

    • [ ] Unit tests created and pass
    • [ ] JS Docs have been updated

    Description:

    @pencilblue/owners

    opened by gnu4cn 2
  • Iframe issue under Firefox

    Iframe issue under Firefox

    Description: Our website uses iframe to display flash games, so all works fine except Firefox under Windows and Linux(under OS X all works fine). After injecting iframe into our application with angular(var iframeSrc = $sce.trustAsResourseUrl(url), where url is from different domain) we get the error: Permission denied to access property "href". Our game vendor says that other clients do not have such problem. Could it be something inside PencilBlue?

    Steps to Reproduce: HTML -

    <iframe ng-src={{gameUrl}} />
    

    Client javascript

    $scope.gameUrl = $sce.trustAsResourceUrl(url);
    

    Log Output: Client log - Permission denied to access property "href"

    PencilBlue Version: 0.6.0 Node.js Version: 6

    opened by vkomodey 0
Releases(0.8.0)
  • 0.8.0(Jan 5, 2017)

    Issues: https://github.com/pencilblue/pencilblue/milestone/9?closed=1

    This also includes a few cleanup items, bug fixes, and increased test coverage.
    There are no breaking changes.

    Bug Fixes:

    • Displaying errors during plugin install and uninstall
    • Proper progress bar behavior when applying active theme
    Source code(tar.gz)
    Source code(zip)
  • 0.8.0-RC2(Dec 24, 2016)

    Issues: https://github.com/pencilblue/pencilblue/milestone/9?closed=1

    This also includes a few cleanup items and bug fixes. There are no breaking changes.

    Bug Fixes:

    • Displaying errors during plugin install and uninstall
    • Proper progress bar behavior when applying active theme
    Source code(tar.gz)
    Source code(zip)
  • 0.7.1(Dec 11, 2016)

  • 0.8.1-RC1(Dec 11, 2016)

  • 0.7.0-RC1(Sep 13, 2016)

  • 0.6.1(Aug 17, 2016)

  • 0.6.0(Jul 5, 2016)

    The 0.6.0 release targets refactors of commonly used services. Specifically, we've put into place:

    • Support for Node 5.x and 6.x
    • BitHound Code Analysis
    • #998 Dependency Updates
    • Media API refactor
    • APIs for systems objects
    • #1060 Localization fixes
    • PluginService refactor for maintainability

    You can see all of the issues that were completed by looking at our 0.6.0 Milestone

    Upgrade Path:

    1. NPM install to ensure the latest dependencies
    2. Bower install to ensure the latest dependencies
    3. Navigate to the libraries page to update the libraries settings, then restart
    4. Check for updates to your favorite plugins.
    Source code(tar.gz)
    Source code(zip)
  • 0.5.1(Mar 22, 2016)

    This release addresses the issues and performance degredations that were uncovered as part of the 0.5.0 release. A list of the issues addressed can be found here: https://github.com/pencilblue/pencilblue/issues?q=milestone%3A0.5.1

    Migration Notes:

    1. The MongoDB driver was updated in an effort to increase performance around serialization and deserialization of BSON

    Technical Highlights:

    • Memory leaks in MemoryEntityService resolved
    • Performance improvements to AnalyticsManager and Google Analytics provider
    • Auto generation of URLs for articles bug that did not strip all special characters
    • Backward compatibility bug for admin navigation

    As always, if there are any questions or concerns send us a message in Gitter or @GetPencilBlue

    Source code(tar.gz)
    Source code(zip)
  • 0.5.0(Jan 23, 2016)

    The 0.5.0 release is finally here and along with it comes exciting new features and bug fixes. Here are some of the big features included in 0.5.0.

    • #680 Multitenancy - Run multiple websites from a single instance of PB
    • #501 Localized Routing - Allows for localizing content based on the route
    • Base Object Service - Provides an easy interface to interacting with collections
    • #738 Replica Set Support for MongoDB
    • #744 Connect to multiple DB Support
    • #747 Localization performance refactor
    • #886 Plugin initialization performance improvements

    The complete list of issues can be found here.

    The multi-tenancy feature forced us to rethink a large portion of our architecture and we couldn’t have done it without the help of our friends at CareerBuilder. Despite massive changes to the underpinnings of PencilBlue we are happy to announce that we are still backward compatible with previous releases.

    Multi-tenancy works through sub-domains. This makes it very easy to develop locally in a multi-site environment. The various sites are controlled through the admin interface of PencilBlue through a global site. This “global” site is determined by your config.js file. Developing locally for each site is as easy as configuring your hosts file to include the additional sites.

    This feature simplifies your infrastructure because you can run all of your micro sites or client sites under the same instance. This is possible because each plugin can be installed on a global basis or for an individual site meaning that a theme can be created and installed each site.

    Localized routing allows for using a special path parameter, “locale”, to indicate that the route is localized. The routing engine will detect the parameter and attempt to display the content in the locale provided by the route. A template flag, “localized_alternate”, can be included in header templates to provide the appropriate SEO links. In conjunction with multi-site, the localized routing feature allows administrators to assign specific locales to each site.

    Looking ahead here are the features that we are looking to implement in the first two quarters of the year:

    • #884 Simplification of the localization structure (issue 884)
    • #737 Ability to run siteRoot under a sub path (issue 737)
    • Refactoring of navigation structure
    • RequestHandler refactor
    • Dynamic user roles and permissions
    • Increased unit test coverage
    • Conversion of the admin section to a purely API driven model
    • Improved taxonomy

    We are always happy to answer questions. One way we are making this easier is through our Gitter channel. Fellow users as well as contributors are there to help and as usual we can reached via our Twitter handle, @GetPencilBlue.

    Source code(tar.gz)
    Source code(zip)
  • 0.5.0-RC2(Jan 14, 2016)

  • 0.5.0-RCF(Jan 20, 2016)

  • 0.5.0-RC1(Dec 15, 2015)

  • 0.4.2(Dec 14, 2015)

  • 0.4.1(Jul 19, 2015)

    The 0.4.1 release brings with it a multitude of bug fixes along with a couple of new features and enhancements. For those interested in the gory details the issues covered in this milestone can be found here: https://github.com/pencilblue/pencilblue/issues?q=milestone%3A0.4.1+is%3Aclosed

    The first anchor story for this release was an overhaul of the wysiwyg. It has been converted over to Angular and as a result it has become faster and more modular.

    The second cornerstone of this release is the introduction of the BaseObjectService. It provides the abstraction of interacting with objects from the DB. It allows for plugins to register event listeners for CRUD operations against any object type. This provides a flexible framework for validation, and modification of objects while avoiding having to override core functionality. Expect to see a blog post with more details coming soon. Throughout the rest of the year we will be continuing to iterate upon and expand the BaseObjectService implementations across all system objects.

    Lastly, an overhaul of article and page rendering was completed. It provides developers the ability to override both the data gathering and prep stages as well as the actual rendering of the content. A blog post on this topic is coming soon. If interested in an example check out Blog controller for the default PencilBlue theme.

    How to migrate: This release should not introduce breaking changes into the data models or API.

    What to do if you run into issues: Feel free to post your questions on the GitHub issues board or reach out to us on twitter @GetPencilBlue.

    Ok, so what's next? The next big release of PencilBlue will include some really awesome features that will allow our users to support users from all parts of the globe.

    The two big anchor features are:

    • Multi-tenancy
    • Localization overhaul to include: localized routes for SEO, theme based localization key overrides, and parameterized keys

    In addition to the two major features, we will be continuing the expansion of the BaseObjectService and refactoring existing PB theme controllers to leverage the base object service to ensure consistent business logic across the core of the platform. The side benefit is that this makes the implementation of APIs extremely easy. Those will be continued to be added over time. Finally, as the core code begins to consolidate we will be placing a focus on testing and asking that users who contribute also help by providing a tests for the changes that they implement.

    Source code(tar.gz)
    Source code(zip)
  • 0.4.1-RC1(Jul 7, 2015)

  • 0.4.0(Mar 29, 2015)

  • 0.4.0-RC2(Mar 28, 2015)

  • 0.4.0-RC1(Mar 23, 2015)

    This is the first release candidate for 0.4.0. It provides improvements over the previous releases by creating a modular framework that is more easily tested. In addition, many other UI and framework improvements has been made along with bug fixes.

    The documentation on our GitHub wiki is in alignment with 0.4.0 and as always if you have questions please feel free to reach out.

    Source code(tar.gz)
    Source code(zip)
  • 0.3.1(Jan 18, 2015)

    This release includes performance updates and bug fixes. It also introduces the ability to create your own media renderers. This functionality provides a framework for developers to create new media types and render them throughout the application.

    Source code(tar.gz)
    Source code(zip)
  • 0.3.1-preview(Jan 14, 2015)

    Contains performance enhancements and bug fixes since the release of 0.3.1. Shortly, we will be releasing the full fledged 0.3.1 version which will also include the media module refactor.

    Source code(tar.gz)
    Source code(zip)
  • 0.3.0(Nov 23, 2014)

    The 0.3.0 release solidifies PencilBlue's position as the CMS of choice for those looking to run in the cloud. This release provides the ability to construct your configuration at run time as well as ensure that dependencies are available in an elastic environment. Out of the box distributed media storage support has also been added and is supported by MongoDB's GridFS.
    Additionally, you will find the Admin UI running snappier than ever with multiple performance updates as we have moved to a more pure Angular model and fixed many of the bugs that were sitting in our back log.

    Take it for a test drive and let us know what you think,

    PencilBlue Team

    Source code(tar.gz)
    Source code(zip)
  • 0.2.5(Sep 21, 2014)

    NOTE: THIS RELEASE REQUIRES npm install TO BE RAN FROM THE PROJECT DIRECTORY

    As noted above the mongodb dependency has been updated to support bulk operations (#109).

    The following issues have been completed:

    • #246 Article Service find now supports custom field selection
    • #217 Configuration should check for ending slash on site root
    • Error message added for failure to load media
    • #256 Article Service find now supports limit and offset
    • #258 Not all media tags are replaced in preview
    • #261 Crash when writer role attempts to access article
    • #248 Get settings should return a key/value pair object
    • #251 Manage Articles crashes when author id is null
    • #265 Analytics Manager does not clear timeout
    • #268 Only page author can edit article
    • #270 Google Analytics plugin timeout
    • #275 Peer object select
    • #235 media duplication in wysiwyg
    • #278 Admins cannot reset user's passwords
    • #272 Redirection to post
    • #109 DAO could use update multiple function
    Source code(tar.gz)
    Source code(zip)
  • 0.2.4(Sep 10, 2014)

    A Race to the Clouds

    "Its hazards are hostile to us all. Its conquest deserves the best of all mankind, and its opportunity for peaceful cooperation may never come again. But why, some say, the [cloud]? Why choose this as our goal? And they may well ask why climb the highest mountain? Why, 35 years ago, fly the Atlantic? Why does Rice play Texas? We choose to go to the [cloud]. We choose to go to the [cloud] in this decade and do the other things, not because they are easy, but because they are hard, because that goal will serve to organize and measure the best of our energies and skills, because that challenge is one that we are willing to accept, one we are unwilling to postpone, and one which we intend to win, and the others, too."

    --JFK

    As part of PencilBlue's ongoing effort to provide horizontal scalability and easy deployment to the cloud we are happy to announce the completion of the Amazon S3 and Dropbox plugins. These plugins seamlessly integrate with PencilBlue's media framework to provide a persistent storage mechanism other than the underlying file system. It works by abstracting the everyday get, set and delete operations that are performed on media. Each of the plugins implement this simple interface to allow your site to thrive in the cloud.

    In addition, we have made several improvements over the past couple of weeks thanks to a wave of feedback from the PencilBlue community. If you haven't yet, be sure to get the latest version of the platform to benefit from all the improvements.

    Feel free to reach out to us on Twitter @GetPencilBlue or on our Sub-Reddit.

    Issues Completed

    • #169 Typo in sample.config.json
    • #174 Miscellaneous code cleanup
    • #177 Align attributed being stripped from article and page content on save
    • #172 Custom Object handling and cleanup
    • #184 WordPress Import Plugin Error Handling
    • #187 WordPress Import Plugin does not unregister from sub-nav service
    • #191 Topic Import file instructions
    • #176 Preview of draft doesn't show in portfolio theme
    • #190 Media directories are not created before attempting to write file
    • #202 Setup Error
    • #200 One zero too many
    • #168 Active directive never implemented
    • #164 Fix article cutoffs after X number of paragraphs
    • #105 Refactor the Wysiwyg
    • #206 Upgraded font awesome libraries
    • #189 Admin Navigation - Add Children
    • #208 Uninstall changes to sample plugin
    • #209 Ability to add global or local template directive flag default values
    • #212 Permalink for media items
    • #224 Updated nodemon ignore file
    • #214 Plugin dependencies installed incorrectly on second plugin install
    • #221 Empty media captions
    • #215 CDN Defaults when library not available
    • #226 Wysiwyg full screen
    • #231 None media positioning
    • #228 Creating media directories on windows
    • #243 Index controller does not accurately prioritize template
    • #220 Admin - Email
    • #237 Storify media type
    • #239 Topic Import cancel
    • #241 Article and Page permalink
    Source code(tar.gz)
    Source code(zip)
  • 0.2.3(Aug 20, 2014)

    Addresses the following Issues:

    • #131 Crash occurs when using media carousel
    • #133 Article and Page content is decoded twice on the server
    • #23 Publish date converts the timezone
    • #136 Template Engine Performance improvements
    • Update to README for CLI tool
    • #141 Media Upload dialog remains open
    • #143 Unable to cancel "Add Media" screen
    • #128 Cannot cancel "Link to Media" action
    • #130 Removed references to Media Carousel
    • #148 Signup and Setup screens retain PB logo not Site Logo
    • #147 Add ability to use different locations for JS and CSS resources
    • #151 Empty $set when using mongo update command in job framework
    • #152 Add X-POWERED-BY header
    • #129 The draft save time should include seconds
    • #140 Custom Data Object service
    • #158 Added double quote to font awesome link
    • #97 Move system routes to its own module
    • #159 Custom Object Sort Cancel button results in 404
    Source code(tar.gz)
    Source code(zip)
  • 0.2.2(Jul 31, 2014)

    The following items have been addressed in this release:

    • #113 User can delete him/her self
    • #72 Deleting a user who has authored articles or pages breaks the manage articles page
    • #45 Implemented Distributed Plugin Uninstall
    • #119 Custom Object "Name" field is disabled
    • #118 Crash when adding Custom Object with Duplicate name
    • #64 Install button appears for plugins with errors in details.json file
    • #122 Implemente distributed plugin install
    • #42 Redirects should not use pb.config.siteIP property
    • #125 Admin login attempt goes to site root
    • #24 Timestamp date should be able to add zeroes before numbers less than 10
    Source code(tar.gz)
    Source code(zip)
  • 0.2.1(Jul 20, 2014)

  • 0.2.0(Jul 15, 2014)

    This release brings two new features to PencilBlue along with some minor bug fixes.

    • WordPress Plugin. Use the out of the box plugin to migrate your content from Word Press to PencilBlue.
    • Distributed Commands. A communication layer for all node processes in the cluster.
    Source code(tar.gz)
    Source code(zip)
  • 0.1.3(Jul 7, 2014)

    NOTE: THIS RELEASE REQUIRES ACTION

    Dependencies Updated:

    • fake-redis

    Please execute "npm install" from the project directory to update dependencies.

    This release contains bug fixes for:

    • #35 Server registrations not automatically clearing
    • #37 Non-existent static pages not serving 404
    • #43 Auto-save on Pages and Articles using the default theme template
    • #11 The last_build flag for RSS feed is not getting replaced
    • #30 Drag and drops not working
    • #29 Site logo cannot be change after second time

    Improvements and new features:

    • #35 Custom server registration storage and out of box support for Mongo and Redis.
    • #10 Support for WebP images
    Source code(tar.gz)
    Source code(zip)
  • 0.1.2(Jul 2, 2014)

    This release includes bug fixes for two issues:

    • The first was a defect that caused an error when navigating to "manage comments" section just after setup.
    • The second was malformed JSON in the sample config.json file.
    Source code(tar.gz)
    Source code(zip)
Owner
PencilBlue, LLC.
PencilBlue, LLC.
Javascript Content Management System running on Node.js

Cody CMS A Javascript Content Management System running on Node.js We finally took upon the task, we are happy to announce the transition to Express 4

Johan Coppieters 669 Oct 31, 2022
Calipso is a simple NodeJS content management system based on Express, Connect & Mongoose.

Calipso Calipso is a simple NodeJS content management system, built along similar themes to Drupal and Wordpress, that is designed to be fast, flexibl

Clifton Cunningham 1.7k Dec 21, 2022
Use the Google Drive API as a Content Management System

Google Drive CMS This shared Google Drive folder serves as the backend for this sample webpage. Quick links: Github / NPM / Dockerhub / Heroku NPM npm

Nathan Babcock 40 Nov 22, 2022
The most powerful headless CMS for Node.js — built with GraphQL and React

A scalable platform and CMS to build Node.js applications. schema => ({ GraphQL, AdminUI }) Keystone Next is a preview of the next major release of Ke

KeystoneJS 7.3k Dec 31, 2022
Reaction is an API-first, headless commerce platform built using Node.js, React, GraphQL. Deployed via Docker and Kubernetes.

Reaction Commerce Reaction is a headless commerce platform built using Node.js, React, and GraphQL. It plays nicely with npm, Docker and Kubernetes. G

Reaction Commerce 11.9k Jan 3, 2023
👻 The #1 headless Node.js CMS for professional publishing

Ghost.org | Features | Showcase | Forum | Docs | Contributing | Twitter Love open source? We're hiring Node.js Engineers to work on Ghost full-time Th

Ghost 42.1k Jan 5, 2023
ApostropheCMS is a full-featured, open-source CMS built with Node.js that seeks to empower organizations by combining in-context editing and headless architecture in a full-stack JS environment.

ApostropheCMS ApostropheCMS is a full-featured, open source CMS built with Node.js that seeks to empower organizations by combining in-context editing

Apostrophe Technologies 3.9k Jan 4, 2023
We.js, extensible Node.js MVC framework - CLI

We.js ;) We.js is a extensible node.js MVC framework For information and documentation see: http://wejs.org This repository (wejs/we) have the We.js C

We.js 208 Nov 10, 2022
A Node.js CMS written in CoffeeScript, with a user friendly backend

Nodizecms A Node.js CMS written in CoffeeScript, with a user friendly backend Status NodizeCMS is still under heavy development, there's a ton of unim

Nodize CMS 176 Sep 24, 2022
🚀 Open source Node.js Headless CMS to easily build customisable APIs

API creation made simple, secure and fast. The most advanced open-source headless CMS to build powerful APIs with no effort. Try live demo Strapi is a

strapi 50.8k Dec 27, 2022
👻 The #1 headless Node.js CMS for professional publishing

Ghost.org | Features | Showcase | Forum | Docs | Contributing | Twitter Love open source? We're hiring Node.js Engineers to work on Ghost full-time Th

Ghost 37k Apr 5, 2021
ApostropheCMS is a full-featured, open-source CMS built with Node.js that seeks to empower organizations by combining in-context editing and headless architecture in a full-stack JS environment.

ApostropheCMS ApostropheCMS is a full-featured, open source CMS built with Node.js that seeks to empower organizations by combining in-context editing

Apostrophe Technologies 3.9k Jan 4, 2023
Minimalistic, lean & mean, node.js cms

enduro.js Enduro is minimalistic, lean & mean, node.js cms. See more at enduro.js website Other repositories: Enduro • samples • Enduro admin • enduro

Martin Gottweis 688 Dec 31, 2022
We.js, extensible Node.js MVC framework - CLI

We.js ;) We.js is a extensible node.js MVC framework For information and documentation see: http://wejs.org This repository (wejs/we) have the We.js C

We.js 208 Nov 10, 2022
AdminBro is an admin panel for apps written in node.js

Admin Bro AdminBro is An automatic admin interface which can be plugged into your application. You, as a developer, provide database models (like post

Software Brothers 6.5k Jan 2, 2023
A Node.js Express backend for a Stackoverflow like answering forum, with RESTful endpoints

A Node.js Express backend for a Stackoverflow like answering forum, with RESTful endpoints, written in es6 style with linted and comprehensively unit-tested code. Utilizes a local json database using fs but has full separation of concern to implement anything else.

Dhiman Seal 3 Jan 9, 2022
Business class content management for Node.js (plugins, server cluster management, data-driven pages)

PencilBlue A full featured Node.js CMS and blogging platform (plugins, server cluster management, data-driven pages) First and foremost: If at any poi

PencilBlue, LLC. 1.6k Dec 30, 2022
Grupprojekt för kurserna 'Javascript med Ramverk' och 'Agil Utveckling'

JavaScript-med-Ramverk-Laboration-3 Grupprojektet för kurserna Javascript med Ramverk och Agil Utveckling. Utvecklingsguide För information om hur utv

Svante Jonsson IT-Högskolan 3 May 18, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023