Usage with ipfs-car
Getting started
Section titled “Getting started”Install the CLI from npm (requires Node 20 or higher):
npm install -g @hash-stream/clinpm install -g ipfs-car
Create and Inspect CAR file
Section titled “Create and Inspect CAR file”# Pack a given file into a CAR file$ ipfs-car pack file.txt --output file.car
# Show the root CID in the CAR file$ ipfs-car roots file.carbafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa
# Show the CIDs for all the blocks of the CAR file$ ipfs-car blocks file.carbafkreiblganihhs4tqyasd3ies5zise6rmxbusn67qz3tv27ad32z56ocmbafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa
# Generate CID for a CAR file$ ipfs-car hash file.carbagbaieraquznspkkfr4hckm2vho7udiy33zk7anb3g732k27lab33tfkwkra
Examples
Section titled “Examples”Using single level index writer for Pack (CAR file)
Section titled “Using single level index writer for Pack (CAR file)”# Use single-level index writer implementation to associate blobs to the pack (CAR file)# index add <packCid> <filePath> --iw single-level$ hash-stream index add bagbaieraquznspkkfr4hckm2vho7udiy33zk7anb3g732k27lab33tfkwkra file.car --iw single-level
Pack CID: MH(bagbaieraquznspkkfr4hckm2vho7udiy33zk7anb3g732k27lab33tfkwkra)
Indexing writer implementation: single-levelStore backend: fs
Indexing blobs...
Indexed Blob: CID: MH(bafkreiblganihhs4tqyasd3ies5zise6rmxbusn67qz3tv27ad32z56ocm) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) offset: 96 length: 26Indexed Blob: CID: MH(bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) offset: 159 length: 67
# find target index records stored in the index# index find records <targetCid>$ hash-stream index find records bafkreiblganihhs4tqyasd3ies5zise6rmxbusn67qz3tv27ad32z56ocm
Target CID: MH(bafkreiblganihhs4tqyasd3ies5zise6rmxbusn67qz3tv27ad32z56ocm)Store backend: fs
Finding target...
Index Records: CID: MH(bafkreiblganihhs4tqyasd3ies5zise6rmxbusn67qz3tv27ad32z56ocm) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) type: BLOB, offset: 96, length: 26
$ hash-stream index find records bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa
Target CID: MH(bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa)Store backend: fs
Finding target...
Index Records: CID: MH(bafkreihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) type: BLOB, offset: 159, length: 67
$ hash-stream index find records bagbaieraquznspkkfr4hckm2vho7udiy33zk7anb3g732k27lab33tfkwkra
Target CID: MH(bagbaieraquznspkkfr4hckm2vho7udiy33zk7anb3g732k27lab33tfkwkra)Store backend: fs
Finding target...
Index Records: CID: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) type: PACK, offset: N/A, length: N/A
Using Multiple level index writer for Pack (CAR file)
Section titled “Using Multiple level index writer for Pack (CAR file)”# Use single-level index writer implementation to associate blobs to the pack (CAR file)# index add <packCid> <filePath> [containingCid] --iw multiple-level$ hash-stream index add bagbaieraquznspkkfr4hckm2vho7udiy33zk7anb3g732k27lab33tfkwkra file.car bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa --iw multiple-level
Pack CID: MH(bagbaieraquznspkkfr4hckm2vho7udiy33zk7anb3g732k27lab33tfkwkra)Containing CID: MH(bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa)
Indexing writer implementation: multiple-levelStore backend: fs
Indexing blobs...
Indexed Blob: CID: MH(bafkreiblganihhs4tqyasd3ies5zise6rmxbusn67qz3tv27ad32z56ocm) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) offset: 96 length: 26Indexed Blob: CID: MH(bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) offset: 159 length: 67
# find index records of a given blob/pack/containing stored using the associated index writer store# index find records <targetCid> [containingCid]$ hash-stream index find records bafkreiblganihhs4tqyasd3ies5zise6rmxbusn67qz3tv27ad32z56ocm bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa
Target CID: MH(bafkreiblganihhs4tqyasd3ies5zise6rmxbusn67qz3tv27ad32z56ocm)Containing CID: MH(bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa)Store backend: fs
Finding target...
Index Records: CID: MH(bafkreiblganihhs4tqyasd3ies5zise6rmxbusn67qz3tv27ad32z56ocm) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) type: BLOB, offset: 96, length: 26
$ hash-stream index find records bagbaieraquznspkkfr4hckm2vho7udiy33zk7anb3g732k27lab33tfkwkra bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa
Target CID: MH(bagbaieraquznspkkfr4hckm2vho7udiy33zk7anb3g732k27lab33tfkwkra)Containing CID: MH(bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa)Store backend: fs
Finding target...
Index Records: CID: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) type: PACK, offset: N/A, length: N/A
Sub-Records: CID: MH(bafkreiblganihhs4tqyasd3ies5zise6rmxbusn67qz3tv27ad32z56ocm) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) type: BLOB, offset: 96, length: 26
CID: MH(bafkreihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) type: BLOB, offset: 159, length: 67
$ hash-stream index find records bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa
Target CID: MH(bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa)Store backend: fs
Finding target...
Index Records: CID: MH(bafkreihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) type: BLOB, offset: 159, length: 67
CID: MH(bafkreihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa) location: MH(bafkreihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa) type: CONTAINING, offset: N/A, length: N/A
Sub-Records: CID: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) type: PACK, offset: N/A, length: N/A
Sub-Records: CID: MH(bafkreiblganihhs4tqyasd3ies5zise6rmxbusn67qz3tv27ad32z56ocm) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) type: BLOB, offset: 96, length: 26
CID: MH(bafkreihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) type: BLOB, offset: 159, length: 67
# but a containing CID MAY be split across Packs# considering there are also blobs for it in a file2.car$ ipfs-car hash file2.carbagbaierasjalv5zwihm24bgtnjwepcte2hwh76355olccz4el5pd6vj7zafq
$ hash-stream index add bagbaierasjalv5zwihm24bgtnjwepcte2hwh76355olccz4el5pd6vj7zafq file2.car bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa --iw multiple-level
Pack CID: MH(bagbaierasjalv5zwihm24bgtnjwepcte2hwh76355olccz4el5pd6vj7zafq)Containing CID: MH(bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa)
Indexing writer implementation: multiple-levelStore backend: fs
Indexing blobs...
Indexed Blob: CID: MH(bafkreibko5iwjf46qq2v6eginy4poj5giembg2kfnnolhfn2l4gfaqpo5e) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) offset: 98 length: 262144Indexed Blob: CID: MH(bafkreiaeadotlqdbnqdgzdzi6ap2fgmysvtiwadmf7t7ti7nibmhw5uspi) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) offset: 262281 length: 262144Indexed Blob: CID: MH(bafkreicus7hrwpykh4tmrcczwmy7clejqvtnzrzidc6r333hgydo5ctza4) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) offset: 524464 length: 98588Indexed Blob: CID: MH(bafybeicsmghyptgzgzgjb7a54ygixcn4ggjdyvwl6h7ikwoz4v5yzrw6hu) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) offset: 623090 length: 158Indexed Blob: CID: MH(bafybeigrdifaivilxcszd5byjzoje6en7tzaf574ldocxmbyuyc4lp2zoi) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) offset: 623285 length: 64
# Find index records for new pack$ hash-stream index find records bagbaierasjalv5zwihm24bgtnjwepcte2hwh76355olccz4el5pd6vj7zafq bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa
Target CID: MH(bagbaierasjalv5zwihm24bgtnjwepcte2hwh76355olccz4el5pd6vj7zafq)Containing CID: MH(bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa)Store backend: fs
Finding target...
Index Records: CID: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) type: PACK, offset: N/A, length: N/A
Sub-Records: CID: MH(bafkreibko5iwjf46qq2v6eginy4poj5giembg2kfnnolhfn2l4gfaqpo5e) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) type: BLOB, offset: 98, length: 262144
CID: MH(bafkreiaeadotlqdbnqdgzdzi6ap2fgmysvtiwadmf7t7ti7nibmhw5uspi) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) type: BLOB, offset: 262281, length: 262144
CID: MH(bafkreicus7hrwpykh4tmrcczwmy7clejqvtnzrzidc6r333hgydo5ctza4) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) type: BLOB, offset: 524464, length: 98588
CID: MH(bafkreicsmghyptgzgzgjb7a54ygixcn4ggjdyvwl6h7ikwoz4v5yzrw6hu) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) type: BLOB, offset: 623090, length: 158
CID: MH(bafkreigrdifaivilxcszd5byjzoje6en7tzaf574ldocxmbyuyc4lp2zoi) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) type: BLOB, offset: 623285, length: 64
# Find index records for containing$ hash-stream index find records bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa
Target CID: MH(bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa)Store backend: fs
Finding target...
Index Records: CID: MH(bafkreihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) type: BLOB, offset: 159, length: 67
CID: MH(bafkreihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa) location: MH(bafkreihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa) type: CONTAINING, offset: N/A, length: N/A
Sub-Records: CID: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) type: PACK, offset: N/A, length: N/A
Sub-Records: CID: MH(bafkreiblganihhs4tqyasd3ies5zise6rmxbusn67qz3tv27ad32z56ocm) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) type: BLOB, offset: 96, length: 26
CID: MH(bafkreihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa) location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui) type: BLOB, offset: 159, length: 67
CID: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) type: PACK, offset: N/A, length: N/A
Sub-Records: CID: MH(bafkreibko5iwjf46qq2v6eginy4poj5giembg2kfnnolhfn2l4gfaqpo5e) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) type: BLOB, offset: 98, length: 262144
CID: MH(bafkreiaeadotlqdbnqdgzdzi6ap2fgmysvtiwadmf7t7ti7nibmhw5uspi) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) type: BLOB, offset: 262281, length: 262144
CID: MH(bafkreicus7hrwpykh4tmrcczwmy7clejqvtnzrzidc6r333hgydo5ctza4) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) type: BLOB, offset: 524464, length: 98588
CID: MH(bafkreicsmghyptgzgzgjb7a54ygixcn4ggjdyvwl6h7ikwoz4v5yzrw6hu) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) type: BLOB, offset: 623090, length: 158
CID: MH(bafkreigrdifaivilxcszd5byjzoje6en7tzaf574ldocxmbyuyc4lp2zoi) location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm) type: BLOB, offset: 623285, length: 64