---
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 7 Hills Road, Cambridge, CB2 1GE, 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.
