Closing OnionShare tabs you host destroys them, preventing reuse.
Persistently hosted websites are available on the same address even if the computer they are shared from is rebooted.

Make any tab persistent by checking the "Always open this tab when OnionShare is started" box before starting your server.

Make any tab persistent by checking the “Always open this tab when OnionShare is started” box before starting your server.

When opening OnionShare, your saved tabs from the prior session will start opened.
Each service then can be started manually, and will be available on the same OnionShare address and be protected by the same private key.

If you save a tab, a copy of its onion service secret key is stored on your computer.

By default, all OnionShare services are protected with a private key, which Tor calls "client authentication".

By default, all OnionShare services are protected with a private key, which Tor calls “client authentication”.

The Tor Browser will ask you to enter your private key when you load an OnionShare service.
If you want to allow the public to use your service, it's better to disable the private key altogether.

If you want to allow the public to use your service, it’s better to disable the private key altogether.

To turn off the private key for any tab, check the "This is a public OnionShare service (disables private key)" box before starting the server.
Then the server will be public and a private key is not needed to load it in the Tor Browser.

To turn off the private key for any tab, check the “This is a public OnionShare service (disables private key)” box before starting the server.

When people load OnionShare services in the Tor Browser they see the default title for each type of service.
For example, the default title for chat services is "OnionShare Chat".

For example, the default title for chat services is “OnionShare Chat”.

If you edit the "Custom title" setting before starting a server you can change it.

If you edit the “Custom title” setting before starting a server you can change it.

OnionShare supports scheduling exactly when a service should start and stop.
Before starting a server, click "Show advanced settings" in its tab and then check the boxes next to either
"Start onion service at scheduled time", "Stop onion service at scheduled time", or both, and set the respective desired dates and times.

Before starting a server, click “Show advanced settings” in its tab and then check the boxes next to either
“Start onion service at scheduled time”, “Stop onion service at scheduled time”, or both, and set the respective desired dates and times.

Services scheduled to start in the future display a countdown timer when the "Start sharing" button is clicked.
Services scheduled to stop in the future display a countdown timer when started.

Services scheduled to start in the future display a countdown timer when the “Start sharing” button is clicked.

**Scheduling an OnionShare service to automatically start can be used as a dead man's switch**.
This means your service is made public at a given time in the future if you are not there to prevent it.
If nothing happens to you, you can cancel the service before it's scheduled to start.

**Scheduling an OnionShare service to automatically start can be used as a dead man's switch**

Scheduling an OnionShare service to automatically start can be used as a dead man’s switch

.
If nothing happens to you, you can cancel the service before it’s scheduled to start.

.. image:: _static/screenshots/advanced-schedule-start-timer.png

**Scheduling an OnionShare service to automatically stop limits its exposure**.
If you want to share secret info or something that will be outdated, you can do so for selected limited time.

**Scheduling an OnionShare service to automatically stop limits its exposure**

Scheduling an OnionShare service to automatically stop limits its exposure

.

.. image:: _static/screenshots/advanced-schedule-stop-timer.png

In addition to its graphical interface, OnionShare has a command-line interface.

If you have installed the Snap, macOS or Windows package, you already have the CLI version installed.

Alternatively, you can install just the command-line version of OnionShare using ``pip3``::

Alternatively, you can install just the command-line version of OnionShare using 

Note that you will also need the ``tor`` package installed. In macOS, install it with: ``brew install tor``

Info about installing it on different operating systems can be found in the `CLI README file <https://github.com/onionshare/onionshare/blob/develop/cli/README.md>`_ in the Git repository.

Info about installing it on different operating systems can be found in the 

`CLI README file <https://github.com/onionshare/onionshare/blob/develop/cli/README.md>`_

If you installed OnionShare using the Snap package, you can run ``onionshare.cli`` to access the command-line interface version.

If you installed OnionShare using the Snap package, you can run 

From Terminal, you can run ``/Applications/OnionShare.app/Contents/MacOS/onionshare-cli --help``

In the Windows installation, the executable ``onionshare-cli.exe`` is available.

Browse the command-line documentation by running ``onionshare --help``::

$ onionshare-cli --help
╭───────────────────────────────────────────╮
│    *            ▄▄█████▄▄            *    │
│               ▄████▀▀▀████▄     *         │
│              ▀▀█▀       ▀██▄              │
│      *      ▄█▄          ▀██▄             │
│           ▄█████▄         ███        -+-  │
│             ███         ▀█████▀           │
│             ▀██▄          ▀█▀             │
│         *    ▀██▄       ▄█▄▄     *        │
│ *             ▀████▄▄▄████▀               │
│                 ▀▀█████▀▀                 │
│             -+-                     *     │
│   ▄▀▄               ▄▀▀ █                 │
│   █ █     ▀         ▀▄  █                 │
│   █ █ █▀▄ █ ▄▀▄ █▀▄  ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄   │
│   ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █   ▀▄▄   │
│                                           │
│                  v2.4.1                   │
│                                           │
│          https://onionshare.org/          │
╰───────────────────────────────────────────╯

usage: onionshare-cli [-h] [--receive] [--website] [--chat] [--local-only] [--connect-timeout SECONDS] [--config FILENAME] [--persistent FILENAME] [--title TITLE] [--public]
                      [--auto-start-timer SECONDS] [--auto-stop-timer SECONDS] [--no-autostop-sharing] [--log-filenames] [--qr] [--data-dir data_dir] [--webhook-url webhook_url] [--disable-text]
                      [--disable-files] [--disable_csp] [--custom_csp custom_csp] [-v]
                      [filename ...]

positional arguments:
  filename                  List of files or folders to share

optional arguments:
  -h, --help                Show this help message and exit
  --receive                 Receive files
  --website                 Publish website
  --chat                    Start chat server
  --local-only              Don't use Tor (only for development)
  --connect-timeout SECONDS
                            Give up connecting to Tor after a given amount of seconds (default: 120)
  --config FILENAME         Filename of custom global settings
  --persistent FILENAME     Filename of persistent session
  --title TITLE             Set a title
  --public                  Don't use a private key
  --auto-start-timer SECONDS
                            Start onion service at scheduled time (N seconds from now)
  --auto-stop-timer SECONDS
                            Stop onion service at scheduled time (N seconds from now)
  --no-autostop-sharing     Share files: Continue sharing after files have been sent (the default is to stop sharing)
  --log-filenames           Log file download activity to stdout
  --qr                      Display a QR code in the terminal for share links
  --data-dir data_dir       Receive files: Save files received to this directory
  --webhook-url webhook_url
                            Receive files: URL to receive webhook notifications
  --disable-text            Receive files: Disable receiving text messages
  --disable-files           Receive files: Disable receiving files
  --disable_csp             Publish website: Disable the default Content Security Policy header (allows your website to use third-party resources)
  --custom_csp custom_csp   Publish website: Set a custom Content Security Policy header
  -v, --verbose             Log OnionShare errors to stdout, and web errors to disk

It is possible to automatically start OnionShare from the CLI using a systemd unit file.

You may find this particularly useful if you are operating in 'persistent' mode, and want to start the same onion service every time your machine starts.

You may find this particularly useful if you are operating in ‘persistent’ mode, and want to start the same onion service every time your machine starts.

To do this, you need to prepare some OnionShare json config first.

Here is the main OnionShare config. In this example, it's stored in ``/home/user/.config/onionshare/onionshare.json``. You may need to adjust some of the settings, but if you already have OnionShare installed, it probably looks much like this already::

Here is the main OnionShare config. In this example, it’s stored in 

. You may need to adjust some of the settings, but if you already have OnionShare installed, it probably looks much like this already:

{
  "version": "2.6.2",
  "connection_type": "bundled",
  "control_port_address": "127.0.0.1",
  "control_port_port": 9051,
  "socks_address": "127.0.0.1",
  "socks_port": 9050,
  "socket_file_path": "/var/run/tor/control",
  "auth_type": "no_auth",
  "auth_password": "",
  "auto_connect": true,
  "use_autoupdate": true,
  "autoupdate_timestamp": null,
  "bridges_enabled": false,
  "bridges_type": "built-in",
  "bridges_builtin_pt": "obfs4",
  "bridges_moat": "",
  "bridges_custom": "",
  "bridges_builtin": {},
  "persistent_tabs": [
      "my-persistent-onion"
  ],
  "locale": "en",
  "theme": 0
}

