rCTF Docs
Overview

Providers

Overview of rCTF's pluggable provider system for captcha, email, uploads, scoring, moderation, and more.

rCTF uses a pluggable provider system, so you can swap implementations for major platform features. Each provider is configured with a name and an options object in your configuration.

Provider format#

All providers follow the same configuration pattern:

providerField:
name: provider-type/provider-name
options:
key: value

The name identifies which implementation to load, and options is passed directly to the provider’s constructor. Most providers also support environment variable fallbacks for their options.

Available providers#

TypeConfig FieldAvailable ProvidersDefault
Captchacaptcha.providercaptcha/recaptcha, captcha/hcaptcha, captcha/turnstileNone (disabled)
Emailemail.provideremails/smtp, emails/ses, emails/postmark, emails/mailgunNone (disabled)
UploadsuploadProvideruploads/local, uploads/s3, uploads/gcsuploads/local
ScoringscoreProviderscores/classic, scores/sekai, scores/steep, scores/jammy, scores/genni, scores/legacyscores/classic
ModerationavatarsModeration.providermoderation/openaiNone (disabled)
Messages*bloodBot.destinations[].providermessages/discord, messages/telegramNone (disabled)
Analyticsanalytics.provideranalytics/google, analytics/cloudflareNone (disabled)
InstancerinstancerProviderinstancer/docker-instancer, instancer/k8s-instancerNone (disabled)
Admin BotadminBot.provideradmin-bot/rctf-jsNone (disabled)

Providers marked as “None (disabled)” are optional features. The platform functions without them, but the associated features will be unavailable.

* Unlike the other providers, message providers are not selected by a top-level config field. They are nested inside each blood bot destination entry, so the same deployment can post to multiple destinations using different providers.

Esc

Start typing to search the docs.