Forest Logo
search
package_2

kore

By @mrkirdid

Roblox

Mirrored

Kore

A professional Roblox Luau game framework. Structured service/controller loader for all server and client scripts, with built-in typed dynamic networking, lifecycle management, multithreading support, and a comprehensive suite of QOL utilities.

Installation

Wally

[dependencies]
Kore = "mrkirdid/kore@0.1.6"

The package now exposes a standard Wally entrypoint at init.luau, so consumers can require it directly from their linked package alias:

local Packages = game:GetService("ReplicatedStorage"):WaitForChild("Packages")
local Kore = require(Packages.Kore)

Rojo

This repository still keeps default.project.json for local development, but it is not part of the published Wally package.

Quick Start

Server (KoreServer.server.luau)

local Packages = game:GetService("ReplicatedStorage"):WaitForChild("Packages")
local Kore = require(Packages.Kore)

Kore.Start():andThen(function()
  print("Server started!")
end)

Client (KoreClient.client.luau)

local Packages = game:GetService("ReplicatedStorage"):WaitForChild("Packages")
local Kore = require(Packages.Kore)

Kore.Start():andThen(function()
  print("Client started!")
end)

Defining a Service

-- src/server/services/MyService.luau
local Packages = game:GetService("ReplicatedStorage"):WaitForChild("Packages")
local Kore = require(Packages.Kore)

return {
  Name = "MyService",

  Client = {
    GetData = function(self, player, id)
      return { id = id, value = 42 }
    end,

    DataUpdated = Kore.NetEvent,
  },

  Init = function(self, ctx)
    ctx.Log.Info("Initializing!")
  end,

  Start = function(self, ctx)
    ctx.Log.Info("Started!")
  end,
}

Defining a Controller

-- src/client/controllers/MyController.luau
return {
  Name = "MyController",
  Dependencies = { "MyService" },

  Init = function(self, ctx)
  end,

  Start = function(self, ctx)
    local MyService = ctx.Kore.GetService("MyService")
    MyService.GetData(1):andThen(function(data)
      print(data)
    end)
  end,
}

Modules

ModuleDescription
Kore.PromisePromise/A+ (evaera/promise)
Kore.SignalLightweight signal with optional networking
Kore.LogStructured tagged logger
Kore.TimerDebounce, Throttle, Delay, Every
Kore.SymbolUnique opaque sentinel values
Kore.Util.TableTable manipulation utilities
Kore.Util.StringString manipulation utilities
Kore.Util.MathMath utilities
Kore.TweenBuilder pattern tween with Promise
Kore.CurveKeyframe curve sampler
Kore.DataProfileStore bridge
Kore.ThreadWeave parallel execution wrapper
Kore.MockTest isolation (TestEZ/Hoarcekat)
Kore.JanitorCleanup management
Kore.FusionRe-export of Fusion
Kore.NetNetworking internals

VS Code Extension

The companion extension provides:

  • Autocomplete for Kore.GetService() and Kore.GetController()
  • Automatic type generation (Types.luau)
  • Service/Controller snippets
  • Diagnostics (name mismatches, unknown deps, duplicates)
  • Hover documentation

See extension/README.md for details.

Kore.toml

The extension reads its project config from Kore.toml in the workspace root. If the file is missing, Kore-specific extension features stay disabled until you run Kore: Init Project (Create Kore.toml).

Kore.toml supports three sections:

[paths]
services = "src/server/services"
controllers = "src/client/controllers"
types = "src/shared/Kore/Types.luau"
shared = "src/shared"

[require]
kore = "game.ReplicatedStorage.Shared.Packages.kore"
# types = "game.ReplicatedStorage.Shared.Packages.kore.Types"

[options]
autoTemplate = true
diagnostics = true
snippets = true
generateTypes = true
prefix = "!"
debug = false

Omitted keys fall back to the extension defaults. The file name is case-sensitive on the extension side: use Kore.toml in the workspace root.

Note: Each key must be under the correct section header ([paths], [require], [options]). The extension will still pick up option keys placed under the wrong section, but it will log a warning telling you to move them.

[paths]

KeyDefaultDescription
servicessrc/server/servicesConventional services directory. Used for service discovery, watcher setup, and auto-templating when new service files are created there.
controllerssrc/client/controllersConventional controllers directory. Used for controller discovery, watcher setup, and auto-templating for new controller files.
typessrc/shared/Kore/Types.luauOutput file written by the extension when type generation is enabled.
sharedsrc/sharedShared-code root used for module indexing and require completions.

Notes:

  • Paths are relative to the workspace root.
  • The extension also performs a global .luau scan, so services and controllers outside the configured folders can still be detected by content. The configured services and controllers paths still matter for templates and the fast-path watchers.

[require]

KeyDefaultDescription
koregame.ReplicatedStorage.Shared.Packages.koreLuau require expression used when the extension inserts local Kore = require(...) into generated snippets and templates.
typesemptyOptional explicit require expression for the generated Types module. If omitted, the extension derives it from require.kore.

require.kore supports both styles:

[require]
kore = "game.ReplicatedStorage.Packages.Kore"
[require]
kore = "@Packages/Kore"

If require.types is omitted, the extension derives it like this:

  • game.ReplicatedStorage.Packages.Kore -> game.ReplicatedStorage.Packages.Kore.Types
  • @Packages/Kore -> "@Packages/Kore/Types"

Set require.types explicitly if your types module lives somewhere else.

[options]

KeyDefaultDescription
autoTemplatetrueAutomatically fills new empty .luau files created inside the configured services/controllers folders with Kore service or controller boilerplate.
diagnosticstrueEnables Kore-specific diagnostics such as name mismatches, duplicate definitions, and unknown dependencies.
snippetstrueEnables Kore snippets and prefix-based quick insert commands such as service/controller presets.
generateTypestrueRegenerates Types.luau when services or controllers change and writes the initial types file during activation.
prefix!Trigger prefix for quick completion commands such as !getservice, !getcontroller, !service, !controller, !preset, !kore, and !require.
debugfalseEnables verbose logging in the Kore output channel.

Example for this repo layout

For a standard Rojo-style project with shared Kore code in src/shared, this is a reasonable starting point:

[paths]
services = "src/server/services"
controllers = "src/client/controllers"
types = "src/shared/Kore/Types.luau"
shared = "src/shared"

[require]
kore = "game.ReplicatedStorage.Shared.Packages.kore"

[options]
autoTemplate = true
diagnostics = true
snippets = true
generateTypes = true
prefix = "!"
debug = false

License

MIT

Package Details

Install command (Click to copy)


Version

0.1.13

License

MIT

check_circle

Safe for commercial use

Automated license review — not legal advice.