A method comprising: storing first data representing a first version (104, 302) of a file; storing second data representing a second version (106, 304) of the file; determining that a first portion (116, 116, 116) of the first data includes the same data as a first portion (116, 116, 116) of the second data; and based at least in part on the first portion of the first data includes the same data as the first portion of the second data: identifying a second portion (116, 116, 116) of the first data using the first portion of the first data; identifying a second portion (116, 116, 116) of the second data using the first portion of the second data; generating first compressed data by compressing the second portion of the first data by at least generating a first dictionary associated with the second portion of the first data; generating second compressed data by compressing the second portion of the second data by at least generating a second dictionary associated with the second portion of the second data; generating third compressed data by compressing the second portion of the second data by at least generating a third dictionary associated with the second portion of the second data using the first dictionary as a base to generate the third dictionary; determining a difference between the third compressed data and the second compressed data; determining that the difference satisfies a threshold difference; storing the third compressed data as at least part of a patch file (126, 310) for the file; and sending, to one or more electronic devices, the patch file for updating the file from the first version of the file to the second version of the file. storing first data representing a first version (104, 302) of a file; storing second data representing a second version (106, 304) of the file; determining that a first portion (116, 116, 116) of the first data includes the same data as a first portion (116, 116, 116) of the second data; and based at least in part on the first portion of the first data includes the same data as the first portion of the second data: identifying a second portion (116, 116, 116) of the first data using the first portion of the first data; identifying a second portion (116, 116, 116) of the second data using the first portion of the second data; generating first compressed data by compressing the second portion of the first data by at least generating a first dictionary associated with the second portion of the first data; generating second compressed data by compressing the second portion of the second data by at least generating a second dictionary associated with the second portion of the second data; generating third compressed data by compressing the second portion of the second data by at least generating a third dictionary associated with the second portion of the second data using the first dictionary as a base to generate the third dictionary; determining a difference between the third compressed data and the second compressed data; determining that the difference satisfies a threshold difference; storing the third compressed data as at least part of a patch file (126, 310) for the file; and sending, to one or more electronic devices, the patch file for updating the file from the first version of the file to the second version of the file. identifying a second portion (116, 116, 116) of the first data using the first portion of the first data; identifying a second portion (116, 116, 116) of the second data using the first portion of the second data; generating first compressed data by compressing the second portion of the first data by at least generating a first dictionary associated with the second portion of the first data; generating second compressed data by compressing the second portion of the second data by at least generating a second dictionary associated with the second portion of the second data; generating third compressed data by compressing the second portion of the second data by at least generating a third dictionary associated with the second portion of the second data using the first dictionary as a base to generate the third dictionary; determining a difference between the third compressed data and the second compressed data; determining that the difference satisfies a threshold difference; storing the third compressed data as at least part of a patch file (126, 310) for the file; and sending, to one or more electronic devices, the patch file for updating the file from the first version of the file to the second version of the file.