# Tech Stack

# Backend — Tech Stack

**Repository**<span style="white-space: pre-wrap;">: </span>`<span class="editor-theme-code">finmars-platform/finmars-core</span>`<span style="white-space: pre-wrap;"> and </span>`<span class="editor-theme-code">finmars-platform/finmars-workflow</span>`

## Overview

This document lists the technologies, libraries, and approaches used in the core and workflow backend.

## Language

- ****Python****<span style="white-space: pre-wrap;"> (primary language)</span>

## Frameworks &amp; Runtime

- ****Django****<span style="white-space: pre-wrap;"> (project structure with </span>`<span class="editor-theme-code">manage.py</span>`, templates)
- ****Django REST Framework (DRF)****<span style="white-space: pre-wrap;"> (API layer)</span>
- ****Gunicorn****<span style="white-space: pre-wrap;"> (WSGI/ASGI server for running Django in production)</span>

## Dependency Management

- ****Poetry****<span style="white-space: pre-wrap;"> (</span>`<span class="editor-theme-code">pyproject.toml</span>`<span style="white-space: pre-wrap;"> present)</span>
- ****pip/requirements****<span style="white-space: pre-wrap;"> files for environments: </span>`<span class="editor-theme-code">requirements.txt</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">requirements-dev.txt</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">requirements-test.txt</span>`

## Containerization &amp; Local Orchestration

- ****Docker****<span style="white-space: pre-wrap;"> (</span>`<span class="editor-theme-code">Dockerfile</span>`)
- ****Docker Compose****<span style="white-space: pre-wrap;"> (</span>`<span class="editor-theme-code">docker-compose.yml</span>`)
- ****Makefile****<span style="white-space: pre-wrap;"> for common dev ops (</span>`<span class="editor-theme-code">make migrate</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">make up</span>`, etc.)

## CI/CD

- ****GitHub Actions****<span style="white-space: pre-wrap;"> for build/test/deploy pipelines</span>
- <span style="white-space: pre-wrap;">Builds use the provided </span>****Dockerfile****

## Scripts &amp; Tooling

- <span style="white-space: pre-wrap;">Shell scripts for setup and maintenance: </span>`<span class="editor-theme-code">generate_env.sh</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">migrate.sh</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">import-sql.sh</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">graph.sh</span>`

## Configuration

- `<span class="editor-theme-code">.env.sample</span>`<span style="white-space: pre-wrap;"> for environment variables example</span>
- Standard Django settings (inside the project; details depend on env files)

## Database

- ****PostgreSQL 15****

## Storage (one of options)

- ****S3 / Minio/ Azure Storages****
- ****Local File Storage****
- ****NFS Storage****

## Caching

- ****Redis****<span style="white-space: pre-wrap;"> (used for caching)</span>

## Message Queue &amp; Background Tasks

- ****RabbitMQ****<span style="white-space: pre-wrap;"> (used for task queues)</span>
- ****Celery****<span style="white-space: pre-wrap;"> (used for background and scheduled tasks)</span>

## Authentication

- ****Keycloak****<span style="white-space: pre-wrap;"> (mandatory integration for authentication)</span>

## Testing

- <span style="white-space: pre-wrap;">Test requirements listed in </span>`<span class="editor-theme-code">requirements-test.txt</span>`<span style="white-space: pre-wrap;"> (exact test tools depend on that file, e.g., pytest)</span>

## Libraries

<span style="white-space: pre-wrap;">The full list of libraries is declared in </span>`<span class="editor-theme-code">requirements.txt</span>`<span style="white-space: pre-wrap;"> and </span>`<span class="editor-theme-code">pyproject.toml</span>`. These include (but are not limited to):

