“Permissions shouldn't feel like building a nuclear reactor.”
— Every developer buried in JSON access trees
🔥 What's the problem?
In every project with users, roles, and permissions, you eventually hit something like this:
{
"user": {
"profile": {
"read": true,
"edit": false
},
"settings": {
"change": true
}
},
"order": {
"delivery": {
"cancel": true
}
}
}
😵💫 Massive, nested JSON
🤯 Redundant data (false/null/undefined)
🧩 Pain to store in JWTs, sessions, or URLs
🧨 Breaks when schema changes
🚀 Enter scode-acl
scode-acl
(Structured Compressed ACL) is a schema-driven, ultra-compact access control tool built with TypeScript. It compresses permission data into string-encoded indexes like "0 3 7"
, verifiable by schema hash.
🛡 Core ideas:
✅ Schema → dot paths → compressed string
✅ Only stores
true
permissions✅ Validates schema with
crc32
orsha256
✅ Works great in JWTs, cookies, URLs, mobile apps
✅ Full access check API
⚙️ Flat Mode Example
import { createFlatSCode } from "scode-acl";
const schema = {
user: {
profile: ["read", "update"],
settings: ["change"],
},
order: {
delivery: ["cancel"],
},
};
const access = {
user: {
profile: { read: true },
settings: { change: true },
},
order: {
delivery: { cancel: true },
},
};
const formatter = createFlatSCode(schema);
const { access: accessString, schemaHash } = formatter.encodeAccess(access);
console.log(accessString); // → "0 3 5"
🔍 Parse access string
formatter.parseAccess(accessString, schemaHash);
// → ['user.profile.read', 'user.settings.change', 'order.delivery.cancel']
✅ Check a permission
formatter.hasAccess("user.profile.read", accessString);
// → true
⚡ Performance Comparison
Format
Encode Time
Size (30+ permissions)
JSON
~8ms
~300 bytes
scode-acl
~1.2ms
~16–28 bytes
It’s basically JWT-safe and sessionStorage-ready.
🔌 Use Cases
✅ JWT tokens — fits easily in payload
✅ GraphQL/REST auth guards
✅ Admin panels — cleaner than boolean spaghetti
✅ Mobile/web apps — tiny access footprint
✅ Firebase custom claims / access tokens
🔮 Why is it useful?
Only
true
permissions are storedSchema hash ensures backward compatibility
Tiny strings — easier to debug than full JSON
Supports Flat and Nested encoding
100% TypeScript — type-safe, fast, and portable
🛠 Install
npm install scode-acl
🛣 Roadmap
Wildcard permissions (
user.profile.*
)Role groups (
admin
,viewer
)GUI schema editor (Web playground)
Schema → TS type generator
🔗 Links
🤝 Maintainer: @diyor-dev on LinkedIn
🧠 Final thoughts
Most ACL systems are heavy, bloated, or overcomplicated.
scode-acl
is a minimalistic alternative designed to be:
🧩 Small enough to fit in a token.
🔍 Clear enough to read as a dot path.
🧠 Smart enough to validate itself.
If you're building systems that deal with auth, access control, roles, or modular UIs — try scode-acl
.
Use it, fork it, improve it.
And if you’ve been burned by ACL complexity before —
you’ll probably find this very refreshing.
Top comments (1)
very nice