Open source back-end server for web, mobile and IoT. The backend for busy developers. (self-hosted or hosted)
Para is a scalable, multitenant backend server/framework for object persistence and retrieval. It helps you build and prototype applications faster by taking care of backend operations. It can be a part of your JVM-based application or it can be deployed as standalone, multitenant API server with multiple applications and clients connecting to it.
The name "pára" means "steam" in Bulgarian. And just like steam is used to power stuff, you can use Para to power your mobile or web application backend.
See how Para compares to other open source backend frameworks.
This project is fully funded and supported by Erudika - an independent, bootstrapped company.
DAOnatively)
+----------------------------------------------------------+ | ____ ___ _ ____ ___ _ | | / __ \/ __` / ___/ __` / | | / /_/ / /_/ / / / /_/ / | | / .___/\__,_/_/ \__,_/ +-------------+ | /_/ | Persistence | +-------------------+ +-----------------+ +-------------+ | REST API | | Search |---| Cache | +---------+---------+--+--------+--------+---+------+------+ | | | +---------+---------+ +--------+--------+ +------+------+ | Signed Requests | | Search Index | | Data Store | | and JWT Tokens | | (Any) | | (Any) | +----+---------^----+ +-----------------+ +-------------+ | | +----v---------+-------------------------------------------+ | Clients : JavaScript, PHP, Java, C#, Android, iOS, etc. | +----------------------------------------------------------+
We offer hosting and premium support at paraio.com where you can try Para online with a free developer account. Browse and manage your users and objects, do backups and edit permissions with a few clicks in the web console. By upgrading to a premium account you will be able to scale you projects up and down in seconds and manage multiple apps.
Create a configuration file
application.conffile in the same directory as the Para package. Here's an example default configuration: ```ini
para.app_name = "Para"
para.env = "embedded"
para.security.allowunverifiedemails = false
para.clientscanaccessrootapp = true
para.cache_enabled = true
para.appsecretkey = "b8db69a24a43f2ce134909f164a45263"
para.security.api_security = true
para.worker_id = 1 ```
java -jar -Dconfig.file=./application.conf para-*.jar
curl localhost:8080/v1/_setupto get the access and secret keys for the root app (required)
para-clitool for easy access
npm install -g para-cli(optional)
# run setup and set endpoint to either 'http://localhost:8080' or 'https://paraio.com' $ para-cli setup $ para-cli new-app "myapp" --name "My App"
The quickest way to interact with Para is through the command-line tool (CLI):
$ npm install -g para-cli $ para-cli setup $ para-cli ping $ echo "{\"type\":\"todo\", \"name\": \"buy milk\"}" > todo.json $ para-cli create todo.json --id todo1 --encodeId false $ para-cli read --id todo1 $ para-cli search "type:todo"
Tagged Docker images for Para are located at
erudikaltd/paraon Docker Hub. It's highly recommended that you pull only release images like
:1.39.0or
:latest_stablebecause the
:latesttag can be broken or unstable. First, create an
application.conffile in a directory and run this command:
$ docker run -ti -p 8080:8080 --rm -v para-data:/para/data \ -v $(pwd)/application.conf:/para/application.conf \ -e JAVA_OPTS="-Dconfig.file=/para/application.conf -Dloader.path=lib" erudikaltd/para:latest_stable
Environment variables
JAVA_OPTS- Java system properties, e.g.
-Dpara.port=8000
BOOT_SLEEP- Startup delay, in seconds
Plugins
To use plugins, create a new
Dockerfile-pluginswhich does a multi-stage build like so: ```
FROM erudikaltd/para:v1.XY.Z-base AS base FROM erudikaltd/para-search-lucene:1.XY.Z AS search FROM erudikaltd/para-dao-mongodb:1.XY.Z AS dao FROM base AS final COPY --from=search /para/lib/.jar /para/lib COPY --from=dao /para/lib/.jar /para/lib ```
Then simply run
$ docker build -f Dockerfile-plugins -t para-mongo .
Para can be compiled with JDK 8+:
To compile it you'll need Maven. Once you have it, just clone and build:
$ git clone https://github.com/erudika/para.git && cd para $ mvn install -DskipTests=true
To generate the executable "fat-jar" run
$ mvn packageand it will be in
./para-jar/target/para-x.y.z-SNAPSHOT.jar. Two JAR files will be generated in total - the fat one is a bit bigger in size.
To build the base package without plugins (excludes
para-dao-sqland
para-search-lucene), run:
$ cd para-jar && mvn -Pbase package
To run a local instance of Para for development, use:
sh $ mvn -Dconfig.file=./application.conf spring-boot:run
You can run Para as a standalone server by downloading the executable JAR and then:
$ java -jar para-X.Y.Z.jar
The you can browse your objects through the Para Web Console console.paraio.org. Simply change the API endpoint to be your local server and connect your access keys. The admin interface is client-side only and your secret key is never sent over the the network. Instead, a JWT access token is generated locally and sent to the server on each request.
Alternatively, you can build a WAR file and deploy it to your favorite servlet container:
$ cd para-war && mvn package
You can also integrate Para with your project by adding it as a dependency. Para is hosted on Maven Central. Here's the Maven snippet to include in your
pom.xml:
com.erudika para-server {see_green_version_badge_above}
For building lightweight client-only applications connecting to Para, include only the client module:
xml com.erudika para-client {see_green_version_badge_above}
$ npm install -g para-cli
Use these client libraries to quickly integrate Para into your project:
Use these
DAOimplementations to connect to different databases:
AWSDynamoDAO(included in
para-server)
H2DAOis the default
DAOand it's part of the SQL plugin (packaged with the JAR file)
The
Searchinterface is implemented by:
The
Cacheinterface is implemented by:
para-server)
The
Queueinterface is implemented by:
AWSQueueclass
LocalQueuefor single-host deployments and local development
2.0- migration to Quarkus, Java 13+ only, native image
paratag
paratag on Stack Overflow
git checkout -b my-new-feature)
git commit -am 'Added a new feature')
git push origin my-new-feature)
Please try to respect the code style of this project. To check your code, run it through the style checker:
mvn validate
For more information see CONTRIBUTING.md