```
aiohappyeyeballs==2.6.1
aiohttp==3.11.18
aiosignal==1.3.2
alabaster==1.0.0
amqp==5.3.1
asgiref==3.8.1
async-timeout==5.0.1
attrs==25.3.0
azure-core==1.31.0
azure-storage-blob==12.14.1
babel==2.17.0
bcrypt==4.3.0
beautifulsoup4==4.13.3
billiard==4.2.1
boto3==1.37.17
botocore==1.37.38
celery==5.4.0
certifi==2025.1.31
cffi==1.17.1
charset-normalizer==3.4.1
click==8.1.8
click-didyoumean==0.3.1
click-plugins==1.1.1
click-repl==0.3.0
coreapi==2.3.3
coreschema==0.0.4
cron-descriptor==1.4.5
croniter==6.0.0
cryptography==44.0.2
deepdiff==8.4.2
Django==4.2.22
django-celery-beat==2.7.0
django-celery-results==2.5.1
django-cors-headers==3.14.0
django-cprofile-middleware==1.0.5
django-crispy-forms==1.14.0
django-cuser==2017.3.16
django-filter==21.1
django-js-asset==2.2.0
django-modeltranslation==0.18.11
django-mptt==0.16.0
django-redis==5.4.0
django-rest-swagger==2.2.0
django-storages==1.14.5
django-timezone-field==7.1
django-tinymce==4.1.0
django_debug_toolbar==3.8.1
djangorestframework==3.15.2
djangorestframework-simplejwt==5.5.0
docutils==0.21.2
drf-yasg==1.21.10
ecdsa==0.19.1
et_xmlfile==2.0.0
factory_boy==3.3.3
Faker==37.1.0
filtration==2.3.0
flower==2.0.1
frozenlist==1.6.0
geoip2==5.0.1
gunicorn==23.0.0
humanize==4.12.2
idna==3.10
imagesize==1.4.1
inflection==0.5.1
ipcalc==1.99.0
isodate==0.7.2
itypes==1.2.0
Jinja2==3.1.6
jmespath==1.0.1
kombu==5.5.3
MarkupSafe==3.0.2
maxminddb==2.6.3
memory-profiler==0.61.0
msrest==0.7.1
multidict==6.4.3
numpy==2.2.4
oauthlib==3.2.2
openapi-codec==1.3.2
openpyxl==3.0.10
orderly-set==5.4.0
packaging==25.0
pandas==2.2.3
paramiko==3.5.1
pbr==6.1.1
pexpect==4.8.0
pillow==11.3.0
pprintpp==0.4.0
prometheus_client==0.21.1
prompt_toolkit==3.0.51
propcache==0.3.1
psutil==7.0.0
psycopg2-binary==2.9.10
ptyprocess==0.7.0
pyasn1==0.4.8
pycparser==2.22
pycryptodome==3.19.1
Pygments==2.19.1
PyJWT==2.6.0
Pympler==1.1
PyNaCl==1.5.0
pyOpenSSL==25.0.0
pyotp==2.7.0
pyparsing==3.0.9
python-crontab==3.2.0
python-dateutil==2.8.2
python-jose==3.4.0
pytz==2025.1
PyYAML==6.0.2
QuantLib==1.37
redis==5.2.1
requests==2.32.4
requests-oauthlib==2.0.0
rsa==4.9.1
ruff==0.11.6
s3transfer==0.11.5
sentry-sdk==2.26.1
simplejson==3.20.1
six==1.17.0
snowballstemmer==2.2.0
soupsieve==2.7
Sphinx==8.1.3
sphinxcontrib-apidoc==0.5.0
sphinxcontrib-applehelp==2.0.0
sphinxcontrib-devhelp==2.0.0
sphinxcontrib-django==2.5
sphinxcontrib-htmlhelp==2.1.0
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==2.0.0
sphinxcontrib-serializinghtml==2.0.0
sqlparse==0.5.3
suds==1.2.0
tomli==2.2.1
tornado==6.5.0
typing_extensions==4.13.2
tzdata==2025.2
uritemplate==4.1.1
urllib3==2.5.0
vine==5.1.0
wcwidth==0.2.13
whitenoise==6.9.0
yarl==1.20.0
```

## License

- ****EUPL-1.2****<span style="white-space: pre-wrap;"> (repository license)</span>

---

# Frontend - Tech Stack

