
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
file-format
Advanced tools
Serialise your objects to and from Blobs, Base64, or ArrayBuffers to create custom binary file formats with ease
file-format converts objects to and from Blobs, Base64, or ArrayBuffers with the freedom to shape things as a JSON object. This is useful for packing complex types of data into a single file for your applications file format, or bundling resource fetched over a network.
This library is primarily designed for Browser / Electron usage, though Node usage is possible for Node versions higher than 15.7.
Blobsupport is poor/non-existent in older version of Node (< v15.7) - see the Blob Node compatibility info. Use a polyfill like cross-blob if required.
Install as dependency through npm.
npm install file-format
To define a format just create either an object or an array with keys/values/items of these supported types:
stringnumberbooleannullBlobArrayBufferAlso supports arbitrary Arrays and Object combinations of these types.
You're free to structure things as required, these types should provide all the flexibility to capture a self-contained file. For example, you can store images as blobs and any metadata required as a single file.
Here's an example of an arbitrary file format:
// define an object with any sub structures based on the supported types...
const myFileFormat = {
aNullProp: null,
aStringProp: "x",
aNumberProp: 123,
anArrayProp: [null, "bar", 123, { x: 1 }],
aBoolean: true,
theOtherBoolean: false,
aComplexArray: ["a", "b", { c: false, d: [1, 2, [3, null]] }],
aBlobProp: blob,
someObjectProp: {
subProp1: {
subProp2: true,
},
},
anArrayBufferProp: arrayBuffer,
anotherNumber: 1000.55,
};
// or define it as an array
const myFileFormat = [
// ...same supported types as above, with any nesting or sub structures required
];
To create a Blob, Base64, or ArrayBuffer from an object use the DataWriter and call toBlob(), toArrayBuffer() or toBase64() respectively.
import { DataWriter } from "file-format";
const writer = new DataWriter();
writer.serialise(myFileFormat).then(() => {
// create a Blob...
const blob = writer.toBlob();
// or an ArrayBuffer...
const arrayBuffer = writer.toArrayBuffer();
// or a Base64 String...
const base64 = writer.toBase64();
});
To read a Blob or Base64 String use the DataReader. You can pass in a Blob or base64 string.
import { DataReader } from "file-format";
const reader = new DataReader();
reader.deserialise(blobOrBase64String).then((myFileFormat) => {
// myFileFormat is an object just as you originally saved it...
});
NOTE: The blob must have been created by a
DataWriterotherwise unexpected errors will occur during read.
Please report any issues here.
FAQs
Serialise your objects to and from Blobs, Base64, or ArrayBuffers to create custom binary file formats with ease
We found that file-format demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.