No description
  • Rust 74.9%
  • PLpgSQL 15.1%
  • JavaScript 3.7%
  • TypeScript 1.8%
  • Dockerfile 1.6%
  • Other 2.8%
Find a file
2026-08-21 08:37:03 +00:00
.github/workflows chore(ci): bumped actions version 2026-08-20 20:14:24 +02:00
backend chore(release): timbre v0.3.0 [skip ci] 2026-08-21 08:37:03 +00:00
frontend chore(release): timbre v0.3.0 [skip ci] 2026-08-21 08:37:03 +00:00
scripts/prek chore(ci): added prek 2026-08-11 14:29:57 +02:00
.dockerignore feat(global): Dockerfile + static serving of frontend 2026-08-12 18:42:48 +02:00
.env.example feat(backend): auth endpoints 2026-08-14 14:27:02 +02:00
.gitignore feat(backend): now gracefully shutdowns 2026-08-13 19:03:54 +02:00
CHANGELOG.md chore(release): timbre v0.3.0 [skip ci] 2026-08-21 08:37:03 +00:00
compose.yml feat(backend): auth endpoints 2026-08-14 14:27:02 +02:00
Dockerfile feat(global): Dockerfile + static serving of frontend 2026-08-12 18:42:48 +02:00
ferrflow.toml chore(ci): transfered forgejo to github 2026-08-20 19:48:02 +02:00
LICENSE chore(doc): added License 2026-08-17 18:16:53 +02:00
prek.toml chore(ci): added prek 2026-08-11 14:29:57 +02:00
README.md fix(ci): ferrflow was in skip ci 2026-08-20 19:59:46 +02:00

Timbre

Timbre is a self-hostable language learning app, based on the principles of Fluent Forever, which revolve around making the target language feel like a new way of thinking instead of just another way of thinking the same things.

Table of Contents

Installation

Docker

Images are published to ghcr.io/code-barru/timbre.

Save this as compose.yaml and run docker compose up -d:

services:
  timbre:
    image: ghcr.io/Code-Barru/timbre:latest
    restart: unless-stopped
    depends_on:
      database:
        condition: service_healthy
    environment:
      DATABASE_URL: postgres://timbre:CHANGE_ME@database/timbre
      PORT: 3000
      DB_MAX_CONNECTIONS: 10
      PUBLIC_URL: https://timbre.example.com
      SESSION_TTL_DAYS: 30
      # Set to false if you serve over http
      COOKIE_SECURE: "true"
      # Set to false if you want to disable account creation
      ALLOW_REGISTRATION: "true"
    ports:
      - "3000:3000"

  database:
    image: postgres:17
    restart: unless-stopped
    environment:
      POSTGRES_USER: timbre
      POSTGRES_PASSWORD: CHANGE_ME
      POSTGRES_DB: timbre
    volumes:
      - db-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U timbre -d timbre"]
      interval: 5s
      timeout: 5s
      retries: 10

volumes:
  db-data:

Quick Start

Usage

Contributing

License

Timbre is free software, licensed under the GNU AGPLv3. The full text is in LICENSE.

Contributions are accepted under the same license.

Acknowledgments

Timbre stands on other people's work.

Gabirel Wyner, whose book Fluent Forever is the sole reason this project exists. Every steps of the timbre workflow comes from this book. If Timbre is useful to you and you want to understand why it works, please read the book.

FSRS and the open-spaced-repetition community, for the scheduling algorithms. Timbre implements FSRS-6, which was not deisgn by us.

Anki, for two decades of prior art. The note / note type / card / deck model Timbre uses is Anki's.

Forvo, for pronunciations recorded by native speakers, which is what makes audio cards worth doing at all.

Timbre is an independent project. It is inspired by the Fluent Forever method but is not affiliated with, endorsed by, or connected to Fluent Forever Inc. or its app. "Fluent Forever" is their trademark.