Skip to content
ProcessMaker BPM Core
PHP HTML Vue Shell
Branch: develop
Clone or download
Latest commit 23ae4be Aug 17, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci Add permormance tests Aug 13, 2019
.gitbook/assets GitBook: [develop] no pages and one asset modified Jun 18, 2019
ProcessMaker Merge branch 'develop' into feature/2208 Aug 16, 2019
bootstrap Initial commit of work snapshot. Mar 28, 2018
config Remove seconds to calculate when a timer event should be triggered. Aug 15, 2019
database Add indexes to notifications Aug 13, 2019
docs GitBook: [develop] 8 pages and 7 assets modified Sep 18, 2018
getting-started GitBook: [develop] 6 pages and 4 assets modified Apr 6, 2019
homestead Renaming spark->processmaker Jun 19, 2019
jest Add configuration to allow for testing components that use vuetable-2 Aug 29, 2018
public Update ProcessMaker XSD Jun 17, 2019
resources Merge branch 'develop' into feature/2208 Aug 16, 2019
routes Laravel 5.8 Fix routes declaration Aug 7, 2019
storage Remove UI font serif Jul 29, 2019
tests Merge branch 'develop' into feature/2208 Aug 16, 2019
.babelrc Fix babel load issues May 10, 2019
.env.dusk.testing Fixes for tests Aug 2, 2019
.env.example fix labels text Jun 19, 2019
.eslintignore toolbar Apr 30, 2018
.eslintrc add test May 3, 2018
.gitattributes Initial commit of work snapshot. Mar 28, 2018
.gitignore Add indexes to notifications Aug 13, 2019
Homestead.yaml Revert changes to Homestead.yaml Jul 22, 2019
LICENSE.txt Initial commit of work snapshot. Mar 28, 2018 remove old bpmn reference Jun 24, 2019 GitBook: [develop] 2 pages and 4 assets modified Apr 16, 2019
Vagrantfile Work in progress to include homestead into the project. Oct 30, 2018 Renaming spark->processmaker Jun 19, 2019
aliases Work in progress to include homestead into the project. Oct 30, 2018
artisan Initial commit of work snapshot. Mar 28, 2018
build.xml Initial commit to support deploying to remote host and extracting dep… May 28, 2018 Renaming spark->processmaker Jun 19, 2019
composer.json Merge branch 'develop' into feature/2208 Aug 16, 2019
composer.lock Laravel v5.8.32 Aug 16, 2019
laravel-echo-server.json Renaming spark->processmaker Jun 19, 2019
package-lock.json Updated packages Aug 12, 2019
package.json Updated packages Aug 12, 2019
phpunit.dusk.xml Work in progress with dusk support. Jun 11, 2018
phpunit.xml Specify the data database for testing Jun 14, 2019
server.php Initial commit of work snapshot. Mar 28, 2018 GitBook: [develop] 6 pages and 4 assets modified Apr 6, 2019 GitBook: [develop] 6 pages and 4 assets modified Apr 6, 2019
webpack.mix.js Add tinymce resources Aug 8, 2019

ProcessMaker 4.1 Community Edition Documentation


ProcessMaker 4.1 Community Edition Documentation


ProcessMaker is an open source, workflow management software suite, which includes tools to automate your workflow, design forms, create documents, assign roles and users, create routing rules, and map an individual process quickly and easily. It's relatively lightweight and doesn't require any kind of installation on the client computer. This file describes the requirements and installation steps for the server.


System Requirements

You can develop ProcessMaker as well as ProcessMaker packages locally. In order to do so, you must have the following:

Steps for Development Installation

  • Clone the repository into a directory
  • Perform composer install to install required libraries. If you are on windows, you may need to run composer install --ignore-platform-reqs due to Horizon requiring the pcntl extension. You can safely ignore this as the application runs in the virtual machine which has the appropriate extensions installed.
  • Perform npm install in the project directory
  • Perform npm run dev to build the front-end assets
  • Modify your local /etc/hosts file to point to On Windows, this file is located at C:\Windows\System32\Drivers\etc\hosts.
    • If you need to change the ip address to something else to avoid conflicts on your network, modify the Homestead.yaml file accordingly. Do not commit this change to the repository.
  • Execute vagrant up in the project directory to bring up the laravel homestead virtual machine
  • Execute vagrant ssh to ssh into the newly created virtual machine
  • Execute php artisan processmaker:install in /home/vagrant/processmaker to start the ProcessMaker Installation
    • Specify localhost as your local database server
    • Specify 3306 as your local database port
    • Specify processmaker as your local database name
    • Specify homestead as your local database username
    • Specify secret as your local database password
    • Specify as your application url
  • Visit in your browser to access the application
    • Login with the username of admin and password of admin

When developing, make sure to turn on debugging in your .env so you can see the actual error instead of the Whoops page.


Optionally, trust the self-signed certificate on your host machine so you don't get the "Not Secure" warnings in chrome and postman.

For macOS: 1. In your-repository-root/storage/ssl, double-click on 2. Click on "Add" to add it to your login keychain 3. In the Keychain Access window click on the Certificates category on the bottom left. 4. Double-click on the processmaker certificate 5. Open the Trust section. For "When using this certificate", select "always trust" 6. Close the window. You will be asked for your password. Close and reopen the processmaker tab in chrome.

