defaults to localStorage