Notice the 'persistent_tabs' section. We will now create a file at ``/home/user/.config/onionshare/persistent/my-persistent-onion.json``, that looks like this::

Notice the ‘persistent_tabs’ section. We will now create a file at 

{
  "onion": {
      "private_key": "UDIaZD8QgoXRP8JnAJ+pnlogQazfZ0wrfWJk5zPBGUBqg6+lozzjUJKTYWxwrxR33pDgJdTFtCUN1CX1FE22UQ==",
      "client_auth_priv_key": "RHJSN4VI3NKGDSIWK45CCWTLYOJHA6DQQRQXUID3FXMAILYXWVUQ",
      "client_auth_pub_key": "J4YLYAHS25UU3TZTE27H32RN3MCRGLR345U52XS2JNQ76CCHCRSQ"
  },
  "persistent": {
      "mode": "share",
      "enabled": true
  },
  "general": {
      "title": null,
      "public": false,
      "autostart_timer": 0,
      "autostop_timer": 0,
      "service_id": "niktadkcp6z7rym3r5o3j2hnmis53mno5ughvur357xo7jkjvmqrchid",
      "qr": false
  },
  "share": {
     "autostop_sharing": true,
     "filenames": [
       "/home/user/my-shared-file.txt"
     ]
  },
  "receive": {
     "data_dir": "/home/user/OnionShare",
     "webhook_url": null,
     "disable_text": false,
     "disable_files": false
  },
  "website": {
     "disable_csp": false,
     "custom_csp": null,
     "filenames": []
  },
  "chat": {}
}

**Don't actually use this private key, service_id or client_auth keys! They are shown only as an example. Never share the private_key with anyone.**

Don’t actually use this private key, service_id or client_auth keys! They are shown only as an example. Never share the private_key with anyone.

The easiest way to generate the onion address and private key is to first create a 'pinned' OnionShare tab in the desktop app and started the share for the first time. This will then have saved the persistent settings to your ``.config/onionshare/persistent/`` folder with a random name. You can unpin that tab once you've generated it the first time. Or, you can leave it where it is, and use that persistent file in your systemd unit file below.

The easiest way to generate the onion address and private key is to first create a ‘pinned’ OnionShare tab in the desktop app and started the share for the first time. This will then have saved the persistent settings to your 

 folder with a random name. You can unpin that tab once you’ve generated it the first time. Or, you can leave it where it is, and use that persistent file in your systemd unit file below.

Now you can create a systemd unit file in ``/etc/systemd/system/onionshare-cli.service``. Be sure to adjust the User and Group to your own user/group, as well as changes to any paths to the onionshare-cli binary or the paths to your JSON configs and shares.

. Be sure to adjust the User and Group to your own user/group, as well as changes to any paths to the onionshare-cli binary or the paths to your JSON configs and shares.

[Unit]
Description=OnionShare CLI
After=network.target

[Service]
ExecStart=/home/user/.local/bin/onionshare-cli --persistent /home/user/.config/onionshare/persistent/my-persistent-onion.json /home/user/my-shared-file.txt
Restart=on-failure
User=user
Group=user

[Install]
WantedBy=multi-user.target

Note that although ``/home/user/my-shared-file.txt`` was defined in the ``filenames`` section of the ``my-persistent-onion.json`` file, it's still necessary to specify it as the argument to the onionshare-cli command.

 file, it’s still necessary to specify it as the argument to the onionshare-cli command.

Be sure to run ``sudo systemctl daemon-reload`` after creating the unit file.

Now you can run ``sudo systemctl start onionshare-cli.service``. If you have ``journalctl`` installed, you can run ``sudo journalctl -f -t onionshare-cli``, and you should see some output of your service starting::

[...]
Feb 09 10:14:09 onionshare onionshare-cli[18852]: [6.5K blob data]
Feb 09 10:14:18 onionshare onionshare-cli[18852]: Compressing files.
Feb 09 10:14:18 onionshare onionshare-cli[18852]: Give this address and private key to the recipient:
Feb 09 10:14:18 onionshare onionshare-cli[18852]: http://niktadkcp6z7rym3r5o3j2hnmis53mno5ughvur357xo7jkjvmqrchid.onion
Feb 09 10:14:18 onionshare onionshare-cli[18852]: Private key: RHJSN4VI3NKGDSIWK45CCWTLYOJHA6DQQRQXUID3FXMAILYXWVUQ
Feb 09 10:14:18 onionshare onionshare-cli[18852]: Press Ctrl+C to stop the server

If you don't want your users to use a Private Key, set ``public`` to be ``true`` in the ``general`` settings of the my-persistent-onion.json file.

The OnionShare desktop application contains some keyboard shortcuts, for convenience and accessibility::

The OnionShare desktop application contains some keyboard shortcuts, for convenience and accessibility:

Ctrl S - Share mode
Ctrl R - Receive mode
Ctrl W - Website mode
Ctrl C - Chat mode
Ctrl H - Settings tab

You may want to migrate your OnionShare data when switching to another computer. This is especially true if you had a 'persistent' onion address and you want to preserve it.

You may want to migrate your OnionShare data when switching to another computer. This is especially true if you had a ‘persistent’ onion address and you want to preserve it.

OnionShare stores all such data in a specific folder. Copy the relevant folder for your operating system below, to your new computer:

* Linux: ``~/.config/onionshare``
* macOS: ``~/Library/Application Support/OnionShare``
* Windows: ``%APPDATA%\OnionShare``

OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.)
To use Keybase, download the `Keybase app <https://keybase.io/download>`_, make an account, and `join this team <https://keybase.io/team/onionshare>`_. Within the app, go to "Teams", click "Join a Team", and type "onionshare".

OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It’s also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.)
To use Keybase, download the 

. Within the app, go to “Teams”, click “Join a Team”, and type “onionshare”.

OnionShare also has a `mailing list <https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers and and designers to discuss the project.

`mailing list <https://lists.riseup.net/www/subscribe/onionshare-dev>`_

OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare

If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on.
You should also review all of the `open issues <https://github.com/onionshare/onionshare/issues>`_ on GitHub to see if there are any you'd like to tackle.

If you’d like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you’re thinking of working on.
You should also review all of the 

`open issues <https://github.com/onionshare/onionshare/issues>`_

When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project.

When you’re ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project.

OnionShare is developed in Python.
To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version.

To get started, clone the Git repository at 

 file to learn how to set up your development environment for the command-line version, and the 

 file to learn how to set up your development environment for the graphical version.

Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree.

When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command.
This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::

When developing, it’s convenient to run OnionShare from a terminal and add the 

) flag to the command.
This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example:

$ poetry run onionshare-cli -v ~/Documents/roms/nes/Q-bert\ \(USA\).nes
│             ▀██▄          ▀█▀             │
│             -+-                     *     │
│   ▄▀▄               ▄▀▀ █                 │
│   █ █     ▀         ▀▄  █                 │
│                                           │
│                  v2.4.1                   │
│                                           │