If you choose not to install the certificate, you should access the js file in your browser to allow unsafe connections from it. Otherwise, real-time notifications may not work in your development environment.

Customize Logos

  1. Add images to resources/img/
  2. Add The following variables to the .env file
  1. Run npm run dev

Scheduled tasks/events

To run time based BPMN events like Timer Start Events or Intermediate Timer Events, the laravel scheduler should be enabled. To do this open a console and: 1. Execute crontab -e 2. Add to the cron tab the following line (replacing the upper cased text with the directory where your proyecto is located ):

* * * * * cd YOUR_BPM_PROJECT && php artisan schedule:run >> /dev/null 2>&1


The ProcessMaker API is documented using OpenAPI 3.0 documentation and can be viewed at /api/documentation. The documention is generated by adding annotations to Models and Controllers.

You should add annotations to all models and controllers that you create or modify because it's how we generate the SDKs that are used when running scripts.

When developing, make sure to add this to your .env file so that any changes you make to the annotations are automatically turned into documentation when you reload the /api/documentation page:


At the comment block at the top of the model, add an @OA annotation to describe the schema. See ProcessMaker/Models/Process.php for an example.

To keep things dry, you can define 2 schemas. One that inherits the other.

 * ...existing comments above...
 * @OA\Schema(
 *   schema="ProcessEditable",
 *   @OA\Property(property="process_category_uuid", type="string", format="uuid"),
 *   @OA\Property(property="name", type="string"),
 *   @OA\Property(property="description", type="string"),
 *   @OA\Property(property="status", type="string", enum={"ACTIVE", "INACTIVE"}),
 * ),
 * @OA\Schema(
 *   schema="Process",
 *   allOf={
 *       @OA\Schema(ref="#/components/schemas/ProcessEditable")
 *       @OA\Schema(
 *           type="object",
 *           @OA\Property(property="user_uuid", type="string", format="uuid"),
 *           @OA\Property(property="uuid", type="string", format="uuid"),
 *           @OA\Property(property="created_at", type="string", format="date-time"),
 *           @OA\Property(property="updated_at", type="string", format="date-time"),
 *       ),
 *   },
 * )
class Process extends Model implements HasMedia

Now you can use the reference to the schema when annotating the controllers. See ProcessMaker/Http/Controllers/Api/ProcessController.php for an example.

     * @OA\Get(
     *     path="/processes",
     *     summary="Returns all processes that the user has access to",
     *     operationId="getProcesses",
     *     tags={"Process"},
     *     @OA\Parameter(ref="#/components/parameters/filter"),
     *     @OA\Parameter(ref="#/components/parameters/order_by"),
     *     @OA\Parameter(ref="#/components/parameters/order_direction"),
     *     @OA\Parameter(ref="#/components/parameters/per_page"),
     *     @OA\Parameter(ref="#/components/parameters/"),
     *     @OA\Response(
     *         response=200,
     *         description="list of processes",
     *         @OA\JsonContent(
     *             type="object",
     *             @OA\Property(
     *                 property="data",
     *                 type="array",
     *                 @OA\Items(ref="#/components/schemas/Process"),
     *             ),
     *             @OA\Property(
     *                 property="meta",
     *                 type="object",
     *                 allOf={@OA\Schema(ref="#/components/schemas/metadata")},
     *             ),
     *         ),
     *     ),
     * )
    public function index(Request $request)

And for a show method

     * @OA\Get(
     *     path="/processes/{processUuid}",
     *     summary="Get single process by ID",
     *     operationId="getProcessByUuid",
     *     tags={"Process"},
     *     @OA\Parameter(
     *         description="ID of process to return",
     *         in="path",
     *         name="processUuid",
     *         required=true,
     *         @OA\Schema(
     *           type="string",
     *         )
     *     ),
     *     @OA\Response(
     *         response=200,
     *         description="Successfully found the process",
     *         @OA\JsonContent(ref="#/components/schemas/Process")
     *     ),
    public function show(Request $request, Process $process)


operationId will be the method name of the generated code. It can be anything camel cased but should be named some intuitive.

Testing with Swagger UI

Reload the swagger UI at api/documentation page in your browser to see the results and debug any errors with the annotations.

By default, Swagger UI will use your processmaker app auth. So as long as you're logged into the app you should be able to run API Commands from Swagger UI as your logged in user.

You can also create a personal access token to see the API results as a specific user would.

$user->createToken('Name it here')->accessToken;

Copy the token. In api/documentation, click on the Authenticate button on the top right and enter it in the pm_api_bearer value field.

More Info

Detailed examples can be found at

Full OpenAPI 3.0 specification at

Testing with Laravel Dusk

When testing in Laravel Dusk, make sure to turn off debugging mode in your .env so you can use the whole page and screens executing functional tests. Then, change app_env value to develop in the same file:


Execute vagrant ssh to ssh into the newly created virtual machine.

Execute php artisan dusk in /home/vagrant/processmaker to execute Laravel dusk test cases.

Execute php artisan dusk:make newTest to generate a new Dusk test. The generated test will be placed in the tests/Browser directory.

More Info

Detailed installation can be found at

To interact with web elements

List of available assertions


Distributed under the AGPL Version 3

ProcessMaker (C) 2002 - 2019 ProcessMaker Inc.

For further information visit:

You can’t perform that action at this time.