---
title: "Website Usage Licence"
aliases:
  - /usage/
---

# *Terms on which we permit you to use this website*

# General

1. You may use the web pages located under the domain *OpenTitan.org* ("this
   website") on the terms set out on this page. They are not intended to form a
   contract between you and us.

1. In these terms, certain words and phrases have a particular meaning as
   follows:

  1. "content" means any text, images, video, audio or other multimedia
     content, software, or other information or material submitted to or on the
     website;

  1. "intellectual property" means any rights in patents, design , copyright,
     databases, trade marks, domain names confidential information and all
     other forms of intellectual property, whether registered or unregistered,
     wherever in the world;

  1. "you" or "your" means the person accessing or using the website or its
     content;

  1. "processing" when applied to personal information includes storage of that
     information; and

  1. "we", "us" or "our" refers to lowRISC Community Interest Company, company
     registration number 09272283, with VAT registration number 327 0252 32 and
     whose registered address is at 4a Newmarket Road, Cambridge, CB5 8DT, UK.

1. You should read these terms carefully before using this website. We do not
   permit you to access this website or use any content if you do not comply
   with these terms.

# Using this Website

4. This website is intended only to give you information about us and our
   products and services. We do not intend, through this website:

  1. make you any promises;

  1. make any contractual offer to you;

  1. supply any products or services to you.

5. You have our permission to browse this website and in so doing make use of
   its content through a web browser. Unless we explicitly say otherwise, you
   may not use this website for any other purpose. For example, you may not
   download this website or any part of it for your own use.

# Information about you: privacy

1. If you subscribe to emails from us using this website, you consent to us
   using your email address for the purposes set out in our [privacy policy],
   which contains more detail about what sorts of emails we may send you. Every
   email of this kind will contain a link to allow you to unsubscribe from our
   mailing lists.

1. We may process other information about you, such as the IP address from
   which you access this website. For more information about how and why we
   process your information, please see our [privacy notice].

1. While we try to make sure that this website is secure, we cannot guarantee
   the security of any information that you supply to us and therefore we
   cannot guarantee that it will be kept confidential. For that reason, you
   should not submit any information you regard as confidential. Any
   information you do submit, you submit at your own risk.

# Use of cookies

1. Cookies are short text files stored in your web browser to allow us to
   remember you when you return to this website. More information about the
   particular cookies we use may be found at [privacy and cookie policy].

# Accuracy of information and availability of this website

1. While we hope that this website is accurate, up-to-date and free from bugs,
   we cannot promise that it will be. Furthermore, we cannot promise that this
   website will be fit or suitable for any purpose. Any reliance that you may
   place on the information of this website is at your own risk.

1. We may suspend or terminate operation of this website at any time as we see
   fit.

1. Any content is provided for your general information purposes only. It does
   not constitute technical, financial or legal advice or any other type of
   advice and should not be relied upon for any purposes.

# Changes to these terms

1. We reserve the right to vary these terms from time to time. Our new terms
   will be displayed on this website and by continuing to use and access this
   website following such changes, you agree to be bound by any variation made
   by us. It is your responsibility to check these terms from time to time to
   verify such variations.

# Hyperlinks and third party sites

1. This website may contain hyperlinks or references to third party websites
   other than this website. Any hyperlinks or references are provided for your
   convenience only. We have no control over third party websites and accept no
   legal responsibility for any content, material or information contained in
   them. The display of any hyperlink and reference to any third party website
   does not mean that we endorse that third party's website, products or
   services. Your use of a third party site may be governed by the terms and
   conditions of that third party site.

# Disputes and liability

1. Except for any legal responsibility that we cannot exclude in law (such as
   for death or personal injury caused by our negligence and our statutory
     duties under data protection law), we have no liability to you connected
     with your use of our website. For example, we are not liable for

  1. any missing or inaccurate content;

  1. any unavailability of the website;

  1. any incompatibility of this website with any particular browser or browser
     plugin; or

  1. economic loss or other loss of turnover, profit, business or goodwill.

1. These terms are to be interpreted in accordance with English law and the
   courts of England shall have jurisdiction to settle any disputes arising
   from your use of the website.