[Sep 09 2021 19:13:20] Settings.__init__
[Sep 09 2021 19:13:20] Settings.load
[Sep 09 2021 19:13:20] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
[Sep 09 2021 19:13:20] Common.get_resource_path: filename=wordlist.txt
[Sep 09 2021 19:13:20] Common.get_resource_path: filename=wordlist.txt, path=/home/user/code/onionshare/cli/onionshare_cli/resources/wordlist.txt
[Sep 09 2021 19:13:20] ModeSettings.load: creating /home/user/.config/onionshare/persistent/polish-pushpin-hydrated.json
[Sep 09 2021 19:13:20] ModeSettings.set: updating polish-pushpin-hydrated: general.title = None
[Sep 09 2021 19:13:20] ModeSettings.set: updating polish-pushpin-hydrated: general.public = False
[Sep 09 2021 19:13:20] ModeSettings.set: updating polish-pushpin-hydrated: general.autostart_timer = 0
[Sep 09 2021 19:13:20] ModeSettings.set: updating polish-pushpin-hydrated: general.autostop_timer = 0
[Sep 09 2021 19:13:20] ModeSettings.set: updating polish-pushpin-hydrated: share.autostop_sharing = True
[Sep 09 2021 19:13:20] Web.__init__: is_gui=False, mode=share
[Sep 09 2021 19:13:20] Common.get_resource_path: filename=static
[Sep 09 2021 19:13:20] Common.get_resource_path: filename=static, path=/home/user/code/onionshare/cli/onionshare_cli/resources/static
[Sep 09 2021 19:13:20] Common.get_resource_path: filename=templates
[Sep 09 2021 19:13:20] Common.get_resource_path: filename=templates, path=/home/user/code/onionshare/cli/onionshare_cli/resources/templates
[Sep 09 2021 19:13:20] Web.generate_static_url_path: new static_url_path is /static_gvvq2hplxhs2cekk665kagei6m
[Sep 09 2021 19:13:20] ShareModeWeb.init
[Sep 09 2021 19:13:20] Onion.__init__
[Sep 09 2021 19:13:20] Onion.connect
[Sep 09 2021 19:13:20] Onion.connect: tor_data_directory_name=/home/user/.config/onionshare/tmp/tmpf3akiouy
[Sep 09 2021 19:13:20] Common.get_resource_path: filename=torrc_template
[Sep 09 2021 19:13:20] Common.get_resource_path: filename=torrc_template, path=/home/user/code/onionshare/cli/onionshare_cli/resources/torrc_template
Connecting to the Tor network: 100% - Done
[Sep 09 2021 19:13:30] Onion.connect: Connected to tor 0.4.6.7
[Sep 09 2021 19:13:30] Settings.load
[Sep 09 2021 19:13:30] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
[Sep 09 2021 19:13:30] OnionShare.__init__
[Sep 09 2021 19:13:30] OnionShare.start_onion_service
[Sep 09 2021 19:13:30] Onion.start_onion_service: port=17616
[Sep 09 2021 19:13:30] Onion.start_onion_service: key_type=NEW, key_content=ED25519-V3
[Sep 09 2021 19:13:35] ModeSettings.set: updating polish-pushpin-hydrated: general.service_id = vucwsdmjt7szoc6pel3puqoxobiepdsowmqaq7pm7dzhembtzr2capad
[Sep 09 2021 19:13:35] ModeSettings.set: updating polish-pushpin-hydrated: onion.private_key = +HfFALM4MtrNh59ibfMtRwDCIpfpWHIcNh3boahqrHh3TkLAyQvzKTm/y53KoYKSh0VU+m9DZY7DtZuCzkHkqQ==
[Sep 09 2021 19:13:35] ModeSettings.set: updating polish-pushpin-hydrated: onion.client_auth_priv_key = G24TSNLIJX7YZM6R7P24AIGRU4N56ZFL7ENZVIDIWUEWY66YS3EQ
[Sep 09 2021 19:13:35] ModeSettings.set: updating polish-pushpin-hydrated: onion.client_auth_pub_key = GDY2EPXSS7Q3ELQJFIX2VELTVZ3QEYIGWIZ26CEDQKZJ5Y7VKI3A
Compressing files.
[Sep 09 2021 19:13:35] ShareModeWeb.init
[Sep 09 2021 19:13:35] ShareModeWeb.set_file_info_custom
[Sep 09 2021 19:13:35] ShareModeWeb.build_zipfile_list
[Sep 09 2021 19:13:35] Web.start: port=17616
* Running on http://127.0.0.1:17616/ (Press CTRL+C to quit)

Give this address and private key to the recipient:
http://vucwsdmjt7szoc6pel3puqoxobiepdsowmqaq7pm7dzhembtzr2capad.onion
Private key: G24TSNLIJX7YZM6R7P24AIGRU4N56ZFL7ENZVIDIWUEWY66YS3EQ

Press Ctrl+C to stop the server

You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::

This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated.

Tor is slow, and it's often convenient to skip starting onion services altogether during development.
You can do this with the ``--local-only`` flag. For example::

Tor is slow, and it’s often convenient to skip starting onion services altogether during development.
You can do this with the 

$ poetry run onionshare-cli --local-only --receive
│             ▀██▄          ▀█▀             │
│             -+-                     *     │
│   ▄▀▄               ▄▀▀ █                 │
│   █ █     ▀         ▀▄  █                 │
│                                           │
│                  v2.4.1                   │
│                                           │

* Running on http://127.0.0.1:17641/ (Press CTRL+C to quit)

Files sent to you appear in this folder: /home/user/OnionShare

Warning: Receive mode lets people upload files to your computer. Some files can potentially take control of your computer if you open them. Only open things from people you trust, or if you know what you are doing.

Give this address and private key to the sender:
http://127.0.0.1:17641
Private key: E2GOT5LTUTP3OAMRCRXO4GSH6VKJEUOXZQUC336SRKAHTTT5OVSA

In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it.

 in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it.

Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate <https://hosted.weblate.org/projects/onionshare/>`_. Always keep the "OnionShare" in latin letters, and use "OnionShare (localname)" if needed.

Help make OnionShare easier to use and more familiar and welcoming for people by translating it on 

`Hosted Weblate <https://hosted.weblate.org/projects/onionshare/>`_

. Always keep the “OnionShare” in latin letters, and use “OnionShare (localname)” if needed.

To help translate, make a Hosted Weblate account and start contributing.

Sometimes the original English strings are wrong, or don't match between the application and the documentation.

Sometimes the original English strings are wrong, or don’t match between the application and the documentation.

File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request.
The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes.

Here is the current translation status.
If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net

If you want start a translation in a language not yet started, please write to the mailing list: 

Web servers are started locally on your computer and made accessible to other people as `Tor <https://www.torproject.org/>`_ `onion services <https://community.torproject.org/onion-services/>`_.

Web servers are started locally on your computer and made accessible to other people as 

`onion services <https://community.torproject.org/onion-services/>`_

By default, OnionShare web addresses are protected with a private key.

You're responsible for securely sharing that URL and private key using a communication channel of your choice like in an encrypted chat message, or using something less secure like unencrypted email, depending on your `threat model <https://ssd.eff.org/module/your-security-plan>`_.

You’re responsible for securely sharing that URL and private key using a communication channel of your choice like in an encrypted chat message, or using something less secure like unencrypted email, depending on your 

The people you send the URL to then copy and paste it into their `Tor Browser <https://www.torproject.org/>`_ to access the OnionShare service. Tor Browser will then prompt for the private key, which the people can also then copy and paste in.

The people you send the URL to then copy and paste it into their 

 to access the OnionShare service. Tor Browser will then prompt for the private key, which the people can also then copy and paste in.

If you run OnionShare on your laptop to send someone files, and then suspend it before the files are sent, the service will not be available until your laptop is unsuspended and on the internet again. OnionShare works best when working with people in real-time.

Because your own computer is the web server, *no third party can access anything that happens in OnionShare*, not even the developers of OnionShare. It's completely private. And because OnionShare is based on Tor onion services too, it also protects your anonymity. See the :doc:`security design </security>` for more info.

, not even the developers of OnionShare. It’s completely private. And because OnionShare is based on Tor onion services too, it also protects your anonymity. See the 

You can use OnionShare to send files and folders to people securely and anonymously. Open a share tab, drag in the files and folders you wish to share, and click "Start sharing".

You can use OnionShare to send files and folders to people securely and anonymously. Open a share tab, drag in the files and folders you wish to share, and click “Start sharing”.

After you add files, you'll see some settings. Make sure you choose the setting you're interested in before you start sharing.

After you add files, you’ll see some settings. Make sure you choose the setting you’re interested in before you start sharing.

As soon as someone finishes downloading your files, OnionShare will automatically stop the server, removing the website from the internet.
To allow multiple people to download them, uncheck the "Stop sharing after files have been sent (uncheck to allow downloading individual files)" box.

