Links is a functional programming language designed to make web programming easier.
Links eases building interactive web applications with significant client- and server-side components.
Links incorporates proven ideas from other programming languages: database-query support from Kleisli, web-interaction proposals from Racket, and distributed-computing support from Erlang. On top of this, it adds new web-centric features of its own.
The initial Links development effort was funded by EPSRC grant EP/D046769/1 from 2005-2009. In 2014 development on Links resumed with a focus on adding session types to Links, funded by EPSRC Programme Grant "From Data Types to Session Types: A Basis for Concurrency and Distribution" (EP/K034413/1). Other active areas of research which are driving Links development include work on adding algebraic effects and effect handlers to Links (UKRI Future Leaders Fellowship EHOP, grant number MR/T043830/1) and the Skye project, which builds on Links to support scientific data curation (funded by the European Research Council, grant number 682315).
- Language-Integrated Query for Temporal Data. Simon Fowler, Vashti Galpin, and James Cheney. GPCE 2022.
- A Typed Slicing Compilation of the Polymorphic RPC Calculus. Kwanghoon Choi, James Cheney, Sam Lindley, and Bob Reynders. PPDP 2021.
- Comprehending Nulls. James Cheney and Wilmer Ricciotti. DBPL 2021.
- Curating Covid-19 data in Links. Vashti Galpin and James Cheney. IPAW 2021 demo paper.
- Cross-tier web programming for curated databases: a case study. Simon Fowler, Simon Harding, Joanna Sharman, and James Cheney. Pre-proceedings, IDCC 2020.
- Query Lifting: Language-integrated query for heterogeneous nested collections. Wilmer Ricciotti and James Cheney. ESOP 2021.
- Effects for Efficiency: Asymptotic Speedup with First-Class Control. Daniel Hillerström, Sam Lindley, and John Longley. ICFP 2020.
- A Polymorphic RPC Calculus. Kwanghoon Choi, James Cheney, Simon Fowler, and Sam Lindley. Science of Computer Programming 197:102499, October 2020. Preliminary version presented at SBMF 2019.
- Strongly Normalizing Higher-Order Relational Queries. Wilmer Ricciotti and James Cheney. FSCD 2020.
- Model-View-Update-Communicate: Session Types meet the Elm Architecture. Simon Fowler. ECOOP 2020.
- Language-Integrated Updatable Views. Rudi Horn, Simon Fowler and James Cheney. Post-proceedings of IFL 2019.
- FreezeML: Complete and Easy Type Inference for First-Class Polymorphism. Frank Emrich, Sam Lindley, Jan Stolarek, James Cheney, and Jonathan Coates. PLDI 2020.
- Effect handlers via generalised continuations. Daniel Hillerström, Sam Lindley, and Robert Atkey. JFP special issue on effect handlers 2020.
- Language-integrated provenance by trace analysis, Stefan Fehrenbach and James Cheney. DBPL 2019.
- Mixing Set and Bag Semantics. Wilmer Ricciotti and James Cheney. DBPL 2019.
- Exceptional Asynchronous Session Types: Session Types without Tiers. Simon Fowler, Sam Lindley, J. Garrett Morris, and Sára Decova. POPL 2019.
- Shallow Effect Handlers. Daniel Hillerström and Sam Lindley. APLAS 2018.
- Incremental Relational Lenses. Rudi Horn, Roly Perera, and James Cheney. ICFP 2018.
- Language-integrated provenance. Stefan Fehrenbach and James Cheney. Science of Computer Programming 155: 103-145 (2018).
- Continuation Passing Style for Effect Handlers. Daniel Hillerström, Sam Lindley, Robert Atkey, and KC Sivaramakrishnan. FSCD 2017.
- Lightweight functional session types. Sam Lindley and J. Garrett Morris. In Behavioural Types: from Theory to Tools, River Publishers, 2017.
- Language-integrated provenance. Stefan Fehrenbach and James Cheney. PPDP 2016.
- Compiling Links Effect Handlers to the OCaml Backend. Daniel Hillerström, Sam Lindley, and KC Sivaramakrishnan. ML Workshop 2016.
- Liberating Effects with Rows and Handlers. Daniel Hillerström and Sam Lindley. In the proceedings of TyDe 2016.
- Effective quotation. James Cheney, Sam Lindley, Gabriel Radanne, and Philip Wadler. In the proceedings of PEPM 2014.
- Query shredding: efficient relational evaluation of queries over nested multisets. James Cheney, Sam Lindley, and Philip Wadler. In the proceedings of SIGMOD 2014.
- Row-based effect types for database integration. Sam Lindley and James Cheney. In the proceedings of TLDI 2012.
- DBWiki: a database wiki prototyped in Links. James Cheney, Sam Lindley, and Heiko Müller. In the proceedings of DBPL 2011.
- The Script-Writer's Dream: How to Write Great SQL in Your Own Language, and Be Sure It Will Succeed. Ezra Cooper. In the proceedings of DBPL 2009
- The RPC calculus. Ezra Cooper, Philip Wadler. In the proceedings of PPDP 2009
- The essence of form abstraction. Ezra Cooper, Sam Lindley, Philip Wadler, and Jeremy Yallop. In the proceedings of APLAS 2008.
- Links: web programming without tiers. Ezra Cooper, Sam Lindley, Philip Wadler, and Jeremy Yallop. In the proceedings of FMCO 2006, LNCS 4709.
- EHOP, UKRI Future Leaders Fellowship grant number MR/T043830/1.
- Skye, ERC Consolidator Grant (2016-2021).
- A Basis for Concurrency and Distribution, EPSRC Programme Grant (2013-2020).
- Google Research Awards Database Wikis (2011), Synchronized Database Wikis (2012), and Language-Integrated Provenance (2014-15).
- Original grant proposal for EPSRC (2005).
- Letter of support from LShift.
- Letter of support from Run Deep.
- James Cheney.
- Frank Emrich.
- Simon Fowler.
- Vashti Galpin.
- Daniel Hillerström.
- Rudi Horn.
- Sam Lindley.
- Wilmer Ricciotti.
- Jan Stolarek.
- Philip Wadler.
- Ezra Cooper.
- Gilles Dubochet.
- Stefan Fehrenbach.
- Garrett Morris.
- Jeremy Yallop.
- Shriram Krishnamurthi, Nov 2006.
- Rodney Topor, Sep–Dec 2005. Rodney taught us about transactions.
- A dynamic video conferencing app in Links. Weston Everett (2022).
- A spatial metaphor for dynamic video calling in Links. Lewis Raeburn (2022).
- TryLinks: an interactive online platform to learn the Links programming language. Nick Wu (2018).
- Building Bobcat - a web content management system in Links. Simon Vansintjan (2010).
- Web Menace: Links demonstration of a classic learning machine. Samuel Corbett (2009).
- Compiling Links server-side code. Steven Holmes (2009).
- LODE: an online IDE for Links in Links. Carl Andersson (2008).
- Online Scrabble in Links. Ashvin Jayaram (2008).
- Building web 2.0 applications in Links: Speed dependent automatic zooming for web applications. Sjoerd van Roosmalen (2008).
- Creating linksCollab: an assessment of Links as a web development language. Steve Strugnell (2008).
- Compiling Links to WebAssembly. Aaron Song (2021).
- Uselets: UIs using Actors as an Abstraction for Composable Communicating Components. Thomas Weber (LMU/University of Augsburg/TU Munich, 2018).
- Compilation of Effect Handlers and their Applications in Concurrency. Daniel Hillerström (2016).
- Handlers for Algebraic Effects in Links. Daniel Hillerström (2015).
- Functional reactive animation in SVG for the web via Links. Chi-Feng Chou (2011).
- Implementing the Java Pet Store in Links: An assessment of Links as an effective platform for building web applications . Gabriel Tellez (2008).
- Building biological database applications using Links. Ravi Shankar Dangeti (2008).
- The SLinks language. Gilles Dubochet (2005).
- Yi Zhou, June–July 2022. Yi implemented several benchmark programs for Links, extended the command-line interface of Links, and tweaked the internal handling of file paths.
- Robin Jourde, May–July 2022. Robin extended Links with effect aliases, first-class operation polymorphism, and fresh operation label generation.
- Dee Yeum, July–August 2021. Dee worked on headless testing of client-side Links applications.
- Samo Novak, June–August 2021. Samo implemented a round-trip type pretty printer, whose outputs can be successfully parsed by the Links parser.
- Yueyang Tang, May–August 2020. Yueyang worked on improvements to Links, including dramatically speeding up serialization of large query expressions and supporting function definitions by case analysis
- Jonathan Coates, June–July 2019. Jonathan worked on the Links codebase. He implemented support for first-class polymorphism, syntactic sugar for effects, and fixed numerous bugs.
- Tom Davey, June–July 2019. Tom adapted TryLinks for use with Jupyter Notebook.
- Arek Mikolajczak, June–August 2018. Arek worked on TryLinks.
- Nicole Meng, June–July 2018. Nicole worked on implementing the essence of React in Links using effect handlers.
- Jake Browning, Summer 2017. Jake implemented a reactive programming library for Links inspired by Elm.
- Sára Decova, Summer 2017. Sára implemented a collection of Links applications making use of session types in the presence of distribution and failure.
- Victor Dumitrescu, Summer 2015. Victor worked on applications of session types in Links.
- Austėja Elvina Brasiūnaitė, Summer 2014. Elvina helped us to develop session types in Links by building and testing lots of examples.
- Gabriel Radanne, Summer 2012. Gabriel extended the Links to OCaml compiler developed by Steven Holmes to handle database queries.
- Thierry Martinez, Mar–Aug 2006. Thierry experimented with approaches to statically typing XML in Links.
- Talk slides (Melbourne, 2 Feb 2006)
- Talk slides (PADL, 9 Jan 2006)
- Links meeting at ETAPS (Edinburgh, 6 Apr 2005)
- Talk slides (Cambridge, 9 Feb 2005)