A platform to create, publish and edit sites

Related tags

CMS engine
Overview

Locomotive

Build Status Code Climate Coverage Status Join the chat at https://gitter.im/locomotivecms/engine

Locomotive is an open source platform to create, publish and edit sites (CMS). It is designed to save time and help you focus on what matters: front-end technology, standard development process and a very low learning curve for your clients.

Locomotive relies on a very original workflow:

  • Sites are coded locally using our open source tool: Wagon.
  • Sites are deployed to the platform (engine) thanks to our internal API.
  • A back-office for the end-users is automatically generated based on the custom models and editable regions described by the developers.

Locomotive

Visit the Locomotive official website here for more information.

Features

  • Multi-sites natively supported
  • Uses Liquid, a simple and clean templating language
  • Easy to add custom sections, content types, no SQL needed
  • Beautiful and intuitive editing interface
  • Can fully localize all the content and pages
  • Embed a Restful API to manage every site
  • Develop and preview sites locally with your favorite tools (Wagon)
  • Support for Webpack, SASS, HAML and Coffee Script (Wagon)

Instructions and help

Contribute

Have a look at our Trello board to see what's next or see where you can help out.

Technologies

Here is a list of the main gems used to power the Locomotive platform:

  • Rails 5 - web framework
  • Bootstrap - UI framework
  • Mongoid 6 - Object-Document-Mapper for MongoDB 3
  • Devise 4 - Authentication
  • Carrierwave - Upload
  • Pundit - Permissions

Translating the back-office

By default, the Locomotive back-office is fully translated in English, Dutch and Greek.

Adding a new language is pretty straightforward since we now manage all our I18n translation keys in Transifex, a platform dedicated to this kind of task.

Here is our Transifex portal page: https://www.transifex.com/locomotive/locomotive-engine. Feel free to sign up and translate!

How to contribute

Locomotive is an open source project, we encourage contributions. If you have found a bug and want to contribute a fix, or have a new feature you would like to add, follow the steps below to get your patch into the project:

  • Install ruby, mongoDB and phantomjs
  • Clone the project git clone [email protected]:locomotivecms/engine.git
  • Setup a virtual host entry for locomotive.local to point to localhost
  • Start mongodb if it is not already running
  • Run the tests bundle exec rake
  • Write your failing tests
  • Make the tests pass
  • Create a GitHub pull request

Contact

Feel free to contact me at didier at nocoffee dot fr.

Copyright (c) 2020 NoCoffee, released under the MIT license