To allow multiple people to download them, uncheck the “Stop sharing after files have been sent (uncheck to allow downloading individual files)” box.

Also, if you uncheck this box, people will be able to download the individual files you share rather than a single compressed version of all the files.

When you're ready to share, click the "Start sharing" button. You can always click "Stop sharing", or quit OnionShare, immediately taking the website down. You can also click the "↑" icon in the top-right corner to show the history and progress of people downloading files from you.

When you’re ready to share, click the “Start sharing” button. You can always click “Stop sharing”, or quit OnionShare, immediately taking the website down. You can also click the “↑” icon in the top-right corner to show the history and progress of people downloading files from you.

Now that you have a OnionShare, copy the address and the private key and send it to the person you want to receive the files. If the files need to stay secure, or the person is otherwise exposed to danger, use an encrypted messaging app.

That person then must load the address in Tor Browser. After logging in with the private key, the files can be downloaded directly from your computer by clicking the "Download Files" link in the corner.

That person then must load the address in Tor Browser. After logging in with the private key, the files can be downloaded directly from your computer by clicking the “Download Files” link in the corner.

You can use OnionShare to let people anonymously submit files and messages directly to your computer, essentially turning it into an anonymous dropbox.
Open a receive tab and choose the settings that you want.

You can browse for a folder to save messages and files that get submitted.

You can check "Disable submitting text" if want to only allow file uploads, and you can check "Disable uploading files" if you want to only allow submitting text messages, like for an anonymous contact form.

You can check “Disable submitting text” if want to only allow file uploads, and you can check “Disable uploading files” if you want to only allow submitting text messages, like for an anonymous contact form.

You can check "Use notification webhook" and then choose a webhook URL if you want to be notified when someone submits files or messages to your OnionShare service.
If you use this feature, OnionShare will make an HTTP POST request to this URL whenever someone submits files or messages.
For example, if you want to get an encrypted text messaging on the messaging app `Keybase <https://keybase.io/>`_, you can start a conversation with `@webhookbot <https://keybase.io/webhookbot>`_, type ``!webhook create onionshare-alerts``, and it will respond with a URL. Use that as the notification webhook URL.
If someone uploads a file to your receive mode service, @webhookbot will send you a message on Keybase letting you know as soon as it happens.

You can check “Use notification webhook” and then choose a webhook URL if you want to be notified when someone submits files or messages to your OnionShare service.
For example, if you want to get an encrypted text messaging on the messaging app 

, and it will respond with a URL. Use that as the notification webhook URL.

When you are ready, click "Start Receive Mode". This starts the OnionShare service. Anyone loading this address in their Tor Browser will be able to submit files and messages which get uploaded to your computer.

When you are ready, click “Start Receive Mode”. This starts the OnionShare service. Anyone loading this address in their Tor Browser will be able to submit files and messages which get uploaded to your computer.

You can also click the down "↓" icon in the top-right corner to show the history and progress of people sending files to you.

You can also click the down “↓” icon in the top-right corner to show the history and progress of people sending files to you.

Here is what it looks like for someone sending you files and messages.

When someone submits files or messages to your receive service, by default they get saved to a folder called ``OnionShare`` in the home folder on your computer, automatically organized into separate subfolders based on the time that the files get uploaded.

When someone submits files or messages to your receive service, by default they get saved to a folder called 

 in the home folder on your computer, automatically organized into separate subfolders based on the time that the files get uploaded.

Setting up an OnionShare receiving service is useful for journalists and others needing to securely accept documents from anonymous sources. When used in this way, OnionShare is sort of like a lightweight, simpler, not quite as secure version of `SecureDrop <https://securedrop.org/>`_, the whistleblower submission system.

Setting up an OnionShare receiving service is useful for journalists and others needing to securely accept documents from anonymous sources. When used in this way, OnionShare is sort of like a lightweight, simpler, not quite as secure version of 

Just like with malicious email attachments, it's possible someone could try to attack your computer by uploading a malicious file to your OnionShare service. OnionShare does not add any safety mechanisms to protect your system from malicious files.

Just like with malicious email attachments, it’s possible someone could try to attack your computer by uploading a malicious file to your OnionShare service. OnionShare does not add any safety mechanisms to protect your system from malicious files.

If you receive an Office document or a PDF through OnionShare, you can convert these documents into PDFs that are safe to open using `Dangerzone <https://dangerzone.rocks/>`_. You can also protect yourself when opening untrusted documents by opening them in `Tails <https://tails.boum.org/>`_ or in a `Qubes <https://qubes-os.org/>`_ disposableVM.

If you receive an Office document or a PDF through OnionShare, you can convert these documents into PDFs that are safe to open using 

. You can also protect yourself when opening untrusted documents by opening them in 

However, it is always safe to open text messages sent through OnionShare.

If you want to host your own anonymous dropbox using OnionShare, it's recommended you do so on a separate, dedicated computer always powered on and connected to the internet, and not on the one you use on a regular basis.

If you want to host your own anonymous dropbox using OnionShare, it’s recommended you do so on a separate, dedicated computer always powered on and connected to the internet, and not on the one you use on a regular basis.

If you intend to put the OnionShare address on your website or social media profiles, save the tab (see :ref:`save_tabs`) and run it as a public service (see :ref:`turn_off_private_key`). It's also a good idea to give it a custom title (see :ref:`custom_titles`).

