Recent from talks
Nothing was collected or created yet.
Presto (browser engine)
View on Wikipedia| Presto | |
|---|---|
| Developer | Opera Software ASA |
| Stable release | 2.12.423
/ 16 March 2015[1] |
| Written in | C++[2] |
| Operating system | Linux (non-free repositories) and Windows |
| Type | Application framework, Browser engine |
| License | Proprietary |
| Website | dev |
Presto was the browser engine of the Opera web browser from the release of Opera 7 on 28 January 2003, until the release of Opera 15 on 2 July 2013, at which time Opera switched to using the Blink engine that was originally created for Chromium.[3] Presto was also used to power the Opera Mini and Opera Mobile browsers.
Presto is a dynamic engine. Web pages can be re-rendered completely or partially in response to DOM events. Its releases saw a number of bug fixes and optimizations to improve the speed of the ECMAScript (JavaScript) engine. It is proprietary and only available as a part of the Opera browsers.
ECMAScript engines
[edit]A succession of ECMAScript engines have been used with Opera. (For the origin of their names, see Cultural notes below.) Pre-Presto versions of Opera used the Linear A engine. Opera versions based on the Core fork of Presto, Opera 7.0 through 9.27, used the Linear B engine.[4] The Futhark engine is used in some versions on the Core 2 fork of Presto, namely Opera 9.5 to Opera 10.10.[5] When released it was the fastest engine around, but in 2008 a new generation of ECMAScript engines from Google (V8), Mozilla (SpiderMonkey), and Apple (JavaScriptCore) took one more step, introducing native code generation. This opened up for potential heavy computations on the client side and Futhark, though still fast and efficient, was unable to keep up.[original research?]
In early 2009, Opera introduced the Carakan engine. It featured register-based bytecode, native code generation, automatic object classification, and overall performance improvements.[6][7] Early access in the Opera 10.50 pre-alpha showed that it is as fast as the fastest competitors, being the winner in 2 out of the 3 most used benchmarks.[8]
History and development
[edit]| Presto Version | ECMAScript engine | Browser code name | Opera Browser | Opera Mobile | Other use | New features |
|---|---|---|---|---|---|---|
| pre Presto | unnamed | unnamed | 3.0 | The first version to support JavaScript[9] | ||
| pre Presto | Linear A | Elektra/unnamed[10][note 1] | 4.0 | |||
| 1.0 | Linear B | unnamed | 7.0 | a completely new rendering engine, Favicon support[11] | ||
| 8.5 | "Bolton" version: 1st completely free download version (ad-free toolbar) | |||||
| 2.0 | Merlin | 9.0 | Internet Channel[12] | Canvas, Acid2 Test: passed, Rich text editing, XSLT, and XPath | ||
| 2.1 | Futhark | Kestrel | 9.5 | 9.5[13] | Nintendo DSi Browser | SVG Tiny 1.2, SVG as CSS, SVG as <img>, Audio object |
| 2.1.1 | 9.6 | Scope API,[14] SVG as Favicon | ||||
| 2.2 | Peregrine | 9.7[15] | ||||
| 2.2.15 | 10.0 10.1 |
9.8[16] | Acid3 test: 100/100, pixel-perfect, Web fonts, CSS Selectors API, RGBA & HSLA opacity, TLS 1.2.,[17] FPS in SVG, SVG fonts in HTML | |||
| 2.3 | Opera Devices SDK 10 | CSS3 : border-image, border-radius (rounded corners), box-shadow, transitions; HTML5: <audio> and <video> elements | ||||
| 2.4 | 10 | CSS2.1: visibility:collapse; CSS3 : transforms; HTML5: <canvas> shadows, Web Database, Web Storage, window.btoa, and window.atob | ||||
| 2.5.24 | Carakan | Evenes | 10.5 | 10.1 | Opera Mini server | CSS3: multiple backgrounds; HTML5: <canvas> Text |
| 2.6.30 | 10.6 | WebM; HTML5: AppCache, Geolocation, Web Workers[18] | ||||
| 2.7.62 | Kjevik | 11.0 | 11.0 | Extensions, WebSocket | ||
| 2.8.131 | Barracuda | 11.1 | 11.1 | Opera Mini server 4.27 | WebP, File API, CSS3 gradients (only for the background and background-image properties): -o-linear-gradient(), -o-repeating-linear-gradient(); Support for <color-stop> added. | |
| 2.9.168 | Swordfish | 11.5 | Session history management, classList (DOMTokenList) | |||
| 2.9.201 | 11.50 for Android | ECMAscript strict mode | ||||
| 2.10.229 | Tunny | 11.6 | 11.6 | HTML5 Parser, full support to CSS Gradients, Typed Arrays, CSS unit "rem" | ||
| 2.10.254 | Wahoo | 12.0 | WebGL and hardware acceleration[19] | |||
| 2.10.289 | 12.0 | |||||
| 2.11.355 | Marlin | 12.1 for Android | SPDY, CSS3 Flexbox[20] | |||
| 2.12.388 | 12.10–12.18 |
- ^ Elektra was originally the codename of Opera 4.0, but later came to refer more generally to the layout engine used in versions 3.5 through 6.
Presto-based applications
[edit]Web browsers
[edit]- Opera
- Opera 7 to 12
- Opera Mobile 9.5 to 12
- Opera Mini (continues to use Presto rendering on an intermediate server on keypad phones and as Extreme mode on Android devices)
- Nintendo
- Nintendo DS Browser (based on Opera)[21]
- Nintendo DSi Browser (based on Opera)[22]
- Wii Internet Channel Browser (based on Opera)[23]
- Nokia 770 Browser (based on Opera)
- Sony Mylo COM-1's Browser (based on Opera)[24]
HTML editors
[edit]- Macromedia Dreamweaver MX to Dreamweaver CS3 (CS4/CS5 use WebKit)
- Adobe Creative Suite 2[25] and 3[26]
Source code leak
[edit]The source code for version 12.15 was leaked to GitHub on February 11, 2016.[27] It remained unnoticed until January 12, 2017 and was taken down two days later in response to a DMCA request.[28][29] Opera Software has confirmed the authenticity of the source code.[30]
It is currently available at https://git.drk.sc/presto/presto.
Cultural notes
[edit]The ECMAScript engines used with Opera have been named after ancient and traditional writing scripts, including undeciphered Linear A, Ancient Greek Linear B, Runic Futhark, and Javanese Carakan.[6]
See also
[edit]References
[edit]- ^ "Dev.Opera — Opera Mini server upgrade". dev.opera.com. Retrieved 2015-12-28.
- ^ Lextrait, Vincent (January 2010). "The Programming Languages Beacon, v10.0". Archived from the original on 30 May 2012. Retrieved 4 January 2010.
- ^ Lawson, Bruce (2013-02-12). "300 million users and move to WebKit". Opera Software. Retrieved 2013-02-13.
- ^ Sivonen, Henri (2006-11-23). "Names of Browser Engines". Retrieved 2007-01-03.
- ^ Bointon, Marcus (2006-12-19). "SunSpider Benchmarks: WebKit Rocks". Pet Pixels. Archived from the original on 2011-08-20. Retrieved 2007-01-03.
- ^ a b Lindström, Jens (2009-02-05). "Carakan – By Opera Core Concerns". Opera Software. Archived from the original on 2009-02-06. Retrieved 2009-02-05.
- ^ Lindström, Jens (2009-12-22). "Carakan Revisited – By Opera Core Concerns". Opera Software. Archived from the original on 2009-12-25. Retrieved 2009-12-26.
- ^ Fulton, Scott M. III (2009-02-22). "The once and future king: Test build of Opera crushes Chrome on Windows 7". betanews. Retrieved 2009-02-26.
- ^ "Opera's archived version history 1-12". Opera Software. 2013-02-05. Retrieved 2025-09-23.
- ^ "Opera publishes version history, rewrites history". Archived from the original on 2014-02-21.
- ^ "Opera 7 for Windows Changelog". Opera Software. Archived from the original on 6 July 2017. Retrieved 28 February 2011.
- ^ "Opera Dragonfly documentation". Opera Software. Archived from the original on 2009-02-25. Retrieved 2009-02-27.
- ^ "Reviewer's Guide to Opera Mobile 9.5 Beta". Opera Software. Archived from the original on 2010-02-20. Retrieved 2009-02-27.
- ^ Lawson, Bruce (2008-09-10). "Opera Presto 2.1 – Web standards supported by Opera's core". Opera Software. Archived from the original on 2009-02-25. Retrieved 2009-02-27.
- ^ "Opera announces the new Opera Mobile 9.7 at CTIA Wireless 2009 – a server-accelerated full Web experience for smartphones and mobile devices" (Press release). Opera Software. 2009-03-26. Archived from the original on 2011-10-04. Retrieved 2009-06-11.
- ^ "Opera Software grows in Poland: International Web browser company celebrates the Warsaw office opening" (Press release). Opera Software. 2009-06-02. Archived from the original on 2010-02-27. Retrieved 2009-06-11.
- ^ Pettersen, Yngve Nysæter (2009-02-25). "New in Opera Presto 2.2: TLS 1.2 Support". Opera Software. Archived from the original on 2009-03-04. Retrieved 2009-02-27.
- ^ Kleinhout, Huib (1 July 2010). "Opera 10.60 goes final". My Opera. Opera Software. Archived from the original on 2 July 2010. Retrieved 2 July 2010.
- ^ "Introducing Opera 12 Alpha". My Opera. Opera Software. 13 October 2011. Archived from the original on 15 October 2011. Retrieved 28 January 2012.
- ^ "Opera Mobile 12.1: with SPDY, WebSockets, Flexbox, and more". My Opera. Opera Software. 9 October 2012. Archived from the original on 10 October 2012. Retrieved 10 October 2012.
- ^ "Surf in Bed: Nintendo DS Browser hits Japan" (Press release). Opera Software ASA. 2006-07-24. Archived from the original on 2006-08-14. Retrieved 2008-11-02.
- ^ Rahul Srinivas and Jon S. von Tetzchner (2008-10-08). "Operating Systems are Less Important: Opera". Techtree. Archived from the original on April 15, 2012. Retrieved 2009-02-25.
- ^ "Play with the Web: Opera browser now available for download on Wii" (Press release). Opera Software ASA. 2006-12-22. Archived from the original on 2008-05-12. Retrieved 2008-11-02.
- ^ "Sony Electronics uses the Opera browser for its new mylo personal communicator" (Press release). Opera Software ASA. 2006-08-23. Archived from the original on 2008-08-29. Retrieved 2008-11-02.
- ^ "Powered by Opera: Opera Integrated with Adobe Creative Suite 2" (Press release). Opera Software ASA. 2005-04-04. Retrieved 2008-11-02.[permanent dead link]
- ^ "Adobe Creative Suite 3 (CS3) uses built-in Opera for rendering engine". 2007-03-28. Archived from the original on 2008-03-03. Retrieved 2008-04-20.
- ^ "Presto Web rendering engine: Opera 12.15". GitHub. 2017-01-12. Archived from the original on 2017-01-13.
- ^ "2017-01-12-Presto.md". GitHub. Retrieved 2017-10-12.
- ^ Cimpanu, Catalin. "Opera Presto Source Code Leaks Online". Bleeping Computer. Retrieved 2017-10-12.
- ^ "Legacy Opera Presto source code appearance in online sharing sites – Opera Security". Opera Security. 2017-01-18. Retrieved 2017-10-12.
External links
[edit]Presto (browser engine)
View on Grokipedia-webkit CSS prefix, which disadvantaged non-WebKit engines.[4] Opera announced the switch to the open-source WebKit engine (later forked to Blink) in February 2013 to better support mobile platforms—especially iOS, which mandates WebKit for third-party browsers—and to align with the dominant ecosystem used by Chrome and Safari, allowing the company to focus resources on user interface innovations rather than engine maintenance.[4][3] Although no longer actively developed, legacy Presto-based Opera versions like 12.18 received security updates until 2016, and the engine persists in some older mobile and embedded devices.[1][5]
Technical Overview
Core Architecture
Presto is a proprietary browser engine developed by Opera Software ASA, implemented primarily in C++ to emphasize high performance and compact binary size.[6] This choice of language enabled efficient handling of complex rendering tasks while maintaining a lightweight footprint suitable for resource-constrained environments. The engine supported multiple platforms including Windows, Linux, macOS, and various mobile and embedded systems, with official Linux distributions provided through Opera's own repositories, often classified as non-free.[1] A core feature of Presto's design is its dynamic rendering capability, which allows web pages or specific sections to be re-rendered in response to Document Object Model (DOM) events, facilitating incremental updates without requiring complete page reloads.[7] This event-driven approach enhances interactivity and efficiency, as changes triggered by user actions or scripts propagate through the DOM to update the visual layout selectively. The engine's overall structure integrates a dedicated layout component with scripting subsystems, forming a cohesive pipeline for parsing, rendering, and executing web content. This modular organization separates concerns such as HTML/CSS processing from JavaScript interpretation, promoting maintainability and targeted optimizations. Presto supported multi-platform deployment across its lifecycle, culminating in the final stable release, version 2.12.423, issued on March 16, 2015, as a security update for legacy installations.[1] Architectural principles centered on event-driven processing to manage asynchronous interactions and modular components for rendering and scripting, ensuring responsive behavior in dynamic web applications while adhering to standards like W3C DOM for interoperability.[7]ECMAScript Engines
Presto's ECMAScript engines evolved through several iterations to handle JavaScript execution, beginning with the Linear B engine in its early versions and progressing to more advanced implementations for improved performance and standards compliance.[1] The initial engine for Presto, Linear B, served as a basic interpreter in Opera versions 7.0 through 9.27, focusing on reliable parsing and execution of ECMAScript 3 code within the browser's scripting environment.[1] It replaced the pre-Presto Linear A interpreter, providing foundational support for dynamic web scripting but with limited optimization for speed.[8] Subsequent updates introduced Futhark in Opera 9.50 to 10.10, an optimized bytecode interpreter that emphasized low memory usage and compact code footprint over raw execution speed.[9] Futhark utilized a stack-based virtual machine, enabling efficient handling of JavaScript in resource-constrained scenarios while maintaining compatibility with ECMAScript 3.[10] The most significant advancement came with Carakan, introduced in Opera 10.50 in 2010 and used through version 12.15.[1] Carakan implemented a register-based bytecode virtual machine, which reduced instruction overhead compared to stack-based approaches, leading to faster execution by minimizing data movement between registers and the stack.[9] It also featured just-in-time (JIT) compilation with native code generation, leveraging static type analysis to optimize hot code paths, and provided full support for ECMAScript 5 features such as strict mode and advanced array methods.[9] For memory management, Carakan employed per-tab heaps, allowing isolated garbage collection that accelerated cleanup operations by avoiding global scans across multiple contexts.[11] Performance evaluations from 2009 to 2013 demonstrated Carakan's competitiveness; for instance, in the SunSpider benchmark, Opera 10.50 achieved scores approximately 20% faster than contemporary Google Chrome versions and over seven times faster than the prior Futhark engine in Opera 10.10.[12][13] Similarly, in the V8 benchmark suite, Carakan enabled Opera to rival or exceed Firefox's TraceMonkey and Chrome's V8 in select tests, underscoring its efficiency in real-world JavaScript workloads like DOM manipulation and algorithmic computations.[14] These engines integrated seamlessly into Presto's scripting layer, which coordinated JavaScript execution with the engine's dynamic rendering pipeline to support event-driven updates to the Document Object Model without full page reloads.[9] This integration allowed Presto to process scripts inline with layout computations, enhancing responsiveness for interactive web applications.History and Development
Origins and Early Versions
Presto was developed by Opera Software ASA, a Norwegian company founded in 1995, as a successor to the Elektra rendering engine that powered earlier versions of the Opera browser from 4.0 to 6.0. Development began in 1998 in Oslo, led by engineers including Geir Ivarsøy and Karl Anders Øygard, driven by the need to address limitations in Elektra's handling of evolving web standards, particularly improved support for CSS, client-side scripting, and the Document Object Model (DOM), while enhancing overall rendering speed to compete in an increasingly standards-focused web landscape.[3] This in-house development allowed Opera to maintain full control over the engine's evolution, enabling optimizations tailored to their browser's feature set, such as small footprint and efficiency on resource-constrained devices. The closed approach also enabled licensing to third-party applications like Adobe products.[15][3] The engine made its debut with the release of Opera 7.0 on January 28, 2003, exclusively for Windows at launch, marking a significant upgrade with dynamic page updates, drag-and-drop tab functionality, and initial ECMAScript support through the Linear B JavaScript engine—a step up from the pre-Presto Linear A used in prior versions. Presto's architecture emphasized modularity, allowing for faster parsing and rendering of complex pages compared to Elektra, and it introduced features like spatial navigation and page reflow to improve usability. A Linux port followed shortly after with Opera 7.11 in May 2003, expanding accessibility but highlighting the engine's early Windows-centric focus.[1][16] Early development faced challenges stemming from Presto's proprietary nature, which precluded contributions from the broader open-source community and concentrated all innovation within Opera's limited engineering resources in Oslo. This approach restricted rapid adaptation to platform diversity; support for Linux was delayed, and ports to other systems like Mac OS X arrived only with Opera 8 in 2005.[2][16]Key Milestones and Evolutions
In 2010, Opera introduced the Carakan JavaScript engine with the release of Opera 10.50, representing a significant advancement in JavaScript execution speed through features like just-in-time compilation and native code generation, which reportedly improved performance by up to seven times on benchmarks such as SunSpider compared to the previous Futhark engine.[17][1] Subsequent versions from Opera 11 to 12, spanning 2011 to 2012, focused on rendering optimizations and broader standards compliance, including the introduction of hardware acceleration in Opera 11.5 for smoother graphics handling on Windows systems with OpenGL 2.x support, and further enhancements in Opera 12 with full GPU acceleration, a new HTML5 parser, and support for features like the<video> element, Web Storage, and full ECMAScript 5.1 implementation.[18][19][1]
During its peak usage period from 2010 to 2013, Presto-powered Opera browsers achieved over 300 million monthly active users across desktop, mobile, and embedded platforms by early 2013, driven largely by the popularity of Opera Mini and Opera Mobile in emerging markets.[20][21]
Internally, Presto's development faced challenges in sustaining a proprietary codebase against the rising dominance of open-source engines like WebKit and Blink, which allowed competitors to share resources and accelerate feature implementation, ultimately straining Opera's ability to match rapid web standards evolution without broader collaboration.[22][20]
Standards Support and Features
Rendering Capabilities
Presto continued robust support for HTML standards, building on full compliance with XHTML 1.0 achieved in Opera 5.10 through its native handling of XML namespaces and strict parsing modes.[1] For HTML5, support was partial but progressive; by Opera 10.50, the engine included native rendering for elements like<video> and <audio>, enabling playback of formats such as Ogg without plugins, while WebM was added in Opera 10.60; Opera 11.60 added an HTML5 parser, session history integration, and support for microdata DOM APIs.[1] This culminated in Presto's achievement of a perfect 100/100 score on the Acid3 test in stable releases like Opera 10.00 in 2009, demonstrating strong interoperability for HTML, CSS, and DOM features.[1]
In terms of CSS, Presto fully implemented CSS 2.1, including advanced properties like visibility: collapse by Opera 10.50, ensuring reliable layout and styling for legacy web content.[1] Partial CSS3 support was available through vendor-prefixed properties (e.g., -o- for transitions, animations, and transforms), with notable advancements in Opera 12.10 that enabled smooth rendering of flexbox layouts, gradients, and multi-column designs, though full standardization awaited broader adoption.[1] These prefixes allowed developers to leverage emerging visual effects while maintaining backward compatibility.
Presto offered native rendering for XML 1.0 from Opera 4.00, extending to XML 1.1, XSLT, and XPath in Opera 9.00, facilitating structured document processing.[1] For vector graphics, it supported SVG 1.1 Tiny starting in Opera 8.00, evolving to include Tiny 1.2 features like external references and CSS styling integration by Opera 9.50, enabling interactive and scalable visuals without external dependencies.[1] This XML foundation also underpinned basic extensions resembling XUL widgets for custom UI elements in Opera's ecosystem.
Among its distinctive capabilities, Presto featured zoom-independent layouts through the "Fit to Width" mode, introduced in earlier versions and refined in Opera 12, which dynamically reflowed text and adjusted image scaling to eliminate horizontal scrolling regardless of zoom level.[23] Complementing this, its efficient reflow mechanisms, active since Opera 7.00, allowed partial or full page re-rendering in response to DOM changes with minimal performance overhead, leveraging the engine's dynamic architecture for responsive updates.[1]