Issues
  • Rails 4 support

    Rails 4 support

    Hey @did,

    Any estimate on when we can expect to see Rails 4 support?

    -Ben

    feature 
    opened by benhutton 49
  • running it localhost - pervasive redirect

    running it localhost - pervasive redirect

    Hey, I seem to have run in to some problems with the local server redirecting me to index all the time..

    Just to recap what I did. Cloned, bundled, db:seeded etc. Worked fine. Changed the default domain to "harrison", added a line in the hosts file, "127.0.0.1 harrison" And fired up the local server. It renders the index fine. However, when trying to access the admin section I get some weird redirect status in the console..

    What did I miss?

    Started GET "/admin" for 127.0.0.1 at Wed Sep 01 22:27:43 +0200 2010 MONGODB locomotive_le_dev['action_dispatch_session_mongoid_store_sessions'].find({:_id=>BSON::ObjectID('4c7eb575cc8258163b000001')}, {}).limit(-1) Processing by Admin::PagesController#index as HTML [fetch site] host = harrison / harrison:3000 MONGODB locomotive_le_dev['sites'].find({:domains=>{"$in"=>["harrison"]}}, {}).limit(-1) Completed in 1ms MONGODB locomotive_le_dev['action_dispatch_session_mongoid_store_sessions'].update({"_id"=>BSON::ObjectID('4c7eb575cc8258163b000001')}, {"$set"=>{"data"=>"BAh7ByIUYWRtaW5fcmV0dXJuX3RvIgsvYWRtaW4iCmZsYXNoSUM6JUFjdGlv\nbkRpc3BhdGNoOjpGbGFzaDo6Rmxhc2hIYXNoewY6CmFsZXJ0IjZZb3UgbmVl\nZCB0byBzaWduIGluIG9yIHNpZ24gdXAgYmVmb3JlIGNvbnRpbnVpbmcuBjoK\nQHVzZWRvOghTZXQGOgpAaGFzaHsA\n", "updated_at"=>Wed Sep 01 20:27:44 UTC 2010}})

    Started GET "/admin/sign_in" for 127.0.0.1 at Wed Sep 01 22:27:44 +0200 2010 MONGODB locomotive_le_dev['action_dispatch_session_mongoid_store_sessions'].find({:_id=>BSON::ObjectID('4c7eb575cc8258163b000001')}, {}).limit(-1) Processing by Admin::SessionsController#new as HTML [fetch site] host = harrison / harrison:3000 MONGODB locomotive_le_dev['sites'].find({:domains=>{"$in"=>["harrison"]}}, {}).limit(-1) [fetch site] host = harrison / harrison:3000 MONGODB locomotive_le_dev['sites'].find({:domains=>{"$in"=>["harrison"]}}, {}).limit(-1) Redirected to http://harrison:3000/ Completed 302 Found in 2ms MONGODB locomotive_le_dev['action_dispatch_session_mongoid_store_sessions'].update({"_id"=>BSON::ObjectID('4c7eb575cc8258163b000001')}, {"$set"=>{"data"=>"BAh7ByIUYWRtaW5fcmV0dXJuX3RvIgsvYWRtaW4iCmZsYXNoSUM6JUFjdGlv\nbkRpc3BhdGNoOjpGbGFzaDo6Rmxhc2hIYXNoewY6CmFsZXJ0IjZZb3UgbmVl\nZCB0byBzaWduIGluIG9yIHNpZ24gdXAgYmVmb3JlIGNvbnRpbnVpbmcuBjoK\nQHVzZWRvOghTZXQGOgpAaGFzaHsGOwZU\n", "updated_at"=>Wed Sep 01 20:27:45 UTC 2010}})

    Started GET "/" for 127.0.0.1 at Wed Sep 01 22:27:45 +0200 2010 MONGODB locomotive_le_dev['action_dispatch_session_mongoid_store_sessions'].find({:_id=>BSON::ObjectID('4c7eb575cc8258163b000001')}, {}).limit(-1) Processing by HomeController#show as HTML Rendered home/show.html.haml within layouts/application (1.8ms) Completed 200 OK in 7ms (Views: 7.0ms) MONGODB locomotive_le_dev['action_dispatch_session_mongoid_store_sessions'].update({"_id"=>BSON::ObjectID('4c7eb575cc8258163b000001')}, {"$set"=>{"data"=>"BAh7BiIUYWRtaW5fcmV0dXJuX3RvIgsvYWRtaW4=\n"}})

    opened by feelepxyz 25
  • Too much stuff in /lib/locomotive . Move to a locomotive-core gem?

    Too much stuff in /lib/locomotive . Move to a locomotive-core gem?

    That folder is full of stuff. I would not mind it very much if it wasn't for the fact that I can use Spork to test changes on it, so I'm very slow on making changes to Locomotive using TDD.

    Wouldn't it make sense to move all that code to a separate gem, with its own tests?

    opened by kikito 25
  • Bundler Update Fails

    Bundler Update Fails

    Running bundle update on RC13 or master fails with the following error:

    Bundler could not find compatible versions for gem "devise":
      In Gemfile:
        locomotive_cms (>= 0) ruby depends on
          devise (~> 2.1.2) ruby
    
        locomotive_cms (>= 0) ruby depends on
          devise (2.2.0)
    

    I cannot find anywhere that devise 2.2.0 is required.

    opened by greeneca 23
  • Many mongoid connections

    Many mongoid connections

    I'm getting a lot of connections in my production environment resulting in to many open files. Last time I checked I had over 11000 open connections.

    This could well be a mongoid problem, just wondering if anyone else has this problem as it's a standard rails application with only the engine.

    • locomotivecms (3.0.0)
    • locomotivecms-liquid (4.0.0)
    • locomotivecms-solid (4.0.1)
    • locomotivecms_common (0.0.5)
    • locomotivecms_steam (1.0.0)
    • mongo (2.2.2)
    • mongo_session_store-rails4 (6.0.0)
    • mongoid (5.0.2)
    • mongoid-grid_fs (2.2.1)
    • mongoid-tree (2.0.1)
    issue 
    opened by benoist 22
  • Huge memory requirements on Heroku

    Huge memory requirements on Heroku

    Hi,

    we are using locomotive on heroku with one click installer. We setup simple dyno with 512mb ram, which should be enought for simple cms web. Unfortunately it is not. It really fast run out of memory and starts to swap, which lead to longer responses and automatical restart of dyno. I am currently experiment with larger Dyno with 1024MB ram, but the price 50$ for that is not acceptable for such a small project. I would like to help with this problem, but I am not sure, where to start and what can cause such huge memory consumption.

    locomotive-heroku memory issue 
    opened by schovi 22
  • Using mongoid 3?

    Using mongoid 3?

    I have some exisiting code using mongoid 3 and I want to use Locomotive but it fails - are threre any plans to upgrade to that version ? Thanks Len

    opened by lenw 20
  • Feature request: Rails 5 support.

    Feature request: Rails 5 support.

    feature 
    opened by JorgeDDW 19
  • Can't upload or do anything with Locomotivecms

    Can't upload or do anything with Locomotivecms

    Everytime I try to add a new collection, upload a stylesheet, image I get a validation error saying: "Can't be blank". Development.log does not reveal any errors. Using Safari for browser. Any help would be greatly appreciated.

    opened by ivanrm 18
  • Search Does Not Save 2.3.1

    Search Does Not Save 2.3.1

    I am having a problem with the search ui. It does not save state in the custom fields for saved content type. I was using the web ui interface for new search functionality. Even though i toggle search ui in the custom field and save the content type. It does not save the state. I just tested a new content_type from scratch, they will not save the custom field marked searchable.

    Loco 2.3.1

    issue 
    opened by 0xTunji 17
  • Issue with

    Issue with "Redirect to first domain" and "Redirect to HTTPS" settings

    For my site, we have enabled both the "Redirect to first domain" and "Redirect to HTTPS" settings.

    Our domains are in the following order --

    1. www.mydomain.com
    2. mydomain.com

    After making this change and doing some testing, we've noticed that not all of the URLs redirect properly to our main site.

    The following URLs are redirecting to https://www.mydomain.com:

    • mydomain.com
    • http://mydomain.com
    • http://www.mydomain.com

    The following URL is not redirecting to https://www.mydomain.com:

    • https://mydomain.com

    Is there anything I need to do to get this additional URL to redirect properly?

    opened by amattson-kv 0
  • Back Office: Deleting remaining entries on a paginated model list results in empty model message.

    Back Office: Deleting remaining entries on a paginated model list results in empty model message.

    Steps to reproduce this issue:

    1. Create a content_type and deploy to engine.
    2. Create 10+ entries (so that the entries become paginated in the Back Office).
    3. Delete the entries on the last page.

    The standard "empty model" message will be displayed:

    There are no entries for now. Just click here to create the first one.

    Screenshot 2021-09-12 150500

    opened by greyskin 0
  • Trying to get in touch regarding a security issue

    Trying to get in touch regarding a security issue

    Hey there!

    I'd like to report a security issue but cannot find contact instructions on your repository.

    If not a hassle, might you kindly add a SECURITY.md file with an email, or another contact method? GitHub recommends this best practice to ensure security issues are responsibly disclosed, and it would serve as a simple instruction for security researchers in the future.

    Thank you for your consideration, and I look forward to hearing from you!

    (cc @huntr-helper)

    opened by JamieSlome 0
  • Custom SMTP Namespaces do not work with Password Reset Email Form

    Custom SMTP Namespaces do not work with Password Reset Email Form

    The Locomotive CMS documentation references the following fields which allow a custom SMTP namespace in the metafields_schema.yml file:

    | Name | Description | | --- | --- | | auth_email_smtp_namespace | name of the site metafields namespace used to store your SMTP settings. Default: smtp | | auth_email_smtp_address_alias | name of the address property in the site metafields namespace. Default: address | | auth_email_smtp_port_alias | name of the port property in the site metafields namespace. Default: port | | auth_email_smtp_user_name_alias | name of the user_name property in the site metafields namespace. Default: user_name | | auth_email_smtp_password_alias | name of the user_name property in the site metafields namespace. Default: password |

    Using the auth template site here...

    ...and assuming the following in metafields_schema.yml:

    smtp_settings:
      label: Outgoing Email
      fields:
        server:
          label: SMTP Server
          type: string
    
        username:
          label: Username
          type: string
    
        password:
          label: Password
          type: string
    
        port:
          label: Port
          type: string
    

    ...and the following data (replace with non-dummy) in site.yml:

    metafields:
      smtp_settings:
        server: mailserveraddress.com
        username: [email protected]
        password: password
        port: 123
    

    ...and the following fields in on the forgot_password.liquid page:

    <input type="hidden" name="auth_email_smtp_namespace" value="smtp_settings">
    <input type="hidden" name="auth_email_smtp_address_alias" value="server">
    <input type="hidden" name="auth_email_smtp_port_alias" value="port">
    <input type="hidden" name="auth_email_smtp_user_name_alias" value="username">
    <input type="hidden" name="auth_email_smtp_password_alias" value="password">
    

    ...we should be able to send a password reset email when a user registered to the site enters their email address in the Forgot Password form.

    It doesn't work.

    But if we use the default setup of the auth template site everything works as expected.

    opened by greyskin 1
  • Sub domain take-over by default

    Sub domain take-over by default

    When launching a new locomotive instance the default config allows a first come first served ownership of a new subdomain. This is useful for trying out locomotive on a new host as it means we can create the first account for a subdomain and this becomes the admin for that domain, but if we have locomotive running on a server where many subdomains(or domains) are connected to that then a bad actor can get in before you.

    I suggest a remedy is to set config.enable_registration = false by default and have the first (super) admin created on a first-run wizard or via the console.

    opened by code-bunny 0
  • inconsistancy between many_to_many models

    inconsistancy between many_to_many models

    Hi,

    I have two content types C1 and C2, whith a many-to-many relation between them. I have one C1 entry named E1 and one C2 entry named E2. Using the editor UI, if i add a relation between E2 and E1 by editing the E2 entry, the relation is added in the E1 object, as expected. However, if I delete this relation by editing the E2 entry (using the trash icon), the E1 entry still has a reference to the E2 content entry.

    I think this is a bug.

    I'm using v4.0.1

    opened by gcolson 1
  • Upload pictures with .tiff extension

    Upload pictures with .tiff extension

    Allow uploading profile picture with .tiff (TIFF - Tagged Image File Format) extension.

    opened by Revathyne 0
  • Implement google authentication while signing up

    Implement google authentication while signing up

    Add sign up with google feature while signing in.

    opened by Revathyne 0
  • Check email validity

    Check email validity

    Check the validity of an email address Screenshot from 2021-02-15 10-52-11

    opened by Arunthogadiya 0
  • Add triggerbutton for content entries to trigger external actions for backend users.

    Add triggerbutton for content entries to trigger external actions for backend users.

    Feature request: I would be extremely helpful, if i could add a UI button for backend users to trigger an external action, e.g. "Export". All the button would need as a parameter would be an external url and the content record id could be attached as a url param. E.g. Button "Export", URL: https://api.whateverexternalurl.com/triggerme.html?contentid=xyz

    Then the external service would use locomotives API in order to fetch that content data.

    opened by patternpoints 0
