The 30-year-old winger was named player of the season in his first year at The Valley, which included 13 goals.
"It was a no-brainer for me to sign a new contract," Holmes said. "Hopefully we can get promoted this season."
Holmes also produced six assists in his 38 appearances after joining on an initial two-year deal from Northampton Town in June 2016.
Charlton midfielder Ricky Holmes has signed a new three-year deal with the League One side.