Bitfield
A bitfield implementation using buffers, compliant with the BitTorrent spec.
Install / Use
/learn @fb55/BitfieldREADME
bitfield
A simple bitfield, compliant with the BitTorrent spec.
npm install bitfield
Example
import Bitfield from "bitfield";
const field = new Bitfield(256); // Create a bitfield with 256 bits.
field.set(128); // Set the 128th bit.
field.set(128, true); // Same as above.
field.get(128); // `true`
field.get(200); // `false` (all values are initialised to `false`)
field.get(1e3); // `false` (out-of-bounds is also false)
field.set(128, false); // Set the 128th bit to 0 again.
field.buffer; // The buffer used by the bitfield.
Class: BitField
Constructors
Properties
Methods
Constructors
constructor
+ new BitField(data?: number | Uint8Array, opts?: BitFieldOptions): BitField
Parameters:
| Name | Type | Default value | Description |
| ------- | -------------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| data | number | Uint8Array | 0 | Either a number representing the maximum number of supported bytes, or a Uint8Array. |
| opts? | { grow: number } | { grow: 0 } | <p>grow:<p>If you set an index that is out-of-bounds, the bitfield will automatically grow so that the bitfield is big enough to contain the given index, up to the given size (in bit). <p>If you want the Bitfield to grow indefinitely, pass Infinity. |
Returns: BitField
Properties
buffer
• buffer: Uint8Array
The internal storage of the bitfield.
Methods
forEach
▸ forEach(fn: (bit: boolean, index: number) => void, start?: number, end?: number): void
Loop through the bits in the bitfield.
Parameters:
| Name | Type | Default value | Description |
| ------- | ------------------------------------- | ----------------------- | ----------------------------------------------------------- |
| fn | (bit: boolean, index: number) => void | - | Function to be called with the bit value and index. |
| start | number | 0 | Index of the first bit to look at. |
| end | number | this.buffer.length * 8 | Index of the first bit that should no longer be considered. |
Returns: void
get
▸ get(i: number): boolean
Get a particular bit.
Parameters:
| Name | Type | Description |
| ---- | ------ | ---------------------- |
| i | number | Bit index to retrieve. |
Returns: boolean
A boolean indicating whether the ith bit is set.
set
▸ set(i: number, value?: boolean): void
Set a particular bit.
Will grow the underlying array if the bit is out of bounds and the grow option is set.
Parameters:
| Name | Type | Default value | Description |
| ------- | ------- | ------------- | -------------------------------------------- |
| i | number | - | Bit index to set. |
| value | boolean | true | Value to set the bit to. Defaults to true. |
Returns: void
setAll
▸ setAll(array: ArrayLike<boolean>, offset?: number): void
Set the bits in the bitfield to the values in the given array.
Parameters:
| Name | Type | Default value | Description |
| -------- | -------------------- | ------------- | ------------------------------------- |
| array | ArrayLike<boolean> | - | Array of booleans to set the bits to. |
| offset | number | 0 | Index of the first bit to set. |
Returns: void
License
MIT
Related Skills
product-manager-skills
31PM skill for Claude Code, Codex, Cursor, and Windsurf: diagnose SaaS metrics, critique PRDs, plan roadmaps, run discovery, and coach PM career transitions.
devplan-mcp-server
3MCP server for generating development plans, project roadmaps, and task breakdowns for Claude Code. Turn project ideas into paint-by-numbers implementation plans.
