fora

Fora

Stop deferring
international.

The content that isn't feasible to translate manually — product listings, reviews, any user-generated content — localized automatically as it's written to your database. No application code changes.

Images

Translate text inside your images.

Text is replaced in place — preserving font style, color, and background. Works for storefront signs, product banners, menu boards, and any image with visible text.

Original

English neon sign

German

German neon sign

Spanish

Spanish neon sign

French

French neon sign

Italian

Italian neon sign

Portuguese

Portuguese neon sign

Text

Translate any text field as it's written to your database.

Define which fields should be translated — Fora watches for new and updated rows and keeps every locale in sync.

English

nameLED Neon Wall Sign
descriptionHand-crafted LED neon. Ready to hang.
badgeBest seller

Spanish

nameLetrero de neón LED
descriptionNeón LED artesanal. Listo para colgar.
badgeMás vendido

Configuration

One file. One command.

Point fora.yaml at your tables. The agent handles translation, storage, and view creation. No schema changes. No application code changes.

fora.yaml

name: my-app

connection_string: postgres://app:pass@db:5432/myapp

config:
  target_locales: [de, es, fr, it, pt-BR]
  create_views: true

  tables:
    - table: products
      id_column: id
      fields: [name, description]
      image_fields: [hero_image_url]
      filter: "status = 'active'"

    - table: reviews
      id_column: id
      fields: [body]

s3:
  bucket: my-app-i18n
  region: us-east-1

Run the agent

docker run ghcr.io/getfora/fora-agent:latest \
  -e FORA_API_KEY=$FORA_API_KEY \
  -v $(pwd)/fora.yaml:/config.yaml:ro

Query as normal

SET LOCAL fora.locale = 'es';
SELECT * FROM products_localized;

Connectors

Works with your stack.

Use the REST API directly, or deploy the agent to sync your database automatically. More connectors are in development.

Direct APILive

POST /v1/translate with text or image URLs. Receive results via webhook or poll for them. No connector needed.

Read the docs →
PostgresLive

Reads existing tables, creates locale-transparent views. Zero schema changes. Runs in your VPC.

Read the docs →
MySQLSoon

Same view model, same zero-overhead queries.

MongoDBSoon

Per-document locale fields via the change stream.

Why it's different

Translation happens before the request.
Not during it.

When content is written to your database, Fora translates it in the background. By the time a user or crawler asks for it, the translation is already in Postgres — your app just runs a query. Built for volume and coverage — ship to five languages in a day and keep every locale current as content is added.

Works on dynamic content

Localizes live database rows as they're written — posts, listings, reviews, any UGC. Not just static string files that require a deploy to update.

Zero overhead at read time

Translations are pre-computed and stored in your database. Reads are pure SQL — no AI APIs on the hot path, no added latency, no rate limits.

SEO-ready by default

Translated content renders server-side from your database. Crawlers see real localized pages — not a JavaScript overlay, not a translation proxy.

Scope

The right tool for the right content.

Built for

  • +Product listings and catalog descriptions
  • +Customer reviews and user-generated content
  • +Menus, signage, and image text
  • +Marketplace content that updates continuously
  • +Teams entering new markets without a localization headcount

Not built for

  • Legal agreements and contracts
  • Medical or regulatory content requiring certified accuracy
  • Marketing and brand copy where tone is everything
  • Static UI strings (buttons, navigation, form labels) — pair with i18next or FormatJS for those

Free to start

Ship your first locale this week.

Free tier includes 10M characters and 2,000 images — no credit card required.