Skip to content

Usage with ipfs-car

Install the CLI from npm (requires Node 20 or higher):

Terminal window
npm install -g @hash-stream/cli
npm install -g ipfs-car
Terminal window
# 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.car
bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa
# Show the CIDs for all the blocks of the CAR file
$ ipfs-car blocks file.car
bafkreiblganihhs4tqyasd3ies5zise6rmxbusn67qz3tv27ad32z56ocm
bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa
# Generate CID for a CAR file
$ ipfs-car hash file.car
bagbaieraquznspkkfr4hckm2vho7udiy33zk7anb3g732k27lab33tfkwkra

Using single level index writer for Pack (CAR file)

Section titled “Using single level index writer for Pack (CAR file)”
Terminal window
# 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-level
Store backend: fs
Indexing blobs...
Indexed Blob:
CID: MH(bafkreiblganihhs4tqyasd3ies5zise6rmxbusn67qz3tv27ad32z56ocm)
location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui)
offset: 96 length: 26
Indexed 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)”
Terminal window
# 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-level
Store backend: fs
Indexing blobs...
Indexed Blob:
CID: MH(bafkreiblganihhs4tqyasd3ies5zise6rmxbusn67qz3tv27ad32z56ocm)
location: MH(bafkreiefglmt2srmpbystgvj3x5a2gg66kxydiozx66swx2yao64zkvsui)
offset: 96 length: 26
Indexed 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.car
bagbaierasjalv5zwihm24bgtnjwepcte2hwh76355olccz4el5pd6vj7zafq
$ hash-stream index add bagbaierasjalv5zwihm24bgtnjwepcte2hwh76355olccz4el5pd6vj7zafq file2.car bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa --iw multiple-level
Pack CID: MH(bagbaierasjalv5zwihm24bgtnjwepcte2hwh76355olccz4el5pd6vj7zafq)
Containing CID: MH(bafybeihhm5tycyw4jxheqviebxkkt5jpjaxgkfihsinxuardpua4yprewa)
Indexing writer implementation: multiple-level
Store backend: fs
Indexing blobs...
Indexed Blob:
CID: MH(bafkreibko5iwjf46qq2v6eginy4poj5giembg2kfnnolhfn2l4gfaqpo5e)
location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm)
offset: 98 length: 262144
Indexed Blob:
CID: MH(bafkreiaeadotlqdbnqdgzdzi6ap2fgmysvtiwadmf7t7ti7nibmhw5uspi)
location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm)
offset: 262281 length: 262144
Indexed Blob:
CID: MH(bafkreicus7hrwpykh4tmrcczwmy7clejqvtnzrzidc6r333hgydo5ctza4)
location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm)
offset: 524464 length: 98588
Indexed Blob:
CID: MH(bafybeicsmghyptgzgzgjb7a54ygixcn4ggjdyvwl6h7ikwoz4v5yzrw6hu)
location: MH(bafkreiesic5ponsb3gxaju3knrdyuzgr5r77w7plsyqwpbc7ly7vkp6ibm)
offset: 623090 length: 158
Indexed 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