Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
9fbe176
chore: bump version to 0.8.1-rc.2508261835
statsig-kong[bot] Aug 26, 2025
81cc6bb
[Auto] Sync stable with Main
xinlili-statsig Aug 26, 2025
0098603
[Auto] Sync stable with Main
xinlili-statsig Aug 26, 2025
d8099dc
chore: bump version to 0.8.1-rc.2508262310
statsig-kong[bot] Aug 26, 2025
0566bda
[Auto] Sync stable with Main
xinlili-statsig Aug 26, 2025
494c0bf
chore: bump version to 0.8.1-rc.2508262341
statsig-kong[bot] Aug 26, 2025
6498ddf
[Auto] Sync stable with Main
xinlili-statsig Aug 26, 2025
51c2313
chore: bump version to 0.8.1-rc.2508262353
statsig-kong[bot] Aug 26, 2025
af32911
[Auto] Sync stable with Main
xinlili-statsig Aug 27, 2025
43765d2
[release] 0.8.1-rc.2508271744 - Dotnet Improvements, workflow improve…
weihao-statsig Aug 27, 2025
7b51059
[release] 0.8.1-rc.2508271847 - Fix Private Repo Release [Stable] (#1…
weihao-statsig Aug 27, 2025
a543a6d
[release] 0.8.1-rc.2508271901 - Test Merge Back to main [Stable] (#1743)
weihao-statsig Aug 27, 2025
cd64222
[cherrypick][stable] chore: add env variables (#1744)
weihao-statsig Aug 27, 2025
6f28bc2
[release] 0.8.1-rc.2508271912 - Test Merge Back To Main Again [Stable…
weihao-statsig Aug 27, 2025
2932913
[release] 0.8.2 - Expose Fields in Dotnet Core, Tooling updates [Stab…
weihao-statsig Aug 27, 2025
4e3e82d
[Auto] Sync stable with Main
xinlili-statsig Aug 27, 2025
5c0724f
[cherrypick][stable] chore: add comments into java (#1750)
weihao-statsig Aug 27, 2025
ed1fc58
[release] 0.8.2 - Expose Fields in Dotnet Core, Tooling updates [stab…
weihao-statsig Aug 28, 2025
c11f3d0
[Auto] Sync stable with Main
xinlili-statsig Aug 28, 2025
9a2b4b9
chore: bump version to 0.8.2-rc.2508282037
statsig-kong[bot] Aug 28, 2025
62fd7fe
[Auto] Sync stable with Main
xinlili-statsig Aug 28, 2025
402d157
chore: bump version to 0.8.2-rc.2508282053
statsig-kong[bot] Aug 28, 2025
15e78a2
[release] 0.8.2-rc.2508282224 - Test Today RC [stable] (#1785)
weihao-statsig Aug 28, 2025
c746737
[cherrypick][stable] feat(node): Add OutputLogger interface for Node.…
weihao-statsig Aug 29, 2025
bb45d9f
[release] 0.8.3 - OutputLogger in Node [stable] (#1791)
weihao-statsig Aug 29, 2025
1e05df9
[cherrypick][stable] fix(node): generate file (#1794)
weihao-statsig Aug 29, 2025
c66879b
[release] 0.8.4 - Output Logger For Node Core [stable] (#1795)
weihao-statsig Aug 29, 2025
dab3f47
[Auto] Sync stable with Main
xinlili-statsig Sep 1, 2025
993f9d8
chore: bump version to 0.8.5-rc.2509011313
statsig-kong[bot] Sep 1, 2025
b1570b2
elixir: Cp whatnot changes (#1800)
xinlili-statsig Sep 2, 2025
5127994
chore: bump version to 0.8.5
xinlili-statsig Sep 2, 2025
cb5cacb
replace process::id() for wasm
pishposh Sep 8, 2025
3e1072c
add with_local_file_logging_adapter to toggle file-guard dep
pishposh Sep 8, 2025
2cbb45c
tokio new_current_thread on wasm; gate to wasm instead of granular fe…
pishposh Sep 8, 2025
f3d1ee5
use builtin File::lock for rust ≥1.89, legacy_file_locking for older
pishposh Sep 8, 2025
a063ea6
nm, File::lock doesn't work in any wasm build anyway
pishposh Sep 9, 2025
d67e8e9
touchups
pishposh Sep 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -167,4 +167,23 @@ jobs:
args: --config=.golangci-lint.yml --skip-dirs=benchmark-tests
env:
CGO_ENABLED: 1


# ------------------------------------------------------------ [ Elixir Format Check ]
elixir-format-check:
runs-on: ubuntu-latest
timeout-minutes: 20

steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- uses: erlef/setup-beam@v1
with:
otp-version: '27'
elixir-version: '1.18'

- name: Run Mix Format Check
run: |
cd statsig-elixir
mix format --check-formatted
12 changes: 6 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ exclude = [
[workspace.package]
edition = "2021"
license = "ISC"
version = "0.8.5-beta.2508300230"
version = "0.8.5"
homepage = "https://statsig.com/"
authors = ["Statsig", "Daniel Loomb <daniel@statsig.com>"]
readme = "README.md"
Expand Down
2 changes: 1 addition & 1 deletion examples/rust/mem-bench/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion statsig-dotnet/Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<StatsigVersion>0.8.5-beta.2508300230</StatsigVersion>
<StatsigVersion>0.8.5</StatsigVersion>
<PackageLicenseExpression>ISC</PackageLicenseExpression>
</PropertyGroup>
</Project>
43 changes: 23 additions & 20 deletions statsig-elixir/lib/statsig.ex
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ defmodule Statsig do
end
end

def check_gate(gate_name, statsig_user, options \\nil) do
def check_gate(gate_name, statsig_user, options \\ nil) do
try do
instance = get_statsig_instance()

Expand All @@ -52,7 +52,7 @@ defmodule Statsig do
end
end

def get_feature_gate(gate_name, statsig_user, options \\nil) do
def get_feature_gate(gate_name, statsig_user, options \\ nil) do
try do
instance = get_statsig_instance()

Expand All @@ -68,7 +68,7 @@ defmodule Statsig do
end
end

def get_dynamic_config(config_name, statsig_user, options \\nil) do
def get_dynamic_config(config_name, statsig_user, options \\ nil) do
try do
instance = get_statsig_instance()

Expand All @@ -84,7 +84,7 @@ defmodule Statsig do
end
end

def get_experiment(experiment_name, statsig_user, options \\nil) do
def get_experiment(experiment_name, statsig_user, options \\ nil) do
try do
instance = get_statsig_instance()

Expand All @@ -100,7 +100,7 @@ defmodule Statsig do
end
end

def get_layer(layer_name, statsig_user, options \\nil) do
def get_layer(layer_name, statsig_user, options \\ nil) do
try do
instance = get_statsig_instance()

Expand All @@ -116,9 +116,10 @@ defmodule Statsig do
end
end

def get_prompt(prompt_name, statsig_user, options \\nil) do
def get_prompt(prompt_name, statsig_user, options \\ nil) do
try do
instance = get_statsig_instance()

case NativeBindings.get_prompt(instance, prompt_name, statsig_user, options) do
{:error, e} -> {:error, e}
layer -> {:ok, layer}
Expand All @@ -131,7 +132,7 @@ defmodule Statsig do
end
end

def get_client_init_response_as_string(statsig_user, options \\nil) do
def get_client_init_response_as_string(statsig_user, options \\ nil) do
try do
instance = get_statsig_instance()

Expand Down Expand Up @@ -204,22 +205,24 @@ defmodule Statsig do
def get_system_info do
try do
%{
"os"=> :os.type() |> elem(0) |> Atom.to_string(),
"arch"=> :erlang.system_info(:system_architecture) |> List.to_string(),
"language_version"=> System.version()
"os" => :os.type() |> elem(0) |> Atom.to_string(),
"arch" => :erlang.system_info(:system_architecture) |> List.to_string(),
"language_version" => System.version()
}
rescue
_ -> %{
"os"=> "unknown",
"arch"=> "unknown",
"language_version"=> "unknown"
}
_ ->
%{
"os" => "unknown",
"arch" => "unknown",
"language_version" => "unknown"
}
catch
_, _ -> %{
"os"=> "unknown",
"arch"=> "unknown",
"language_version"=> "unknown"
}
_, _ ->
%{
"os" => "unknown",
"arch" => "unknown",
"language_version" => "unknown"
}
end
end
end
5 changes: 3 additions & 2 deletions statsig-elixir/lib/statsig/dynamic_config.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,19 @@ defmodule Statsig.DynamicConfig do
:name,
:value,
:rule_id,
:id_type,
:id_type
]

@type t :: %__MODULE__{
name: String.t(),
value: String.t(),
rule_id: String.t(),
id_type: String.t(),
id_type: String.t()
}

def get_param_value(config, param_name) do
config = Jason.decode!(config.value)

case config do
%{^param_name => value} -> value
_ -> nil
Expand Down
1 change: 1 addition & 0 deletions statsig-elixir/lib/statsig/experiment.ex
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ defmodule Statsig.Experiment do

def get_param_value(experiment, param_name) do
config = Jason.decode!(experiment.value)

case config do
%{^param_name => value} -> value
_ -> nil
Expand Down
45 changes: 33 additions & 12 deletions statsig-elixir/lib/statsig/native_bindings.ex
Original file line number Diff line number Diff line change
@@ -1,30 +1,52 @@
defmodule Statsig.NativeBindings do
version = Mix.Project.config()[:version] |> to_string()

use RustlerPrecompiled,
otp_app: :statsig_elixir,
crate: "statsig_elixir",
version: version,
base_url: "https://github.com/statsig-io/statsig-elixir-core/releases/download/#{version}/",
force_build: System.get_env("FORCE_STATSIG_NATIVE_BUILD") in ["1", "true"],
targets: [
"aarch64-apple-darwin", # Add other supported targets if needed
# Add other supported targets if needed
"aarch64-apple-darwin",
"aarch64-unknown-linux-gnu",
"x86_64-apple-darwin",
"x86_64-unknown-linux-gnu",
"x86_64-unknown-linux-musl",
"aarch64-unknown-linux-musl",
"aarch64-unknown-linux-musl"
]

def new(_key, _options, _system_metadata), do: :erlang.nif_error(:nif_not_loaded)
def initialize(_statsig), do: :erlang.nif_error(:nif_not_loaded)
def check_gate(_statsig, _gate_name, _statsig_user, _options), do: :erlang.nif_error(:nif_not_loaded)
def get_feature_gate(_statsig, _gate_name, _statsig_user, _options), do: :erlang.nif_error(:nif_not_loaded)
def get_dynamic_config(_statsig, _config_name, _statsig_user, _options), do: :erlang.nif_error(:nif_not_loaded)
def get_experiment(_statsig, _experiment_name, _statsig_user, _options), do: :erlang.nif_error(:nif_not_loaded)
def get_layer(_statsig, _layer_name, _statsig_user, _options), do: :erlang.nif_error(:nif_not_loaded)
def get_prompt(_statsig, _prompt_name, _statsig_user, _options), do: :erlang.nif_error(:nif_not_loaded)
def get_client_init_response_as_string(_statsig, _statsig_user, _options), do: :erlang.nif_error(:nif_not_loaded)
def log_event(_statsig, _statsig_user, _event_name,_value, _metadata), do: :erlang.nif_error(:nif_not_loaded)
def log_event_with_number(_statsig, _statsig_user, _event_name,_value, _metadata), do: :erlang.nif_error(:nif_not_loaded)

def check_gate(_statsig, _gate_name, _statsig_user, _options),
do: :erlang.nif_error(:nif_not_loaded)

def get_feature_gate(_statsig, _gate_name, _statsig_user, _options),
do: :erlang.nif_error(:nif_not_loaded)

def get_dynamic_config(_statsig, _config_name, _statsig_user, _options),
do: :erlang.nif_error(:nif_not_loaded)

def get_experiment(_statsig, _experiment_name, _statsig_user, _options),
do: :erlang.nif_error(:nif_not_loaded)

def get_layer(_statsig, _layer_name, _statsig_user, _options),
do: :erlang.nif_error(:nif_not_loaded)

def get_prompt(_statsig, _prompt_name, _statsig_user, _options),
do: :erlang.nif_error(:nif_not_loaded)

def get_client_init_response_as_string(_statsig, _statsig_user, _options),
do: :erlang.nif_error(:nif_not_loaded)

def log_event(_statsig, _statsig_user, _event_name, _value, _metadata),
do: :erlang.nif_error(:nif_not_loaded)

def log_event_with_number(_statsig, _statsig_user, _event_name, _value, _metadata),
do: :erlang.nif_error(:nif_not_loaded)

def flush(_statsig), do: :erlang.nif_error(:nif_not_loaded)
def shutdown(_statsig), do: :erlang.nif_error(:nif_not_loaded)

Expand All @@ -33,5 +55,4 @@ defmodule Statsig.NativeBindings do
def layer_get_rule_id(_layer), do: :erlang.nif_error(:nif_not_loaded)
def layer_get(_layer, _param_name, _default_value), do: :erlang.nif_error(:nif_not_loaded)
def layer_get_group_name(_layer), do: :erlang.nif_error(:nif_not_loaded)

end
54 changes: 22 additions & 32 deletions statsig-elixir/lib/statsig/options.ex
Original file line number Diff line number Diff line change
@@ -1,30 +1,22 @@

defmodule Statsig.Options do
defstruct [
environment: nil,
output_log_level: nil,
init_timeout_ms: nil,
fallback_to_statsig_api: nil,

event_logging_flush_interval_ms: nil,
event_logging_max_queue_size: nil,
log_event_url: nil,

specs_sync_interval_ms: nil,
specs_url: nil,

enable_id_lists: nil,
id_lists_url: nil,
id_lists_sync_interval_ms: nil,

wait_for_country_lookup_init: nil,
wait_for_user_agent_init: nil,

disable_all_logging: nil,
disable_country_lookup: nil,
disable_network: nil,
disable_user_agent_parsing: nil,
]
defstruct environment: nil,
output_log_level: nil,
init_timeout_ms: nil,
fallback_to_statsig_api: nil,
event_logging_flush_interval_ms: nil,
event_logging_max_queue_size: nil,
log_event_url: nil,
specs_sync_interval_ms: nil,
specs_url: nil,
enable_id_lists: nil,
id_lists_url: nil,
id_lists_sync_interval_ms: nil,
wait_for_country_lookup_init: nil,
wait_for_user_agent_init: nil,
disable_all_logging: nil,
disable_country_lookup: nil,
disable_network: nil,
disable_user_agent_parsing: nil
end

defmodule Statsig.ExperimentEvaluationOptions do
Expand All @@ -44,9 +36,7 @@ defmodule Statsig.DynamicConfigEvaluationOptions do
end

defmodule Statsig.ClientInitResponseOptions do
defstruct [
hash_algorithm: nil,
client_sdk_key: nil,
include_local_overrides: nil
]
end
defstruct hash_algorithm: nil,
client_sdk_key: nil,
include_local_overrides: nil
end
Loading