**Repository**<span style="white-space: pre-wrap;">: </span>`<span class="editor-theme-code">finmars-platform/finmars-vue-portal</span>`<span style="white-space: pre-wrap;"> and </span>`<span class="editor-theme-code">finmars-platform/finmars-portal</span>`<span style="white-space: pre-wrap;"> and </span>`<span class="editor-theme-code">finmars-platform/finmars-workflow-portal</span>`

## Overview

This document describes the technology stack used in the Vue Portal frontend.

## Language

- ****JavaScript / TypeScript****

## Framework

- ****Vue 3****<span style="white-space: pre-wrap;"> (main frontend framework)</span>
- <span style="white-space: pre-wrap;">Angular.js (for </span>`<span class="editor-theme-code">finmars-platform/finmars-portal</span>`)

## Build Tool

- ****Vite****

## State Management

- ****Pinia****

## Router

- ****Vue Router****

## UI / Styling

- ****CSS / SCSS****
- ****TailwindCSS****<span style="white-space: pre-wrap;"> or UI component library (Naive UI / Element Plus / Vuetify)</span>

## API Layer

- ****HTTP Client****<span style="white-space: pre-wrap;">: likely </span>****Axios****
- <span style="white-space: pre-wrap;">Backend: </span>****Django REST Framework****<span style="white-space: pre-wrap;"> (from core), communication over REST/JSON</span>

## Authentication

- ****Keycloak****<span style="white-space: pre-wrap;"> (mandatory integration). Client library: </span>`<span class="editor-theme-code">keycloak-js</span>`<span style="white-space: pre-wrap;"></span>

## Environment &amp; Config

- `<span class="editor-theme-code">.env</span>`<span style="white-space: pre-wrap;"> files for environment variables (e.g., </span>`<span class="editor-theme-code">VITE_*</span>`) — exact names to be confirmed

## Testing

- ****E2E Testing****: Cypress / Playwright (separate repository)

## Linting &amp; Formatting

- ****ESLint****<span style="white-space: pre-wrap;">, </span>****Prettier****<span style="white-space: pre-wrap;"> — rules and configs</span>

## CI/CD

- ****GitHub Actions****<span style="white-space: pre-wrap;"> (build and deploy). Build process based on </span>****Dockerfile****

## Containerization

- ****Docker****<span style="white-space: pre-wrap;"> (</span>`<span class="editor-theme-code">Dockerfile</span>`)
- ****Docker Compose****<span style="white-space: pre-wrap;"> for local development — to be confirmed</span>

## Observability

- Logging and monitoring for the frontend — Sentry

## License

- ****EUPL-1.2****<span style="white-space: pre-wrap;"> (repository license)</span>

finmars-vue-portal package.json

---

