- Open-source
- Persistent-world
- Massively-multiplayer online
- Sandbox
- Social simulation game
- One hour in-game lasts one minute real-time.
- For the sake of "divide-by-60" symmetry, one game-year consists of 360 game-days.
- Game world and game rules are reality-centric (i.e. no supernatural or sci-fi elements)
- The ability of the player to control their character(s) is dependent on the avatar's emotional state, like
The Simsbut perhaps to a greater extent - Players mostly (only?) control their characters indirectly, specifying a schedule and if-then conditions
- Low-poly 3D graphics
- Graphical realism and animation are a secondary concern
- Frontend: Three.js (browser-based 3D graphics)
- Backend: Rust server with Axum
- Authentication: X (Twitter) OAuth 2.0
- Real-time Communication: WebSockets
- Deployment: fly.io
- Domain: time-helm.com
- Start with a person in a house, with modern amenities that are puchased from "outside world" OR
- Start with a person in a cave?
- How long does it take to make basic things?
- How productive are ancient farming techniques?
- Once sufficiently realistic, can be used as platform for modelling and tracing human history in detail, and assessing different hypotheses
See https://github.com/julerex/omniscim/activities.md
- Hunger
- Thirst
- Disease
- Disability
- Age
- Exhaustion
- Sleepiness
- Agitation
- Anxiety
- Depression
- Mental Illness
- Sadness
- Loneliness
- Jealousy
- Anger
- Genetics
- Hygiene
- Cleaning
- Clothes
- Electronics
- Stationary
- Furniture
- Small appliances
- Kitchen appliances
- Kitchen utensils
- Cutlery
- Crockery
See (materials.md)[https://github.com/julerex/omniscim/materials.md]
-
Physics
-
Chemistry
-
Biology
- Human Biology
- Food Science
- Epidemiology
- Botany
-
Medicine
-
Geology
-
Meteorology
-
Hydrology
-
Metallurgy
-
Chemical Engineering
-
Civil Engineering
-
Mechanical Engineering
- Rust (latest stable)
- Node.js 18+ and npm
- PostgreSQL 14+ (local development)
- Twitter Developer Account (for OAuth credentials)
- fly.io account
Using Docker:
docker run --name timehelm-db -e POSTGRES_PASSWORD=password -e POSTGRES_DB=timehelm -p 5432:5432 -d postgres:15Or install PostgreSQL locally:
# Ubuntu/Debian
sudo apt-get install postgresql postgresql-contrib
# macOS
brew install postgresql
brew services start postgresql
# Create database
createdb timehelm- Go to Twitter Developer Portal
- Create a new app
- Enable OAuth 2.0
- Set callback URL to
http://localhost:8080/auth/twitter/callback - Copy your Client ID and Client Secret
Create a .env file in the project root:
# Server
PORT=8080
BASE_URL=http://localhost:8080
# Database (adjust for your setup)
DATABASE_URL=postgresql://postgres:password@localhost:5432/timehelm
# Twitter OAuth
TWITTER_CLIENT_ID=your_client_id
TWITTER_CLIENT_SECRET=your_client_secretNote: The database migrations will run automatically when the server starts.
Terminal 1 - Backend:
cd server
cargo runTerminal 2 - Frontend:
cd client
npm install
npm run devThe game will be available at http://localhost:5173 (Vite dev server proxies API calls to the backend).
curl -L https://fly.io/install.sh | shfly auth loginfly apps create timehelmfly postgres create --name timehelm-db
fly postgres attach --app timehelm timehelm-dbThis will automatically set the DATABASE_URL secret for your app.
fly secrets set TWITTER_CLIENT_ID=your_client_id
fly secrets set TWITTER_CLIENT_SECRET=your_client_secret
fly secrets set BASE_URL=https://time-helm.comNote: The DATABASE_URL is automatically set when you attach the PostgreSQL database.
fly certs create time-helm.comThis will output DNS records that need to be added to Cloudflare.
-
Add DNS records in Cloudflare:
-
Log into your Cloudflare dashboard
-
Select your domain
time-helm.com -
Go to DNS → Records
-
Add the records provided by fly.io:
- Type:
AorAAAA(depending on what fly.io provides) - Name:
@(ortime-helm.com) - IPv4/IPv6 address: The value from fly.io
- Proxy status: Turn OFF the proxy (gray cloud) - This is important! Fly.io needs direct DNS resolution for SSL certificate validation
- TTL: Auto
- Type:
-
If fly.io provides a CNAME record:
- Type:
CNAME - Name:
@or the subdomain - Target: The value from fly.io
- Proxy status: Turn OFF (gray cloud)
- TTL: Auto
- Type:
-
-
Important Cloudflare Settings:
- SSL/TLS mode: Set to "Full" or "Full (strict)" in SSL/TLS settings
- Always Use HTTPS: Enable this in SSL/TLS → Edge Certificates
- Proxy status: Keep DNS records in "DNS only" mode (gray cloud) until certificate is verified
-
Wait for certificate verification:
fly certs show time-helm.com
Wait until you see "Issued" status. This can take a few minutes.
-
After certificate is issued:
- You can optionally enable Cloudflare proxy (orange cloud) for DDoS protection, but be aware:
- Fly.io handles SSL termination, so Cloudflare proxy is optional
- If you enable proxy, ensure SSL/TLS mode is set to "Full" or "Full (strict)"
- Some WebSocket connections may work better with proxy disabled
- You can optionally enable Cloudflare proxy (orange cloud) for DDoS protection, but be aware:
First, build the frontend:
cd client
npm install
npm run buildThen deploy:
fly deployThe app will be available at https://time-helm.com
timehelm/
├── server/ # Rust backend
│ ├── src/
│ │ ├── main.rs # Server entry point
│ │ ├── auth.rs # Twitter OAuth handling
│ │ ├── game.rs # Game state management
│ │ └── websocket.rs # WebSocket handlers
│ └── Cargo.toml
├── client/ # Three.js frontend
│ ├── src/
│ │ ├── main.js # Entry point
│ │ ├── auth-client.js # Auth API client
│ │ └── game-client.js # Game client & Three.js scene
│ ├── index.html
│ └── package.json
├── Dockerfile # Container build config
├── fly.toml # fly.io configuration
└── vite.config.js # Vite dev server config
- https://mrminimal.gitlab.io/2018/07/26/godot-dedicated-server-tutorial.html
- https://docs.godotengine.org/en/stable/getting_started/workflow/export/exporting_for_dedicated_servers.html
- https://developer.valvesoftware.com/wiki/Dedicated_Servers_List
- https://www.gtxgaming.co.uk/
- https://gotm.io/
- https://github.com/riperiperi/FreeSO - A full reimplementation of The Sims Online, using Monogame.