Software development is moving to the web. At Cloud9 we’re building a web-based IDE with sophisticated, responsive language tooling: code completers, refactoring tools, and so on. But we can’t simply “port” such tools to the web, since its client/server model comes with latency, bandwidth limitations, and a great asymmetry of information and computing power. This talk shows language-parametric techniques that overcome these hurdles when building a responsive code completer. We show how to specify syntactic and semantic properties of a language for this purpose, and how these specifications can be used for caching, precaching, predicting, and reusing completions.