A Roblox game project with a structured architecture, robust state management, networking, and data persistence.
Altair is a Roblox game project that follows a modular architecture with controllers and modules. It uses a tag-based system for managing game objects and provides a structured framework for game development.
- Modular architecture with controllers and modules
- Tag-based system for game objects
- State management using Reflex
- Networking with Bridgenet2
- Data persistence with ProfileService
- Roblox Studio installed
- Git installed
-
Clone the repository:
git clone <repository-url> cd <project-directory>
-
Run the initialization script to install Aftman and other required tools:
# On Windows ./init.sh # On macOS/Linux bash init.sh
This script will:
- Install Aftman (a tool manager for Roblox development)
- Use Aftman to install project tools defined in aftman.toml
- Update dependencies using Wally
- Install Aftman (a tool manager for Roblox development)
-
Update Dependencies: After pulling changes, run the update script to ensure all dependencies are up to date:
./update.sh
-
Serve the Project: To sync your code with Roblox Studio, run:
./serve.sh
If you have multiple project files, specify which one to serve:
./serve.sh <project-name>
-
Open in Roblox Studio: With the Rojo server running, connect to it from Roblox Studio using the Rojo plugin.
The project structure is defined in default.project.json
as follows:
src/preload
→ ReplicatedFirstsrc/shared
→ ReplicatedStorage.sharedsrc/util
→ ReplicatedStorage.utilsrc/server
→ ServerScriptService.serverServerPackages
→ ServerScriptService.server_packagesrc/client
→ StarterPlayer.StarterPlayerScriptsPackages
→ ReplicatedStorage.package (Wally packages)
The actual structure of the project is:
src/
client/
- Client-side codeclientConfig/
- Client configurationmodules/
- Client modulesui/
- User interface componentsmain.client.luau
- Main client entry point
server/
- Server-side codecmdr/
- Command scriptsconfig/
- Server configurationmodules/
- Server modulesserverConfig/
- Server configurationmain.server.luau
- Main server entry point
shared/
- Code shared between client and serverconfig/
- Shared configurationmodel/
- Data modelsreflex/
- Reflex state managementtypes/
- Type definitions
util/
- Utility functions
Packages/
- Client and shared Wally packagesServerPackages/
- Server-only Wally packages
Detailed documentation is available in the docs/
directory:
- Client Modules — Documentation for client-side modules
- Data Handling — Documentation for data handling in the project
- Logger — Documentation for the logging system
- Preload — Documentation for preloading functionality
- Reflex Producers — Documentation for Reflex producers (state management)
- Server Modules — Documentation for server-side modules
- Signals and Bridges — Documentation for signals and bridges (networking)
- Reflex Logger Guide — Guide for using the Reflex logger
Comprehensive development guidelines are available in the .junie/guidelines.md
file. These guidelines cover:
- Code style and organization
- Type checking and linting
- Dependency management
- State management
- Networking
- Data persistence
- Troubleshooting
-
Do not create test files in the project directory
-
Use
luau-lsp.exe
to analyze files individually (do not analyze the entire workspace). Examples:.\luau-lsp.exe analyze src\client\main.client.luau .\luau-lsp.exe analyze src\server\main.server.luau
-
Run Selene for static analysis:
selene .
-
Important: After creating any new file, run
./update.sh
before analyzing withluau-lsp.exe
to ensure all dependencies and project structure are updated -
For functionality verification, use the existing type checking tools (
luau-lsp.exe
andselene
)
The project uses the following main dependencies:
- BezierTweens — For smooth animation curves
- Bridgenet2 — For networking
- CameraShaker — For camera effects
- Cmdr — A command console for Roblox
- Fastcast — For raycasting/projectile simulation
- Maid — For managing connections and cleanup
- ProfileService — For data persistence
- Promise — For asynchronous operations (typed-promise)
- Reflex — For state management
- Signal — For event handling
- SimpleSpline — For spline calculations
- Lapis (server-only) — For server-side functionality
- Aftman not found: Make sure to run
init.sh
and ensure that~/.aftman/bin
is in your PATH - Wally packages not found: Run
./update.sh
to install dependencies - Rojo connection issues: Make sure the Rojo server is running (
./serve.sh
) and that you have the Rojo plugin installed in Roblox Studio
See the LICENSE file for details.