
Interactive platform linking security standards and guidelines for designing, developing, testing, and procuring secure software. Provides a unified catalog of Common Requirements (CREs) with cross-references to industry standards.
Go to https://www.opencre.org to see OpenCRE working and more explanation. OpenCRE stands for Open Common Requirement enumeration. It is an interactive content linking platform for uniting security standards and guidelines. It offers easy and robust access to relevant information when designing, developing, testing and procuring secure software.
OpenCRE consists of:
To see how you can contribute to the application or to the data (catalog or standard mappings), see Contributing. We really welcome you!
/rest/v1/openapi.yaml when running)For a roadmap please see the issues.
You are free to use the public opencre application at opencre.org. Apart from that, you can run your own if you want to include your own security standards and guidelines for example. We call that myOpenCRE.
The easiest way to run OpenCRE locally is by running the published docker container. You can do so by running:
docker run -p 5000:5000 ghcr.io/owasp/opencre/opencre:latest
After the container has finished downloading the remote information you can access it in http://127.0.0.1:5000.
If you want to develop on OpenCRE or docker is not available in your environment, you can alternatively run it via CLI.
To run outside of Docker you need to install OpenCRE. To install this application you need python3, yarn and virtualenv.
Clone the repository:
git clone https://github.com/OWASP/OpenCRE
(Recommended) Create and activate a Python virtual environment:
python3 -m venv venv
source venv/bin/activate
Install dependencies:
make install
Download the latest CRE graph from upstream by running:
make upstream-sync
You can precompute local gap-analysis cache after imports with:
make backfill-gap-analysis
To run CRE locally then you can do:
make dev-flask
To run the CLI application, you can run:
python cre.py --help
To export the CRE + standards taxonomy to CSV (CI-friendly), run:
python cre.py --export --csv <path/to/output.csv>
Example:
python cre.py --export --csv artifacts/cres_and_standards.csv
Notes:
--export is a dedicated export mode and exits after writing the CSV.--csv is required when using --export.To download a remote CRE spreadsheet locally you can run:
python cre.py --review --from_spreadsheet <google sheets url>
To add a remote spreadsheet to your local database you can run:
python cre.py --add --from_spreadsheet <google sheets url>
To run the web application for development you can run:
make start-containers
make start-worker
# in a separate shell
make dev-flask
Alternatively, you can use the dockerfile with:
make docker && make docker-run
Some features like Gap Analysis require a neo4j DB running, you can start this with:
make docker-neo4j
To run only missing gap-analysis pair backfill (without starting Flask), use:
RUN_COUNT=8 bash scripts/backfill_gap_analysis.sh
Prefer the dedicated scripts in scripts/db/ for production operations. These scripts enforce safety guards and always capture a fresh backup before DB changes.
APP_NAME=opencreorg scripts/db/backup-opencreorg.shAPP_NAME=opencreorg SOURCE_DB_URL="postgresql://cre:[email protected]:5432/cre" scripts/db/sync-local-to-opencreorg.shAPP_NAME=opencreorg scripts/db/surgery-opencreorg.sh --sql-file ./tmp/change.sqlFor destructive surgery (DELETE, DROP, TRUNCATE, irreversible ALTER), use:
APP_NAME=opencreorg \
CONFIRM_DESTRUCTIVE=I_UNDERSTAND_OPENCREORG_PROD_DB_DESTRUCTIVE_ACTION \
scripts/db/surgery-opencreorg.sh --sql-file ./tmp/destructive-change.sql --destructive
Runbooks:
docs/runbooks/opencreorg-db-sync-and-surgery.mddocs/runbooks/opencreorg-db-destructive-ops-checklist.mdEnvironment variables for app to connect to neo4jDB (default):
NEO4J_URL (neo4j//neo4j:password@localhost:7687)To run the web application for production you need gunicorn and you can run from within the cre_sync dir:
make prod-run
OpenCRE is fully supported on macOS. The following notes are optional and intended to help contributors running OpenCRE locally on macOS systems.
Install required tools using Homebrew:
brew install [email protected] yarn make
Note: Python 3.11 is recommended. Newer Python versions may cause dependency incompatibilities.
Verify Python version:
python3 --version
Create and activate a virtual environment explicitly using Python 3:
python3 -m venv venv
source venv/bin/activate
Upgrade pip:
pip install --upgrade pip
Install dependencies using the standard workflow:
make install
If you encounter build issues, ensure Xcode Command Line Tools are installed:
xcode-select --install
Sync upstream CRE data (requires internet access):
make upstream-sync
Then start the local server:
make dev-flask
The application will be available at:
http://127.0.0.1:5000
Tip: For most macOS users, running via Docker is the simplest and most reliable approach.
See the myOpenCRE user guide on using the OpenCRE API to, for example, add your own security guidelines and standards.
You can build the production or the development docker images with:
make docker-prod
make docker-dev
The environment variables used by OpenCRE are:
Copy the example configuration file:
cp .env.example .env
Then edit .env and provide values appropriate for your environment.
DEV_DATABASE_URLNEO4J_URLREDIS_HOST, REDIS_PORT, REDIS_URL, REDIS_NO_SSLFLASK_CONFIG, INSECURE_REQUESTSNO_GEN_EMBEDDINGS, CRE_EMBED_MODEL, CRE_EMBED_EXPECTED_DIM, CRE_VALIDATE_EMBED_DIM_ON_INITCRE_LLM_CHAT_MODEL, CRE_EMBED_ALIGN_MODEL, , See .env.example for full list and defaults.
OpenCRE uses LiteLLM for LLM calls. Configure models and provider credentials via environment variables.
Recommended minimal example:
# Chat / completion models (LiteLLM model strings)
CRE_LLM_CHAT_MODEL=gemini/gemini-2.5-flash
CRE_EMBED_ALIGN_MODEL=gemini/gemini-2.5-flash
# Embedding model used for persisted vectors
CRE_EMBED_MODEL=gemini/gemini-embedding-001
CRE_EMBED_EXPECTED_DIM=3072
CRE_VALIDATE_EMBED_DIM_ON_INIT=1
# Retry policy
CRE_LLM_MAX_RETRIES=2
CRE_LLM_RETRY_SLEEP_SECONDS=15
# Provider credential (example for Gemini)
GEMINI_API_KEY=your-key
Notes:
CRE_EMBED_MODEL or CRE_EMBED_EXPECTED_DIM as a data migration event (usually requires re-embedding).CRE_EMBED_EXPECTED_DIM is a safety guard: writes fail fast on dimension mismatch.You can run the containers with:
make docker-prod-run
make docker-dev-run
You can run backend tests with:
make test
You can get a coverage report with:
make cover
Try to keep the coverage above 70%.
CRE_LLM_MAX_RETRIESCRE_LLM_RETRY_SLEEP_SECONDSOPENAI_API_KEY, GEMINI_API_KEY, GCP_NATIVEGOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_SECRET_JSON, LOGIN_ALLOWED_DOMAINSGCP_NATIVEOpenCRE_gspread_AuthCRE_ENABLE_HEALTH (enable the GET /rest/v1/health deploy/uptime probe; off by default, returns 404 when unset), CRE_ENABLE_MYOPENCRE (expose MyOpenCRE in GET /api/capabilities; off by default), CRE_ENABLE_LOGIN (expose Login/Logout UI via capabilities.login; off by default)