# Roblox Project Template

This repository serves as a public template for my Roblox development setup. It includes configuration for **Rojo**, **Selene**, **Stylua**, and the **Luau Language Server**, along with a growing collection of reusable scripts and functions available to the community.

## 🚀 Getting Started with This Template

You have two options to start using this template for your own Roblox project:

### Option 1: Create a New Repository from This Template

Using the template option is great for a fresh start as it doesn't carry any of the commit history of the current project.

1. **Use the Template**
    - Click the green **"Use this template"** button at the top of the [GitHub repo](https://github.com/Distracted-Games/RobloxProjectTemplate).
    - Select **"Create a new repository"** and fill in your desired repo name and settings.
    - Click the green "**<> Code**" button and copy the repo's URL.
2. **Navigate To Your Desired Local Parent Directory**
    - When you perform the next step below, it will create a copy of the full project folder inside of the directory you run the command from.
    - Make sure you have the **parent** directory open before running the command.
    For example:
    ParentDirectory/
    └── your-repo-name/ -- The name you created when using the template
        └──  Contents of the RobloxProjectTemplate
3. **Clone Your New Repository**
    ```bash
    git clone https://github.com/your-username/your-repo-name.git
    cd your-repo-name
    code .
    💡 Tip: You can paste the copied repo URL when calling `git clone`
4. **Start Developing**
    - Follow the setup instructions below to configure your development environment.

### Option 2: Clone This Repository Directly

If you just want to explore or start from this exact version without making your own repo:
```bash
git clone https://github.com/Distracted-Games/RobloxProjectTemplate.git
cd RobloxProjectTemplate
code .
💡 Tip: If you go this route and want to make it your own, consider removing the Git history and pushing to a fresh repo.

### Option 3: Using VS Code UI Rather Than CLI

If you prefer to use the Source Control UI and VS Code commands, follow the steps below:

1. **Use the Template or Clone This Repository Directly**
    - Follow the first step for Option 1 above to use the template or simply copy the URL using the "**<> Code**" button.
2. **Clone the Reposity**
    - Either use the `...` menu at the top of the Source Control UI and select **Clone** or use the Command Palette (`Ctrl + Shift + P`) and type `git clone`.
    - Paste the copied repository URL and press `Enter`.

This should create a copy of the project's folder in the currently opened directory and move you into the project's folder. If you only see the repo's name as a folder in the explorer, then you will want to open it (`Ctrl + K`, `Ctrl + O` or `File > Open Folder...`). When in the correct folder, you should see all the directories and files as they are on GitHub without having to click into anything.

## 🔧 Development Tools & Setup

This template is pre-configured to support a clean and efficient Roblox development workflow:

- **Rojo**: Enables structured project syncing between your local filesystem and Roblox Studio.
- **Selene**: Provides static analysis for Luau code to catch common issues early.
- **Stylua**: Automatically formats Luau code for consistency and readability.
- **Luau Language Server**: Offers intelligent code completion, navigation, and diagnostics.

## 🗂 Project Structure & Features

- **Service Mapping**: The included `default.project.json` uses `"ignoreUnknownInstances": true` to prevent Rojo from removing existing Roblox instances not explicitly defined in your local project.
  - ⚠ *Best Practice*: Create a `/Source` or `/src` folder within each service to separate scripts from assets and maintain a clean structure.

- **Stylua Configuration**: The included `stylua.toml` file ensures that required modules are sorted alphabetically, mirroring the auto-import behavior for services.

- **`/OtherScripts` Folder**: A sandbox directory for experimental or test scripts that are not synced via Rojo.
  - This folder is listed in `.gitignore` but commented out by default, allowing you to opt in or out of version control.

## 🖥 VS Code Workspace Configuration

The template includes a `.vscode/settings.json` file to streamline your development experience in Visual Studio Code:

- Semantic highlighting for improved readability
- Format-on-save with Stylua for both `.lua` and `.luau` files
  > 💡 *Note*: Roblox scripts should use the `.luau` extension to reflect the correct language and tooling support. Many developers still use `.lua` out of habit, but `.luau` is preferred for Roblox projects.
- Custom icon theming for common Roblox services using Material Icon Theme
- Side-by-side diff view for easier code comparison
- Luau Language Server enhancements for auto-imports and completion behavior
- Rulers at 80 and 100 columns to align with Roblox Lua Style Guide

> These settings are designed to work out-of-the-box with the recommended extensions listed below.

### 💡 Recommended Extensions

You can optionally include a `.vscode/extensions.json` file to prompt installation of these tools:

- `evaera.vscode-rojo` — Rojo integration
- `JohnnyMorganz.stylua` — Luau code formatter
- `JohnnyMorganz.luau-lsp` — Luau Language Server support
- `Kampfkarren.selene-vscode` — Selene static analysis
- `PKief.material-icon-theme` — Custom folder icons

## 📦 [Optional Libraries](/OptionalLibraries/)

This template also includes a selection of reusable scripts and utility functions ("libraries") designed to help other developers:

- Modular components for common gameplay systems
- Utility functions for debugging, data handling, and more
- Examples and test cases to illustrate usage

Feel free to explore, adapt, and contribute. These resources are intended to support both beginners and experienced developers working with Roblox Luau and will continue to grow over time, so check back now and then.

If you find this template useful or have suggestions for improvement, feel free to open an issue or submit a pull request!


# jello

immediate mode visualization library
inspired by iris and imgui

guide: [guide.md](guide.md)

## quickstart
```luau
local jello = require("jello").init()
local demo = require("jello/demo")

jello.connect(demo)
```luau
local jello = require("jello").init()

jello.connect(function()
    jello.window { title = "hello jello!" } .with(function(window)
        jello.text { text = "welcome" }
    end)
end)

## showcase
https://github.com/user-attachments/assets/12bafe0d-70c2-4c17-939c-0aef1076e6df


# JECS RPG Template – Scalable Mob AI & Networking Demo

This repository is a **Roblox RPG template** built on top of **JECS** (an ECS architecture for Luau).
The core goal is to show how far I can push:

- **Server-authoritative gameplay**
- **Cheap, scalable mob AI**
- **Minimal replication bandwidth**
- **Smooth visual interpolation on the client**

The current demo runs **~150 server-driven mobs** with behavior logic and pathing, using **~80 KB/s of network intake** on the client, while all visual motion is **client-side interpolated**.
# Demo Place
https://www.roblox.com/games/104444037041931/RPGJECS-DEMO
## Demo Video

[![Watch the video](https://img.youtube.com/vi/eprIcdV42WM/0.jpg)](https://youtu.be/eprIcdV42WM)

## Features
- ~**150 active server-driven mobs** (wander / chase / circle / flee)
- **Dynamic behaviors per mob** based on weighted traits (personality-like stats)
- **Server-authoritative AI and movement**
- **Raycast-based movement:** ground snapping, edge detection, wall checks
- **Hitbox-driven replication:** invisible server hitboxes, visual models rendered on client
- **Client-side interpolation** running at 60 FPS
- Tunable gameplay parameters via ECS components

## Architecture
- **JECS ECS model** with components such as `Transform`, `Traits`, `Locomotion`, `AIState`, `Hitbox`
- **Clear system separation**:
  - AI System → selects behavior state
  - Movement System → handles kinematic motion + raycasts
  - Sync System → spawns client models
  - Interpolation System → smooths movement visually
- **Native engine networking**
  - Server replicates only hitbox CFrames
  - No per-frame RemoteEvent spam
- **Tick rates**
  - AI: **8 Hz**
  - Movement: **20 Hz**
  - Rendering: **60 Hz**

## Benefits
- Clean, scalable ECS architecture
- Efficient use of Roblox physics and replication
- Smooth client visuals with minimal bandwidth
- Extensible foundation (e.g., plug in pathfinding)
- Strong demonstration of engineering and performance awareness (I thought)


#   Emergency Vehicle Creator

  [&labelColor=302d41&style=for-the-badge)](https://discord.gg/Eb384Xw)
  [&labelColor=302d41&style=for-the-badge)](https://github.com/Redon-Tech/Emergency-Vehicle-Creator/releases)

![Beautiful screenshot of rotator creator](/docs/assets/img/EVC-Dropshadow.png)

# Unleash your creativity

Emergency Vehicle Creator is a plugin that allows you to easily create emergency vehicles in Roblox Studio.

Version 3 is designed to be more user-friendly and efficient than ever before.

No coding required, just your creativity. Start creating your vehicles today.

## Interested?

Installing is easy, just get it from the [Roblox marketplace](https://create.roblox.com/store/asset/9953321418/) or download and manually install from the [latest release](https://github.com/Redon-Tech/Emergency-Vehicle-Creator/releases/latest).

## Contributing & Issues

Coming Soon

- Download Buttons Everywhere
- Horn to switch sirens
- setting to turn off sirens when you exit vehicle
- Manual pitch sirens


# **Unleash your creativity**#

Emergency Vehicle Creator is a tool designed to help you create the vehicles you have always dreamed of. Get rid of the complex web of laggy and hard-to-read scripts, and start creating your vehicles with ease.

Emergency Vehicle Creator provides a simple and robust interface to create your vehicles, with a wide range of customization options. Easily create those flashing lights you dreamed of, or fading lights, or even rotating lights.

No coding required, just your creativity. Start creating your vehicles today.

[Download Now](https://create.roblox.com/marketplace/asset/9953321418) [Guide to get started](https://evc.redon.tech/get-started/vehicle-setup/vehicle-creator/getting-started/)

Warning

This documentation is still a work in progress. If you have any questions, feel free to [contact us](https://redon.tech/discord).

# Advantages of Emergency Vehicle Creator#

##  **Easy to Use**#

Emergency Vehicle Creator is designed to be clean and easy to use. No need to write complex scripts. Just use the simple interface to create your vehicles.

We provide a simple user-friendly interface that is focused on simplifying the creation and customization of your lighting patterns. This completely removes the need for manually writing scripts, and allows you to focus on creating your vehicles.

We also provide the ability to create, save, and load different lighting patterns inside the plugin. This feature significantly reduces the time required to create your vehicles, and allows you to easily switch between different lighting patterns.

##  **Enhanced Functionality**#

Emergency Vehicle Creator provides support for A-Chassis and AG-Chassis out of the box. This allows you to easily create custom lighting patterns on all your vehicles without having to work around the limitations of the chassis.

The plugin also provides advanced features like light synchronization which can be painful to implement manually. These features enhance the realism of your emergency vehicles and make them stand out in game.

##  **Less Errors, More Consistent, Full Support**#

Emergency Vehicle Creator is designed to be error-free. We have spent countless hours testing the plugin to ensure that it is bug-free. However, we understand that errors can still occur.

To help solve any problems we provide full support for the plugin. If you encounter any issues, feel free to [contact us](https://redon.tech/discord) and we will help you resolve them.

Ontop of this, Emergency Vehicle Creator allows for consistency in your vehicles. No longer will you have to juggle around different lighting frameworks, Emergency Vehicle Creator provides a single framework for all your vehicles. This helps reduce errors and inconsistencies in your vehicles.

## Interested in Emergency Vehicle Creator?#

If you are interested in Emergency Vehicle Creator, you can download it from the Roblox Marketplace.

Welcome to the Emergency Vehicle Creator community!

[Download Now](https://create.roblox.com/marketplace/asset/9953321418) [Get Started](https://evc.redon.tech/get-started/vehicle-setup/vehicle-creator/getting-started/)

Back to top


# Arch - Hierarchical State Machine Library for Roblox

## Overview

Arch is an open-source hierarchical state machine (HSM) library designed specifically for Roblox developers. Leveraging the principles of hierarchical state machines, Arch provides a structured and efficient framework for managing states within Roblox projects. With a focus on precise control, adaptability, and seamless transitions, Arch empowers developers to model and manage complex game logic efficiently.

## Features

- **Hierarchical State Management:** Arch enables the creation of a structured system where states can be organized hierarchically, offering a clear and intuitive way to represent complex game behaviors.

- **Seamless Transitions:** States seamlessly transition between each other, providing precise control over the flow of game logic. This feature is particularly valuable in scenarios such as combat systems, dynamic interfaces, and diverse game scenarios.

- **Versatile Toolkit:** Arch equips developers with a versatile toolkit for creating responsive and engaging gameplay experiences. Whether you're crafting combat systems, dynamic interfaces, or intricate game scenarios, Arch provides the flexibility needed to meet diverse requirements.

- **Conflict Resolution:** Arch includes robust conflict resolution mechanisms, ensuring smooth handling of complex scenarios within your game. This feature enhances the reliability and stability of your project.

## Documentation

Visit the [Arch Documentation](https://bohraz.github.io/Arch) for comprehensive guidance and to gain in-depth insights into Arch's functionalities, API reference, and best practices.

## Contributions

Contributions to Arch are welcome! Feel free to submit issues, feature requests, or pull requests to help improve and enhance the library.

## License

Arch is licensed under the [MIT License](LICENSE.md). See the [LICENSE.md](LICENSE.md) file for details.

## Acknowledgments

Arch is inspired by the principles of hierarchical state machines and draws influence from the [State Chart XML (SCXML) standard](https://www.w3.org/TR/scxml/). Special thanks to the Roblox developer community for continuous support and feedback.


### Hierarchical States

Multiple state types foster precise logic control and adaptability to diverse application scenarios.

### Efficient Transitions

Streamlined navigation includes user-defined callbacks, seamless conflict resolution, and optimized transitioning mechanisms.

### Logging & Debugging

Built-in logging and debugging assist with server reconciliation and tracking state changes.


# Attrify

No-code behavior system for Roblox using CollectionService tags and attributes.

Add tags to parts and configure behavior through attributes - no scripting required for common game mechanics.

## Features

- **50 pre-built watchers** for common game mechanics
- **Zero scripting** - configure everything via attributes
- **Modular** - only use what you need
- **Type-safe** - full Luau strict mode support
- **Signals** - react to events in your own code

## Quick Example

1. Add the `attr_jump_pad` tag to any BasePart
2. Set `attr_jump_distance` attribute to `30`
3. Players touching the part will be launched!

That's it! No code needed for basic functionality.

But if you want to listen for events:
```lua
local Attrify = require(ReplicatedStorage.Packages.Attrify)

Attrify.Signals.CoinCollected:Connect(function(player, value, part)
    print(player.Name, "collected", value, "coins!")
end)

## Quick Start

```lua
-- Server script
local Attrify = require(ReplicatedStorage.Packages.Attrify)
Attrify.start()

-- Client script
local Attrify = require(ReplicatedStorage.Packages.Attrify)
Attrify.start()

## Watcher Categories

| Category | Count | Watchers |
|----------|-------|----------|
| **Animation** | 8 | `attr_bobber`, `attr_elevator`, `attr_moving_platform`, `attr_orbiter`, `attr_shaker`, `attr_spinner`, `attr_swing_part`, `attr_thwomp` |
| **Collect** | 2 | `attr_coin`, `attr_collectible` |
| **Combat** | 4 | `attr_damage_zone`, `attr_heal_part`, `attr_heal_zone`, `attr_kill_part` |
| **Constraint** | 2 | `attr_hinge_part`, `attr_rope_part` |
| **Destruction** | 2 | `attr_breakable`, `attr_respawner` |
| **Door** | 3 | `attr_auto_door`, `attr_sliding_panel`, `attr_swing_gate` |
| **Interaction** | 3 | `attr_button`, `attr_clickable`, `attr_prompt_part` |
| **Movement** | 8 | `attr_conveyor`, `attr_gravity_zone`, `attr_jump_pad`, `attr_push_zone`, `attr_slow_zone`, `attr_speed_boost`, `attr_speed_zone`, `attr_teleporter` |
| **Obby** | 6 | `checkpoint`, `spawn_point`, `attr_crumbling_part`, `attr_cycling_kill_part`, `attr_cycling_platform`, `attr_fading_part` |
| **Sound** | 3 | `attr_ambient_sound`, `attr_proximity_sound`, `attr_touch_sound` |
| **Visual** | 9 | `attr_beamer`, `attr_billboard`, `attr_color_cycler`, `attr_fader`, `attr_flickerer`, `attr_glowing`, `attr_pulser`, `attr_spotlighter`, `attr_trail` |

## Examples

Source code, `.rbxl`, and `.rbxm` examples are available in [Releases](https://github.com/dig1t/attrify/releases).

## Documentation

See the [full documentation](https://firebit-dev.github.io/docs/attrify/docs/intro) for:
- Complete watcher reference
- Installation guide
- API documentation


# luau_term

Terminal emulator for (Roblox) luau, mainly based on xterm.

https://github.com/user-attachments/assets/5f3b16a7-2c67-4aee-8dba-ea699ec69885

## Overview

This is a terminal emulator, it cannot run programs by itself, neither does it have
any user input processing capabilities. It only renders an image based on the buffer
that is given to it.

The `src` folder contains the code for the terminal emulator itself. It does not
have any Roblox-specific API (with the exception of `src/canvas/textlabel.luau`),
and can be ran in any Luau environment (including Lune, which is used in `tests`).

The `example` folder contains the code to run luau_term in Roblox. It has input
handling, which it uses to communicate with `example_proxy` through HttpService,
and sends the received data to the terminal emulator.

The `example_proxy` is a simple nodejs server running express and using `node-pty`
to create pseudoterminals and handle input/output through http requests.

**Note:** The `example_proxy` does not have any built-in security. The example creates
a shell on your actual computer using your user account, and any commands that you run
in the example will be executed on your machine.

## Usage

### Bitmap mode (`src/canvas/bitmap.luau`)

This mode renders the image to RGBA buffer, which is compatible with EditableImage:

```lua
local Terminal = require(path_to_luau_term)

local width, height = 80, 30
local term = Terminal.createTerminal("Bitmap", width, height)

-- Can be anything that accepts RGBA buffer
local image: EditableImage = ...

function render()
    -- Image buffer used by the terminal. Do not mutate.
    local canvas = Terminal.getActiveBuffer(term)
    image:WritePixelsBuffer(Vector2.new(0, 0), Vector2.new(width * 8, height * 16), canvas)
end

-- Renders colored "Hello, World!" to the terminal using SGR ANSI escape sequences
Terminal.stdout(term, buffer.fromstring("\27[31mHello\27[0m, \27[32mWorld\27[0m!"))

-- Need to update the image each time the terminal receives data
render()

### TextLabel mode (`src/canvas/textlabel.luau`)

This mode creates every character on the screen as a separate TextLabel. This is less
performant than Bitmap mode, due to how TextLabels are handled both in Roblox and in luau_term.
You should only use this mode if Bitmap mode is unavailable:

```lua
local Terminal = require(path_to_luau_term)

local width, height = 80, 30
local term = Terminal.createTerminal("TextLabel", width, height)

-- The container for the terminal
local container: GuiObject = ...

local normalScreenFrame, alternateScreenFrame = Terminal.getTextLabelContainers(term)
normalScreenFrame.Parent = container
alternateScreenFrame.Parent = container

-- Does not actually render, just shows the appropriate screen
function render()
    if term.currentScreen == term.screens.normal then
        normalScreenFrame.Visible = true
        alternateScreenFrame.Visible = false
    else
        normalScreenFrame.Visible = false
        alternateScreenFrame.Visible = true
    end
end

-- Renders colored "Hello, World!" to the terminal using SGR ANSI escape sequences
Terminal.stdout(term, buffer.fromstring("\27[31mHello\27[0m, \27[32mWorld\27[0m!"))

render()

## Bundling / Building

If you don't have darklua and rojo installed, install them using aftman:
```sh
aftman install

If you don't want to install aftman, install the dependencies yourself using cargo:
```sh
cargo install darklua
cargo install rojo

Finally, create a `build` folder (because rojo can't make one itself):
```sh
mkdir build

### Building a `.rbxm` file

After you installed the necessary dependencies, run this npm script
which will bundle the code into `./build/luau_term.rbxm` file:
```sh
npm run build-model

## Serving files

Make sure you install dependencies for the `example_proxy` folder:
```sh
cd example_proxy
npm install

For developing luau_term, or just as a faster way to insert the code in Roblox Studio,
you can serve the files using the following npm script:
```sh
npm run serve
This will simultaneously run darklua, rojo, and the `example_proxy` server.


# InventoryMaker
InventoryMaker is an open-source Roblox framework to help developers create their own inventory system. This framework focuses on making your inventory system interactive and does not impose any certain UI design. So, you can customize the look of your inventory to your likeing.

There are two components to InventoryMaker:
- InventoryMakerClient (IMC) - frontend
- InventoryMakerServer (IMS) - backend

>**PC and Mobile**
## Features
- **Containers** – Use containers to divide an inventory into distinct parts, each with its own UI rendering.
- **Dragging** – Click and drag items between slots or containers.
- **Swapping** – Switch items between two slots by dragging
- **Stacking and Splitting** – Stack items by dragging; split items by left-clicking while holding down left-control
- **Hotbar and Keybinds** – Quick-access slots for frequently used items
- **Context Menus** – Right-click on an item to open a menu with specific options
- **Hover Prompts** – Display item details when hovering over an item.
- **Custom Filters** – Define your own functions to filter items based on its properties
- **Search Bar Filter** – Instantly filter items using TextBox input
- **Sorting** - Sort items in your inventory based on custom sorters

## Links
- [**Documentation**](https://inventorymaker.vercel.app/)
- [**DevForum Post**](https://devforum.roblox.com/t/inventorymaker-a-module-to-help-you-create-your-own-inventory-system/3619173/29)


# chroma-luau

A library to work with all kinds of color conversions and color scales.

This library is a translation of [chroma.js](https://github.com/gka/chroma.js).

## [Documentation](./docs/index.md)

- [color constructors](./docs/constructors.md)
- [manipulate the color object and convert into different color spaces](./docs/color.md)
- [generate colors and scales](./docs/generators.md)
- [utils](./docs/utils.md)

## Installation

Add `chroma-luau` in your dependencies:

```bash
yarn add chroma-luau

Or if you are using `npm`:

```bash
npm install chroma-luau

## Releases

Versions of chroma-luau are also pre-built and linked to [GitHub releases](https://github.com/seaofvoices/chroma-luau/releases):

- `chroma.rbxm` is a Roblox model file
- `chroma.lua` is a single-file version of the library (with Luau type annotations removed)

## Other Lua Environments Support

If you would like to use this library on a Lua environment, where it is currently incompatible, open an issue (or comment on an existing one) to request the appropriate modifications.

The library uses [darklua](https://github.com/seaofvoices/darklua) to process its code.

## License

This project is available under the MIT license. See [LICENSE.txt](LICENSE.txt) for details.


## 💡 What is HyperLogLog?

HyperLogLog (HLL) is a probabilistic algorithm that allows you to estimate the number of unique items in a set (its "cardinality") using a very small, fixed amount of memory.

For example, you can use it to answer questions like:

- "How many **unique players** joined my game today?"
- "How many **unique votes** were cast in this poll?"
- "How many **unique items** were favorited this week?"

...all while using just a few kilobytes of memory, even if the number of items is in the millions or billions.

## 🤔 Why use HyperLogLog?

Counting unique items seems simple, but it can be very difficult at scale.

Imagine you want to count the unique players who join your game in a day. The "simple" way is to store every unique `UserId` in a table and check `#table` at the end. If you have 10,000 unique players, your table is small. If you have **10 million** unique players, that table becomes enormous, consuming vast amounts of memory.

> This is commonly known as the [count-distinct problem](https://en.wikipedia.org/wiki/Count-distinct_problem) in computer science.

HyperLogLog solves this problem by trading perfect accuracy for massive efficiency.

- **🚀 Extremely Fast:** Adding an item is just a quick hashing operation and a memory check. It's a constant-time operation $O(1)$ that doesn't slow down as the count grows.
- **💾 Incredibly Memory-Efficient:** This is the key benefit. A HyperLogLog counter uses a **small, fixed amount of memory** (just a few kilobytes) whether you add 1,000 items or 1,000,000,000 items.
- **🤝 Mergeable:** You can take two separate HLL counters (e.g., from different game servers) and merge them together. The resulting counter will give you the estimated unique count _across both sets_. This is extremely powerful for distributed data.
- **📈 Tunable Accuracy:** It's an estimate, but it's a very good one. You can control the accuracy vs. memory trade-off using the `precision` parameter. A higher precision gives you a more accurate estimate at the cost of more memory.

It's the perfect tool for when you need a "good enough" count of unique items at a massive scale, without sacrificing performance or memory.

## 🛠 Installation

1.  Download [`init.luau`](src/init.luau) from the `src/` directory.
2.  Place the file into your project (e.g., `ServerStorage/Modules/HyperLogLog`).
3.  Require the module in your script:

```luau
local HyperLogLog = require(game.ServerStorage.Modules.HyperLogLog)

## 🚀 Quick Start

Here's a simple example of counting 1,000 unique items.

```luau
local HyperLogLog = require(game.ServerStorage.Modules.HyperLogLog)

-- Create a new HLL counter with precision 14 (default)
-- Higher precision = more accuracy, but more memory.
local counter = HyperLogLog.new(14)

-- Add 1,000 unique items to the counter
for i = 1, 1000 do
    counter:add(i)
end

-- Estimate the cardinality
local uniqueCount = counter:estimate()

-- The estimate will be very close to 1000
print("Estimated unique items: " .. uniqueCount)

## 📚 API Reference

### `HyperLogLog.new(precision)`

Creates a new, empty HyperLogLog counter.

- **`precision`** (number?): An integer between 4 and 18. This defines the accuracy and memory usage. It defaults to `14`.
  - Memory usage is $2^p$ (e.g., `p=14` uses $2^{14} = 16384$ 1 byte registers).
  - Standard error is $\approx 1.04 / \sqrt{2^p}$.
- **Returns**: (HyperLogLog): A new counter object.

### `HLL:add(item)`

Adds an item to the counter.

- **`item`** (buffer | number): The unique item identifier to add.

### `HLL:estimate()`

Calculates and returns the current estimated cardinality.

- **Returns**: (number): The estimated number of unique items added so far, rounded to the nearest integer.

### `HLL:merge(other)`

Merges another HLL counter into this one. This is useful for combining distributed or parallel counts.

> [!WARNING]
> Both counters **must** have been created with the same precision (`p`).

- **`other`** (HyperLogLog): The other counter to merge into this one. This operation modifies the current counter.

```luau
-- Count unique players on Server 1
local server1_uniques = HyperLogLog.new(14)
server1_uniques:add(1)
server1_uniques:add(2)

-- Count unique players on Server 2
local server2_uniques = HyperLogLog.new(14)
server2_uniques:add(2)
server2_uniques:add(3)

-- Merge Server 2's count into Server 1's
server1_uniques:merge(server2_uniques)

-- The estimate will now be ~3 (1, 2, 3)
print(server1_uniques:estimate())

### `HLL:serialize()`

Returns a serialized buffer containing the counter's state. This is useful for saving the counter in a `DataStore`.

- **Returns**: (buffer): A buffer with the `p` (precision) and `registers` (internal state).

```luau
local state = counter:serialize()
-- Now you can save 'state' to a DataStore

### `HyperLogLog.deserialize(data)`

Reloads a counter from a serialized buffer.

- **`data`** (buffer): A state buffer previously generated by `HLL:serialize()`.
- **Returns**: (HyperLogLog): A new counter object with the restored state.

```luau
-- 'savedState' is loaded from a DataStore
local counter = HyperLogLog.deserialize(savedState)

-- You can now continue adding items or estimating
counter:add(newUserId)
print(counter:estimate())

## Credits

Thanks to [@XoifailTheGod](https://www.roblox.com/users/558808710) for helping optimize and test the library.

## References

- https://research.google.com/pubs/archive/40671.pdf
- https://docs.google.com/document/d/1gyjfMHy43U9OWBXxfaeG-3MjGzejW1dlpyMwEYAAWEI/mobilebasic


From Wikipedia, the free encyclopedia

(Redirected from [Unique visitor](https://en.wikipedia.org/w/index.php?title=Unique_visitor&redirect=no "Unique visitor"))

| **This article has multiple issues.** Please help **[improve it](https://en.wikipedia.org/wiki/Special:EditPage/Unique_user "Special:EditPage/Unique user")** or discuss these issues on the **[talk page](https://en.wikipedia.org/wiki/Talk:Unique_user "Talk:Unique user")**. _([Learn how and when to remove these messages](https://en.wikipedia.org/wiki/Help:Maintenance_template_removal "Help:Maintenance template removal"))_ | | The topic of this article **may not meet Wikipedia's [general notability guideline](https://en.wikipedia.org/wiki/Wikipedia:Notability "Wikipedia:Notability")**. Please help to demonstrate the notability of the topic by citing [reliable secondary sources](https://en.wikipedia.org/wiki/Wikipedia:Reliable_sources "Wikipedia:Reliable sources") that are [independent](https://en.wikipedia.org/wiki/Wikipedia:Independent_sources "Wikipedia:Independent sources") of the topic and provide significant coverage of it beyond a mere trivial mention. If notability cannot be shown, the article is likely to be [merged](https://en.wikipedia.org/wiki/Wikipedia:Merging "Wikipedia:Merging"), [redirected](https://en.wikipedia.org/wiki/Wikipedia:Redirect "Wikipedia:Redirect"), or [deleted](https://en.wikipedia.org/wiki/Wikipedia:Deletion_policy "Wikipedia:Deletion policy").
_Find sources:_ ["Unique user"](https://www.google.com/search?as_eq=wikipedia&q=%22Unique+user%22) – [news](https://www.google.com/search?tbm=nws&q=%22Unique+user%22+-wikipedia&tbs=ar:1) **·** [newspapers](https://www.google.com/search?&q=%22Unique+user%22&tbs=bkt:s&tbm=bks) **·** [books](https://www.google.com/search?tbs=bks:1&q=%22Unique+user%22+-wikipedia) **·** [scholar](https://scholar.google.com/scholar?q=%22Unique+user%22) **·** [JSTOR](https://www.jstor.org/action/doBasicSearch?Query=%22Unique+user%22&acc=on&wc=on) _( December 2022)__([Learn how and when to remove this message](https://en.wikipedia.org/wiki/Help:Maintenance_template_removal "Help:Maintenance template removal"))_
| This article's **tone or style may not reflect the [encyclopedic tone](https://en.wikipedia.org/wiki/Wikipedia:Writing_better_articles#Tone "Wikipedia:Writing better articles") used on Wikipedia**. See Wikipedia's [guide to writing better articles](https://en.wikipedia.org/wiki/Wikipedia:Writing_better_articles#Tone "Wikipedia:Writing better articles") for suggestions. _( March 2015)__([Learn how and when to remove this message](https://en.wikipedia.org/wiki/Help:Maintenance_template_removal "Help:Maintenance template removal"))_

_([Learn how and when to remove this message](https://en.wikipedia.org/wiki/Help:Maintenance_template_removal "Help:Maintenance template removal"))_

A **unique user** is a term in [web analytics](https://en.wikipedia.org/wiki/Web_analytics "Web analytics") that refers to data of a [Pageview](https://en.wikipedia.org/wiki/Pageview "Pageview") of a unique IP, whose presence is only counted once, regardless of the number of pages they visit. This definition does not count repeat or returning users for a standard period of time ([Active users](https://en.wikipedia.org/wiki/Active_users "Active users")), who are traced by placing a [cookie](https://en.wikipedia.org/wiki/HTTP_cookie "HTTP cookie") on the user's device.[1] A website's number of unique users is measured over a standard period of time. The metric is often quoted to potential advertisers or investors.[2]

## Tracking unique users

[[edit](https://en.wikipedia.org/w/index.php?title=Unique_user&action=edit&section=1 "Edit section: Tracking unique users")]

The purpose of [tracking unique users](https://en.wikipedia.org/wiki/Web_tracking "Web tracking") is to help marketers understand a website's user behavior. This metric can be used to demonstrate the reach of digital content, set benchmarks for website performance, and perform competitive analysis.[3] It can also be used to demonstrate website popularity and performance to potential advertisers and investors.[4] Marketers and webmasters can track unique users in digital analytics tools, for example, [Google Analytics](https://en.wikipedia.org/wiki/Google_Analytics "Google Analytics").[5]

Measuring unique user data can be distorted by automatic activity, for example, [bots](https://en.wikipedia.org/wiki/Web_crawler "Web crawler") or other instances of the website being opened where there is no human present or interacting with the website. Estimations of unique user traffic statistics are usually filtered to remove this type of activity by eliminating known [IP addresses](https://en.wikipedia.org/wiki/IP_addresses "IP addresses") for bots, by requiring registration or [cookies](https://en.wikipedia.org/wiki/HTTP_cookie "HTTP cookie"), or by using panel data.[2]

## See also

[[edit](https://en.wikipedia.org/w/index.php?title=Unique_user&action=edit&section=2 "Edit section: See also")]

  * [Active users](https://en.wikipedia.org/wiki/Active_users "Active users")
  * [Pageview](https://en.wikipedia.org/wiki/Pageview "Pageview")
  * [Registered user](https://en.wikipedia.org/wiki/Registered_user "Registered user")
  * [Web traffic](https://en.wikipedia.org/wiki/Web_traffic "Web traffic")
  * [Web analytics](https://en.wikipedia.org/wiki/Web_analytics "Web analytics")

## Further reading

[[edit](https://en.wikipedia.org/w/index.php?title=Unique_user&action=edit&section=3 "Edit section: Further reading")]

  * ["Meaning of unique user in English"](https://dictionary.cambridge.org/dictionary/english/unique-user). _Cambridge Dictionary_.

## Notes

[[edit](https://en.wikipedia.org/w/index.php?title=Unique_user&action=edit&section=4 "Edit section: Notes")]

  1. **^** ["What is a Unique User? | Adtech Glossary"](https://smartclip.tv/adtech-glossary/unique-user/). _smartclip_. Retrieved 2023-10-30.
  2. ^ _**a**_ _**b**_ Farris, Paul W.; Neil T. Bendle; Phillip E. Pfeifer; David J. Reibstein (2010). _Marketing Metrics: The Definitive Guide to Measuring Marketing Performance._ Upper Saddle River, New Jersey: Pearson Education, Inc. [ISBN](https://en.wikipedia.org/wiki/ISBN_\(identifier\) "ISBN \(identifier\)") [0-13-705829-2](https://en.wikipedia.org/wiki/Special:BookSources/0-13-705829-2 "Special:BookSources/0-13-705829-2"). The [Marketing Accountability Standards Board (MASB)](https://en.wikipedia.org/wiki/Marketing_Accountability_Standards_Board_\(MASB\) "Marketing Accountability Standards Board \(MASB\)") endorses the definitions, purposes, and constructs of classes of measures that appear in _Marketing Metrics_ as part of its ongoing [Common Language: Marketing Activities and Metrics Project](http://www.themasb.org/common-language/).
  3. **^** March, Liz (January 14, 2021). ["Unique Visitors: Understanding and Targeting Your Competitors' Audience"](https://www.similarweb.com/blog/research/market-research/unique-visitors/). _SimilarWeb_. Retrieved February 28, 2024.
  4. **^** ["Google Analytics Unique Users — Difference Between Google Ads Clicks and Google Analytics Users"](https://ppcexpo.com/blog/google-analytics-unique-users). _ppcexpo.com_. 2023-12-20. Retrieved 2024-02-28.
  5. **^** ["[UA→GA4] Comparing metrics: Google Analytics 4 vs. Universal Analytics - Analytics Help"](https://support.google.com/analytics/answer/11986666?hl=en#zippy=,in-this-article). _support.google.com_. Retrieved 2024-02-28.

Retrieved from "[https://en.wikipedia.org/w/index.php?title=Unique_user&oldid=1322831216#Unique_visitor](https://en.wikipedia.org/w/index.php?title=Unique_user&oldid=1322831216#Unique_visitor)"

[Categories](https://en.wikipedia.org/wiki/Help:Category "Help:Category"):

  * [Advertising indicators](https://en.wikipedia.org/wiki/Category:Advertising_indicators "Category:Advertising indicators")
  * [Web analytics](https://en.wikipedia.org/wiki/Category:Web_analytics "Category:Web analytics")
  * [Network addressing](https://en.wikipedia.org/wiki/Category:Network_addressing "Category:Network addressing")

Hidden categories:

  * [Articles with topics of unclear notability from December 2022](https://en.wikipedia.org/wiki/Category:Articles_with_topics_of_unclear_notability_from_December_2022 "Category:Articles with topics of unclear notability from December 2022")
  * [All articles with topics of unclear notability](https://en.wikipedia.org/wiki/Category:All_articles_with_topics_of_unclear_notability "Category:All articles with topics of unclear notability")
  * [Wikipedia articles with style issues from March 2015](https://en.wikipedia.org/wiki/Category:Wikipedia_articles_with_style_issues_from_March_2015 "Category:Wikipedia articles with style issues from March 2015")
  * [All articles with style issues](https://en.wikipedia.org/wiki/Category:All_articles_with_style_issues "Category:All articles with style issues")
  * [Articles with multiple maintenance issues](https://en.wikipedia.org/wiki/Category:Articles_with_multiple_maintenance_issues "Category:Articles with multiple maintenance issues")


From Wikipedia, the free encyclopedia

[](https://en.wikipedia.org/wiki/File:Symbol_question.svg "Unassessed article")| This article has not yet been rated on Wikipedia's [content assessment](https://en.wikipedia.org/wiki/Wikipedia:Content_assessment "Wikipedia:Content assessment") scale.
It is of interest to the following [WikiProjects](https://en.wikipedia.org/wiki/Wikipedia:WikiProject "Wikipedia:WikiProject"):
| [](https://en.wikipedia.org/wiki/File:Wikimedia_Compsci_Working_Group_Icon.svg)| [Computer science](https://en.wikipedia.org/wiki/Wikipedia:WikiProject_Computer_science "Wikipedia:WikiProject Computer science")
| [](https://en.wikipedia.org/wiki/File:Wikimedia_Compsci_Working_Group_Icon.svg)| This article is within the scope of **[WikiProject Computer science](https://en.wikipedia.org/wiki/Wikipedia:WikiProject_Computer_science "Wikipedia:WikiProject Computer science")**, a collaborative effort to improve the coverage of [Computer science](https://en.wikipedia.org/wiki/Computer_science "Computer science") related articles on Wikipedia. If you would like to participate, please visit the project page, where you can join [the discussion](https://en.wikipedia.org/wiki/Wikipedia_talk:WikiProject_Computer_science "Wikipedia talk:WikiProject Computer science") and see a list of open tasks.Computer scienceWikipedia:WikiProject Computer scienceTemplate:WikiProject Computer scienceComputer science|
---|---|---
[???](https://en.wikipedia.org/wiki/Category:Unknown-importance_Computer_science_articles "Category:Unknown-importance Computer science articles")| This article has not yet received a rating on the [project's importance scale](https://en.wikipedia.org/wiki/Wikipedia:WikiProject_Computer_science/Assessment#Importance_scale "Wikipedia:WikiProject Computer science/Assessment").
| Things you can help [WikiProject Computer science](https://en.wikipedia.org/wiki/Wikipedia:WikiProject_Computer_science "Wikipedia:WikiProject Computer science") with:
|  [](https://en.wikipedia.org/wiki/File:Nuvola_apps_korganizer.svg)
|  Here are some tasks awaiting attention:

  * **_[Article requests](https://en.wikipedia.org/wiki/Wikipedia:Requested_articles "Wikipedia:Requested articles")_ :**
    * [Requested articles/Applied arts and sciences/Computer science, computing, and Internet](https://en.wikipedia.org/wiki/Wikipedia:Requested_articles/Applied_arts_and_sciences/Computer_science,_computing,_and_Internet "Wikipedia:Requested articles/Applied arts and sciences/Computer science, computing, and Internet")
  * **_[Cleanup](https://en.wikipedia.org/wiki/Wikipedia:Cleanup "Wikipedia:Cleanup")_ :**
    * [Computer science articles needing attention](https://en.wikipedia.org/wiki/Category:Computer_science_articles_needing_attention "Category:Computer science articles needing attention")
    * [Computer science articles needing expert attention](https://en.wikipedia.org/wiki/Category:Computer_science_articles_needing_expert_attention "Category:Computer science articles needing expert attention")
  * **_[Copyedit](https://en.wikipedia.org/wiki/Wikipedia:Basic_copyediting "Wikipedia:Basic copyediting")_ :**
    * [Computing](https://en.wikipedia.org/wiki/Computing "Computing")
  * **_[Expand](https://en.wikipedia.org/wiki/Wikipedia:Writing_better_articles "Wikipedia:Writing better articles")_ :**
    * [Computer science](https://en.wikipedia.org/wiki/Computer_science "Computer science")
  * **_[Infobox](https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Infoboxes "Wikipedia:Manual of Style/Infoboxes")_ :**
    * [Computer science articles without infoboxes](https://en.wikipedia.org/wiki/Category:Computer_science_articles_without_infoboxes "Category:Computer science articles without infoboxes")
  * **_[Maintain](https://en.wikipedia.org/wiki/Wikipedia:Maintenance "Wikipedia:Maintenance")_ :**
    * [Timeline of computing 2020–present](https://en.wikipedia.org/wiki/Timeline_of_computing_2020%E2%80%93present "Timeline of computing 2020–present")
  * **_[Photo](https://en.wikipedia.org/wiki/Wikipedia:Requested_pictures "Wikipedia:Requested pictures")_ :**
    * Find pictures for the biographies of computer scientists (see [List of computer scientists](https://en.wikipedia.org/wiki/List_of_computer_scientists "List of computer scientists"))
    * [Computing articles needing images](https://en.wikipedia.org/wiki/Category:Computing_articles_needing_images "Category:Computing articles needing images")
  * **_[Stubs](https://en.wikipedia.org/wiki/Wikipedia:Stub "Wikipedia:Stub")_ :**
    * [Computer science stubs](https://en.wikipedia.org/wiki/Category:Computer_science_stubs "Category:Computer science stubs")
  * **_[Unreferenced](https://en.wikipedia.org/wiki/Wikipedia:Reliable_sources "Wikipedia:Reliable sources")_ :**
    * [WikiProject Computer science/Unreferenced BLPs](https://en.wikipedia.org/wiki/Wikipedia:WikiProject_Computer_science/Unreferenced_BLPs "Wikipedia:WikiProject Computer science/Unreferenced BLPs")
  * **_Project-related_ :**
    * Tag all relevant articles in [Category:Computer science](https://en.wikipedia.org/wiki/Category:Computer_science "Category:Computer science") and sub-categories with {{[WikiProject Computer science](https://en.wikipedia.org/wiki/Template:WikiProject_Computer_science "Template:WikiProject Computer science")}}

## [Untitled]

[[edit](https://en.wikipedia.org/w/index.php?title=Talk:Count-distinct_problem&action=edit&section=1 "Edit section: \[Untitled\]")]

Hi, I created a page titled "Weighted Cardinality Estimation", I want to rename it so I created another page with the same content titled "Count-Distinct Problem".

Please delete the "Weighted Cardinality Estimation" and keep the "Count-Distinct Problem" page - this should be the page's name.

Thank you, Aviv

    I've moved the page for you. [Tutelary](https://en.wikipedia.org/wiki/User:Tutelary "User:Tutelary") ([talk](https://en.wikipedia.org/wiki/User_talk:Tutelary "User talk:Tutelary")) [22:39, 15 October 2014 (UTC)](https://en.wikipedia.org/wiki/Talk:Count-distinct_problem#c-Tutelary-2014-10-15T22:39:00.000Z-\[Untitled\] "11 years ago")[[reply](https://en.wikipedia.org/wiki/Talk:Count-distinct_problem)]

## CVM algorithm; initial value of "p"?

[[edit](https://en.wikipedia.org/w/index.php?title=Talk:Count-distinct_problem&action=edit&section=2 "Edit section: CVM algorithm; initial value of "p"?")]

There's a seemingly clear definition of the CVM algorithm using pseudo-code. Problem: there's no apparent initial value for the variable "p" (a probability threshold). What should it be? -- [Dan Griscom](https://en.wikipedia.org/wiki/User:Dtgriscom "User:Dtgriscom") ([talk](https://en.wikipedia.org/wiki/User_talk:Dtgriscom "User talk:Dtgriscom")) [22:52, 18 May 2024 (UTC)](https://en.wikipedia.org/wiki/Talk:Count-distinct_problem#c-Dtgriscom-20240518225200-CVM_algorithm;_initial_value_of_"p"? "1 year ago")[[reply](https://en.wikipedia.org/wiki/Talk:Count-distinct_problem)]

    Must be 1 according to Knuth's paper. [Retimuko](https://en.wikipedia.org/wiki/User:Retimuko "User:Retimuko") ([talk](https://en.wikipedia.org/wiki/User_talk:Retimuko "User talk:Retimuko")) [20:01, 19 May 2024 (UTC)](https://en.wikipedia.org/wiki/Talk:Count-distinct_problem#c-Retimuko-20240519200100-Dtgriscom-20240518225200 "1 year ago")[[reply](https://en.wikipedia.org/wiki/Talk:Count-distinct_problem)]

    In the CVM paper Algorithm 1, line 1, states: `Initialise p <\- 1;`
    [Paddy](https://en.wikipedia.org/wiki/User:Paddy3118 "User:Paddy3118") ([talk](https://en.wikipedia.org/wiki/User_talk:Paddy3118 "User talk:Paddy3118")) [20:52, 28 May 2024 (UTC)](https://en.wikipedia.org/wiki/Talk:Count-distinct_problem#c-Paddy3118-20240528205200-Dtgriscom-20240518225200 "1 year ago")[[reply](https://en.wikipedia.org/wiki/Talk:Count-distinct_problem)]

## CVM algo: halving p

[[edit](https://en.wikipedia.org/w/index.php?title=Talk:Count-distinct_problem&action=edit&section=3 "Edit section: CVM algo: halving p")]

Fixed assignment to p. Needs to be outside the while loop. [1]

[Paddy](https://en.wikipedia.org/wiki/User:Paddy3118 "User:Paddy3118") ([talk](https://en.wikipedia.org/wiki/User_talk:Paddy3118 "User talk:Paddy3118")) [20:38, 28 May 2024 (UTC)](https://en.wikipedia.org/wiki/Talk:Count-distinct_problem#c-Paddy3118-20240528203800-CVM_algo:_halving_p "1 year ago")[[reply](https://en.wikipedia.org/wiki/Talk:Count-distinct_problem)]

References

  1. **^** <https://paddy3118.blogspot.com/2024/05/recreating-cvm-algorithm-for-estimating.html>

## CVM algorithms: adding u to data structure

[[edit](https://en.wikipedia.org/w/index.php?title=Talk:Count-distinct_problem&action=edit&section=4 "Edit section: CVM algorithms: adding u to data structure")]

I don't think there's any need to add u to the dictionary data structure (since it never gets used by the CVM algorithm). I believe it gets used in a CVM variant presented by Knuth (that deletes only 1 element at a time using treaps). [72.82.224.191](https://en.wikipedia.org/wiki/Special:Contributions/72.82.224.191 "Special:Contributions/72.82.224.191") ([talk](https://en.wikipedia.org/w/index.php?title=User_talk:72.82.224.191&action=edit&redlink=1 "User talk:72.82.224.191 \(page does not exist\)")) [11:47, 21 June 2024 (UTC)](https://en.wikipedia.org/wiki/Talk:Count-distinct_problem#c-72.82.224.191-20240621114700-CVM_algorithms:_adding_u_to_data_structure "1 year ago")[[reply](https://en.wikipedia.org/wiki/Talk:Count-distinct_problem)]

## CVM algorithm: Knuth's version or not?

[[edit](https://en.wikipedia.org/w/index.php?title=Talk:Count-distinct_problem&action=edit&section=5 "Edit section: CVM algorithm: Knuth's version or not?")]

The text claimed to present a modification by Knuth, but reading <https://www-cs-faculty.stanford.edu/~knuth/papers/cvm-note.pdf> his modification resulted in algorithm D, while algorithm X was the original one with a biased estimate. I've changed the page to show algorithm D and added algorithm D' as improvement of D. — Preceding [unsigned](https://en.wikipedia.org/wiki/Wikipedia:Signatures "Wikipedia:Signatures") comment added by [Pychron](https://en.wikipedia.org/wiki/User:Pychron "User:Pychron") ([talk](https://en.wikipedia.org/wiki/User_talk:Pychron#top "User talk:Pychron") • [contribs](https://en.wikipedia.org/wiki/Special:Contributions/Pychron "Special:Contributions/Pychron")) [08:22, 13 November 2024 (UTC)](https://en.wikipedia.org/wiki/Talk:Count-distinct_problem#c-Pychron-20241113082200-CVM_algorithm:_Knuth's_version_or_not? "1 year ago")[[reply](https://en.wikipedia.org/wiki/Talk:Count-distinct_problem)]

Retrieved from "[https://en.wikipedia.org/w/index.php?title=Talk:Count-distinct_problem&oldid=1340402989](https://en.wikipedia.org/w/index.php?title=Talk:Count-distinct_problem&oldid=1340402989)"

[Categories](https://en.wikipedia.org/wiki/Help:Category "Help:Category"):

  * [All unassessed articles](https://en.wikipedia.org/wiki/Category:All_unassessed_articles "Category:All unassessed articles")
  * [Unassessed Computer science articles](https://en.wikipedia.org/wiki/Category:Unassessed_Computer_science_articles "Category:Unassessed Computer science articles")
  * [Unknown-importance Computer science articles](https://en.wikipedia.org/wiki/Category:Unknown-importance_Computer_science_articles "Category:Unknown-importance Computer science articles")
  * [WikiProject Computer science articles](https://en.wikipedia.org/wiki/Category:WikiProject_Computer_science_articles "Category:WikiProject Computer science articles")


Full featured tool for Roblox development

# Argon Roblox

Argon Roblox Studio plugin allows two-way sync of code and other instances with their properties. It also comes with many useful features such as place porting, code execution, and external editor integration. Argon plugin requires [Argon CLI](https://github.com/argon-rbx/argon) or [Argon VS Code](https://github.com/argon-rbx/argon-vscode) extension to work.

## Visit [argon.wiki](https://argon.wiki/) to learn more!

Or follow one of these direct links to:

- [Install](https://argon.wiki/docs/installation) Argon
- [Get Started](https://argon.wiki/docs/category/getting-started) with Argon
- Learn about Argon [Commands](https://argon.wiki/docs/category/commands)
- Explore the Argon [API](https://argon.wiki/api/project)
- Follow the latest [Changes](https://argon.wiki/changelog/argon)


### Professional

Enables the use of external editors, tools and version control systems available on the Internet

### Feature Rich

Comes with many useful features that help manage project, maintain code and manipulate instances

### Customizable

Extremely customizable by command flags as well as detailed global config and project templates

### Easy to Use

Good for beginners as VS Code extension has graphical interface and requires one click to setup

### Modular

Greatly integrates with other Roblox tools such as: Wally, StyLua, selene and roblox-ts

### Fast and Safe

Built with Rust and MessagePack, major changes need user confirmation

65,492

## Hours Used

1,133,945

## Files Synced

281,466,776

## Lines Synced

1,234

## Projects Created

23,053

## Projects Built

26,366

## Sessions Started

 _These stats are collected 100% anonymously. You can opt out completely by disabling [share_stats](https://argon.wiki/docs/configuration#global-config) setting. The server backend is open source and can be seen [here](https://github.com/argon-rbx/stats-backend)._


[## 📄 Creating a New ProjectLearn how to quickly create a new Argon project!](https://argon.wiki/docs/getting-started/new-project)[## 📄 Porting an Existing GameLearn how to port your existing Roblox game to Argon!](https://argon.wiki/docs/getting-started/porting)[## 📄 Common Argon UsageLearn how to use Argon in most common scenarios!](https://argon.wiki/docs/getting-started/common-usage)[## 📄 Advanced Argon UsageLearn how to use Argon in more advanced use cases!](https://argon.wiki/docs/getting-started/advanced-usage)


[## 📄 CLILearn about Agon command line interface commands!](https://argon.wiki/docs/commands/cli)[## 📄 VS CodeLearn about Argon Visual Studio Code extension commands!](https://argon.wiki/docs/commands/vscode)


![alt text](./images/jexplorerLogo.png)
# [=] Jexplorer
### A fully open-sourced, stylizable Explorer plugin for Roblox Studio
#### [Devforum Post](https://devforum.roblox.com/t/beta-0215-jexplorer-stylizable-explorer-widget-made-with-jecs/3788801)

### NOTICE: The documentation is currently {2 releases} behind. It may not contain up-to-date information


### Quality of Life

Jexplorer was designed with quality of life in mind, with many QOL tools such as built-in reclass, GitHub pull/push, duplicate increments name if it has a numeric suffix, ancestors are sticky stacked to the top edge of the viewport, etc.

### Customizable

Jexplorer is highly extendable and customizable, with many editor widgets openable via the top-left options menu (with 3 dots) allowing you to change a part you don't like, ontop of being open source.

### Performant & Professional

Jexplorer was designed from the ground up to be performant & efficient, with it having a much better ambient & active performance than Roblox's default Explorer. The UI is sleek and user-friendly, making for a nice experience.


View Docs

*Sentry is a developer-first error tracking and performance monitoring platform that helps developers see what actually matters, solve quicker, and learn continuously about their applications;* and **roblox-sentry** helps you get your game up and running in no time!

- Capture console errors and warnings from the get-go!
- Add context that helps you find the root problem.
- Catch client errors that may go unreported.
- Track player sessions


### Reliable

The SDK was designed with Roblox developers in mind. Whether you're using it for plugins or to track a game, features were tested with real Roblox environments.

### Flexible

Supports automatic tracking, stacktraces and desynchronized actor calls.

### Familiar

Follows the Sentry Unified SDK API Guidelines.


Marketing Mode

[ Want to connect with the folks building Sentry? Join us on Discord. ➔  ](https://discord.com/invite/sentry)

# Code breaks, fix it faster

Application monitoring software considered "not bad" by millions of developers.

[ Get Started ](https://sentry.io/signup/) [ See How In Sandbox ](https://sandbox.sentry.io/)

  * GitHub
  * Disney
  * Atlassian
  * Linear
  * Vercel
  * Cloudflare
  * Slack
  * Metronome
  * Autodesk
  * Microsoft
  * Instacart
  * Lyft
  * Bolt
  * Monday
  * Cursor
  * Anthropic
  * Factory AI
  * Sentry
  * Baseten
  * Runlayer
  * Convex

## Developer first. Always.

### Monitor in five lines

Drop in the [SDK](https://sentry.io/platforms/). No agents to install. No performance surprises.

### Automatically root-cause any issue

Catch critical issues before you merge and fix them when they hit prod with [Seer, our debugging agent and code reviewer](https://sentry.io/product/seer/).

### Break production less

Predict and prevent the errors that matter most before they even make it to production with [AI code review](https://sentry.io/product/ai-code-review/).

### Stay in the flow

From [GitHub](https://sentry.io/integrations/github/), [Slack](https://sentry.io/integrations/slack/), [Jira](https://sentry.io/integrations/jira/), and [Linear](https://sentry.io/integrations/linear/) to coding agents with [Sentry's MCP server](https://docs.sentry.io/product/sentry-mcp/), Sentry brings full context to every fix from dev to prod.

Previous Next

### Monitor in five lines

Drop in the [SDK](https://sentry.io/platforms/). No agents to install. No performance surprises.

### Automatically root-cause any issue

Catch critical issues before you merge and fix them when they hit prod with [Seer, our debugging agent and code reviewer](https://sentry.io/product/seer/).

### Break production less

Predict and prevent the errors that matter most before they even make it to production with [AI code review](https://sentry.io/product/ai-code-review/).

### Stay in the flow

From [GitHub](https://sentry.io/integrations/github/), [Slack](https://sentry.io/integrations/slack/), [Jira](https://sentry.io/integrations/jira/), and [Linear](https://sentry.io/integrations/linear/) to coding agents with [Sentry's MCP server](https://docs.sentry.io/product/sentry-mcp/), Sentry brings full context to every fix from dev to prod.

## Everything’s connected

Yeah, other tools exist. But [errors](https://sentry.io/product/error-monitoring/), [logs](https://sentry.io/product/logs/), [replays](https://sentry.io/product/session-replay/), [spans](https://sentry.io/product/tracing/), [profiles](https://sentry.io/product/profiling/), and metrics — all connected by the same trace? That’s kind of our thing.

### Go from Issue → Context → Fix.

Debug 500's, trace slow requests, replay fetch() failures, and fix the broken code that caused it.

Catch slow queries, N+1s, and request timeouts before the ‘why is this so slow?’ posts fill up your feed.

Map every incident to the release, PR, and owner -- automatically.

## Debugging needs context— with or without AI

[Seer](https://sentry.io/product/seer/), our AI debugger, uses Sentry context – logs, commits, traces, stack trace - so you can stop guessing and _it_ can fix issues for you.

Analyzes every signal to explain why your code failed, not just where.

Fixes what’s broken while you ship what’s next – generating precise, merge-ready patches.

Stops bad code before it starts bad days. Correlating PRs against real error and performance history to catch regressions before they ship.

## Loved by developers worldwide

We wouldn’t have scaled without Sentry. Most of our incidents are hardware-related—and we debug them all inside Sentry

Nova DasSarma

Systems Lead, Anthropic

Sentry’s high-quality tooling helps Disney+ maintain high-quality service to its tens of millions of global subscribers.

Andrew Hay

Director at Disney Streaming Services, Disney+

The signal we get from Sentry is the most reliable indicator of software issues and is used throughout Instacart because it can be easily configured for each service regardless of the language or framework.

Igor Dobrovitski

Infrastructure Software Engineer, Instacart

## Get started in minutes

Five lines of code. That's it. No complex setup, no performance hits, no waiting around.

Next.jsAngularAndroidiOSFlutterReact Native.NET MAUIPythonNode.jsReact.NETGoSwiftRubyPHPLaravelASP.NET CoreSpring BootVueSolidSvelteAstroJavaScript

See -- it's really just one command.

Copied!Click to Copy

    npx @sentry/wizard@latest -i nextjs

Get started with just one line of code:

Copied!Click to Copy

    npx @sentry/wizard@latest -i angular

Just run this command to sign up for and install Sentry.

Copied!Click to Copy

    brew install getsentry/tools/sentry-wizard && sentry-wizard -i android

Signup and install Sentry with just one line of code:

Copied!Click to Copy

    brew install getsentry/tools/sentry-wizard && sentry-wizard -i ios

Sign-up and install Sentry with just one line of code:

Copied!Click to Copy

    npx @sentry/wizard@latest -i flutter

Install Sentry with one line of code:

Copied!Click to Copy

    npx @sentry/wizard@latest -i reactNative

Add the Sentry dependency to your .NET MAUI application:

Copied!Click to Copy

    dotnet add package Sentry.Maui -v 5.11.1

Grab the [Sentry Python SDK](https://github.com/getsentry/sentry-python):

Copied!Click to Copy

    pip install --upgrade sentry-sdk

Configure your DSN:

Copied!Click to Copy

    import sentry_sdk

    sentry_sdk.init(
        "https://<key>@sentry.io/<project>",

        # Set traces_sample_rate to 1.0 to capture 100%
        # of transactions for Tracing.
        # We recommend adjusting this value in production.
        enable_tracing=True,
        traces_sample_rate=1.0,
    )

Grab the [Sentry Node SDK](https://github.com/getsentry/sentry-javascript/):

Copied!Click to Copy

    npm install @sentry/node

Configure your SDK:

Copied!Click to Copy

    const Sentry = require('@sentry/node');
    Sentry.init({ dsn: 'https://<key>@sentry.io/<project>' });

Grab the [Sentry React SDK](https://github.com/getsentry/sentry-javascript/):

Copied!Click to Copy

    npm install @sentry/react

We recommend putting the Sentry initialization code into its own file and including that file as the first import in your application entry point as shown in the example below:

Copied!Click to Copy

    import { useEffect } from "react";
    import * as Sentry from "@sentry/react";

    Sentry.init({
      dsn: "https://examplePublicKey@o0.ingest.sentry.io/0",
      integrations: [
      ],
      // Set `tracePropagationTargets` to control for which URLs trace propagation should be enabled
      tracePropagationTargets: [/^\//, /^https:\/\/yourserver\.io\/api/],
    });

Include the Sentry initialization file as the first import statement:

Copied!Click to Copy

    // Sentry initialization should be imported first!
    import "./instrument";
    import App from "./App";
    import { createRoot } from "react-dom/client";

    const container = document.getElementById(“app”);
    const root = createRoot(container);
    root.render(<App />);

Install the **NuGet** package to add the Sentry dependency:

Copied!Click to Copy

    dotnet add package Sentry

Initialize the SDK as early as possible, like in the `Main` method in `Program.cs/Program.fs`:

Copied!Click to Copy

    using (SentrySdk.Init(o => {
      // Tells which project in Sentry to send events to:
      o.Dsn = "https://<key>@sentry.io/<project>";
      // When configuring for the first time, to see what the SDK is doing:
      o.Debug = true;
      // Set TracesSampleRate to 1.0 to capture 100% of transactions for Tracing.
      // We recommend adjusting this value in production.
      o.TracesSampleRate = 1.0; }))
      // App code goes here - Disposing will flush events out

Grab the [Sentry Go SDK](https://github.com/getsentry/sentry-go):

Copied!Click to Copy

    go get "github.com/getsentry/sentry-go"

Configuration should happen as early as possible in your application's lifecycle:

Copied!Click to Copy

    package main

    import (
        "log"
        "time"

        "github.com/getsentry/sentry-go"
    )

    func main() {
        err := sentry.Init(sentry.ClientOptions{
            Dsn: "https://<key>@sentry.io/<project>",
        EnableTracing: true,
            // Specify a fixed sample rate:
            // We recommend adjusting this value in production
            TracesSampleRate: 1.0,
            // Or provide a custom sample rate:
            TracesSampler: sentry.TracesSampler(func(ctx sentry.SamplingContext) float64 {
                // As an example, this does not send some
                // transactions to Sentry based on their name.
                if ctx.Span.Name == "GET /health" {
                    return 0.0

                return 1.0
            }),
        })
        if err != nil {
            log.Fatalf("sentry.Init: %s", err)
        // Flush buffered events before the program terminates.
        // Set the timeout to the maximum duration the program can afford to wait.
        defer sentry.Flush(2 * time.Second)

To integrate Sentry into your Xcode project, specify it in your `Podfile`, then run `pod install`:

Copied!Click to Copy

    platform :ios, '9.0'
    use_frameworks! # This is important

    target 'YourApp' do
      pod 'Sentry', :git => 'https://github.com/getsentry/sentry-cocoa.git', :tag => '<VERSION>'
    end

Initialize the SDK as soon as possible in your application lifecycle, such as in your AppDelegate `application:didFinishLaunchingWithOptions` method:

Copied!Click to Copy

    import Sentry // Make sure you import Sentry

    func application(_ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        SentrySDK.start { options in
            options.dsn = "https://<key>@sentry.io/<project>"
            options.debug = true // Enabled debug when first installing is always helpful
            // Example uniform sample rate: capture 100% of transactions for Tracing
            options.tracesSampleRate = 1.0

        return true

Add the `sentry-ruby` gem to your `Gemfile`:

Copied!Click to Copy

    gem "sentry-ruby"

Configure your DSN:

Copied!Click to Copy

    Sentry.init do |config|
      config.dsn = 'https://<key>@sentry.io/<project>'

      # Set a uniform sample rate between 0.0 and 1.0
      # We recommend adjusting the value in production:
      config.traces_sample_rate = 1.0

      # or control sampling dynamically
      config.traces_sampler = lambda do |sampling_context|
        # sampling_context[:transaction_context] contains the information about the transaction
        # sampling_context[:parent_sampled] contains the transaction's parent's sample decision
        true # return value can be a boolean or a float between 0.0 and 1.0
      end
    end

Install the `sentry/sentry` package with Composer:

Copied!Click to Copy

    composer require sentry/sentry

To capture all errors, even the one during the startup of your application, you should initialize the Sentry PHP SDK as soon as possible.

Copied!Click to Copy

    \Sentry\init(['dsn' => 'https://<key>@sentry.io/<project>',
        // Specify a fixed sample rate:
        'traces_sample_rate' => 0.2,
        // Or provide a custom sampler:
        'traces_sampler' => function (SentryTracingSamplingContext $context): float {
            // return a number between 0 and 1
        }, ]);

Install the `sentry/sentry-laravel` package with Composer:

Copied!Click to Copy

    composer require sentry/sentry-laravel

Add Sentry reporting to `bootstrap/app.php`:

Copied!Click to Copy

    <?php

    use Illuminate\Foundation\Application;
    use Illuminate\Foundation\Configuration\Exceptions;
    use Illuminate\Foundation\Configuration\Middleware;
    use Sentry\Laravel\Integration;

    return Application::configure(basePath: dirname(__DIR__))
        ->withRouting(
            web: __DIR__.'/../routes/web.php',
            commands: __DIR__.'/../routes/console.php',
            health: '/up',
        )
        ->withMiddleware(function (Middleware $middleware) {
        })
        ->withExceptions(function (Exceptions $exceptions) {
            Integration::handles($exceptions);
        })->create();

Enable Sentry Tracing in `config/sentry.php`:

Copied!Click to Copy

    // Specify a fixed sample rate:
    'traces_sample_rate' => 0.2,
    // Or provide a custom sampler:
    'traces_sampler' => function (SentryTracingSamplingContext $context): float {
        // return a number between 0 and 1
    },

Run this `Artisan` command to configure the Sentry DSN:

Copied!Click to Copy

    php artisan sentry:publish --dsn=<paste-your-DSN-here>

Add the Sentry dependency:

Copied!Click to Copy

    dotnet add package Sentry.AspNetCore

Configure Sentry in `appsettings.json`.

Copied!Click to Copy

    "Sentry": {
      "Dsn": "https://examplePublicKey@o0.ingest.sentry.io/0",
      "Debug": true,
    },

Then add the SDK by simply calling `UseSentry`:

Copied!Click to Copy

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
                // Add the following line:
                webBuilder.UseSentry();
            });

Grab the [Sentry Java SDK](https://github.com/getsentry/sentry-java/):

Copied!Click to Copy

    <dependency>
      <groupId>io.sentry</groupId>
      <artifactId>sentry-spring-boot-starter</artifactId>
      <version><VERSION></version>
    </dependency>

Configure your DSN in `application.properties`:

Copied!Click to Copy

    sentry.dsn=https://<key>@sentry.io/<project>
    # Set traces_sample_rate to 1.0 to capture 100%
    # of transactions for performance monitoring.
    # We recommend adjusting this value in production.
    sentry.traces-sample-rate=1.0

Grab the [Sentry Vue SDK](https://github.com/getsentry/sentry-javascript/):

Copied!Click to Copy

    npm install @sentry/vue

Configure your DSN:

Copied!Click to Copy

    import { createApp } from "vue";
    import * as Sentry from "@sentry/vue";

    const app = createApp({
      // ...
    });

    Sentry.init({
      app,
      dsn: "https://<key>@sentry.io/<project>"",
      // This enables automatic instrumentation (highly recommended),
      // but is not necessary for purely manual usage
      // If you only want to use custom instrumentation:
      // * Remove the BrowserTracing integration
      // * add Sentry.addTracingExtensions() above your Sentry.init() call
      integrations: [Sentry.browserTracingIntegration()],

      // We recommend adjusting this value in production, or using tracesSampler
      // for finer control
      tracesSampleRate: 1.0,
      // Set tracePropagationTargets to control for which URLs distributed tracing should be enabled
      tracePropagationTargets: ['localhost', /^https://yourserver.io/api/],
    });

    app.mount("#app");

To use the SDK, initialize Sentry in your Solid entry point index.jsx before you render your Solid app:

Copied!Click to Copy

    // index.jsx / index.tsx

    import * as Sentry from "@sentry/solid";
    import { useBeforeLeave, useLocation } from "@solidjs/router";
    import { render } from "solid-js/web";
    import App from "./app";

    // Initialize the Sentry SDK here
    Sentry.init({
      dsn: "__DSN__",
      integrations: [Sentry.browserTracingIntegration()],

      // Performance Monitoring
      tracesSampleRate: 1.0, //  Capture 100% of the transactions
      // Set 'tracePropagationTargets' to control for which URLs trace propagation should be enabled
      tracePropagationTargets: ["localhost", /^https:\/\/yourserver\.io\/api/],
    });

    const app = document.getElementById("app");

    if (!app) throw new Error("No #app element found in the DOM.");

    render(() => <App />, app)

To use the SDK, initialize Sentry in your Svelte entry point main.js before you bootstrap your Svelte app:

Copied!Click to Copy

    // main.js / main.ts

    import App from "./App.svelte";

    import * as Sentry from "@sentry/svelte";
    import { BrowserTracing } from "@sentry/tracing";

    // Initialize the Sentry SDK here
    Sentry.init({
      dsn: "__DSN__",
      release: "my-project-name@2.3.12",
      integrations: [new BrowserTracing()],

      // This enables automatic instrumentation (highly recommended),
      // but is not necessary for purely manual usage
      // If you only want to use custom instrumentation:
      // * Remove the BrowserTracing integration
      // * add Sentry.addTracingExtensions() above your Sentry.init() call
      integrations: [Sentry.browserTracingIntegration()],

      // We recommend adjusting this value in production, or using tracesSampler
      // for finer control
      tracesSampleRate: 1.0,

      // Set tracePropagationTargets to control for which URLs distributed tracing should be enabled
      tracePropagationTargets: ['localhost', /^https://yourserver.io/api/],
    });

    // Then bootstrap your Svelte app
    const app = new App({
      target: document.getElementById("app"),
    });

    export default app;

Just run this command to install and register Sentry's Astro integration.

Copied!Click to Copy

    npx astro add @sentry/astro

And add your DSN and project config to your `astro.config.mjs` file:

Copied!Click to Copy

    import { defineConfig } from "astro/config";
    import sentry from "@sentry/astro";

    export default defineConfig({
      integrations: [
        sentry({
          dsn: "__DSN__",
          sourceMapsUploadOptions: {
            project: "your-project-slug",
            authToken: process.env.SENTRY_AUTH_TOKEN,
          },
          tracesSampleRate: 1.0,
        }),
      ],
    });

Grab the [Sentry JavaScript SDK](https://github.com/getsentry/sentry-javascript/):

Copied!Click to Copy

    <script src="https://browser.sentry-cdn.com/<VERSION>/bundle.min.js"></script>

Configure your DSN:

Copied!Click to Copy

    Sentry.init({ dsn: 'https://<key>@sentry.io/<project>',
      // This enables automatic instrumentation (highly recommended),
      // but is not necessary for purely manual usage
      // If you only want to use custom instrumentation:
      // * Remove the BrowserTracing integration
      // * add Sentry.addTracingExtensions() above your Sentry.init() call
      integrations: [Sentry.browserTracingIntegration()],

      // We recommend adjusting this value in production, or using tracesSampler
      // for finer control
      tracesSampleRate: 1.0,

      // Set tracePropagationTargets to control for which URLs distributed tracing should be enabled
      tracePropagationTargets: ['localhost', /^https://yourserver.io/api/],
    });

## Built to be secure, Designed to not get in your way

Security and compliance aren't just checkboxes—they're built into how we run Sentry. We use industry-standard tech and practices to keep your data safe, and we stay out of your way while doing it.

[ Check out our Privacy Policy ](https://sentry.io/privacy/) [ Contact Us ](https://sentry.io/contact/enterprise/)

## Get monthly product updates from our newsletter

Your Email:

I want to receive the monthly newsletter and other updates from Sentry. You may unsubscribe at any time.

By filling out this form, you agree to our [privacy policy](https://sentry.io/privacy/). This form is protected by reCAPTCHA and Google's [Privacy Policy](https://policies.google.com/privacy) and [Terms of Service](https://policies.google.com/terms) apply.

Sign Up

## Fix It

Get started with the only application monitoring platform that empowers developers to fix application problems without compromising on velocity.

[ Try Sentry for Free ](https://sentry.io/signup/) [ Get a Demo ](https://sentry.io/demo/)


### Categories:

UPTIMEMETRICSAlertsDASHBOARDSERROR-MONITORINGANDROIDMOBILEBETALogsINTEGRATIONSBUSINESSSTATSTracingREPLAYSeerPROFILINGcode-reviewAI/MLPYTHONJAVASCRIPTBILLING-AND-SPENDSDKSRUBYRAILSCIEARLY-ACCESSINSIGHTSRELEASESAUTOFIXFRONTENDIOSTEAMSECURITY-ADVISORYUI/UX-UPDATEISSUESPERFORMANCEPHPLARAVELBACKENDJAVANODE.JSCODE-COVERAGENotificationsREACT-NATIVEDATA-RESIDENCYCRONSNODEENTERPRISE

Reset

March 2026

[### Uptime Monitors: Expanded Alert ConfigurationUPTIMEUptime monitors now support custom configuration, so you can define what a successful check actually looks like.

    March 16, 2026](https://sentry.io/changelog/uptime-monitors-expanded-alert-configuration/)[### Metrics Open Beta Now Supports AlertingMETRICSAlertsMetrics, currently in open beta, now support creating alerts.

    March 16, 2026](https://sentry.io/changelog/metrics-beta-alerts/)[### Improved chart legendsDASHBOARDSWe've overhauled how custom dashboards render chart legends.

    March 13, 2026](https://sentry.io/changelog/improved-chart-legends/)

February 2026

[### Better Native crash reporting for AndroidERROR-MONITORINGANDROIDMOBILEWe've added Tombstone support for enhanced Native crash reporting on Android

    February 17, 2026](https://sentry.io/changelog/better-native-crash-reporting-for-android/)[### Send Metrics using .NET and Unity SDKsBETAMETRICSSend Metrics using our .NET and Unity SDKs

    February 12, 2026](https://sentry.io/changelog/send-metrics-using-net-and-unity-sdks/)[### Send Logs using the Kotlin Multiplatform SDKLogsSend logs using the Kotlin Multiplatform SDK

    February 11, 2026](https://sentry.io/changelog/send-logs-using-the-kotlin-multiplatform-sdk/)[### Size Analysis is now Generally AvailableMOBILESize Analysis is now generally available in Sentry. It helps you monitor and reduce your mobile app size so you can catch regressions before they reach end users.

    February 10, 2026](https://sentry.io/changelog/size-analysis-is-now-generally-available/)[### Organization-level Data Forwarding is now availableINTEGRATIONSBUSINESSSTATSWe've renewed first-party support for data forwarding and migrated users onto organization-level configuration. You can now forward your errors across projects to Splunk, Segment and Amazon SQS with a single settings change.

    February 9, 2026](https://sentry.io/changelog/organization-level-data-forwarding-is-now-available/)[### Cross-Event Querying in Trace Explorer (Beta)TracingCross-Event querying allows you to refine your search for spans based on their relationship to other events in a distributed trace.

    February 5, 2026](https://sentry.io/changelog/cross-event-querying-in-trace-explorer-beta/)[### Send Metrics using the Flutter SDKMETRICSSend Metrics using the Flutter SDK

    February 3, 2026](https://sentry.io/changelog/send-metrics-using-the-flutter-sdk/)

Previous

[1](https://sentry.io/changelog/?search=)[2](https://sentry.io/changelog/?page=2&search=)[3](https://sentry.io/changelog/?page=3&search=)[...](https://sentry.io/changelog/?page=0&search=)[27](https://sentry.io/changelog/?page=27&search=)

[Next](https://sentry.io/changelog/?page=2&search=)


# Working Code, Happy Customers

We're so much more than error monitoring software. We're also performance monitoring software. Our platform helps every developer diagnose, fix, and optimize the performance of their code. With Sentry, developers around the world save time, energy, and probably a few therapy sessions.

Sentry supports more than 100 coding languages, which means it probably supports yours. We also integrate with a whole bunch of useful tools (and a few necessary evils), including but definitely not limited to GitHub, Slack, and Jira.

## Numbers That Make Us Look Good

Loved by 4M developers and 150K organizations across 146 countries spanning 6 continents with 790B events processed monthly

(We're still waiting on our first customer in Antarctica)

and $217M raised in 6 rounds of funding

(That's enough to build the Golden Gate Bridge six times, if we could take that money and time travel back to 1933)

## The Humans Behind the Code

The team behind Sentry built and shipped the software behind many fine brands, a short sampling of which will no doubt impress and delight you. We were occasionally useful at Dropbox. Drew pictures at GitHub. Nodded sagely during meetings at Atlassian.

Sentry started out as an open-source project. Our founders' goal was straightforward: solve their own problems with an easy way to fix their own mistakes. Ten years later, their two person passion project is the world's leading error-tracking platform with 200+ employees in four offices worldwide.

## You've Heard of Our Customers

To name-drop a few…

## We're Everywhere

Okay, not everywhere. But somewhere.

[ Work With Us ](https://sentry.io/careers/)

San Francisco, USA

Seattle, USA

Vienna, Austria

Toronto, Canada

## External Validation From Journalists

[ ### App Monitoring Toolmaker Sentry Acquires Code Coverage Provider Codecov ADTMag — Dec 2022 ](https://adtmag.com/articles/2022/12/01/sentry-acquires-codecov.aspx)

[ ### Sentry Buys Codecov FinSMEs — Dec 2022 ](https://www.finsmes.com/2022/12/sentry-buys-codecov.html)

[ ### Sentry acquires VC-backed Codecov PitchBook — Dec 2022 ](https://pitchbook.com/newsletter/sentry-acquires-vc-backed-codecov)

## Our Investors


# Python Error and Performance Monitoring

Actionable insights to resolve Python performance bottlenecks and errors. See the full picture of any Python exception so you can diagnose, fix, and optimize performance in the Python debugging process.

[Try Sentry For Free](https://sentry.io/signup/)[Request a Demo](https://sentry.io/demo/)

Grab the [Sentry Python SDK](https://github.com/getsentry/sentry-python):

Click to Copy

Click to Copy

    pip install --upgrade sentry-sdk

Configure your DSN:

Click to Copy

Click to Copy

    import sentry_sdk

    sentry_sdk.init(
        "https://<key>@sentry.io/<project>",

        # Set traces_sample_rate to 1.0 to capture 100%
        # of transactions for Tracing.
        # We recommend adjusting this value in production.
        enable_tracing=True,
        traces_sample_rate=1.0,
    )

## Getting Started is Simple

Python

Django

Flask

FastAPI

Bottle

Celery

Pyramid

Tornado

RQ

AWS Lambda Python

Google Cloud Functions Python

Grab the [Sentry Python SDK](https://github.com/getsentry/sentry-python):

Click to Copy

Click to Copy

    pip install --upgrade sentry-sdk

Configure your DSN:

Click to Copy

Click to Copy

    import sentry_sdk

    sentry_sdk.init(
        "https://<key>@sentry.io/<project>",

        # Set traces_sample_rate to 1.0 to capture 100%
        # of transactions for Tracing.
        # We recommend adjusting this value in production.
        enable_tracing=True,
        traces_sample_rate=1.0,
    )

Check our [documentation](https://docs.sentry.io/platforms/python/) for the latest instructions.

[See all platforms](https://sentry.io/platforms/)

### How to install the Python SDK

### More than 150K Organizations Trust Sentry with Their Application Monitoring

Github logo

Atlassian logo

Disney logo

Cloudflare logo

Microsoft logo

Lush logo

### Python Performance Monitoring

Within minutes after installing Sentry, software teams are able to trace Python [performance](https://sentry.io/for/performance/) issues back to a poor performing API call as well as surface all related code errors. Engineering Managers and Developers now have a single tool to optimize the performance of their code and deliver fast customer experiences.

See a Sample Transaction

### Python Error Monitoring with Complete Stack Traces

See local variables in the stack for prod errors, just like in your dev environment. Introspect more deeply into the runtime and jump into the frame to get additional data for any local variable. Filter and group Python exceptions intuitively to eliminate noise.

See a Sample Stack Trace

### Fill In the Blanks About Python Errors

Expose the important events that led to each Python exception: SQL queries, debug logs, network requests, past errors. Improve debugging workflow with a full view of releases so you can mark errors as resolved and prioritize live issues.

Check out Breadcrumbs

### Python Profiling

Profiling lets you see what parts of your code are consuming the most resources, like CPU or memory, in your application— so you can optimize them before end user experience is impacted. Test your application performance in any environment, including in production, without writing manual tests or extensive troubleshooting.

[Try Profiling](https://sentry.io/orgredirect/organizations/:orgslug/profiling)

### Understand Where Tests Could Prevent Your Python Regressions

Quickly isolate Code Coverage for Python bugs to see where testing could help fix the bug before release with our Codecov integration.

[Learn More About Codecov by Sentry](https://sentry.io/for/code-coverage)

”The time to resolve errors went from days to minutes.”

### Debugging Any Python Exception

Aggregate errors by details like HTTP request, hostname, and app version to see what’s new, a priority, or a trend.

Assign custom tags to reproduce the error environment specific to your application, business, and users.

Answer the most important questions: In which app release did the Python bug occur? Was it the kraken?

## FAQs

What is the difference between Sentry and traditional logging?

Traditional logging provides you with a trail of events. Some of those events are errors, but many times they’re simply informational. Sentry is fundamentally different because we focus on exceptions, or in other words, we capture application crashes. We discuss in more detail [here](https://sentry.io/vs/logging/) and on our [blog.](https://blog.sentry.io/lets-get-ready-to-monitor)

What languages does Sentry support?

Sentry supports every major  language, framework, and library. You can browse each of them [here](https://sentry.io/platforms/).

How much does Sentry cost?

You can get started for free. Pricing depends on the number of monthly events, transactions, and attachments that you send Sentry. For more details, visit our [pricing page](https://sentry.io/pricing/).

How does Sentry impact the performance of my app?

Sentry doesn’t impact a web site’s performance.

If you look at the configuration options for when you initialize Sentry in your code, you’ll see there’s nothing regarding minimizing its impact on your app’s performance. This is because our team of SDK engineers already developed Sentry with this in mind.

Sentry is a listener/handler for errors that asynchronously sends out the error/event to Sentry.io. This is non-blocking. The error/event only goes out if this is an error.

Global handlers have almost no impact as well, as they are native APIs provided by the browsers.

## Supporting Resources

[Debugging Python ErrorsRead](https://blog.sentry.io/debugging-python-errors)

[How Sentry Helps Grofers Meet Unprecedented Delivery DemandRead](https://sentry.io/customers/grofers/)

## Resolve Python errors with max efficiency, not max effort

[Try Sentry For Free](https://sentry.io/signup/)[Request a Demo](https://sentry.io/demo/)