```
{
	"private": true,
	"scripts": {
		"build": "nuxt build ",
		"build:web-component": "vite build",
		"dev": "nuxt --rootDir=./v/ dev -p=3000",
		"dev-local": "NUXT_APP_BUILD_ASSETS_DIR=/realm00000/v/_nuxt/ API_HOST=http://0.0.0.0:8000 AUTH_HOST=http://0.0.0.0:8083/authorizer nuxt --rootDir=./v/ dev --host=0.0.0.0",
		"start": "PORT=8080 node .output/server/index.mjs",
		"generate": "nuxt generate",
		"preview": "nuxt preview",
		"test": "vitest",
		"coverage": "vitest run --coverage"
	},
	"author": "Finmars SCSA",
	"license": "EUPL-1.2",
	"devDependencies": {
		"@nuxt/test-utils": "^3.12.1",
		"@nuxtjs/tailwindcss": "^6.12.1",
		"@types/sanitize-html": "^2.13.0",
		"@vitest/coverage-v8": "3.2.4",
		"@vue/test-utils": "^2.4.5",
		"consola": "^3.2.0",
		"eslint": "^8.24.0",
		"eslint-plugin-vue": "^9.6.0",
		"happy-dom": "^17.0.0",
		"nuxt": "^3.11.0",
		"postcss-mixins": "^10.0.1",
		"prettier": "3.3.3",
		"sass": "1.85.1",
		"unplugin-auto-import": "^0.16.6",
		"unplugin-vue-components": "^0.25.1",
		"vite-plugin-commonjs": "^0.10.1",
		"vitest": "3.2.4"
	},
	"dependencies": {
		"@chenfengyuan/vue-qrcode": "^2.0.0",
		"@finmars/ui": "1.0.87",
		"@formbricks/js": "1.1.2",
		"@kyvg/vue3-notification": "^2.4.1",
		"@pinia/nuxt": "^0.5.1",
		"@vue/web-component-wrapper": "^1.3.0",
		"ace-builds": "^1.36.2",
		"chart.js": "^3.9.1",
		"click-outside-vue3": "^4.0.1",
		"dayjs": "^1.11.7",
		"esbuild": "^0.25.5",
		"eslint-config-prettier": "^9.1.0",
		"eslint-plugin-prettier": "^5.2.1",
		"floating-vue": "^5.2.2",
		"grid-layout-plus": "^1.0.6",
		"jquery": "^3.7.1",
		"jsondiffpatch": "^0.6.0",
		"jstree": "^3.3.17",
		"keycloak-js": "^21.0.1",
		"lodash": "^4.17.21",
		"pdfjs-dist": "^4.0.269",
		"pinia": "^2.0.24",
		"qrcode": "^1.5.1",
		"sanitize-html": "^2.13.1",
		"swiper": "^10.0.4",
		"vue": "^3.4.23",
		"vue-matomo": "^4.2.0",
		"vue3-ace-editor": "^2.2.2",
		"vuedraggable": "^4.1.0"
	}
}
```

# Tech Stack Overview

This document provides a high-level overview of the technologies used across the Finmars Platform.

---

## Backend (Core &amp; Workflow)

- ****Language****: Python
- ****Framework****: Django, Django REST Framework (DRF)
- ****Background Tasks****: Celery
- ****Database****: PostgreSQL 15
- ****Caching****: Redis
- ****Message Queue****: RabbitMQ
- ****Authentication****: Keycloak
- ****Runtime****: Gunicorn
- ****Containerization****: Docker, Docker Compose
- ****CI/CD****: GitHub Actions

---

## Frontend (Vue Portal and Portal)

- ****Framework****: Vue 3 / Angular.js
- ****Build Tool****: Vite / Webpack (to confirm)
- ****State Management****: Pinia / Vuex (to confirm)
- ****Routing****: Vue Router
- ****Styling/UI****: CSS/SCSS, TailwindCSS or UI library (to confirm)
- ****HTTP Client****: Axios (likely)
- ****Authentication****: Keycloak integration
- ****Containerization****: Docker
- ****CI/CD****: GitHub Actions

---

## Shared Practices

- ****Environment Variables****<span style="white-space: pre-wrap;"> via </span>`<span class="editor-theme-code">.env</span>`<span style="white-space: pre-wrap;"> files</span>
- ****Dockerfile-based builds****
- ****Automated testing****<span style="white-space: pre-wrap;"> (pytest for backend, Jest/Vitest/Cypress for frontend — to confirm)</span>

## Cloud

- ****Kubernetes****
- ****AWS S3 / Minio****
- ****AWS IAM****
- ****Hypervisors (esxi, xcp-ng)****
- ****Hashicorp Vault****
- ****Pritunl VPN****

## Other

- ****Ionic Framework****
- ****git (github, gitlab)****
- ****Wordpress****
- ****Storybook****
- ****Cypress****
- ****Jira/Confluence****
- ****Various integrations (bloomberg, exante, eod, etc.)****

## License

- ****EUPL-1.2****

---

# Auxillary

**Cloud, Community Edition**

## Overview

This document describes the technology stack used in the Cloud / Community Edition installation

## Language

- ****Bash****
- ****Python****

## Technologies

- ****Kubernetes****
- ****SSL****
- ****Nginx****
- ****HTTPS****
- ****Encrypted Disks****
- ****Docker****
- ****VPN (pritunl)****
- ****Router (pfsense)****
- ****AWS****
- ****Azure****
- ****Various Cloud Providers with Linux Support****
- ****Ionic Framework****