It's a Safari theme, it looks great! A Safari app extension is uniquely useful because it can communicate with a native app. Sharing data between an app and Safari lets you integrate app content into Safari or send web data back to the app, enabling a unified experience for a web version and a native version of an app. Safari Clothing. Warm outdoor & safari clothing is vital for just about all northern hemisphere outdoor adventures - and on safaris & travels to Africa, India and beyond where dawn & evening game drives, bush walks, & time spent outside can get chilly.
Storage for the web
Internet connections can be flakey or non-existent on the go, which is why offline support and reliable performance are common features in progressive web apps. Even in perfect wireless environments, judicious use of caching and other storage techniques can substantially improve the user experience. There are several ways to cache your static application resources (HTML, JavaScript, CSS, images, etc.), and data (user data, news articles, etc.). But which is the best solution? How much can you store? How do you prevent it from being evicted?
What should I use? #
Here's a general recommendation for storing resources:
- For the network resources necessary to load your app and file-based content, use the Cache Storage API (part of service workers).
- For other data, use IndexedDB (with a promises wrapper).
IndexedDB and the Cache Storage API are supported in every modern browser. They're both asynchronous, and will not block the main thread. They're accessible from the
window
object, web workers, and service workers, making it easy to use them anywhere in your code.What about other storage mechanisms? #
There are several other storage mechanisms available in the browser, but they have limited use and may cause significant performance issues.
SessionStorage is tab specific, and scoped to the lifetime of the tab. It may be useful for storing small amounts of session specific information, for example an IndexedDB key. It should be used with caution because it is synchronous and will block the main thread. It is limited to about 5MB and can contain only strings. Because it is tab specific, it is not accessible from web workers or service workers.
LocalStorage should be avoided because it is synchronous and will block the main thread. It is limited to about 5MB and can contain only strings. LocalStorage is not accessible from web workers or service workers.
Cookies have their uses, but should not be used for storage. Cookies are sent with every HTTP request, so storing anything more than a small amount of data will significantly increase the size of every web request. They are synchronous, and are not accessible from web workers. Like LocalStorage and SessionStorage, cookies are limited to only strings.
The File System API and FileWriter API provide methods for reading and writing files to a sandboxed file system. While it is asynchronous, it is not recommended because it is only available in Chromium-based browsers.
The File System Access API was designed to make it easy for users to read and edit files on their local file system. The user must grant permission before a page can read or write to any local file, and permissions are not persisted across sessions.
WebSQL should not be used, and existing usage should be migrated to IndexedDB. Support has been removed from almost all major browsers. The W3C stopped maintaining the Web SQL spec in 2010, with no plans to further updates planned.
Application Cache should not be used, and existing usage should be migrated to service workers and the Cache API. It has been deprecated and support will be removed from browsers in the future.
How much can I store? #
In short, a lot, at least a couple of hundred megabytes, and potentially hundreds of gigabytes or more. Browser implementations vary, but the amount of storage available is usually based on the amount of storage available on the device.
- Chrome allows the browser to use up to 80% of total disk space. An origin can use up to 60% of the total disk space. You can use the StorageManager API to determine the maximum quota available. Other Chromium-based browsers may allow the browser to use more storage. See PR #3896 for details about Chrome's implementation.
- Internet Explorer 10 and later can store up to 250MB and will prompt the user when more than 10MB has been used.
- Firefox allows the browser to use up to 50% of free disk space. An eTLD+1 group (e.g.,
example.com
,www.example.com
andfoo.bar.example.com
) may use up to 2GB. You can use the StorageManager API to determine how much space is still available. - Safari (both desktop and mobile) appears to allow about 1GB. When the limit is reached, Safari will prompt the user, increasing the limit in 200MB increments. I was unable to find any official documentation on this.
- If a PWA is added to the home screen on mobile Safari, it appears to create a new storage container, and nothing is shared between the PWA and mobile Safari. Once the quota has been hit for an installed PWA, there doesn't appear to be any way to request additional storage.
In the past, if a site exceeded a certain threshold of data stored, the browser would prompt the user to grant permission to use more data. For example, if the origin used more than 50MB, the browser would prompt the user to allow it to store up to 100MB, then ask again at 50MB increments.
Today, most modern browsers will not prompt the user, and will allow a site to use up to its allotted quota. The exception appears to be Safari, which prompts at 750MB, asking permission to store up to 1.1GB. If an origin attempts to use more than its allotted quota, further attempts to write data will fail.
How can I check how much storage is available? #
In many browsers, you can use the StorageManager API to determine the amount of storage available to the origin, and how much storage it's using. It reports the total number of bytes used by IndexedDB and the Cache API, and makes it possible to calculate the approximate remaining storage space available.
The StorageManager isn't implemented in all browsers yet, so you must feature detect it before using it. Even when it is available, you must still catch over-quota errors (see below). In some cases, it's possible for the available quota to exceed the actual amount of storage available.
Other Chromium-based browsers may factor in the amount of free space when reporting the available quota. Chrome does not, and will always report 60% of the actual disk size. This helps to reduce the ability to determine the size of stored cross origin resources.
Inspect #
During development, you can use your browser's DevTools to inspect the different storage types, and easily clear all stored data.
A new feature was added in Chrome 88 that lets you override the site's storage quota in the Storage Pane. This feature gives you the ability to simulate different devices and test the behavior of your apps in low disk availability scenarios. Go to Application then Storage, enable the Simulate custom storage quota checkbox, and enter any valid number to simulate the storage quota.
Safari App Store
While working on this article, I wrote a simple tool to attempt to quickly use as much storage as possible. It's a quick and easy way to experiment with different storage mechanisms, and see what happens when you use all of your quota.
How to handle going over quota? #
What should you do when you go over quota? Most importantly, you should always catch and handle write errors, whether it's a
QuotaExceededError
or something else. Then, depending on your app design, decide how to handle it. For example delete content that hasn't been accessed in a long time, remove data based on size, or provide a way for users to choose what they want to delete.Both IndexedDB and the Cache API both throw a
DOMError
named QuotaExceededError
when you've exceeded the quota available.IndexedDB #
If the origin has exceeded its quota, attempts to write to IndexedDB will fail. The transaction's
onabort()
handler will be called, passing an event. The event will include a DOMException
in the error property. Checking the error name
will return QuotaExceededError
.Cache API #
If the origin has exceeded its quota, attempts to write to the Cache API will reject with a
QuotaExceededError
DOMException
.How does eviction work? #
Web storage is categorized into two buckets, 'Best Effort' and 'Persistent'. Best effort means the storage can be cleared by the browser without interrupting the user, but is less durable for long-term or critical data. Persistent storage is not automatically cleared when storage is low. The user needs to manually clear this storage (via browser settings).
By default, a site's data (including IndexedDB, Cache API, etc) falls into the best effort category, which means unless a site has requested persistent storage, the browser may evict site data at its discretion, for example, when device storage is low.
The eviction policy for best effort is:
- Chromium-based browsers will begin to evict data when the browser runs out of space, clearing all site data from the least recently used origin first, then the next, until the browser is no longer over the limit.
- Internet Explorer 10+ will not evict data, but will prevent the origin from writing any more.
- Firefox will begin to evict data when the available disk space is filled up, clearing all site data from the least recently used origin first, then the next, until the browser is no longer over the limit.
- Safari previously did not evict data, but recently implemented a new seven-day cap on all writable storage (see below).
Starting in iOS and iPadOS 13.4 and Safari 13.1 on macOS, there is a seven-day cap on all script writable storage, including IndexedDB, service worker registration, and the Cache API. This means Safari will evict all content from the cache after seven days of Safari use if the user does not interact with the site. This eviction policy does not apply to installed PWAs that have been added to the home screen. See Full Third-Party Cookie Blocking and More on the WebKit blog for complete details.
You can request persistent storage for your site to protect critical user or application data.
App Store Extension
Bonus: Why use a wrapper for IndexedDB #
IndexedDB is a low level API that requires significant setup before use, which can be particularly painful for storing simple data. Unlike most modern promise-based APIs, it is event based. Promise wrappers like idb for IndexedDB hide some of the powerful features but more importantly, hide the complex machinery (e.g. transactions, schema versioning) that comes with the IndexedDB library.
Conclusion #
Gone are the days of limited storage and prompting the user to store more and more data. Sites can store effectively all of the resources and data they need to run. Using the StorageManager API you can determine how much is available to you, and how much you've used. And with persistent storage, unless the user removes it, you can protect it from eviction.
Additional resources #
Thanks #
Special thanks to Jarryd Goodman, Phil Walton, Eiji Kitamura, Daniel Murphy, Darwin Huang, Josh Bell, Marijn Kruisselbrink, and Victor Costan for reviewing this article. Thanks to Eiji Kitamura, Addy Osmani, and Marc Cohen who wrote the original articles that this is based on. Eiji wrote a helpful tool called Browser Storage Abuser that was useful in validating current behavior. It allows you to store as much data as possible and see the storage limits on your browser. Thanks to Francois Beaufort who did the digging into Safari to figure out its storage limits.
The hero image is by Guillaume Bolduc on Unsplash.
Last updated: Improve article
CSS Variables
Now it’s possible to assign values to custom CSS variables, so you can more easily manage complex CSS systems and reduce the amount of duplicated code.
CSS Initial Letter
Initial letter CSS improves usability and creates visual interest by adding a visual marker to the beginning of new sections of content.
CSS Backdrop Filters
Backdrop filters allows webpages to easily create visual layering that adds a sense of depth, while preventing details in the content underneath, even videos, from cluttering the foreground content.
CSS Shapes and Compositing
Using CSS, websites can now easily flow text around images and geometry shapes, and perform image compositing operations on DOM elements.
CSS Regions
Safari supports complex, magazine-like layouts for webpages. CSS Regions allow content in complex layouts to flow within different regions and still be associated.
CSS Quotation Marks
CSS quotation marks are now language sensitive, allowing your webpages to display the right quotation marks for your language character set.
CSS Filters
CSS filters make it simple to create advanced filter and pixel effects such as blurs and gradients. CSS filters can vary brightness, adjust hues, invert colors, or convert elements to sepia or grayscale. Developers can combine filters and animate changes between them, while tapping into hardware acceleration for fast, smooth rendering.
CSS Animation
CSS animation, an open standard that brings a new level of interactivity to the web, lets web designers scale, rotate, fade, and skew web elements to create cutting-edge websites. Safari was the first web browser to support CSS animation.
CSS Scroll Snapping
Scroll snapping with CSS allows web pages to smoothly end user scrolling with content elements always perfectly aligned in the view.
CSS4 Pseudo-Classes
New CSS4 pseudo-classes make it easier than ever to apply styles to any link, based on the current language, a numbered element, or when an input placeholder is shown. Powerful new matching and not-matching pseudo-classes help simplify style code to make it easier to maintain web sites.
CSS Effects
Pioneered by Safari, CSS effects help developers add polish to websites by stylizing images and photos with eye-catching gradients, precise masks, and stunning reflections that require only a few lines of code.
CSS3 Web Fonts
CSS3 web fonts allow web designers to create stunning websites using the fonts they prefer rather than restricting themselves to 'web-safe fonts.' Safari was the first web browser to automatically recognize websites that use custom fonts, downloading them as they’re needed.
CSS3 Auto-Hyphenation
Safari allows developers to provide better reading experiences and text layouts with support for CSS3 auto-hyphenation.
CSS3 Vertical Text
Developers can use top-to-bottom text layouts in web pages, allowing for greater customization of websites in languages that use vertical text, such as Chinese and Japanese.
CSS3 Text Emphasis
With the text emphasis property, web pages can display emphasis marks commonly used in East Asian text.
CSS Canvas
Using CSS Canvas, web designers can position canvas elements anywhere an image can be placed using CSS. Safari was the first web browser to support CSS Canvas.
Picture-in-Picture for macOS
Now available for macOS, Picture in Picture lets users float a video window from Safari over their desktop or full-screen app — even if they switch desktop spaces. The default HTML5 video player in Safari automatically supports Picture in Picture. And if you use a custom video player, it’s easy to add a Picture in Picture control using the JavaScript presentation mode API.
Enhanced Rich Links
Ensure all the rich website links that appear throughout macOS in Safari, Messages, Notes and more include the information you want to show them. Simply specify a title, description, URL, and image in your website’s Open Graph data.
Picture Element Support
Thanks to Picture Element Support, Safari will automatically display the appropriate image for each media query breakpoint when you provide it with multiple image resources and sizes.
HTML5 Media Support
Websites can now deliver rich, interactive media as easily as they deliver images. The first browser to support HTML5 audio and video tags, Safari helps developers create media-rich sites that don’t require additional plug-ins. The media tags also offer a rich scripting API, allowing developers to create powerful new controls as well as controls that match the style of the page.
Full Screen for HTML5 Video
You can watch video embedded with the HTML5 <video> tag in full screen. Full-screen support allows standards-based video to deliver a first-class viewing experience.
Closed Captions for HTML5 Video
Safari has support for closed captions in HTML5 video. If an HTML5 video on a web page includes closed captions, simply click the CC button in the video controls to display them.
HTML5 Geolocation
With Safari support for HTML5 geolocation, you can choose to share your location with certain websites that use it to provide relevant information, such as maps or nearby businesses.
HTML5 Sectioning Elements
Support for article, aside, footer, header, hgroup, nav, and section elements allows developers to create advanced web designs with semantic markup.
HTML5 AJAX History
Support for HTML5 AJAX history allows web developers to build interactive AJAX applications that update dynamically but still work smoothly with the back and forward navigation buttons in Safari.
HTML5 Sandbox Attribute
With support for the sandbox attribute for iframe elements, Safari can restrict the actions of contents hosted inside an iframe. This makes iframes more secure by preventing them from running scripts or loading plug-ins that could deliver unwanted or deceptive content.
Inline Video and Autoplay on iOS
To help users easily discover your video content, you can now autoplay videos and play them inline with other content on your webpages on all iOS devices. Safari supports autoplay on iOS devices for videos without sound, keeping down the number of distractions on the web.
Shadow DOM
Shadow DOM makes it much easier to build column gutter padding-top-small padding-bottom-small large-scale web applications since developers can encapsulate elements on a webpage and define how they interact in the applications.
HTML5 Forms Validation
Safari can check the information in online forms to ensure that the format is correct before sending the information to the website’s server. If the wrong information is entered in an input field, Safari can inform you about the error right away.
HTML5 Ruby
Safari can display annotations alongside the main text in a web page, allowing pronunciation annotations in web pages that use Chinese, Japanese, or Korean characters.
HTML 4.01 Support
Safari supports HTML 4.01, the authoring language that defines the structure and layout of web documents.
HTML5 Offline Support
Web developers can create applications that you can use even when you don’t have access to the Internet. Thanks to HTML5 offline support, web applications that are stored on your computer are immediately accessible anytime. Along with the application, web developers can also choose to store the application’s data on your system, so you always have the information you need. Applications and data can be stored in a traditional SQL-like database serving as an application cache or in the familiar cookie format.
HTML5 Canvas
Originally invented by Apple for Dashboard, HTML5 Canvas technology allows web designers to specify an area in HTML that can be dynamically stylized by a JavaScript program. Safari was the first web browser to support HTML Canvas, and the standard is now supported by most popular browsers.
HTML5 Web Notifications
Websites can keep users up to date about breaking news, new messages, and other alerts. Website notifications appear in the upper-right corner of the screen with other notifications and in the new Notification Center in Mountain Lion. Extensions enabled in Safari can also send notifications.
HTML5 Draggable Attribute
Safari makes it easier for developers to create web pages with drag-and-drop user interfaces for items like photos or images.
ECMAScript 2015 (ES6)
Safari is the first browser to deliver a feature complete version of ECMAScript 2015 (ES6), the latest JavaScript standard. It will enable development of advanced web applications with support for classes, arrow functions, iterators, promises, and many new APIs that build upon principals set forth by modern languages.
JavaScript Classes
New syntax for JavaScript object-oriented development makes it much simpler to create objects and handle object inheritance.
JavaScript Data Structures
Safari adds support for powerful new data structures in your JavaScript toolkit including Map, Weak Map, Set and Weak Set.
For…of Loops
Web developers can use for…of loops to more easily iterate over the property values of objects.
Symbol Objects
With symbols, web developers can create unique identifier objects for protecting data attached to page elements and code objects.
JavaScript Promises
Safari enables JavaScript authors to more naturally work with asynchronous programming patterns.
JavaScript Copy to Clipboard
It’s now possible to create a button on your website that programmatically cuts or copies text to the clipboard with JavaScript.
Template Literals
With template literals, web developers can avoid complicated string concatenation, making code easier to read and maintain.
AirPlay Video JS API
With AirPlay Video API in JavaScript, developers can create custom video controls for AirPlay that perfectly match the design theme.
Presentation Mode Support
The Presentation Mode JavaScript API for Safari lets web developers create a custom fullscreen button that takes video from inline to fullscreen. For supported iOS devices, web developers can also create a custom control for Picture in Picture, allowing video playback with multitasking.
JSON Support
With native support for JavaScript Object Notation (JSON), Safari allows web applications that use JSON to run faster and more securely.
Web Open Font Format (WOFF) 2.0
Web Open Font Format (WOFF) gives web designers and developers a wider range of typography options for websites. Support for WOFF 2.0 improves compression of fonts, so they take up less space and require less bandwidth to load.
Custom Toolbars in View Controllers
You can customize the color of the toolbars when users view links in Safari View Controller from your iOS app.
Font Features
Display advanced text styles and effects, such as ligatures, tabular numbers, small caps, and more, just as the font author intended them to be presented on webpages.
WebGL
Support for WebGL allows developers to create immersive, 3D experiences that work natively in Safari.
Widow and Orphan Support
With widow and orphan support, you can specify page breaks and avoid awkward pagination in webpage text. Imac 10 11 6.
Kerning and Ligatures
Text in webpages automatically benefits from support for kerning and ligatures in Safari.
Sideways Text Orientation
Safari Web Store Extensions
With Safari support for text-orientation: sideways, Safari supports vertical text layouts that have horizontal text within them, helpful for webpages in East Asian languages.
Hardware Acceleration
Hardware acceleration allows Safari to tap into graphics processing units to display computing-intensive graphics, so standards like HTML5 and CSS3 can deliver rich, interactive media smoothly in the browser. Safari also accelerates plug-in content.
Graphics Acceleration for HTML5 Canvas
With Safari, HTML5 Canvas elements on web pages take advantage of hardware acceleration, allowing faster performance for interactive graphics that are rendered natively in the browser.
Anti-Aliased Fonts
Thanks to the anti-aliasing algorithm in Safari, you enjoy crisp, gorgeous fonts. The algorithm preserves the subtleties of each font while rendering each character with a crispness that makes your favorite sites a pleasure to read.
Deep Color
Take full advantage of displays that support wider color gamuts and extended dynamic ranges to bring new vitality to the images and media on your websites.
Right-to-Left Scrollbars
Safari recognizes right to left languages and automatically puts scrollbars on the left side of the window for those languages.
Color Profile Support
The only browser that color-corrects web images, Safari delivers vibrant, accurate color. Safari has supported International Color Consortium (ICC) profiles from day one, so the photos and images you see in your browser are as true to the originals as possible.
International Web Content
Safari is designed to handle web content from all regions of the world, including a broad range of alphabets, number systems, writing directions, currencies, weights and measurements, date and time formats, and time zones.
IDN Support
Access sites with non-English web addresses. Safari offers Internationalized Domain Name (IDN) support, which allows web developers to use URLs that contain non-English letters and characters.
Unicode Support
Because Safari supports Unicode, the accepted international encoding standard, you can enjoy web content in any number of languages, including Arabic, English, and Japanese.
Right-to-Left Text
Safari supports multidirectional text rendering, allowing websites drafted in other languages to display characters from right to left.
Contextual Letters
In many fonts, letters may change their shape and spacing depending on their position in a word. For example, in languages like Arabic, a letter used in the middle of a word may be shaped differently from the same letter used at the end of a word. Safari recognizes many of these contextual letterforms when rendering different fonts and languages.
Captions for Video
WebKit now supports out-of-band captioning on Mountain Lion and Lion. In-band subtitles are now supported on Mountain Lion.
High DPI for image-set
Support for high-DPI with the image-set function makes it easier to specify when to use higher-resolution images for displays with high pixel density.
HTTP Strict Transport Security
Your website can now specify that only https should be used to connect.
Page Visibility Events
Safari now supports the page visibility API.
Web Speech API
Support for the Web Speech API, Safari can convert text to speech, allowing developers to create accessible, voice-driven web apps.
ARIA Support
Safari supports Accessible Rich Internet Applications (ARIA). The ARIA standard helps web developers make dynamic web content more accessible for people with disabilities. With ARIA, sites taking advantage of advanced technologies like AJAX and JavaScript can now easily interoperate with assistive technologies.
Closed Captions for HTML5 Video
Safari can now deliver an accessible video experience. If a video embedded in a web page using the HTML5 <video> tag includes closed captions, click the CC button in the video controls to display them.
HTML5 Timed Text Tracks
Developers can specify the timing of any text that appears with a media element, such as captions or subtitles.
HTML5 Media Synchronization
Safari supports web pages that coordinate the playback of multiple HTML5 media elements. Website developers can overlay a sign language interpretation track on a video track and keep the two in sync.
Apple Pay on the Web
Give customers an easy and secure way to make purchases in Safari 10 or later. Apple Pay allows customers to quickly pay without entering payment, shipping, or contact information on supported websites from their Mac, iPhone, or iPad. Because card numbers aren’t used and every transaction is confirmed with a fingerprint or passcode, Apple Pay is more secure than accepting credit and debit cards.
3D Touch Behaviors for iOS
Newer iPhone models introduced Quick Actions and Peek and Pop, giving users quickly access to several actions and interactive previews. Now you can make your own Peek and Pop events using WKWebView and 3D Touch behaviors based on how much pressure a user applies to the display.
Gesture Events for macOS
Gesture events for pinching and rotation on iOS are now available on the Mac trackpad, so you can incorporate them into websites on macOS.
Safari Push Notifications
Keep users up-to-date with news and other alerts using Apple push notifications. Once users have signed up for notifications from your website in Safari on macOS, you can send push notifications that appear just like Mac app notifications even when Safari isn’t running. Users can click the notification to launch your website in Safari.
Sticky Positioning
With sticky positioning, elements can remain fixed within the Safari window even as the user scrolls.
WebKit
WebKit — the open source rendering engine introduced by Apple — powers Safari on macOS and iOS. WebKit features blazing performance and extensive standards support. And because it’s open source, developers can examine WebKit code and contribute to the community.
Web Audio API
Developers can create and customize audio effects in web applications with rich media content, such as games or instrument simulators. The Web Audio API provides finer-grained control over the timing of audio playback and allows developers to process audio sources from HTML5 media elements, create spatial sound effects, and synthesize and process audio directly in JavaScript.
Acid 2 Compliance
Designed by the Web Standards Project, Acid tests determine whether a web browser complies with emerging Internet standards. Acid 2 tests for compatibility with new features in the HTML, CSS, and PNG standards. Pioneering the standardization effort, Safari passed Acid 2 on October 27, 2005 — two and a half years before any other popular browser.
Acid 3 Compliance
Safari was the first web browser to pass Acid 3. Acid 3 tests a browser’s ability to fully render pages using the web standards used to build dynamic, next-generation websites, including CSS, JavaScript, XML, and SVG.
Formatted XML Files
When developers download unstyled XML files, Safari presents the information in a clear document tree format, making it easier to read.
Media Caching
Safari can store audio and video data for web applications that use the HTML5 application cache, allowing for offline media playback and better media performance when an Internet connection is slow.
Standards Compliant IndexedDB
The newly improved, standard compliant implementation of IndexedDB lets developers store structured data for web applications on the client side and access it quickly.
Automated Testing with WebDriver for macOS
WebDriver lets you automate testing of layout, usability, navigation, and more, so you can programmatically verify the behavior of your websites in Safari.
Content Security Policy 2.0
Content Security Policy 2.0 brings you more control over the security of assets on your webpage through security policies. You can specify the sources you trust to run remote content.
Fast-Tap on iOS
Users of Safari on iOS will experience incredibly fast response rates when tapping links and buttons on webpages at their initial scale. You can also choose to offer faster tapping in lieu of double-tap to zoom for elements on a zoomed-in webpage.
Force Touch APIs
Web developers can use the Force Touch APIs to add new dimensions of interactivity to their web pages on devices that support Force Touch.
EventSource
Safari supports real-time push notifications from a server. Web applications that use EventSource can receive faster, more reliable communications from the website’s server.
Apple Safari Extension
WebSocket
With support for WebSocket, Safari has a speedy, two-way communication link with a web application’s server, so online activities like chatting are faster and require less bandwidth.
MathML
With support for Mathematical Markup Language (MathML), Safari allows developers to embed mathematical notation in a web page without using an image file.
Full-Screen Web Pages
With the Full Screen JavaScript API, developers can create immersive web experiences without a plug-in.
SVG 1.1 Support
By taking advantage of the Scalable Vector Graphics (SVG) support in Safari, web developers can create fonts, graphic elements, and animations on the fly that look great no matter how large or small they are. For example, mapping sites often use SVG to draw driving directions based on your location and destination.
ICC Color Profile Support
Safari uses advanced color management technology to deliver web images with rich, accurate color. In fact, it was the first browser to support International Color Consortium (ICC) profiles and has done so from day one, so the photos and images you see in your browser stay true to the originals.
XML 1.0 Support
Extensible Markup Language (XML) is a popular open industry standard for creating, managing, and sharing structured data. Because native XML support is built into Safari, JavaScript programs can efficiently read XML data feeds.