Compatibility
How seniority's four drop-ins are graded by their incumbents' own suites — lilconfig 77 / 77, rc 1 / 1 (one bit), cosmiconfig 186 / 243 (YAML), dotenv 106 / 141 (the vault) — and the differences that remain.
seniority (cosmiconfig's API at the root), seniority/lilconfig, seniority/dotenv and
seniority/rc are graded, not described as compatible. Each is run against its incumbent's
own test suite, by
compat-oracle,
in CI.
✓ yes · ◐ partial, with what is missing · ✗ no · — does not apply. Every mark links to its evidence: our test or grade, or the incumbent’s source at the version compat-oracle grades.
| Capability | seniority | cosmiconfig | lilconfig | dotenv | rc |
|---|---|---|---|---|---|
| Compatibility | |||||
Passes lilconfig's own test suiteseniority/lilconfig is graded by lilconfig 3.1.3's own tests, all 77, the same count the real lilconfig gets here. | seniority: yes77 / 77 of its own tests | cosmiconfig: does not applya different API | lilconfig: yesits own suite, the control run | dotenv: does not applya different API | rc: does not applya different API |
Passes rc's own testseniority/rc runs rc 1.2.8's test script, one script of bare assertions with no reporter, and exits 0: the grade is one bit, not 100% of anything. | seniority: yes1 / 1 of its own tests | cosmiconfig: does not applya different API | lilconfig: does not applya different API | dotenv: does not applya different API | rc: yesits own test, the control run |
Passes cosmiconfig's own test suite, bar YAMLseniority passes 186 of the 243 cases of cosmiconfig 10.0.1's own suite; 54 of the rest are YAML, which seniority deliberately does not parse without a loader. | seniority: partialpartial186 / 243 of its own tests | cosmiconfig: yesits own suite, the control run; the case the harness cannot load fails for it too | lilconfig: does not applya different API | dotenv: does not applya different API | rc: does not applya different API |
Passes dotenv's own test suite, bar the vaultseniority/dotenv passes 106 of the 141 assertions of dotenv 17.4.2's own suite (node-tap counts assertions); the encrypted .env.vault and the dotenvx tips are declined, not missing. | seniority: partialpartial106 / 141 of its own tests | cosmiconfig: does not applya different API | lilconfig: does not applya different API | dotenv: yesits own suite, the control run | rc: does not applya different API |
Compatibility
Passes lilconfig's own test suite
seniority/lilconfigis graded by lilconfig 3.1.3's own tests, all 77, the same count the real lilconfig gets here.cosmiconfig- cosmiconfig: does not applya different API
Passes rc's own test
seniority/rcruns rc 1.2.8's test script, one script of bare assertions with no reporter, and exits 0: the grade is one bit, not 100% of anything.seniority- seniority: yes1 / 1 of its own tests
cosmiconfig- cosmiconfig: does not applya different API
Passes cosmiconfig's own test suite, bar YAML
senioritypasses 186 of the 243 cases of cosmiconfig 10.0.1's own suite; 54 of the rest are YAML, which seniority deliberately does not parse without a loader.Passes dotenv's own test suite, bar the vault
seniority/dotenvpasses 106 of the 141 assertions of dotenv 17.4.2's own suite (node-tap counts assertions); the encrypted.env.vaultand the dotenvx tips are declined, not missing.cosmiconfig- cosmiconfig: does not applya different API
The family's compatibility page is generated from the oracle's last run and is the authority for the current figures.
How a suite is graded
- The incumbent's repository is cloned at the graded version, and its test directory is copied
into
packages/compat-oracle/vendor/. The versions are cosmiconfig 10.0.1, lilconfig 3.1.3, dotenv 17.4.2, and rc 1.2.8 (rc's release was never tagged, so its commit is pinned). Each copy has aPROVENANCEfile. - The only edit is the import that reaches the library, rewritten to a shim generated per run.
- A control run points the shim at the real incumbent first. Its total is what every rate is measured against.
- The target run points the same shim at seniority.
What each grade covers
- lilconfig: 77 of 77, the same count the real lilconfig gets here. Ten of the cases mock
fswithjest.mockto assert which files were read, and the oracle applies that mock the way jest does. - rc: 1 of 1, by exit code. rc's suite is one script of bare assertions with no reporter, so the grade is one bit: the script ran against seniority and exited 0. It is not 100% of anything.
- cosmiconfig: 186 of 243. Of the 57 not passing:
- 54 carry the "no YAML parser" refusal (all 22 cases of
import.test.tsamong them, because$importis tested only over.ymlfixtures); - 1 is
index.test.ts, which imports cosmiconfig's entry by a file path and fails for the control too; - 2 are an XDG pair that registers only on Linux. seniority resolves the global directory differently, and those two are counted against it on every platform.
- 54 carry the "no YAML parser" refusal (all 22 cases of
- dotenv: 106 of 141. The suite runs under node-tap, which counts assertions, so 141 is
assertions. Of the 35 not passing:
- 27 are the
.env.vaultanddecryptpath, declined; - 2 are dotenvx tips, declined;
- 6 load dotenv's private
lib/*modules by path.
- 27 are the
Known differences
- No YAML, and no INI. The cosmiconfig and rc drop-ins read JSON (rc's with comments) and refuse YAML and INI by name, with a hint naming the argument that supplies a parser.
seniority/dotenvwritesprocess.envonly when you give it nothing else. PassprocessEnvand it fills that object instead.- The vault is declined.
.env.vault,DOTENV_KEYanddecryptare not implemented. - seniority's own API is stricter than the drop-ins.
resolvereads only declared options from the environment and refuses unclear booleans.seniority/rckeeps rc's behaviour, which is to take every<name>_variable.
Moving one import
- import { cosmiconfig } from 'cosmiconfig';
+ import { cosmiconfig } from 'seniority';- import { lilconfig } from 'lilconfig';
+ import { lilconfig } from 'seniority/lilconfig';npx burgee migrate --dry-run lists every import it would rewrite, and rewrites only drop-ins
graded level with their incumbent, which here means lilconfig and rc.
Incremental migration moves from a drop-in to resolve.
Why seniority
seniority against cosmiconfig, lilconfig, dotenv and rc, one capability per row, every cell linked to the test, grade or source that proves it — including YAML, which it deliberately leaves to a loader you pass.
Coming from cosmiconfig
A cosmiconfig alternative with zero dependencies: import { cosmiconfig } from seniority, graded 186 / 243 by cosmiconfig's own suite (YAML is the gap) — with provenance, so every resolved value can say where it came from, as text, --json data or an agent event.