Skip to main content

No project description provided

Project description

Oscilla

Oscilla is a platform for building and hosting text-based adventure games. Games are defined entirely as YAML content manifests — regions, locations, adventures, items, enemies, quests, and more — with no code required to create a new game.

The engine ships two interfaces over the same core:

  • Web application — a SvelteKit frontend backed by a FastAPI REST + SSE API, with user accounts, persistent characters, and a browser-based play experience.
  • TUI — a Textual full-screen terminal application that runs entirely locally against a local SQLite database, with no server required.

For a full architectural overview, see docs/system-overview.md.


Playing via the Web

The easiest way to run the web stack is with Docker Compose:

git clone https://github.com/tedivm/oscilla.git
cd oscilla
docker compose up -d

The application is then available at http://localhost. A default developer account is seeded automatically:

  • Email: dev@example.com
  • Password: devpassword

For production deployment — environment variables, PostgreSQL, Redis, TLS, and migration procedure — see the Deployment Guide.


Playing Locally via the TUI

The TUI runs entirely from the command line with no server or account required. It uses a local SQLite database for character persistence.

Install from PyPI:

pip install oscilla
# or, with uv:
uv tool install oscilla

Install from source:

git clone https://github.com/tedivm/oscilla.git
cd oscilla
make install

Oscilla requires a game library — a directory of game packages, each containing YAML manifests. By default it looks for a content/ directory in the working directory. Point it elsewhere with GAMES_PATH.

# Validate content before playing
oscilla validate

# Launch the TUI (choose from available games)
oscilla game

# Jump directly into a specific game
oscilla game --game my-game

# Use a custom game library directory
GAMES_PATH=/path/to/games oscilla game

The game command resolves your identity from USER@hostname and stores save data in a platform-appropriate data directory. Run oscilla data-path to see where that is on your system.

For the full CLI reference, see docs/dev/cli.md.


Game Library Layout

A game library is a directory of game packages. Each package is a subdirectory containing a game.yaml.

content/                   # GAMES_PATH root
  my-game/                 # one game package
    game.yaml
    character_config.yaml
    regions/
      starting-region.yaml
    adventures/
      intro.yaml

Multiple game packages can coexist in the same library. Oscilla loads all of them at startup.


Writing Game Content

Games are defined entirely in YAML. No code is required to create a new adventure, enemy, item, quest, or region. The content system supports:

  • A hierarchical world of regions and locations with unlock conditions
  • Multi-step adventures with narrative text, choices, combat, stat checks, and skill menus
  • Items, equipment slots, crafting recipes, and loot tables
  • A skill and buff system for both players and enemies
  • Multi-stage quests with milestone-driven progression
  • Archetypes for persistent character states (class, faction, condition)
  • An opt-in in-game calendar with cycles, eras, and time-based conditions
  • Jinja2 templates for dynamic narrative text and numeric formulas

Getting started with content authoring: docs/authors/getting-started.md

Full authoring reference: docs/authors/README.md

Author CLI tools (validate, test, scaffold, graph, trace): docs/authors/cli.md

# Validate all content
oscilla validate

# List all loaded manifests of a given kind
oscilla content list Adventure --game my-game

# Run the engine against a specific adventure and print results
oscilla content test my-adventure --game my-game

# Scaffold a new manifest
oscilla content create Adventure --game my-game

Contributing

git clone https://github.com/tedivm/oscilla.git
cd oscilla
make install          # install dependencies and set up .venv
cp .env.example .env  # configure local settings
docker compose up -d  # start database, Redis, and other services
make tests            # run the full test and lint suite
make chores           # auto-fix formatting

Architecture and codebase reference: docs/system-overview.md

Developer documentation index: docs/dev/README.md

All documentation: docs/README.md

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oscilla-0.1.4.tar.gz (1.9 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oscilla-0.1.4-py3-none-any.whl (1.7 MB view details)

Uploaded Python 3

File details

Details for the file oscilla-0.1.4.tar.gz.

File metadata

  • Download URL: oscilla-0.1.4.tar.gz
  • Upload date:
  • Size: 1.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for oscilla-0.1.4.tar.gz
Algorithm Hash digest
SHA256 e2905466c882cc923ee8b886e8726f4d258b1299d56ece7bff6bec25c0503839
MD5 044624d5f278503fd5547537f9cdac0e
BLAKE2b-256 ffeb21c31bc2054e66b4e51d560e0fac2b2c0ed874e2fec4abbba21ba85be228

See more details on using hashes here.

Provenance

The following attestation bundles were made for oscilla-0.1.4.tar.gz:

Publisher: pypi.yaml on tedivm/oscilla

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file oscilla-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: oscilla-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for oscilla-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 3d237b7873dc53a7e577e150ba4b52f518059fc24a33947525b668f5b8fb94c5
MD5 9bf7a050761bb14a5a8e54cb50c28876
BLAKE2b-256 8415e275d2659228cf13516921d81bbb76d466cb339845a82810ff79243e1aa3

See more details on using hashes here.

Provenance

The following attestation bundles were made for oscilla-0.1.4-py3-none-any.whl:

Publisher: pypi.yaml on tedivm/oscilla

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page