A flexible web publishing platform for the display of library, museum and scholarly collections, archives and exhibitions.

Welcome to Omeka © 2008-2016 Roy Rosenzweig Center for History and New Media, 2016-present Corporation for Digital Scholarship This program is free so

Omeka 370 Nov 29, 2021
Open Source multi-language/multi-currency/multi-store E-commerce platform for Ruby on Rails with a modern UX, PWA frontend, REST API, GraphQL, several official extensions, and 3rd party integrations.

Spree Commerce Success Stories Documentation Integrations Spree is a complete open source e-commerce solution built with Ruby on Rails. It was started

Spree Commerce 11.5k Nov 30, 2021
A modular, high performance, headless e-commerce platform built with Python, GraphQL, Django, and ReactJS.

Saleor Commerce Customer-centric e-commerce on a modern stack A headless, GraphQL-first e-commerce platform delivering ultra-fast, dynamic, personaliz

Mirumee Labs 14.5k Nov 26, 2021
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.6k Dec 2, 2021
Open-Source Data Platform 🐰 — Directus wraps any SQL database with a real-time GraphQL+REST API and an intuitive app for non-technical users.

?? Introduction Directus is a real-time API and App dashboard for managing SQL database content. Free & open-source. No artificial limitations, vendor

Directus 12.9k Nov 25, 2021
Attendize is an open-source ticket selling and event management platform built on Laravel.