If you intend to put the OnionShare address on your website or social media profiles, save the tab (see 

There are reports that OnionBrowser on iOS devices are unable to upload files to an OnionShare in Receive Mode, when operating in 'Silver' security mode. Try Bronze or Gold to see if you are able to upload a message or a file.

There are reports that OnionBrowser on iOS devices are unable to upload files to an OnionShare in Receive Mode, when operating in ‘Silver’ security mode. Try Bronze or Gold to see if you are able to upload a message or a file.

To host a static HTML website with OnionShare, open a website tab, drag the files and folders that make up the static content there, and click "Start sharing" when you are ready.

To host a static HTML website with OnionShare, open a website tab, drag the files and folders that make up the static content there, and click “Start sharing” when you are ready.

If you add an ``index.html`` file, it will render when someone loads your website. You should also include any other HTML files, CSS files, JavaScript files, and images that make up the website. (Note that OnionShare only supports hosting *static* websites. It can't host websites that execute code or use databases. So you can't for example use WordPress.)

 file, it will render when someone loads your website. You should also include any other HTML files, CSS files, JavaScript files, and images that make up the website. (Note that OnionShare only supports hosting 

 websites. It can’t host websites that execute code or use databases. So you can’t for example use WordPress.)

If you don't have an ``index.html`` file, it will show a directory listing instead, and people loading it can look through the files and download them.

 file, it will show a directory listing instead, and people loading it can look through the files and download them.

By default OnionShare helps secure your website by setting a strict `Content Security Policy <https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However, this prevents third-party content from loading inside the web page.

By default OnionShare helps secure your website by setting a strict 

`Content Security Policy <https://en.wikipedia.org/wiki/Content_Security_Policy>`_

 header. However, this prevents third-party content from loading inside the web page.

If you want to load content from third-party websites, like assets or JavaScript libraries from CDNs, you have two options:

You can disable sending a Content Security Policy header by checking the "Don't send Content Security Policy header (allows your website to use third-party resources)" box before starting the service.

You can disable sending a Content Security Policy header by checking the “Don’t send Content Security Policy header (allows your website to use third-party resources)” box before starting the service.

If you want to host a long-term website using OnionShare (meaning not just to quickly show someone something), it's recommended you do it on a separate, dedicated computer that is always powered on and connected to the internet, and not on the one you use on a regular basis.
Save the tab (see :ref:`save_tabs`) so you can resume the website with the same address if you close OnionShare and re-open it later.

If you want to host a long-term website using OnionShare (meaning not just to quickly show someone something), it’s recommended you do it on a separate, dedicated computer that is always powered on and connected to the internet, and not on the one you use on a regular basis.
Save the tab (see 

) so you can resume the website with the same address if you close OnionShare and re-open it later.

If your website is intended for the public, you should run it as a public service (see :ref:`turn_off_private_key`).

If your website is intended for the public, you should run it as a public service (see 

You can use OnionShare to set up a private, secure chat room that doesn't log anything. Just open a chat tab and click "Start chat server".

You can use OnionShare to set up a private, secure chat room that doesn’t log anything. Just open a chat tab and click “Start chat server”.

After you start the server, copy the OnionShare address and private key and send them to the people you want in the anonymous chat room.
If it's important to limit exactly who can join, use an encrypted messaging app to send out the OnionShare address and private key.

If it’s important to limit exactly who can join, use an encrypted messaging app to send out the OnionShare address and private key.

People can join the chat room by loading its OnionShare address in Tor Browser.
The chat room requires JavasScript, so everyone who wants to participate must have their Tor Browser security level set to "Standard" or "Safer", instead of "Safest".

The chat room requires JavasScript, so everyone who wants to participate must have their Tor Browser security level set to “Standard” or “Safer”, instead of “Safest”.

When someone joins the chat room they get assigned a random name.
They can change their name by typing a new name in the box in the left panel and pressing ↵.
Since the chat history isn't saved anywhere, it doesn't get displayed at all, even if others were already chatting in the room.

Since the chat history isn’t saved anywhere, it doesn’t get displayed at all, even if others were already chatting in the room.

In an OnionShare chat room, everyone is anonymous.
Anyone can change their name to anything, and there is no way to confirm anyone's identity.

Anyone can change their name to anything, and there is no way to confirm anyone’s identity.

However, if you create an OnionShare chat room and securely send the address only to a small group of trusted friends using encrypted messages, you can be reasonably confident the people joining the chat room are your friends.

If you need to already be using an encrypted messaging app, what's the point of an OnionShare chat room to begin with? It leaves less traces.

If you need to already be using an encrypted messaging app, what’s the point of an OnionShare chat room to begin with? It leaves less traces.

If you for example send a message to a Signal group, a copy of your message ends up on each device (the smartphones, and computers if they set up Signal Desktop) of each member of the group. Even if disappearing messages is turned on, it's hard to confirm all copies of the messages are actually deleted from all devices, and from any other places (like notifications databases) they may have been saved to.
OnionShare chat rooms don't store any messages anywhere, so the problem is reduced to a minimum.

If you for example send a message to a Signal group, a copy of your message ends up on each device (the smartphones, and computers if they set up Signal Desktop) of each member of the group. Even if disappearing messages is turned on, it’s hard to confirm all copies of the messages are actually deleted from all devices, and from any other places (like notifications databases) they may have been saved to.
OnionShare chat rooms don’t store any messages anywhere, so the problem is reduced to a minimum.

OnionShare chat rooms can also be useful for people wanting to chat anonymously and securely with someone without needing to create any accounts.
For example, a source can send an OnionShare address to a journalist using a disposable email address, and then wait for the journalist to join the chat room, all without compromosing their anonymity.

Because OnionShare relies on Tor onion services, connections between the Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When someone posts a message to an OnionShare chat room, they send it to the server through the E2EE onion connection, which then sends it to all other members of the chat room using WebSockets, through their E2EE onion connections.

OnionShare doesn't implement any chat encryption on its own. It relies on the Tor onion service's encryption instead.

OnionShare doesn’t implement any chat encryption on its own. It relies on the Tor onion service’s encryption instead.

You will find instructions on how to use OnionShare. Look through all of the sections first to see if anything answers your questions.

If it isn't on the website, please check the `GitHub issues <https://github.com/onionshare/onionshare/issues>`_. It's possible someone else has encountered the same problem and either raised it with the developers, or maybe even posted a solution.

`GitHub issues <https://github.com/onionshare/onionshare/issues>`_

. It’s possible someone else has encountered the same problem and either raised it with the developers, or maybe even posted a solution.

If you are unable to find a solution, or wish to ask a question or suggest a new feature, please `submit an issue <https://github.com/onionshare/onionshare/issues/new>`_. This requires `creating a GitHub account <https://help.github.com/articles/signing-up-for-a-new-github-account/>`_.

If you are unable to find a solution, or wish to ask a question or suggest a new feature, please 

`submit an issue <https://github.com/onionshare/onionshare/issues/new>`_

`creating a GitHub account <https://help.github.com/articles/signing-up-for-a-new-github-account/>`_

See :ref:`collaborating` on how to join the Keybase team used to discuss the project.

OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network.

You can download OnionShare for Windows and macOS from the `OnionShare website <https://onionshare.org/>`_.

Android
      * Google Play: https://play.google.com/store/apps/details?id=org.onionshare.android
      * F-Droid: https://github.com/onionshare/onionshare-android-nightly

Android
* Google Play: https://play.google.com/store/apps/details?id=org.onionshare.android
* F-Droid: https://github.com/onionshare/onionshare-android-nightly

F-Droid: https://github.com/onionshare/onionshare-android-nightly

iOS
      * Apple App Store: https://apps.apple.com/app/onionshare/id1601890129
      * Direct IPA download: https://github.com/onionshare/onionshare-ios/releases
      * Testflight: https://testflight.apple.com/join/ZCJeY65W

iOS
* Apple App Store: https://apps.apple.com/app/onionshare/id1601890129
* Direct IPA download: https://github.com/onionshare/onionshare-ios/releases
* Testflight: https://testflight.apple.com/join/ZCJeY65W

Apple App Store: https://apps.apple.com/app/onionshare/id1601890129

Direct IPA download: https://github.com/onionshare/onionshare-ios/releases

There are various ways to install OnionShare for Linux, but the recommended way is to use either the `Flatpak <https://flatpak.org/>`_ or the `Snap <https://snapcraft.io/>`_ package.
Flatpak and Snapcraft ensure that you'll always use the newest version and run OnionShare inside of a sandbox.

There are various ways to install OnionShare for Linux, but the recommended way is to use either the 

 package.
Flatpak and Snapcraft ensure that you’ll always use the newest version and run OnionShare inside of a sandbox.

Snapcraft support is built-in to Ubuntu and Fedora comes with Flatpak support, but which you use is up to you. Both work in all Linux distributions.

**Install OnionShare using Flatpak**: https://flathub.org/apps/details/org.onionshare.OnionShare

**Install OnionShare using Snapcraft**: https://snapcraft.io/onionshare

You can also download and install PGP-signed ``.flatpak`` or ``.snap`` packages from https://onionshare.org/dist/ if you prefer.

If you'd like to install OnionShare manually with Flatpak using the PGP-signed `single-file bundle <https://docs.flatpak.org/en/latest/single-file-bundles.html>`_, you can do so like this:

If you’d like to install OnionShare manually with Flatpak using the PGP-signed 

Install Flatpak by following the instructions at https://flatpak.org/setup/.

Add the Flathub repository by running ``flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo``. Even though you won't be downloading OnionShare from Flathub, OnionShare depends on some packages that are only available there.

``flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo``

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

. Even though you won’t be downloading OnionShare from Flathub, OnionShare depends on some packages that are only available there.

Go to https://onionshare.org/dist/, choose the latest version of OnionShare, and download the ``.flatpak`` and ``.flatpak.asc`` files.

Verify the PGP signature of the ``.flatpak`` file. See :ref:`verifying_sigs` for more info.

Install the ``.flatpak`` file by running ``flatpak install OnionShare-VERSION.flatpak``. Replace ``VERSION`` with the version number of the file you downloaded.

You can run OnionShare with: `flatpak run org.onionshare.OnionShare`.

If you'd like to install OnionShare manually with Snapcraft using the PGP-signed Snapcraft package, you can do so like this:

If you’d like to install OnionShare manually with Snapcraft using the PGP-signed Snapcraft package, you can do so like this:

Install Snapcraft by following the instructions at https://snapcraft.io/docs/installing-snapd.

Go to https://onionshare.org/dist/, choose the latest version of OnionShare, and download the ``.snap`` and ``.snap.asc`` files.

Verify the PGP signature of the ``.snap`` file. See :ref:`verifying_sigs` for more info.

Install the ``.snap`` file by running ``snap install --dangerous onionshare_VERSION_amd64.snap``. Replace ``VERSION`` with the version number of the file you downloaded. Note that you must use `--dangerous` because the package is not signed by the Snapcraft store, however you did verify its PGP signature, so you know it's legitimate.

 with the version number of the file you downloaded. Note that you must use 

 because the package is not signed by the Snapcraft store, however you did verify its PGP signature, so you know it’s legitimate.

You can install just the command-line version of OnionShare on any operating system using the Python package manager ``pip``. :ref:`cli` has more info.

You can install just the command-line version of OnionShare on any operating system using the Python package manager 

Althought not being officially developed for this platform, OnionShare can also be installed on `FreeBSD <https://freebsd.org/>`_. It's available via its ports collection or as pre-built package. Should you opt to install and use OnionShare on a FreeBSD operating system, please be aware that it's **NOT** officially supported by the OnionShare project.

Althought not being officially developed for this platform, OnionShare can also be installed on 

. It’s available via its ports collection or as pre-built package. Should you opt to install and use OnionShare on a FreeBSD operating system, please be aware that it’s 

Though not being offered and officially maintained by the OnionShare developers, the FreeBSD packages and ports do fetch and verifies the source codes from the official OnionShare repository (or its official release packages from `PyPI <https://pypi.org/project/onionshare-cli/>`_). Should you wish to check changes related to this platform, please refer to the following resources:

Though not being offered and officially maintained by the OnionShare developers, the FreeBSD packages and ports do fetch and verifies the source codes from the official OnionShare repository (or its official release packages from 

). Should you wish to check changes related to this platform, please refer to the following resources:

To install the binary package, use ``pkg install pyXY-onionshare``, with ``pyXY`` specifying the version of Python the package was built for. So, in order to install OnionShare for Python 3.9, use::

 specifying the version of Python the package was built for. So, in order to install OnionShare for Python 3.9, use:

There's also a **Command-line only** version of OnionShare available as pre-built package. Replace ``py39-onionshare`` by ``py39-onionshare-cli`` if you want to install that version.

For additional information and details about the FreeBSD pre-built packages, please refer to its `official Handbook section about pkg <https://docs.freebsd.org/en/books/handbook/ports/#pkgng-intro>`_.

For additional information and details about the FreeBSD pre-built packages, please refer to its 

`official Handbook section about pkg <https://docs.freebsd.org/en/books/handbook/ports/#pkgng-intro>`_

To install the FreeBSD port, change directory to the `ports collection <https://freebsd.org/ports/>`_ you must have checked out before and run the following::

The ports collection also offers a dedicated port for the **Command-line only** version of OnionShare. Replace ``www/onionshare`` by ``www/onionshare-cli`` if you want to install that version.

For additional information and details about the FreeBSD ports collection, please refer to its `official Handbook section about ports <https://docs.freebsd.org/en/books/handbook/ports/#ports-using>`_.

For additional information and details about the FreeBSD ports collection, please refer to its 

`official Handbook section about ports <https://docs.freebsd.org/en/books/handbook/ports/#ports-using>`_

You can verify that the package you download is legitimate and hasn't been tampered with by verifying its PGP signature.
For Windows and macOS, this step is optional and provides defense in depth: the OnionShare binaries include operating system-specific signatures, and you can just rely on those alone if you'd like.

You can verify that the package you download is legitimate and hasn’t been tampered with by verifying its PGP signature.
For Windows and macOS, this step is optional and provides defense in depth: the OnionShare binaries include operating system-specific signatures, and you can just rely on those alone if you’d like.

Packages are signed by the core developer who is responsible for the particular release. Here is the GPG
key information for each of the core developers of OnionShare:

Micah Lee:
  * PGP public key fingerprint ``927F419D7EC82C2F149C1BD1403C2657CD994F73``.
  * You can download Micah's key `from the keys.openpgp.org keyserver <https://keys.openpgp.org/vks/v1/by-fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>`_.

Micah Lee:
* PGP public key fingerprint ``927F419D7EC82C2F149C1BD1403C2657CD994F73``.
* You can download Micah's key `from the keys.openpgp.org keyserver <https://keys.openpgp.org/vks/v1/by-fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>`_.

PGP public key fingerprint ``927F419D7EC82C2F149C1BD1403C2657CD994F73``.

You can download Micah's key `from the keys.openpgp.org keyserver <https://keys.openpgp.org/vks/v1/by-fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>`_.

`from the keys.openpgp.org keyserver <https://keys.openpgp.org/vks/v1/by-fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>`_

Saptak Sengupta:
  * PGP public key fingerprint ``2AE3D40A6905C8E4E8ED95ECE46A2B977C14666B``.
  * You can download Saptak's key `from the keys.openpgp.org keyserver <https://keys.openpgp.org/vks/v1/by-fingerprint/2AE3D40A6905C8E4E8ED95ECE46A2B977C14666B>`_.

* PGP public key fingerprint ``2AE3D40A6905C8E4E8ED95ECE46A2B977C14666B``.
* You can download Saptak's key `from the keys.openpgp.org keyserver <https://keys.openpgp.org/vks/v1/by-fingerprint/2AE3D40A6905C8E4E8ED95ECE46A2B977C14666B>`_.

PGP public key fingerprint ``2AE3D40A6905C8E4E8ED95ECE46A2B977C14666B``.

You can download Saptak's key `from the keys.openpgp.org keyserver <https://keys.openpgp.org/vks/v1/by-fingerprint/2AE3D40A6905C8E4E8ED95ECE46A2B977C14666B>`_.

`from the keys.openpgp.org keyserver <https://keys.openpgp.org/vks/v1/by-fingerprint/2AE3D40A6905C8E4E8ED95ECE46A2B977C14666B>`_

Miguel Jacq:
  * PGP public key fingerprint ``00AE817C24A10C2540461A9C1D7CDE0234DB458D``.
  * You can download Miguel's key `from the keys.openpgp.org keyserver <https://keys.openpgp.org/vks/v1/by-fingerprint/00AE817C24A10C2540461A9C1D7CDE0234DB458D>`_.

* PGP public key fingerprint ``00AE817C24A10C2540461A9C1D7CDE0234DB458D``.
* You can download Miguel's key `from the keys.openpgp.org keyserver <https://keys.openpgp.org/vks/v1/by-fingerprint/00AE817C24A10C2540461A9C1D7CDE0234DB458D>`_.

PGP public key fingerprint ``00AE817C24A10C2540461A9C1D7CDE0234DB458D``.

You can download Miguel's key `from the keys.openpgp.org keyserver <https://keys.openpgp.org/vks/v1/by-fingerprint/00AE817C24A10C2540461A9C1D7CDE0234DB458D>`_.

`from the keys.openpgp.org keyserver <https://keys.openpgp.org/vks/v1/by-fingerprint/00AE817C24A10C2540461A9C1D7CDE0234DB458D>`_

You must have GnuPG installed to verify signatures. For macOS you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows you probably want `Gpg4win <https://www.gpg4win.org/>`_.

You must have GnuPG installed to verify signatures. For macOS you probably want 

You can find the signatures (as ``.asc`` files), as well as Windows, macOS, Flatpak, Snap, and source packages, at https://onionshare.org/dist/ in the folders named for each version of OnionShare.
You can also find them on the `GitHub Releases page <https://github.com/onionshare/onionshare/releases>`_.

 files), as well as Windows, macOS, Flatpak, Snap, and source packages, at 

 in the folders named for each version of OnionShare.
You can also find them on the 

`GitHub Releases page <https://github.com/onionshare/onionshare/releases>`_

Once you have imported the core developers public keys into your GnuPG keychain, downloaded the binary and ``.asc`` signature, you can verify the binary in a terminal like this:

Once you have imported the core developers public keys into your GnuPG keychain, downloaded the binary and 

gpg --verify OnionShare-win64-2.6.msi.asc OnionShare-win64-2.6.msi (Windows 64-bit)

gpg --verify OnionShare-2.6.flatpak.asc OnionShare-2.6.flatpak (Flatpak)

gpg --verify onionshare_2.6_amd64.snap.asc onionshare_2.6_amd64.snap (Snap)

gpg: Signature made Mo 10 Okt 2022 02:27:16 CEST
gpg:                using RSA key 927F419D7EC82C2F149C1BD1403C2657CD994F73
gpg: Good signature from "Micah Lee <micah@micahflee.com>" [unknown]
gpg:                 aka "Micah Lee <micah.lee@firstlook.media>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 927F 419D 7EC8 2C2F 149C  1BD1 403C 2657 CD99 4F73

If you don't see ``Good signature from``, there might be a problem with the integrity of the file (malicious or otherwise), and you should not install the package.

, there might be a problem with the integrity of the file (malicious or otherwise), and you should not install the package.

The ``WARNING:`` shown above, is not a problem with the package, it only means you haven't defined a level of "trust" of Micah's (the core developer) PGP key.

 shown above, is not a problem with the package, it only means you haven’t defined a level of “trust” of Micah’s (the core developer) PGP key.

If you want to learn more about verifying PGP signatures, the guides for `Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and the `Tor Project <https://support.torproject.org/tbb/how-to-verify-signature/>`_ may be useful.

If you want to learn more about verifying PGP signatures, the guides for 

`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_

`Tor Project <https://support.torproject.org/tbb/how-to-verify-signature/>`_

Duplicate explicit target name: "from the keys.openpgp.org keyserver".

Duplicate explicit target name: “from the keys.openpgp.org keyserver”.

Read :ref:`how_it_works` first to get a handle on how OnionShare works.

Like all software, OnionShare may contain bugs or vulnerabilities.

**Third parties don't have access to anything that happens in OnionShare.**
Using OnionShare means hosting services directly on your computer.
When sharing your files with OnionShare, they are not uploaded to any third-party server.
If you make an OnionShare chat room, your computer acts as a server for that too.
This avoids the traditional model of having to trust the computers of others.

Third parties don’t have access to anything that happens in OnionShare.

**Network eavesdroppers can't spy on anything that happens in OnionShare in transit.**
The connection between the Tor onion service and Tor Browser is end-to-end encrypted.
This means network attackers can't eavesdrop on anything except encrypted Tor traffic.
Even if an eavesdropper is a malicious rendezvous node used to connect the Tor Browser with OnionShare's onion service,
the traffic is encrypted using the onion service's private key.

Network eavesdroppers can’t spy on anything that happens in OnionShare in transit.

This means network attackers can’t eavesdrop on anything except encrypted Tor traffic.
Even if an eavesdropper is a malicious rendezvous node used to connect the Tor Browser with OnionShare’s onion service,
the traffic is encrypted using the onion service’s private key.

**Anonymity of OnionShare users are protected by Tor.**
OnionShare and Tor Browser protect the anonymity of the users.
As long as the OnionShare user anonymously communicates the OnionShare address with the Tor Browser users,
the Tor Browser users and eavesdroppers can't learn the identity of the OnionShare user.

the Tor Browser users and eavesdroppers can’t learn the identity of the OnionShare user.

**If an attacker learns about the onion service, they still can't access anything.**
Prior attacks against the Tor network to enumerate onion services allowed attackers to discover private ``.onion`` addresses.
To access an OnionShare service from its address, the private key used for client authentication must be guessed (unless the service is already made public by turning off the private key -- see :ref:`turn_off_private_key`).

If an attacker learns about the onion service, they still can’t access anything.

Prior attacks against the Tor network to enumerate onion services allowed attackers to discover private 

 addresses.
To access an OnionShare service from its address, the private key used for client authentication must be guessed (unless the service is already made public by turning off the private key – see 

**Communicating the OnionShare address and private key might not be secure.**
Communicating the OnionShare address to people is the responsibility of the OnionShare user.
If sent insecurely (such as through an e-mail message monitored by an attacker), an eavesdropper can tell that OnionShare is being used.
Eavesdroppers can access services that are still up by loading their addresses and/or lost key in the Tor Browser.
Avoid this by communicating the address securely, via encrypted text message (probably with disappearing messages enabled), encrypted e-mail, or in person.
This isn't necessary when using OnionShare for something that isn't secret.

Communicating the OnionShare address and private key might not be secure.

This isn’t necessary when using OnionShare for something that isn’t secret.

**Communicating the OnionShare address and private key might not be anonymous.**
Extra precaution must be taken to ensure the OnionShare address is communicated anonymously.
A new e-mail or chat account, only accessed over Tor, can be used to share the address.
This isn't necessary unless anonymity is a goal.

Communicating the OnionShare address and private key might not be anonymous.

This isn’t necessary unless anonymity is a goal.

When OnionShare starts, it will show you a screen asking you to connect to the Tor network.

You can toggle on the switch "Connect to Tor automatically" before clicking "Connect to Tor". This means that next time OnionShare starts, it will automatically connect with its Tor connection settings from the last session, instead of presenting you with the connection options.
If the connection fails, you can still try bridges or reconfigure Tor via the "Network Settings" button.

You can toggle on the switch “Connect to Tor automatically” before clicking “Connect to Tor”. This means that next time OnionShare starts, it will automatically connect with its Tor connection settings from the last session, instead of presenting you with the connection options.
If the connection fails, you can still try bridges or reconfigure Tor via the “Network Settings” button.

You can click "Connect to Tor" to begin the connection process. If there are no problems with your network, including any attempts to block your access to the Tor network, this should hopefully work the first time.

You can click “Connect to Tor” to begin the connection process. If there are no problems with your network, including any attempts to block your access to the Tor network, this should hopefully work the first time.

Or, if you want to manually configure Bridges or other Tor settings before you connect, you can click "Network Settings".

Or, if you want to manually configure Bridges or other Tor settings before you connect, you can click “Network Settings”.

When you click "Connect to Tor", if OnionShare fails to connect, it might be because Tor is censored in your country or on your local network.

When you click “Connect to Tor”, if OnionShare fails to connect, it might be because Tor is censored in your country or on your local network.

Automatically determine my country from my IP address for bridge settings

.. image:: _static/screenshots/autoconnect-failed-to-connect.png

If you choose the "Try again without a bridge" option, OnionShare will retry connecting to Tor like normal, without attempting to bypass censorship.

If you choose the “Try again without a bridge” option, OnionShare will retry connecting to Tor like normal, without attempting to bypass censorship.

The other two options will attempt to automatically bypass censorship using Tor bridges.
If your network provider is blocking access to the Tor network, you can hopefully still connect to a Tor bridge, which will then connect you to the Tor network, circumventing the censorship.
Both of these options use the Tor Project's Censorship Circumvention API to provide you with bridge settings that should work for you.
OnionShare will temporarily use the `Meek <https://gitlab.torproject.org/legacy/trac/-/wikis/doc/meek/>`_ domain-fronting proxy to make a non-Tor connection from your computer to Tor's Censorship Circumvention API.
The Meek proxy hides the fact that you are trying to find a way to connect to Tor.

Both of these options use the Tor Project’s Censorship Circumvention API to provide you with bridge settings that should work for you.
OnionShare will temporarily use the 

 domain-fronting proxy to make a non-Tor connection from your computer to Tor’s Censorship Circumvention API.

If you choose "Automatically determine my country from my IP address for bridge settings", the Censorship Circumvention API will consider your IP address (yes, your real IP address) to determine what country you might reside in.
Based on the country information, the API will try to automatically find bridges that suit your location.

If you choose “Automatically determine my country from my IP address for bridge settings”, the Censorship Circumvention API will consider your IP address (yes, your real IP address) to determine what country you might reside in.

.. image:: _static/screenshots/autoconnect-trying-to-resolve-connectivity-issues.png

If you choose "Manually select my country for bridge settings", the Censorship API will find the bridges that suit the country that you specified.

If you choose “Manually select my country for bridge settings”, the Censorship API will find the bridges that suit the country that you specified.

If the Censorship Circumvention API finds bridges that it believes will suit you, OnionShare will try to reconnect to Tor using those bridges. If the API does not find any bridges for your location, OnionShare will ask the API for "fallback" options, and then try to reconnect using those.

If the Censorship Circumvention API finds bridges that it believes will suit you, OnionShare will try to reconnect to Tor using those bridges. If the API does not find any bridges for your location, OnionShare will ask the API for “fallback” options, and then try to reconnect using those.

If for some reason OnionShare fails to connect to the Censorship API itself, or if the API returns an error message, OnionShare will attempt to use the obfs4 built-in bridges.

It's important to note that the requests to the Censorship Circumvention API do not go over the Tor network (because if you could connect to Tor already, you wouldn't need to connect to the API).

It’s important to note that the requests to the Censorship Circumvention API do not go over the Tor network (because if you could connect to Tor already, you wouldn’t need to connect to the API).

Even though it's hard for an adversary to discover where the Meek request is going, this may still be risky for some users. Therefore, it is an opt-in feature. The use of Meek and non-torified network requests are limited only to making one or two requests to the Censorship Circumvention API. Then Meek is stopped, and all further network requests happen over the Tor network.

Even though it’s hard for an adversary to discover where the Meek request is going, this may still be risky for some users. Therefore, it is an opt-in feature. The use of Meek and non-torified network requests are limited only to making one or two requests to the Censorship Circumvention API. Then Meek is stopped, and all further network requests happen over the Tor network.

If you are uncomfortable with making a request that doesn't go over the Tor network, you can click "Network Settings" (or the Settings icon in the bottom right corner, followed by the Tor Settings tab in the screen that appears), and manually configure bridges. After you save any bridge settings, OnionShare will try to reconnect using those bridges.

If you are uncomfortable with making a request that doesn’t go over the Tor network, you can click “Network Settings” (or the Settings icon in the bottom right corner, followed by the Tor Settings tab in the screen that appears), and manually configure bridges. After you save any bridge settings, OnionShare will try to reconnect using those bridges.

You can get to the Tor settings by clicking "Network Settings" on the welcome screen, or by clicking the "⚙" icon in the bottom-right corner of the application, and then switch to the Tor Settings tab in the screen that appears.

You can get to the Tor settings by clicking “Network Settings” on the welcome screen, or by clicking the “⚙” icon in the bottom-right corner of the application, and then switch to the Tor Settings tab in the screen that appears.

Here are the different ways you can configure OnionShare to connect to Tor:

This is the default, simplest and most reliable way that OnionShare connects to Tor.
For this reason, it's recommended for most users.

For this reason, it’s recommended for most users.

When you open OnionShare, it launches an already configured ``tor`` process in the background for OnionShare to use.
It doesn't interfere with other ``tor`` processes on your computer, so you can use the Tor Browser or the system ``tor`` on their own.

 process in the background for OnionShare to use.
It doesn’t interfere with other 

 processes on your computer, so you can use the Tor Browser or the system 

To use a bridge, you must select "Use the Tor version built into OnionShare" and check the "Use a bridge" checkbox.

To use a bridge, you must select “Use the Tor version built into OnionShare” and check the “Use a bridge” checkbox.

Try using a built-in bridge first. Using `obfs4` or `snowflake` bridges is recommended over using `meek-azure`.

If using a built-in bridge doesn't work, you can request a bridge from torproject.org. You will have to solve a CAPTCHA in order to request a bridge. (This makes it more difficult for governments or ISPs to block access to Tor bridges.)

If using a built-in bridge doesn’t work, you can request a bridge from torproject.org. You will have to solve a CAPTCHA in order to request a bridge. (This makes it more difficult for governments or ISPs to block access to Tor bridges.)

You also have the option of using a bridge that you learned about from a trusted source.

If you have `downloaded the Tor Browser <https://www.torproject.org>`_ and don't want two ``tor`` processes running, you can use the ``tor`` process from the Tor Browser.
Keep in mind you need to keep Tor Browser open in the background while you're using OnionShare for this to work.

 process from the Tor Browser.
Keep in mind you need to keep Tor Browser open in the background while you’re using OnionShare for this to work.

This is fairly advanced. You'll need to know how edit plaintext files and do stuff as an administrator.

This is fairly advanced. You’ll need to know how edit plaintext files and do stuff as an administrator.

Download the Tor Windows Expert Bundle `from the Tor website <https://www.torproject.org/download/tor/>`_.
Extract the compressed file and copy the extracted folder to ``C:\Program Files (x86)\``
Rename the extracted folder with ``Data`` and ``Tor`` in it to ``tor-win32``.

`from the Tor website <https://www.torproject.org/download/tor/>`_

Make up a control port password.
(Using 7 words in a sequence like ``comprised stumble rummage work avenging construct volatile`` is a good idea for a password.)
Now open a command prompt (``cmd``) as an administrator, and use ``tor.exe --hash-password`` to generate a hash of your password. For example::

(Using 7 words in a sequence like 

cd "C:\Program Files (x86)\tor-win32\Tor"
tor.exe --hash-password "comprised stumble rummage work avenging construct volatile"

The hashed password output is displayed after some warnings (which you can ignore). In the case of the above example, it is ``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``.

The hashed password output is displayed after some warnings (which you can ignore). In the case of the above example, it is 

Now create a new text file at ``C:\Program Files (x86)\tor-win32\torrc`` and put your hashed password output in it, replacing the ``HashedControlPassword`` with the one you just generated::

ControlPort 9051
HashedControlPassword (the hash you generate from the password you picked above)

In your administrator command prompt, install ``tor`` as a service using the appropriate ``torrc`` file you just created (as described in `<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_). Like this::

tor.exe --service install -options -f "C:\Program Files (x86)\tor-win32\torrc"

Open OnionShare, click the "⚙" icon in it, and switch to the Tor Settings tab.
Under "How should OnionShare connect to Tor?" choose "Connect using control port", and set
"Control port" to ``127.0.0.1`` and
"Port" to ``9051``.
Under "Tor authentication settings" choose "Password" and set the password to the control port password you picked above.
Click the "Test Connection to Tor" button.
If all goes well, you should see "Connected to the Tor controller".

Open OnionShare, click the “⚙” icon in it, and switch to the Tor Settings tab.
Under “How should OnionShare connect to Tor?” choose “Connect using control port”, and set
“Control port” to 

.
Under “Tor authentication settings” choose “Password” and set the password to the control port password you picked above.
Click the “Test Connection to Tor” button.
If all goes well, you should see “Connected to the Tor controller”.

First, install `Homebrew <https://brew.sh/>`_ if you don't already have it, and then install Tor::

mkdir -p /usr/local/var/run/tor
chmod 700 /usr/local/var/run/tor
echo 'SOCKSPort 9050' >> /usr/local/etc/tor/torrc
echo 'ControlPort unix:"/usr/local/var/run/tor/control.socket"' >> /usr/local/etc/tor/torrc

Under "How should OnionShare connect to Tor?" choose "Connect using socket file", and
set the socket file to be ``/usr/local/var/run/tor/control.socket``.
Under "Tor authentication settings" choose "No authentication, or cookie authentication".

Under “How should OnionShare connect to Tor?” choose “Connect using socket file”, and
set the socket file to be 

.
Under “Tor authentication settings” choose “No authentication, or cookie authentication”.

First, install the ``tor`` package. If you're using Debian, Ubuntu, or a similar Linux distro, It is recommended to use the Tor Project's `official repository <https://support.torproject.org/apt/tor-deb-repo/>`_.

 package. If you’re using Debian, Ubuntu, or a similar Linux distro, It is recommended to use the Tor Project’s 

`official repository <https://support.torproject.org/apt/tor-deb-repo/>`_

Next, add your user to the group that runs the ``tor`` process (in the case of Debian and Ubuntu, ``debian-tor``) and configure OnionShare to connect to your system ``tor``'s control socket file.

Add your user to the ``debian-tor`` group by running this command (replace ``username`` with your actual username)::

Reboot your computer.
After it boots up again, open OnionShare, click the "⚙" icon in it, and switch to the Tor Settings tab.
Under "How should OnionShare connect to Tor?" choose "Connect using socket file".
Set the socket file to be ``/var/run/tor/control``.

After it boots up again, open OnionShare, click the “⚙” icon in it, and switch to the Tor Settings tab.
Under “How should OnionShare connect to Tor?” choose “Connect using socket file”.
Set the socket file to be 