{"id":13516365,"url":"https://github.com/PhilipSkinner/elemental-lowcode","last_synced_at":"2025-03-31T06:31:00.460Z","repository":{"id":37029236,"uuid":"234766886","full_name":"PhilipSkinner/elemental-lowcode","owner":"PhilipSkinner","description":"Elemental lowcode development platform.","archived":false,"fork":false,"pushed_at":"2023-02-24T23:37:28.000Z","size":8453,"stargazers_count":113,"open_issues_count":68,"forks_count":17,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-12-06T21:09:42.189Z","etag":null,"topics":["api-rest","api-server","low-code","low-code-development-platform","low-code-platform","lowcode","rulesets","storage"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PhilipSkinner.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-01-18T16:57:04.000Z","updated_at":"2024-09-07T23:23:34.000Z","dependencies_parsed_at":"2024-01-13T19:26:04.058Z","dependency_job_id":"d11f1590-f9aa-4f85-bd23-377ebbd4733a","html_url":"https://github.com/PhilipSkinner/elemental-lowcode","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PhilipSkinner%2Felemental-lowcode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PhilipSkinner%2Felemental-lowcode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PhilipSkinner%2Felemental-lowcode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PhilipSkinner%2Felemental-lowcode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PhilipSkinner","download_url":"https://codeload.github.com/PhilipSkinner/elemental-lowcode/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246429459,"owners_count":20775805,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-rest","api-server","low-code","low-code-development-platform","low-code-platform","lowcode","rulesets","storage"],"created_at":"2024-08-01T05:01:21.711Z","updated_at":"2025-03-31T06:30:55.428Z","avatar_url":"https://github.com/PhilipSkinner.png","language":"JavaScript","readme":"\u003ca href=\"https://elementalsystem.org\"\u003e\n\t\u003cimg src=\"https://elementalsystem.org/src/support.documentation/images/logo.png\" alt=\"Elemental logo\" title=\"Elemental\" align=\"right\" height=\"60\"/\u003e\n\u003c/a\u003e\n\n# Elemental low-code platform\n\n[![Build Status](https://travis-ci.com/PhilipSkinner/elemental-lowcode.svg?branch=master)](https://travis-ci.com/github/PhilipSkinner/elemental-lowcode)\n[![Coverage Status](https://coveralls.io/repos/github/PhilipSkinner/elemental-lowcode/badge.svg?branch=master)](https://coveralls.io/github/PhilipSkinner/elemental-lowcode?branch=master)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/c2fa09bdad924a0d9b290b282a4427cc)](https://www.codacy.com/manual/PhilipSkinner/elemental-lowcode?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=PhilipSkinner/elemental-lowcode\u0026amp;utm_campaign=Badge_Grade)\n[![GitHub issues](https://img.shields.io/github/issues/PhilipSkinner/elemental-lowcode.svg)](https://github.com/PhilipSkinner/elemental-lowcode/issues)\n[![GitHub forks](https://img.shields.io/github/forks/PhilipSkinner/elemental-lowcode.svg)](https://github.com/PhilipSkinner/elemental-lowcode/network)\n[![GitHub stars](https://img.shields.io/github/stars/PhilipSkinner/elemental-lowcode.svg)](https://github.com/PhilipSkinner/elemental-lowcode/stargazers)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/PhilipSkinner/elemental-lowcode/pulls)\n\nA standards based, open low-code development platform built on nodejs with the ability to fallback to writing raw nodejs code when the provided tools cannot solve your problems.\n\nCurrently ships with:\n\n* JSON Schema defined RESTful APIs\n* Simple async messaging queues\n* Integrations to external systems\n* API builder\n* Rulesets builder\n* Interface/website builder\n* OIDC/OAuth2.0 Identity Provider \u0026 Identity Management\n* Blob storage service\n\n## Table of Contents\n\n- [Installation](#installation)\n\t- [Docker](#docker)\n\t- [From source](#from-source)\n\t- [Database support](#databases)\n- [Documentation](#documentation)\n- [Examples](#examples)\n- [Hosting](#hosting)\n\t- [Secrets](#secrets)\n- [Contributing](#contributing)\n- [Authors](#authors)\n- [Support](#support)\n- [Links](#links)\n- [License](#license)\n\n## Installation\n\nInstallation can done using the prebuilt docker image or using the latest code from master.\n\n### Docker\n\nTo use the docker image you'll need to boot a SQL server and configure the system:\n\n```\nservices:\n  elemental:\n    image: philipskinner/elemental:latest\n    environment:\n      MYSQL_CONNECTION_STRING: \"mysql://root:password@mysql:3306/db\"\n      INITIAL_CLIENT_ID: admin\n      INITIAL_CLIENT_SECRET: admin-secret\n      INITIAL_CLIENT_SCOPES: \"openid roles offline_access\"\n      INITIAL_CLIENT_AUTH_REDIRECT: http://admin.elementalsystem.org/auth\n      INITIAL_CLIENT_LOGOUT_REDIRECT: http://admin.elementalsystem.org\n      INITIAL_ROLES: \"system_admin\"\n      INITIAL_USER_USERNAME: admin@elementalsystem.org\n      INITIAL_USER_PASSWORD: Password1!\n      INITIAL_USER_ROLE: system_admin\n      ADMIN_CLIENT_ID: admin\n      ADMIN_CLIENT_SECRET: admin-secret\n    ports:\n      - 80:80\n    depends_on:\n      - mysql      \n    networks:\n      - all  \n\n  mysql:\n    image: mysql\n    command: --default-authentication-plugin=mysql_native_password\n    ports:\n      - 3306:3306\n    environment:\n      MYSQL_ROOT_PASSWORD: password\n    volumes:\n      - ./init.sql:/docker-entrypoint-initdb.d/init.sql\n    networks:\n      - all\n\nnetworks:\n  all:\n```\n\n; then open a browser and point it at (http://admin.elementalsystem.org).\n\nThe default administration login details are configurable using the `INITIAL_USER_USERNAME` and `INITIAL_USER_PASSWORD` env vars. If you used the docker-compose setup above you'll want to use:\n\n* Username: admin@elementalsystem.org\n* Password: Password1!\n\nThe docker image uses several pre-defined hostnames for the service, each of which resolves to 127.0.0.1:\n\n* Kernel \t\t\t- http://kernel.elementalsystem.org\n* Admin \t\t\t- http://admin.elementalsystem.org\n* API \t\t\t\t- http://api.elementalsystem.org\n* Integration \t\t- http://integration.elementalsystem.org\n* Interface \t\t- http://interface.elementalsystem.org\n* Storage API \t\t- http://storage.elementalsystem.org\n* Rules \t\t\t- http://rules.elementalsystem.org\n* Identity Provider - http://identity.elementalsystem.org\n* Messaging/queues \t- http://queues.elementalsystem.org\n* Blob service      - http://blobs.elementalsystem.org\n\n### From source\n\nFollow these steps to build and run from source:\n\n```\n$\u003e git clone https://github.com/PhilipSkinner/elemental-lowcode.git elemental-lowcode\n$\u003e cd elemental-lowcode \u0026\u0026 ./setup.sh\n$\u003e ./start.sh\n```\n\nYou can directly run the kernel by executing the main.js file within the kernel directory:\n\n```\n$\u003e cd src/service.kernel\n$\u003e node main.js\n```\n\nThe following usage options are available when you do this:\n\n```\nUsage: node main.js [OPTIONS]\n\nOptions:\n\t--sources [SOURCE_DIR]\t\tSets the directory where your Elemental application\n                                        source code lives.\n```\n\nThe admin interface will attempt to open on http://localhost:8002. Use the following default credentials:\n\n* Username: admin@elementalsystem.org\n* Password: Password1!\n\n### Database support\n\nElemental supports persistence of:\n\n* Authentication details\n* Data types\n* Message queues\n* Website session state\n\n; with a selection of storage options. These storage options are:\n\n* SQL:\n\t* sqlite\n\t* postgres\n\t* mysql\n\t* mariadb\n\t* mssql\n\n## Documentation\n\nDocumentation is available within Elemental:\n\n![In app documentation](https://elementalsystem.org/src/support.documentation/images/documentation-screenshot.png)\n\n; or you can read it on the [Elemental Documentation](https://elementalsystem.org/src/support.documentation) website.\n\n## Examples\n\nExamples can be found in the [elemental-examples repository](https://github.com/PhilipSkinner/elemental-examples).\n\nTo use the examples clone the repository locally then set Elemental to run from a specific example directory:\n\n```\n$\u003e git clone https://github.com/PhilipSkinner/elemental-lowcode.git elemental-lowcode\n$\u003e git clone https://github.com/PhilipSkinner/elemental-examples.git elemental-examples\n$\u003e cd elemental-lowcode \u0026\u0026 ./setup.sh\n$\u003e cd kernel \u0026\u0026 node main.js --sources ../../elemental-examples/todo\n```\n\n; then open the admin interface on [http://localhost:8002](http://localhost:8002). Each example comes with an admin user with the following credentials:\n\n* Username: admin\n* Password: admin\n\n## Hosting\n\nThe recommended approach for deploying your application is to build on the dockerhub image. The following is an example dockerfile that builds and configures Elemental with a set of Elemental applications:\n\n```\nFROM philipskinner/elemental:master\n\n#set dir\nWORKDIR /var/elemental\n\n#copy our project sources\nCOPY my-sources /var/elemental/service.kernel/.sources\n\n#set environment\nCOPY nginx.conf /etc/nginx\nENV KERNEL_HOST=\"http://kernel.mysite.com\"\nENV ADMIN_HOST=\"http://admin.mysite.com\"\nENV API_HOST=\"http://api.mysite.com\"\nENV INTEGRATION_HOST=\"http://integration.mysite.com\"\nENV INTERFACE_HOST=\"http://interface.mysite.com\"\nENV STORAGE_HOST=\"http://storage.mysite.com\"\nENV RULES_HOST=\"http://rules.mysite.com\"\nENV IDENTITY_HOST=\"http://identity.mysite.com\"\nENV QUEUE_HOST=\"http://queues.mysite.com\"\nENV BLOB_HOST=\"http://blobs.mysite.com\"\n\n#run our app\nCMD [\"./docker-start.sh\"]\n```\n\nIf you want to run the system outside of a docker container you must set the following environmental variables on your system:\n\n* KERNEL_HOST\n* ADMIN_HOST\n* API_HOST\n* INTEGRATION_HOST\n* INTERFACE_HOST\n* STORAGE_HOST\n* RULES_HOST\n* IDENTITY_HOST\n* QUEUE_HOST\n* BLOB_HOST\n\nEach of these needs to be a valid hostname that resolves to the relevant Elemental service.\n\n### Secrets\n\nElemental has built in support for secrets management. Secrets can be configured within your applications and then the secrets definition can be deployed on a per environment basis - outside of version control of your main application.\n\nSecrets can be scoped for global access or restricted to a specific Elemental subsystem.\n\nTo deploy secrets you need to copy a JSON file for each secret into the kernel/.secrets directory. Each JSON file should follow this format:\n\n```\n{\n    \"value\": \"my-secret-value\"\n}\n```\n\n; where the filename is `secret-name.secret.json` within the kernel/.secrets directory. You can copy these at build time within your dockerfile:\n\n```\nCOPY my-secrets/*.json /var/elemental/kernel/.secrets/\n```\n\n## Contributing\n\nContributions, code or otherwise, are very welcome!\n\nTo contribute a code change:\n\n1. Fork the master branch\n2. Carry out your code changes\n3. Run the unit tests - `./test.sh`\n4. Submit a pull request following pull request template\n\nTo contribute a none code change raise a ticket on the [original repository](https://github.com/PhilipSkinner/elemental-lowcode).\n\n## Authors\n\n| [![Philip Skinner](https://avatars2.githubusercontent.com/u/879532?s=160\u0026v=4)](https://www.linkedin.com/in/philipskinner/) \t|\n|:---------------------------------------------------------------------------------------------------------:\t|\n|                                            **Philip Skinner**                                            \t|\n\n## Support\n\nRaise a ticket on the [repository](https://github.com/PhilipSkinner/elemental-lowcode) describing the issue in as much detail as possible.\n\nAlternatively reach out to me@philip-skinner.co.uk and I'll reply as soon as I can.\n\n## Links\n\nMore information about Elemental can be found at:\n\n* [Github Repo](https://github.com/PhilipSkinner/elemental-lowcode)\n* [Official Website](https://elementalsystem.org)\n* [Dockerhub image](https://hub.docker.com/r/philipskinner/elemental)\n\nThe following are standards that Elemental attempts to follow:\n\n* [OpenID Connect](https://openid.net/connect/)\n* [JSON Web Token](https://en.wikipedia.org/wiki/JSON_Web_Token)\n* [Role-based access control](https://en.wikipedia.org/wiki/Role-based_access_control)\n* [JSON Schema](https://json-schema.org/)\n* [JSON Path](https://goessner.net/articles/JsonPath/index.html#e2)\n\nElemental relies upon several other projects, notable ones are:\n\n* [OIDC-Provider](https://github.com/panva/node-oidc-provider)\n* [Sequelize](https://sequelize.org/)\n\n## License\n\nElemental is licensed under the terms of the MIT License and is free to use and free to modify.","funding_links":[],"categories":["JavaScript","📦 Legacy \u0026 Inactive Projects"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FPhilipSkinner%2Felemental-lowcode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FPhilipSkinner%2Felemental-lowcode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FPhilipSkinner%2Felemental-lowcode/lists"}