Attendize is an open-source ticketing and event management application built using the Laravel PHP framework. Attendize allows event organisers to sel

Attendize 3.3k Nov 30, 2021
Free, open-source, self-hosted CMS platform based on the Laravel PHP Framework.

October is a Content Management System (CMS) and web platform whose sole purpose is to make your development workflow simple again. It was born out of

October CMS 10.7k Nov 27, 2021
Open Source eCommerce Platform on Symfony

Sylius is an Open Source eCommerce platform on top of Symfony. The highest quality of code, strong testing culture, built-in Agile (BDD) workflow and

Sylius eCommerce 6.6k Nov 25, 2021
A self hosted Web publishing platform on Rails.

Publify The Ruby on Rails publishing software formerly known as Typo What's Publify? Publify is a simple but full featured web publishing software. It

Publify 1.8k Nov 29, 2021
Orchard is a free, open source, community-focused Content Management System built on the ASP.NET MVC platform.

Orchard Orchard is a free, open source, community-focused Content Management System built on the ASP.NET MVC platform. You can try it for free on DotN

OrchardCMS 2.3k Nov 22, 2021
Open Source Digital Experience Platform (DXP, MDM/PIM, CDP, DAM, CMS/UX & eCommerce

Pimcore - Open Source Digital Experience Platform: MDM/PIM, CDP, DAM, CMS/UX & eCommerce ?? Website - Learn more about Pimcore ?? Documentation ?? Hel

pimcore 2.3k Nov 23, 2021
E-Commerce Platform

Shuup Shuup is an Open Source E-Commerce Platform based on Django and Python. https://shuup.com/ Copyright Copyright (c) 2012-2021 by Shuup Commerce I

Shuup 1.8k Nov 30, 2021
Shopware 5 Repository - For Shopware 6 visit https://github.com/shopware/platform

Shopware 5 License: Dual license AGPL v3 / Proprietary Github Repository: https://github.com/shopware/shopware Issue Tracker: https://issues.shopware.

Shopware 1.3k Nov 26, 2021
[READ-ONLY] An open source Content Application Platform based on Flow. A set of core Content Management features is resting within a larger context that allows you to build a perfectly customized experience for your users

The Neos package Note This repository is a read-only subsplit of a package that is part of the Neos project (learn more on www.neos.io). Neos is an op

Neos 97 Nov 25, 2021
Free, open-source, self-hosted CMS platform based on the Laravel PHP Framework.

Winter is a Content Management System (CMS) and web platform whose sole purpose is to make your development workflow simple again

Winter CMS 779 Nov 30, 2021
Bolt is a simple CMS written in PHP. It is based on Silex and Symfony components, uses Twig and either SQLite, MySQL or PostgreSQL.

⚠️ Note - Not the latest version This is the repository for Bolt 3. Please know that Bolt 4 has been released. If you are starting a new project, plea

Bolt 4.1k Nov 26, 2021
A Free and Opensource Laravel eCommerce framework built for all to build and scale your business.

Topics Introduction Documentation Requirements Installation & Configuration License Security Vulnerabilities Miscellaneous Introduction Bagisto is a h

Bagisto 4.1k Nov 25, 2021