{"id":22848889,"url":"https://github.com/eckhardt-d/bitflags","last_synced_at":"2026-01-03T21:55:24.114Z","repository":{"id":250414731,"uuid":"834414973","full_name":"Eckhardt-D/bitflags","owner":"Eckhardt-D","description":"A simple bit masking library for TypeScript, store features in a single integer","archived":false,"fork":false,"pushed_at":"2024-07-27T16:51:40.000Z","size":41,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-14T14:18:05.796Z","etag":null,"topics":["bitmasking","featureflags"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Eckhardt-D.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-27T07:41:12.000Z","updated_at":"2024-07-27T16:51:44.000Z","dependencies_parsed_at":"2024-07-27T08:43:34.332Z","dependency_job_id":"d006b6e5-ac7a-436b-877f-44c793912bba","html_url":"https://github.com/Eckhardt-D/bitflags","commit_stats":null,"previous_names":["eckhardt-d/bitflags"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eckhardt-D%2Fbitflags","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eckhardt-D%2Fbitflags/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eckhardt-D%2Fbitflags/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eckhardt-D%2Fbitflags/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Eckhardt-D","download_url":"https://codeload.github.com/Eckhardt-D/bitflags/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244116616,"owners_count":20400733,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bitmasking","featureflags"],"created_at":"2024-12-13T04:15:08.031Z","updated_at":"2026-01-03T21:55:24.061Z","avatar_url":"https://github.com/Eckhardt-D.png","language":"TypeScript","readme":"# Bitflags\n\nMaintain feature flags in a single integer.\n\n## Getting started\n\n```bash\nbun add @eckidevs/bitflags\n```\n\n## Usage\n\n```typescript\nimport { defineMask } from '@eckidevs/bitflags';\n\nconst featureFlags = defineMask([\n  \"is_admin\",\n  \"dark_mode\",\n  \"experimental_mode\",\n  \"pro_account\",\n]);\n\nfeatureFlags.listActiveFlags(); // []\n\n// Turn a flag on\nfeatureFlags.setFlag(\"dark_mode\"); // true\nfeatureFlags.listActiveFlags(); // [\"dark_mode\"]\n\n// Get individual flag status\nfeatureFlags.isFlagActive(\"dark_mode\"); // true\nfeatureFlags.isFlagActive(\"is_admin\"); // false\n\nfeatureFlags.setFlag(\"pro_account\"); // true\nfeatureFlags.listActiveFlags(); // [\"dark_mode\", \"pro_account\"]\n\n// List all flags as [string, boolean] tuples\nfeatureFlags.listAllFlags(); // [[\"is_admin\", false], [\"dark_mode\", true], [\"experimental_mode\", false], [\"pro_account\", true]]\n\n// Unset a flag\nfeatureFlags.clearFlag(\"dark_mode\"); // 8 (0b1000)\n\n// Completely remove a flag\nfeatureFlags.removeFlag(\"pro_account\"); // 0 (0b000)\n\n// Add a new flag\nfeatureFlags.addFlag(\"is_moderator\"); // 0 (0b0000)\nfeatureFlags.setFlag(\"is_moderator\"); // true\n\n// Turn all flags on\nfeatureFlags.setState(15); // 15 (0b1111)\n\n// Turn all flags off\nfeatureFlags.setState(0); // 0 (0b0000)\n```\n\n## Example use case\n\nStoring a single integer in a SQL column e.g. users\n\n```typescript\nimport { defineMask } from '@eckidevs/bitflags';\n\nconst featureFlags = defineMask([\n  \"is_admin\",\n  \"dark_mode\",\n  \"experimental_mode\",\n  \"pro_account\",\n]);\n\nconst query = \"SELECT flags FROM users WHERE id = $1\";\nconst user = await db.query(query, [1]);\n\nfeatureFlags.setState(user.flags);\n\n// Check\nfeatureFlags.isFlagActive(\"dark_mode\"); // true\n\n// Update\nfeatureFlags.setFlag(\"is_admin\");\nconst updateQuery = \"UPDATE users SET flags = $1 WHERE id = $2\";\nawait db.query(updateQuery, [featureFlags.getState(), 1]);\n```\n\n## Contributing\n\nFeel free to open issues, make PRs, and contribute in any way you think is helpful.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feckhardt-d%2Fbitflags","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feckhardt-d%2Fbitflags","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feckhardt-d%2Fbitflags/lists"}