You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Security-control details live in [docs/SECURITY_CONTROLS.md](docs/SECURITY_CONTROLS.md). Dependency policy lives in [docs/DEPENDENCIES.md](docs/DEPENDENCIES.md). Panic policy lives in [docs/PANIC_POLICY.md](docs/PANIC_POLICY.md).
67
+
Security-control details live in [docs/SECURITY_CONTROLS.md](docs/SECURITY_CONTROLS.md). Dependency policy lives in [docs/DEPENDENCIES.md](docs/DEPENDENCIES.md). Panic policy lives in [docs/PANIC_POLICY.md](docs/PANIC_POLICY.md). Stable API and rendering policy lives in [docs/STABILITY.md](docs/STABILITY.md).
68
68
69
-
Future version planning for variant expansion and 1.0 stabilization lives in
70
-
[docs/VERSION_PLAN.md](docs/VERSION_PLAN.md). `hashavatar` remains a single
71
-
image-generation crate; low-level core planning is kept internal unless a
72
-
future release has a concrete image-generation reason to split it.
69
+
Future version planning lives in[docs/VERSION_PLAN.md](docs/VERSION_PLAN.md).
70
+
`hashavatar` remains a single image-generation crate; low-level core planning
71
+
is kept internal unless a future release has a concrete image-generation reason
72
+
to split it.
73
73
74
74
## Install
75
75
76
76
```toml
77
77
[dependencies]
78
-
hashavatar = "0.13.0"
78
+
hashavatar = "1.0.0"
79
79
```
80
80
81
81
Optional identity hash modes and extra raster encoders are disabled by default.
82
82
Hash modes are mutually exclusive, so enable at most one of `blake3` or `xxh3`:
83
83
84
84
```toml
85
85
[dependencies]
86
-
hashavatar = { version = "0.13.0", features = ["blake3"] }
86
+
hashavatar = { version = "1.0.0", features = ["blake3"] }
87
87
```
88
88
89
89
Enable additional raster formats explicitly:
90
90
91
91
```toml
92
92
[dependencies]
93
-
hashavatar = { version = "0.13.0", features = ["png", "jpeg", "gif"] }
93
+
hashavatar = { version = "1.0.0", features = ["png", "jpeg", "gif"] }
94
94
```
95
95
96
96
Or enable every optional raster encoder at once:
97
97
98
98
```toml
99
99
[dependencies]
100
-
hashavatar = { version = "0.13.0", features = ["all-formats"] }
100
+
hashavatar = { version = "1.0.0", features = ["all-formats"] }
101
101
```
102
102
103
103
Combine these as needed, for example `features = ["blake3", "png"]`.
@@ -115,6 +115,20 @@ The crate is dual-licensed:
115
115
license = "MIT OR Apache-2.0"
116
116
```
117
117
118
+
## Stable Contract
119
+
120
+
`1.0.0` freezes the crate's public API shape and documented rendering contract.
121
+
Patch releases should not intentionally change output for the same explicit
122
+
rendering tuple except for correctness or security fixes. Minor releases may
123
+
add opt-in features, output formats, avatar families, backgrounds, or visual
124
+
layer variants when they are documented and tested. Automatic style rendering
125
+
can change distribution when public enum `ALL` lists grow, so services that
126
+
need precise visual rollout control should use namespace `style_version`
127
+
values deliberately.
128
+
129
+
See [docs/STABILITY.md](docs/STABILITY.md) for the full semver and rendering
130
+
policy.
131
+
118
132
## Limits
119
133
120
134
| Limit | Value |
@@ -381,7 +395,7 @@ your namespace style version when intentionally migrating output.
381
395
382
396
```toml
383
397
[dependencies]
384
-
hashavatar = { version = "0.13.0", features = ["blake3"] }
398
+
hashavatar = { version = "1.0.0", features = ["blake3"] }
This makes the crate suitable for stable CDN-backed avatar URLs and golden regression tests. Namespace hashing uses length-prefixed components, so embedded separator bytes cannot create tenant/style-version ambiguity. The default SHA-512 path keeps the pre-0.7 identity preimage stable; optional crate-wide hash modes are domain-separated.
637
+
Within the `1.x` series, explicit output for that tuple should remain stable
638
+
except for documented correctness or security fixes. This makes the crate
639
+
suitable for stable CDN-backed avatar URLs and golden regression tests.
640
+
Namespace hashing uses length-prefixed components, so embedded separator bytes
641
+
cannot create tenant/style-version ambiguity. The default SHA-512 path keeps the
642
+
pre-0.7 identity preimage stable; optional crate-wide hash modes are
643
+
domain-separated.
624
644
625
645
For style-aware rendering, the deterministic tuple also includes
626
646
`accessory`, `color`, `expression`, and `shape`. Existing `AvatarOptions`
627
647
entry points keep those extra layer choices at `none`, `default`, `default`,
628
648
and `square`, so explicitly selected `AvatarOptions` output remains stable
629
-
unless the selected family renderer changes. `0.13.0` adds new
630
-
`AvatarBackground` values, so automatic style derivation can map some
631
-
identities to different backgrounds than `0.12.0`; services that need the old
632
-
automatic distribution should keep their existing namespace style version until
633
-
they intentionally migrate. Some family/layer combinations are deterministic
634
-
no-ops when the layer has no sensible anchor for that family.
649
+
within a major release unless a documented correctness or security fix requires
650
+
new output. Automatic style rendering derives choices through public `ALL`
651
+
variant lists, so adding variants in a future minor release can change
652
+
automatic distribution. Services that need controlled rollouts should keep
653
+
their existing namespace style version until they intentionally migrate. Some
654
+
family/layer combinations are deterministic no-ops when the layer has no
655
+
sensible anchor for that family.
635
656
636
657
Frame shapes are applied as masks in raster output and as SVG clip paths in SVG
637
658
output. Non-square shapes therefore trim the background, avatar body, color
638
659
accent, accessory layer, and expression layer consistently before drawing the
639
660
frame border.
640
661
641
662
The renderer still uses floating-point geometry in family-specific drawing
642
-
paths. Frame-shape raster hit-testing uses integer arithmetic as of `0.13.0`,
663
+
paths. Frame-shape raster hit-testing uses integer arithmetic as of `1.0.0`,
643
664
which reduces one source of platform rounding variance. The project tests
644
665
golden fingerprints on the release platform, but it does not yet claim formal
645
666
bit-identical raster output across every CPU architecture, compiler backend,
0 commit comments