The Fibonacci code is closely related to the Zeckendorf representation, a positional numeral system that uses Zeckendorf's theorem and has the property that no number has a representation with consecutive 1s.
To encode an integer N: To decode a code word, remove the final "1", assign the remaining the values 1,2,3,5,8,13... (the Fibonacci numbers) to the bits in the code word, and sum the values of the "1" bits.
With most other universal codes, if a single bit is altered, then none of the data that comes after it will be correctly read.
This approach, encoding using sequence of symbols, in which some patterns (like "11") are forbidden, can be freely generalized.
[1] The following table shows that the number 65 is represented in Fibonacci coding as 0100100011, since 65 = 2 + 8 + 55.
The Fibonacci encodings for the positive integers are binary strings that end with "11" and contain no other instances of "11".
For general constraints defining which symbols are allowed after a given symbol, the maximal information rate can be obtained by first finding the optimal transition probabilities using a maximal entropy random walk, then using an entropy coder (with switched encoder and decoder) to encode a message as a sequence of symbols fulfilling the found optimal transition probabilities.