> For the complete documentation index, see [llms.txt](https://socrates.gitbook.io/socrates/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://socrates.gitbook.io/socrates/readme.md).

# What is Socrates?

## *A Simple Automation Server*

[![@coreui angular](https://img.shields.io/badge/@coreui%20-angular-lightgrey.svg?style=flat-square)](https://github.com/coreui/angular)

[Socrates](#a-simple-automation-server) is a simple automation server, inspired by Jenkins. It can run tasks in any code language and present them in a friendly dashboard to non-technical users.

![](/files/gbvOp41wQFDZazQA9bXU)

## Quickstart

*For Evaluation and Testing:*

1. Download the `docker-compose.yaml` file from the root of the repository.
2. Run `docker-compose up` and wait until all components are healthy.

## Features

* Define [Parameterized](/socrates/fundamentals/parameters.md) [Blocks](/socrates/fundamentals/projects.md) of code in any language to be run in Docker.
* Define Static and [Dynamic](/socrates/fundamentals/parameters/dynamic.md) [parameters](/socrates/fundamentals/parameters.md) to be used by all Blocks.
* Create [Instances](/socrates/fundamentals/instances.md) of code that can be run individually.
* Create [Steps](/socrates/fundamentals/flows/step-flows.md) and [DAG](/socrates/fundamentals/flows/dag-flows.md) [Flows](/socrates/fundamentals/flows.md) using Instances of code.
* Save [Artifacts](/socrates/fundamentals/instances/artifacts.md) and Outputs, managed by Minio S3.
* [Schedule](/socrates/fundamentals/scheduler.md) any component and view it in a timeline.
* Connect a [Github](/socrates/configuration/settings/github.md) repository with or without a Webhook, automatically update all the code in the server.
* Manage a friendly [Developer Portal](/socrates/use-cases/user-portal.md), give your jobs custom names and folders.
* Can be run on [Docker or on Kubernetes](/socrates/guides/creating-your-first-project.md)

## Components

Socrates's main components are the basic terms that define how to work with the server.

| Component                                                | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Block](/socrates/fundamentals/projects.md)              | A Block is a component made of a Code in a specific Language. It might have [parameters](/socrates/fundamentals/parameters.md), defaults, and a Pre-Code in `Shell` to execute before the main. It may also be directly attached to a file in [Github](/socrates/configuration/settings/github.md).                                                                                                                                                         |
| [Instance](/socrates/fundamentals/instances.md)          | An Instance is attached to a [Block](/socrates/fundamentals/projects.md). It is essentially a [Parameterized](/socrates/fundamentals/parameters.md) [Block](/socrates/fundamentals/projects.md), with its own execution History. Multiple Instance can exist for the same [Block](/socrates/fundamentals/projects.md). It can be run individually, inside a [Flow](/socrates/fundamentals/flows.md) or be [scheduled](/socrates/fundamentals/scheduler.md). |
| [Steps Flow](/socrates/fundamentals/flows/step-flows.md) | Steps Flow is a pipeline of one or more [Instances](/socrates/fundamentals/instances.md) arranged in Steps. They share ENV Variables ([parameters](/socrates/fundamentals/parameters.md)) and Outputs to the next Steps. It has its own execution history and can be drilled down to individual Instances.                                                                                                                                                  |
| [DAG Flow](/socrates/fundamentals/flows/dag-flows.md)    | DAG Flow is a pipeline of one or more [Instances](/socrates/fundamentals/instances.md) arranged in a Graph. They share ENV Variables ([parameters](/socrates/fundamentals/parameters.md)), and pass Outputs to the next Nodes in the Branch. It has its own execution history and can be drilled down to individual [Instances](/socrates/fundamentals/instances.md).                                                                                       |
| [Parameters](/socrates/fundamentals/parameters.md)       | Each [Block](/socrates/fundamentals/projects.md) and its [Instance](/socrates/fundamentals/instances.md) have "parameters" which always include defaults. These are basically translated as Strings (Environment Variables) inside the execution of any code language in its virtual machine. Parameters can also be [Dynamic](/socrates/fundamentals/parameters/dynamic.md).                                                                               |

## License

Apache 2.0
