{"id":15178919,"url":"https://github.com/savantly-net/sprout-platform","last_synced_at":"2025-10-01T20:32:13.524Z","repository":{"id":38334658,"uuid":"103050026","full_name":"savantly-net/sprout-platform","owner":"savantly-net","description":"A modular application framework as a Spring Boot Starter. Use as a lib in your own project, or extend the default server with modules. Roll your own UI, or extend the default UI with plugins. CMS, LOB apps, or general app use cases.","archived":true,"fork":false,"pushed_at":"2024-03-13T19:49:01.000Z","size":77719,"stargazers_count":15,"open_issues_count":63,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-12-20T03:33:04.640Z","etag":null,"topics":["cms","grafana","java","react","spring","spring-boot","sprout","sprout-plugins"],"latest_commit_sha":null,"homepage":"https://sprout-platform.web.app/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/savantly-net.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"custom":["https://www.paypal.me/Savantly"],"patreon":"savantly","github":"savantly-net"}},"created_at":"2017-09-10T17:56:55.000Z","updated_at":"2024-03-14T16:38:06.000Z","dependencies_parsed_at":"2024-11-14T13:12:14.267Z","dependency_job_id":"10d2c3ac-bbb6-41f9-9c49-8683fdd86b2b","html_url":"https://github.com/savantly-net/sprout-platform","commit_stats":{"total_commits":954,"total_committers":11,"mean_commits":86.72727272727273,"dds":0.5660377358490566,"last_synced_commit":"7d90b3d43176104136b34ede65b801cbdd25adfb"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/savantly-net%2Fsprout-platform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/savantly-net%2Fsprout-platform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/savantly-net%2Fsprout-platform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/savantly-net%2Fsprout-platform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/savantly-net","download_url":"https://codeload.github.com/savantly-net/sprout-platform/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234897368,"owners_count":18903646,"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":["cms","grafana","java","react","spring","spring-boot","sprout","sprout-plugins"],"created_at":"2024-09-27T15:41:59.366Z","updated_at":"2025-10-01T20:32:10.292Z","avatar_url":"https://github.com/savantly-net.png","language":"TypeScript","funding_links":["https://www.paypal.me/Savantly","https://patreon.com/savantly","https://github.com/sponsors/savantly-net","https://www.patreon.com/savantly","https://paypal.me/Savantly"],"categories":[],"sub_categories":[],"readme":"# sprout-platform  \nPlatform Build  \n![CI](https://github.com/savantly-net/sprout-platform/workflows/CI/badge.svg)  \nSprout Core  \n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=savantly-net_sprout-platform_core\u0026metric=sqale_rating)](https://sonarcloud.io/dashboard?id=savantly-net_sprout-platform_core) [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=savantly-net_sprout-platform_core\u0026metric=security_rating)](https://sonarcloud.io/dashboard?id=savantly-net_sprout-platform_core) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=savantly-net_sprout-platform_core\u0026metric=coverage)](https://sonarcloud.io/dashboard?id=savantly-net_sprout-platform_core)  \nSprout Spring Boot Starter  \n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=savantly-net_sprout-platform_starter\u0026metric=sqale_rating)](https://sonarcloud.io/dashboard?id=savantly-net_sprout-platform_starter) [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=savantly-net_sprout-platform_starter\u0026metric=security_rating)](https://sonarcloud.io/dashboard?id=savantly-net_sprout-platform_starter) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=savantly-net_sprout-platform_starter\u0026metric=coverage)](https://sonarcloud.io/dashboard?id=savantly-net_sprout-platform_starter)  \nSprout Server  \n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=savantly-net_sprout-platform_server\u0026metric=sqale_rating)](https://sonarcloud.io/dashboard?id=savantly-net_sprout-platform_server) [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=savantly-net_sprout-platform_server\u0026metric=security_rating)](https://sonarcloud.io/dashboard?id=savantly-net_sprout-platform_server) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=savantly-net_sprout-platform_server\u0026metric=coverage)](https://sonarcloud.io/dashboard?id=savantly-net_sprout-platform_server)\n\n\nThis software uses an Open Source Initiative approved license.  \n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)  \n![Sprout Web App](./docs/img/favicon.png) ![Open Source Initiative](./docs/img/osi_standard_logo_small.png)\n\n\n## What is Sprout?  \nSprout is a web application framework, different than the dozens that already exist.  \nSimilar to Ruby on Rails, Laravel, Django, and others - it facilitates rapid development of a web application.  \n- Provides default configurations  \n- Uses conventions and standards to develop and debug faster  \n\nSimilar to WordPress.  \n- You can use the Sprout Server Docker image as a \"no code\" solution  \n- Custom css or third party plugins/modules can be added without recompiling the server.  \n\nSimilar to other headless CMS.  \n- It's 'head optional'.  \n  The provided UI is a stand-alone ReactJS application, but there's no requirement to use it.  \n  \nSprout is different than other frameworks -  \n- You can use it as an application dependency  \n  Adding Sprout Starter to your Spring project allows customization, replacing default components, extend provided functionality, or turn off capabilities.\n- Non-Intrusive  \n  Sprout can be replaced or removed with less effort than other frameworks due to abstractions.  \n  You can use Sprout to standup a project, then replace implementations until it is no longer required.\n\n## Why not code generation? \nCode generation has applicable use cases, but applications built on generated code can be difficult to update especially with customizations.  \nWith Sprout as a dependency, customizations and modules are abstracted from the core application code, so you can update it like any other application dependency.  \n\n## Use Cases\nThe Sprout Platform provides an extensible and modular application platform, so it's suitable for custom CMS, line-of-business, application portals, or other types of apps.  \nThe modular design allows closed-source customizations to be applied for each unique case.  \n\nThe development is currently sponsored by a rapidly growing restaurant franchise, using it as a \"Enterprise Portal\", where they can bring together disparate systems.  \nIt's also being used as a line-of-business application to manage entities and data attributes, such as franchise location information, QA, and BI administration.  \n\nPlease contact support@savantly.net if you are interested more in this use case.\n\n\n## Documentation  \n[Go here for full documentation](https://sprout-platform.web.app/)  \n\nThe front-end UI uses a `plugin` system to add or modify functionality.  \n[Read more about the front-end](./frontend/)  \n\nThe back-end server uses a `module` system to add or modify functionality. A `module` may also provide `plugins` to the UI.  \n[Read more about the back-end](./backend/)  \n\nYou may notice, inspiration [and some code] for the user-interface came from Grafana - an excellent dashboard application.\n\nIf there is a specific feature you'd like, or if you experience a bug, please open an issue [here](https://github.com/savantly-net/sprout-platform/issues)  \n\nIf you're a develper, PRs are welcome!  \nIf not, you can support this project by becoming a GitHub Project Sponsor, or through [Patreon](https://www.patreon.com/savantly),  or PayPal\n[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://paypal.me/Savantly)  \n\n\n## Quick Start  \n\nUse the docker images to start an example server + web app.  \n`docker-compose up`  \n\nThe example server creates a user -  \nusername: admin  \npassword: changeme!  \n\n## Development \n\n*Required Software*\n- [node js](https://nodejs.org/en/download/)\n- [rush js](https://rushjs.io/)\n- [JDK 8+](https://adoptopenjdk.net/installation.html)\n\nIf developing on Windows, it's recommended to use WSL2 with Docker Desktop  \n[Install Docker Desktop and WSL2](https://docs.docker.com/desktop/windows/wsl/)\nBe sure to read the section about [using vscode from inside linux](https://docs.docker.com/desktop/windows/wsl/#develop-with-docker-and-wsl-2)\n\n### Frontend Development \n\nIf this is the first time you're running sprout, run the following commands:\n\n```\nrush update\nrush build\n\n```\n\n#### Remote backend\nIf running the backend remotely, you may set the environment variable `SERVER_API_URL` to the sprout api host. \nExample using the demo server - \n```\n# *nix\nexport SERVER_API_URL=https://sprout-server.herokuapp.com/\n# windows\nSET SERVER_API_URL=https://sprout-server.herokuapp.com/\n```\n\n#### Local backend\nYou can also run the backend locally\nFrom the root of the project -  \nStart the DB and Sprout Server using Docker Compose  \n\n```\ndocker compose -f docker/frontend-dev.yml up\n```\n\n#### Start frontend dev server\nIn another terminal start the web app -  \n\n```\nrush start:web\n```\n\nOpen the browser to http://localhost:3000  to access the web application.  \nUse the login `admin` with password `changeme!` \n\nChanges to the React app source code will reload the browser automatically.  \n\nThe web app source code is located here -  [./frontend/apps/webapp](./frontend/apps/webapp)\n\n\n### Full Stack Development\n\nFrom the root of the project -  \nStart the DB using Docker Compose  \n\n```\ndocker compose -f backend/server/docker-compose.yml up \n```\n\nOptionally, in another terminal, run continuous compilation for the sprout-spring-boot-starter Java project -  \n\n```\nrush start:dev-watch\n```\n\nIn another terminal, start Sprout in dev mode -  \n\n```\nrush start:dev\n```\n\nIf this is the first time you're running sprout, run the following commands:\n\n```\nrush update\nrush build\n\n```\n\nIn another terminal start the web app -  \n\n```\nrush start:web\n```\n\n\n## Examples\n\n### Live Server Demo  \n- username: admin  \n- password: changeme!  \n\n[https://sprout-server.herokuapp.com/](https://sprout-server.herokuapp.com/)  \n\n### Live Client Demo\n- username: admin  \n- password: changeme!  \n\n[https://sprout-web.herokuapp.com/](https://sprout-web.herokuapp.com/)  \n\n\n### Screenshots \n\n#### Default Website Landing Page\n\n![Sprout Web App](./docs/img/default.png)  \n\n#### Editing a Panel \n\n![Editing a Panel](./docs/img/examples/dashboards.gif)\n\n#### Panel Editor\n\n![Sprout Web App](./docs/img/panel_edit.png)  \n\n#### File/Document Management\n\n![Editing a Panel](./docs/img/examples/file-manager.gif)\n\n\n## Build/Release  \n\nSee the [./scripts/](./scripts)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsavantly-net%2Fsprout-platform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsavantly-net%2Fsprout-platform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsavantly-net%2Fsprout-platform/lists"}