{"id":13539297,"url":"https://github.com/erudika/para","last_synced_at":"2026-01-27T17:04:18.762Z","repository":{"id":14852220,"uuid":"17575379","full_name":"Erudika/para","owner":"Erudika","description":"Multitenant backend server for building web and mobile apps rapidly. The backend for busy developers. (self-hosted or hosted)","archived":false,"fork":false,"pushed_at":"2026-01-26T13:46:51.000Z","size":6764,"stargazers_count":560,"open_issues_count":8,"forks_count":151,"subscribers_count":26,"default_branch":"master","last_synced_at":"2026-01-27T02:57:52.830Z","etag":null,"topics":["api","api-server","baas","back-end","backend","backend-api","backend-as-a-service","backend-server","backend-service","java","json-api","modular","para","rapid-prototyping","rest-api","search-engine","self-hosted","serverless","standalone-server"],"latest_commit_sha":null,"homepage":"https://paraio.org","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"ixis/codeception-drupal-pages","license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Erudika.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,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2014-03-09T22:31:26.000Z","updated_at":"2026-01-26T13:46:54.000Z","dependencies_parsed_at":"2023-11-11T01:35:37.685Z","dependency_job_id":"8eb676e0-665f-495c-a4df-4668842752ca","html_url":"https://github.com/Erudika/para","commit_stats":{"total_commits":1836,"total_committers":19,"mean_commits":96.63157894736842,"dds":"0.029956427015250586","last_synced_commit":"d44df867e3c23c0ba97fea110f6c574a4c66c9b2"},"previous_names":[],"tags_count":154,"template":false,"template_full_name":null,"purl":"pkg:github/Erudika/para","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Erudika%2Fpara","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Erudika%2Fpara/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Erudika%2Fpara/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Erudika%2Fpara/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Erudika","download_url":"https://codeload.github.com/Erudika/para/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Erudika%2Fpara/sbom","scorecard":{"id":46671,"data":{"date":"2025-08-11","repo":{"name":"github.com/Erudika/para","commit":"a507525c2afe56a03b9f17143820945964cfa742"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.3,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":10,"reason":"15 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/28 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/latest-base.yml:1","Warn: no topLevel permission defined: .github/workflows/latest.yml:1","Warn: no topLevel permission defined: .github/workflows/tag.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/latest-base.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/Erudika/para/latest-base.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/latest-base.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/Erudika/para/latest-base.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/latest-base.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/Erudika/para/latest-base.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/latest-base.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/Erudika/para/latest-base.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/latest-base.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/Erudika/para/latest-base.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/latest.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/Erudika/para/latest.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/latest.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/Erudika/para/latest.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/latest.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/Erudika/para/latest.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/latest.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/Erudika/para/latest.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/latest.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/Erudika/para/latest.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tag.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/Erudika/para/tag.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tag.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/Erudika/para/tag.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tag.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/Erudika/para/tag.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tag.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/Erudika/para/tag.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tag.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/Erudika/para/tag.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tag.yml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/Erudika/para/tag.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:3","Warn: containerImage not pinned by hash: Dockerfile:10: pin your Docker image by updating eclipse-temurin:21-alpine to eclipse-temurin:21-alpine@sha256:df8ce8302ed2ed1690ef490c633981b07e752b373b5fdf796960fb2eb0d640ea","Warn: containerImage not pinned by hash: Dockerfile-base:3","Warn: containerImage not pinned by hash: Dockerfile-base:11: pin your Docker image by updating eclipse-temurin:21-alpine to eclipse-temurin:21-alpine@sha256:df8ce8302ed2ed1690ef490c633981b07e752b373b5fdf796960fb2eb0d640ea","Info:   0 out of   6 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  10 third-party GitHubAction dependencies pinned","Info:   0 out of   4 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/latest-base.yml:16"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 2 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-14T22:55:26.425Z","repository_id":14852220,"created_at":"2025-08-14T22:55:26.425Z","updated_at":"2025-08-14T22:55:26.425Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28816573,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T12:25:15.069Z","status":"ssl_error","status_checked_at":"2026-01-27T12:25:05.297Z","response_time":168,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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","api-server","baas","back-end","backend","backend-api","backend-as-a-service","backend-server","backend-service","java","json-api","modular","para","rapid-prototyping","rest-api","search-engine","self-hosted","serverless","standalone-server"],"created_at":"2024-08-01T09:01:23.046Z","updated_at":"2026-01-27T17:04:18.749Z","avatar_url":"https://github.com/Erudika.png","language":"Java","readme":"![Logo](https://s3-eu-west-1.amazonaws.com/org.paraio/para.png)\n\n## A scalable, multitenant backend for the cloud.\n\n[![Docker pulls](https://img.shields.io/docker/pulls/erudikaltd/para)](https://hub.docker.com/r/erudikaltd/para)\n![Maven Central Version](https://img.shields.io/maven-central/v/com.erudika/para-parent)\n[![Join the chat at https://gitter.im/Erudika/para](https://badges.gitter.im/Erudika/para.svg)](https://gitter.im/Erudika/para?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n\n**Para** is a scalable, multitenant backend server/framework for object persistence and retrieval.\nIt helps you build and prototype applications faster by taking care of backend operations.\nIt can be a part of your JVM-based application or it can be deployed as standalone, multitenant API server with\nmultiple applications and clients connecting to it.\n\nThe name \"pára\" means \"steam\" in Bulgarian. And just like steam is used to power stuff, you can use\nPara to power your mobile or web application backend.\n\nSee how **Para** [compares to other open source backend frameworks](https://erudika.com/blog/2015/10/21/backend-frameworks-usergrid-loopback-para-baasbox-deployd-telepat/).\n\n**This project is fully funded and supported by [Erudika](https://erudika.com) - an independent, bootstrapped company.**\n\n### Features\n\n- RESTful JSON API secured with Amazon's Signature V4 algorithm\n- Database-agnostic, designed for scalable data stores (DynamoDB, Cassandra, MongoDB, etc.)\n- Full-text search (Lucene, Elasticsearch)\n- Distributed and local object cache (Hazelcast, Caffeine)\n- Multitenancy - each app has its own table, index and cache\n- Webhooks with signed payloads\n- Flexible security based on Spring Security (LDAP, SAML, social login, CSRF protection, etc.)\n- Stateless client authentication with JSON Web Tokens (JWT)\n- Simple but effective resource permissions for client access control\n- Robust constraint validation mechanism based on JSR-303 and Hibernate Validator\n- Per-object control of persistence, index and cache operations\n- Support for optimistic locking and transactions (implemented by each `DAO` natively)\n- Advanced serialization and deserialization capabilities (Jackson)\n- Full metrics for monitoring and diagnostics (Dropwizard)\n- Modular design powered by Google Guice and support for plugins\n- I18n utilities for translating language packs and working with currencies\n- Standalone executable JAR with embedded Jetty\n- [Para Web Console](https://console.paraio.org) - admin user interface\n\n### Architecture\n\n\u003cpre\u003e\n+----------------------------------------------------------+\n|                  ____  ___ _ ____ ___ _                  |\n|                 / __ \\/ __` / ___/ __` /                 |\n|                / /_/ / /_/ / /  / /_/ /                  |\n|               / .___/\\__,_/_/   \\__,_/     +-------------+\n|              /_/                           | Persistence |\n+-------------------+  +-----------------+   +-------------+\n|      REST API     |  |     Search      |---|    Cache    |\n+---------+---------+--+--------+--------+---+------+------+\n          |                     |                   |\n+---------+---------+  +--------+--------+   +------+------+\n|  Signed Requests  |  |  Search Index   |   |  Data Store |\n|  and JWT Tokens   |  |      (Any)      |   |    (Any)    |\n+----+---------^----+  +-----------------+   +-------------+\n     |         |\n+----v---------+-------------------------------------------+\n| Clients: JavaScript, PHP, Java, C#, Android, iOS, et al. |\n+----------------------------------------------------------+\n\u003c/pre\u003e\n\n## Documentation\n\n### [Read the Docs](https://paraio.org/docs)\n\n## Blog\n\n### [Read more about Para on our blog](https://erudika.com/blog/tags/para/)\n\n## Hosting\n\nWe offer **hosting and premium support** at [paraio.com](https://paraio.com) where you can try Para online with a\nfree developer account. Browse and manage your users and objects, do backups and edit permissions with a few clicks in\nthe web console. By upgrading to a premium account you will be able to scale you projects up and down in seconds and\nmanage multiple apps.\n\n## Quick Start\n\n1. [Download the latest executable JAR](https://github.com/Erudika/para/releases)\n2. Create a configuration file `application.conf` file in the same directory as the JAR package.\n3. Start Para with `java -jar -Dconfig.file=./application.conf para-*.jar`\n4. Install [Para CLI](https://github.com/Erudika/para-cli) with `npm install -g para-cli`\n5. Create a new dedicated app for your project and save the access keys:\n```\n# run setup and set endpoint to either 'http://localhost:8080' or 'https://paraio.com'\n# the keys for the root app are inside application.conf\n$ para-cli setup\n$ para-cli new-app \"myapp\" --name \"My App\"\n```\nAlternatively, you can use the [Para Web Console](https://console.paraio.org) to manage data,\nor integrate Para directly into your project with one of the API clients below.\n\n## Docker\n\nTagged Docker images for Para are located at `erudikaltd/para` on Docker Hub.\n**It's highly recommended that you pull only release images like `:1.51.0` or `:latest_stable`\nbecause the `:latest` tag can be broken or unstable.**\nFirst, create an `application.conf` file and a `data` folder and start the Para container:\n\n```\n$ touch application.conf \u0026\u0026 mkdir data\n$ docker run -ti -p 8080:8080 --rm -v $(pwd)/data:/para/data \\\n  -v $(pwd)/application.conf:/para/application.conf \\\n  -e JAVA_OPTS=\"-Dconfig.file=/para/application.conf\" erudikaltd/para:latest_stable\n```\n\n**Environment variables**\n\n`JAVA_OPTS` - Java system properties, defaults to `-Dloader.path=lib`\n\n**Plugins**\n\nYou can create a custom Para container with all plugins and JDBC drivers you need by using `docker compose`.\nBelow is an example build of Para, using `para-dao-sql`, `para-search-lucene` and PosgreSQL as a database.\n\n1. First, create a new `Dockerfile-plugins` which does a multi-stage build like so:\n\n\u003cul\u003e\u003cli\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eView contents of \u003ccode\u003eDockerfile-plugins\u003c/code\u003e\u003c/summary\u003e\n\n```docker\nARG PARA_VERSION=\"0.0.0\"\nARG SQL_DAO_VERSION=\"0.0.0\"\nFROM erudikaltd/para:v${PARA_VERSION} AS base\nFROM erudikaltd/para-dao-sql:${SQL_DAO_VERSION} AS dao\nFROM erudikaltd/para-search-lucene:${SEARCH_VERSION} AS search\nFROM base AS final\nCOPY --from=dao /para/lib/*.jar /para/lib\nCOPY --from=search /para/lib/*.jar /para/lib\n\n# EXAMPLE: Add a PostgreSQL JDBC Driver\nARG PG_JDBC_VERSION=\"0.0.0\"\nADD https://jdbc.postgresql.org/download/postgresql-${PG_JDBC_VERSION}.jar /para/lib/\n```\n\n\u003c/details\u003e\n\u003c/li\u003e\u003c/ul\u003e\n\n2. Then, create a `docker-compose.yml` file:\n\n\u003cul\u003e\u003cli\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eView contents of \u003ccode\u003edocker-compose.yml\u003c/code\u003e\u003c/summary\u003e\n\n```yml\nservices:\n   para:\n     depends_on:\n       - db\n     build:\n       context: .\n       dockerfile: Dockerfile\n       args:\n         PARA_VERSION: \"1.51.0\"\n         SQL_DAO_VERSION: \"1.49.1\"\n         PG_JDBC_VERSION: \"42.7.7\"\n     image: para-with-plugins\n     pull_policy: never\n     ports:\n       - \"8080:8080\"\n     volumes:\n       - type: volume\n         source: paraData\n         target: /para/data\n       - type: volume\n         source: paraLib\n         target: /para/lib\n       - type: bind\n         source: ./para-application.conf\n         target: /para/application.conf\n     restart: always\n     environment:\n       - JAVA_OPTS=-Dconfig.file=/para/application.conf -Dloader.path=/para/lib\n\n   db:\n     image: postgres:latest\n     ports:\n       - \"5432:5432\"\n     volumes:\n       - type: volume\n         source: postgresData\n         target: /var/lib/postgresql/data\n     restart: always\n     environment:\n       - POSTGRES_PASSWORD=mysecretpassword\n       - PGDATA=/var/lib/postgresql/data\nvolumes:\n  paraData:\n  paraLib:\n  postgresData:\n```\n\u003c/details\u003e\n\u003c/li\u003e\u003c/ul\u003e\n\n3. Also reate the Para configuration file `para-application.conf`:\n\n\u003cul\u003e\u003cli\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eView contents of \u003ccode\u003epara-application.conf\u003c/code\u003e\u003c/summary\u003e\n\n```ini\npara.env = \"production\"\npara.dao = \"SqlDAO\"\npara.sql.driver = \"org.postgresql.Driver\"\npara.sql.url = \"postgresql://db:5432/para\"\npara.sql.user = \"postgres\"\npara.sql.password = \"mysecretpassword\"\n```\n\u003c/details\u003e\n\u003c/li\u003e\u003c/ul\u003e\n\n4. Finally, run `docker compose build para \u0026\u0026 docker compose up`\n\n## Kubernetes\n\nThere's a Helm chart inside the `helm/` folder. First edit `helm/para/values.yaml` and then you can deploy Para to\nKubernetes with a single command:\n\n```\ncd helm; helm install para ./para\n```\n\nFor more info, check the quick start guide at [`helm/README.md`](helm/README.md).\n\n## Building Para\n\nPara can be compiled with JDK 8+:\n\nTo compile it you'll need Maven. Once you have it, just clone and build:\n\n```sh\n$ git clone https://github.com/erudika/para.git \u0026\u0026 cd para\n$ mvn install -DskipTests=true\n```\nTo generate the executable \"fat-jar\" run `$ mvn package` and it will be in `./para-server/target/para-x.y.z-SNAPSHOT.jar`.\nTwo JAR files will be generated in total - the fat one is a bit bigger in size.\n\nTo build the native image of Para, run:\n\n```\n$ cd para-server \u0026\u0026 mvn -Pnative package\n```\n\nNote, that native images are platform-dependent, so an image built on x86-64 will not run on aarch64, for example.\n\nTo run a local instance of Para for development, use:\n```sh\n$ mvn -Dconfig.file=./application.conf spring-boot:run\n```\n\n## Standalone server\n\nYou can run Para as a standalone server by downloading the executable JAR and then:\n\n```sh\n$ java -jar para-X.Y.Z.jar\n```\n\nThe you can browse your objects through the **Para Web Console** [console.paraio.org](https://console.paraio.org).\nSimply change the API endpoint to be your local server and connect your access keys.\nThe admin interface is client-side only and your secret key is never sent over the the network. Instead,\na JWT access token is generated locally and sent to the server on each request.\n\nAlternatively, you can build a WAR file and deploy it to your favorite servlet container:\n```\n$ cd para-war \u0026\u0026 mvn package\n```\n\n## [Download JAR](https://github.com/Erudika/para/releases)\n\n## Maven dependency\n\nYou can also integrate Para with your project by adding it as a dependency. Para is hosted on Maven Central.\nHere's the Maven snippet to include in your `pom.xml`:\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.erudika\u003c/groupId\u003e\n  \u003cartifactId\u003epara-server\u003c/artifactId\u003e\n  \u003cversion\u003e{see_green_version_badge_above}\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nFor building lightweight client-only applications connecting to Para, include only the client module:\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.erudika\u003c/groupId\u003e\n  \u003cartifactId\u003epara-client\u003c/artifactId\u003e\n  \u003cversion\u003e{see_green_version_badge_above}\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## Command-line tool\n\n- **Para CLI**: [para-cli](https://github.com/erudika/para-cli)\n\n```sh\n$ npm install -g para-cli\n```\n\n## API clients\n\nUse these client libraries to quickly integrate Para into your project:\n\n- **Java**: [para-client](https://github.com/erudika/para/tree/master/para-client)\n- **JavaScript / Node.js**: [para-client-js](https://github.com/erudika/para-client-js)\n- **PHP**: [para-client-php](https://github.com/erudika/para-client-php)\n- **Python**: [para-client-python](https://github.com/erudika/para-client-python)\n- **C# / .NET**: [para-client-csharp](https://github.com/erudika/para-client-csharp)\n- **Android**: [para-client-android](https://github.com/erudika/para-client-android)\n- **Swift / iOS**: [para-client-ios](https://github.com/erudika/para-client-ios)\n\n## Database integrations\n\nUse these `DAO` implementations to connect to different databases:\n\n- **DynamoDB**: [para-dao-dynamodb](https://github.com/Erudika/para-dao-dynamodb)\n- **MongoDB**: [para-dao-mongodb](https://github.com/Erudika/para-dao-mongodb)\n- **Cassandra**: [para-dao-cassandra](https://github.com/Erudika/para-dao-cassandra)\n- **SQL** (H2/MySQL/SQL Server/PostgreSQL, etc.): [para-dao-sql](https://github.com/Erudika/para-dao-sql)\n`H2DAO` is the default `DAO` and it's part of the SQL plugin (packaged with the JAR file)\n\n## Search engine integrations\n\nThe `Search` interface is implemented by:\n\n- **Lucene**: [para-search-lucene](https://github.com/erudika/para-search-lucene)\n- **Elasticsearch / OpenSearch**: [para-search-elasticsearch](https://github.com/erudika/para-search-elasticsearch)\n- **Elasticsearch v5.x**: [para-search-elasticsearch-v5](https://github.com/erudika/para-search-elasticsearch-v5)\nCompatible with ES 5.x only and missing some of the latest features like AWS Elasticsearch support.\n\n## Cache integrations\n\nThe `Cache` interface is implemented by:\n\n- **Caffeine**: objects are cached locally (included in `para-server`)\n- **Hazelcast**: [para-cache-hazelcast](https://github.com/Erudika/para-cache-hazelcast) (distributed)\n\n## Queue implementations\n\nThe `Queue` interface is implemented by:\n\n- **Amazon SQS**: [para-queue-sqs](https://github.com/erudika/para-queue-sqs) plugin for Amazon SQS\n- `LocalQueue` for single-host deployments and local development\n\n## File storage implementations\n\nThe `FileStore` interface is implemented by:\n\n- **Amazon S3**: [para-storage-s3](https://github.com/erudika/para-storage-s3) plugin for Amazon S3\n- `LocalFileStore`: for storing files to the local file system.\n\n## Emailer implementations\n\nThe `Emailer` interface is implemented by:\n\n- **AWSEmailer**: [para-email-ses](https://github.com/erudika/para-email-ses) plugin for Amazon SES\n- `JavaMailEmailer` - the default JavaMail implementation for handling transaction emails\n\n## Projects using Para\n\n- [Scoold](https://scoold.com) - an open source StackOverflow clone\n- [ParaIO.com](https://paraio.com) - managed Para hosting\n- [Erudika.com](https://erudika.com/blog) - the search bar on our blog uses Para\n- [Angular demo app](https://github.com/albogdano/angular2-para) - a sample Angular project\n- [React demo app](https://github.com/albogdano/react-para) - a sample React project\n\n## Wishlist / Roadmap\n\n- Para `2.0` - Java 25+ only, native image\n- Better admin UI\n\n## Getting help\n\n- Have a question? - [ask it on Gitter](https://gitter.im/Erudika/para)\n- Found a bug? - submit a [bug report here](https://github.com/Erudika/para/issues)\n- Ask a question on Stack Overflow using the [`para`](https://stackoverflow.com/tags/para/info) tag\n- For questions related to Scoold, use the [`para`](https://stackoverflow.com/tags/scoold/info) tag on Stack Overflow\n\n## Contributing\n\n1. Fork this repository and clone the fork to your machine\n2. Create a branch (`git checkout -b my-new-feature`)\n3. Implement a new feature or fix a bug and add some tests\n4. Commit your changes (`git commit -am 'Added a new feature'`)\n5. Push the branch to **your fork** on GitHub (`git push origin my-new-feature`)\n6. Create new Pull Request from your fork\n\nPlease try to respect the code style of this project. To check your code, run it through the style checker:\n\n```sh\nmvn validate\n```\n\nFor more information see [CONTRIBUTING.md](https://github.com/Erudika/para/blob/master/CONTRIBUTING.md)\n\n## License\n[Apache 2.0](LICENSE)\n","funding_links":[],"categories":["\u003ca id=\"d55d9dfd081aa2a02e636b97ca1bad0b\"\u003e\u003c/a\u003e物联网(IoT)\u0026\u0026嵌入式设备\u0026\u0026路由器\u0026\u0026交换机\u0026\u0026智能设备\u0026\u0026打印机","\u003ca id=\"9a20a70f58ea7946f24224c5d73fac15\"\u003e\u003c/a\u003e工具"],"sub_categories":["\u003ca id=\"cda63179d132f43441f8844c5df10024\"\u003e\u003c/a\u003e未分类-IoT"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferudika%2Fpara","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ferudika%2Fpara","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferudika%2Fpara/lists"}