2021-05-21 10:58:47 +00:00
![mMirror Logo ](https://user-images.githubusercontent.com/16416509/119120944-6db26780-ba5f-11eb-9cdd-fc8500207f4d.png )
2020-01-18 22:00:50 +00:00
[![Download ](https://img.shields.io/badge/asset_store-brightgreen.svg )](https://assetstore.unity.com/packages/tools/network/mirror-129321)
2021-02-26 06:15:43 +00:00
[![Documentation ](https://img.shields.io/badge/docs-brightgreen.svg )](https://mirror-networking.gitbook.io/)
2020-11-11 13:56:52 +00:00
[![Showcase ](https://img.shields.io/badge/showcase-brightgreen.svg )](https://mirror-networking.com/showcase/)
2019-11-28 15:24:12 +00:00
[![Video Tutorial ](https://img.shields.io/badge/video_tutorial-brightgreen.svg )](https://www.youtube.com/playlist?list=PLkx8oFug638oBYF5EOwsSS-gOVBXj1dkP)
2018-11-13 19:55:15 +00:00
[![Forum ](https://img.shields.io/badge/forum-brightgreen.svg )](https://forum.unity.com/threads/mirror-networking-for-unity-aka-hlapi-community-edition.425437/)
2020-09-08 14:23:26 +00:00
[![Build ](https://img.shields.io/appveyor/ci/vis2k73562/hlapi-community-edition/Mirror.svg )](https://ci.appveyor.com/project/vis2k73562/hlapi-community-edition/branch/mirror)
2018-08-04 13:03:53 +00:00
[![Discord ](https://img.shields.io/discord/343440455738064897.svg )](https://discordapp.com/invite/N9QVxbM)
2018-11-13 19:35:20 +00:00
[![release ](https://img.shields.io/github/release/vis2k/Mirror.svg )](https://github.com/vis2k/Mirror/releases/latest)
2021-06-21 15:09:03 +00:00
[![License: MIT ](https://img.shields.io/badge/License-MIT-brightgreen.svg )](https://github.com/vis2k/Mirror/blob/master/LICENSE)
2020-12-16 03:09:53 +00:00
[![Roadmap ](https://img.shields.io/badge/roadmap-blue.svg )](https://trello.com/b/fgAE7Tud)
2018-07-15 21:06:02 +00:00
2021-05-21 10:58:47 +00:00
**It's only the dreamers who ever move mountains.**
< img src = "https://user-images.githubusercontent.com/16416509/119117854-3e4e2b80-ba5c-11eb-8236-ce6cfd2b6b07.png" title = "Original Concept Art for Games that made us dream. Copyright Blizzard, Blizzard, Riot Games, Joymax in that order." / >
2020-09-08 16:10:27 +00:00
2020-09-08 16:11:26 +00:00
## Mirror
2021-05-20 08:29:24 +00:00
Mirror is a **high level** Networking library for **Unity 2019/2020 LTS** , compatible with different **low level** [Transports ](https://github.com/vis2k/Mirror#low-level-transports ).
2018-07-15 21:06:02 +00:00
2021-05-21 10:58:47 +00:00
Mirror is for indie games & small [MMOs ](https://www.youtube.com/watch?v=mDCNff1S9ZU ), made by the developers of [uMMORPG ](https://assetstore.unity.com/packages/templates/systems/ummorpg-components-edition-159401 ) and [Cubica ](https://www.youtube.com/watch?v=D_f_MntrLVE ).
2018-07-15 21:06:02 +00:00
2021-02-26 06:15:43 +00:00
Mirror is optimized for **ease of use** & **probability of success** .
2020-09-08 16:22:10 +00:00
2020-09-09 08:08:47 +00:00
We needed a networking library that allows us to ** [launch our games ](https://mirror-networking.com/showcase/ )** and **survive the next decade** .
2018-07-15 21:06:02 +00:00
2021-05-21 10:58:47 +00:00
Mirror is ** [stable ](https://mirror-networking.gitbook.io/docs/general/tests )** & ** [production ](https://www.oculus.com/experiences/quest/2564158073609422/ )** ready.
## Free & Open
Mirror is **free & open source** !
* Code: MIT licensed.
* Dedicated Servers: [Anywhere ](https://mirror-networking.gitbook.io/docs/guides/server-hosting )!
* Player Hosted: [Free Epic Relay ](https://github.com/FakeByte/EpicOnlineTransport )!
We need Mirror for our own games, which is why we will never charge anything.
Funded only by [Donations ](https://github.com/sponsors/vis2k ) from our [fantastic community ](https://discordapp.com/invite/N9QVxbM ) of over 10,000 people.
2021-05-20 08:27:17 +00:00
2020-09-08 14:41:32 +00:00
## Architecture
2020-09-08 16:31:43 +00:00
The **Server & Client** are **ONE project** in order to achieve an order of magnitude gain in productivity.
2020-09-08 15:36:34 +00:00
2020-09-08 15:37:39 +00:00
Making multiplayer games this way is fun & easy. Instead of MonoBehaviour, Mirror provides **NetworkBehaviour** components with:
2020-09-08 15:41:47 +00:00
* **[Server]** / ** [Client]** tags for server-only / client-only code
2020-09-08 15:42:28 +00:00
* **[Command]** for Client->Server function calls (e.g. UseItem)
2020-09-08 15:41:47 +00:00
* **[ClientRpc]** / ** [TargetRpc]** for Server->Client function calls (e.g. AddChatMessage)
2020-09-08 15:42:01 +00:00
* **[SyncVar]** / SyncList to automatically synchronize variables from Server->Client
2018-07-15 21:06:02 +00:00
2020-09-08 14:49:11 +00:00
## Getting Started
2021-03-13 04:30:33 +00:00
Get **Unity 2019 LTS** , download [Mirror on the Asset Store ](https://assetstore.unity.com/packages/tools/network/mirror-129321 ), open one of the examples & press Play!
2020-09-08 14:49:11 +00:00
2021-02-26 06:15:43 +00:00
Check out our [Documentation ](https://mirror-networking.gitbook.io/ ) to learn how it all works.
2020-09-08 14:49:11 +00:00
2021-02-26 06:15:43 +00:00
If you are migrating from UNET, then please check out our [Migration Guide ](https://mirror-networking.gitbook.io/docs/general/migration-guide ).
2020-09-08 14:49:11 +00:00
2020-11-11 13:24:21 +00:00
## Made with Mirror
2021-05-21 10:58:47 +00:00
< table align = "center" >
< tr >
< th > < a href = "http://www.populationonevr.com/" > Population: ONE< / a > < / th >
< th > < a href = "https://wildlifestudios.com/games/zooba/" > Zooba< / a > < / th >
< th > < a href = "https://store.steampowered.com/app/700330/SCP_Secret_Laboratory/" > SCP: Secret Laboratory< / a > < / th >
< th > < a href = "https://naicaonline.com/" > Naïca Online< / a > < / th >
< / tr >
< tr >
2021-05-27 02:54:54 +00:00
< td > < img src = "https://user-images.githubusercontent.com/16416509/119758937-f145db80-bed9-11eb-9512-0ef46eb899e7.jpg" height = "100" / > < / td >
2021-05-21 10:58:47 +00:00
< td > < img src = "https://user-images.githubusercontent.com/16416509/119125684-ac96ec00-ba64-11eb-9c0c-c6595e00dec8.png" height = "100" / > < / td >
< td > < img src = "https://steamcdn-a.akamaihd.net/steam/apps/700330/header.jpg?t=1604668607" height = "100" / > < / td >
< td > < img src = "https://i.imgur.com/VrBqvtz.png" height = "100" / > < / td >
< / tr >
< tr >
< th > < a href = "https://laurum.online/" > Laurum Online< / a > < / th >
< th > < a href = "https://www.samutale.com/" > SamuTale< / a > < / th >
< th > < a href = "https://store.steampowered.com/app/1313210/Nimoyd__Survival_Sandbox/" > Nimoyd< / a > < / th >
< th > < a href = "https://store.steampowered.com/app/719200/The_Wall/" > The Wall< / a > < / th >
< / tr >
< tr >
2021-05-27 03:08:49 +00:00
< td > < img src = "https://camo.githubusercontent.com/6d50af6cbe0fcfc465f444f75475a356c6c14b4a3a9534156cfdd578e7d45a9f/68747470733a2f2f692e696d6775722e636f6d2f324938776e784f2e706e67" height = "100" / > < / td >
2021-05-27 03:02:43 +00:00
< td > < img src = "https://user-images.githubusercontent.com/16416509/119759544-07a06700-bedb-11eb-9754-97c3e8f50b0e.jpg" height = "100" / > < / td >
2021-05-21 10:58:47 +00:00
< td > < img src = "https://cdn.akamai.steamstatic.com/steam/apps/1313210/header.jpg?t=1616227358" height = "100" / > < / td >
< td > < img src = "https://cdn.akamai.steamstatic.com/steam/apps/719200/header.jpg?t=1588105839" height = "100" / > < / td >
< / tr >
< tr >
< th > < a href = "https://nestables.co/" > Nestables< / a > < / th >
< th > < a href = "https://www.glimpse-luna.com/" > A Glimpse of Luna< / a > < / th >
< th > < a href = "https://store.steampowered.com/app/535630/One_More_Night/" > One More Night< / a > < / th >
2021-05-23 11:07:22 +00:00
< th > < a href = "" > Cubica< / a > < / th >
2021-05-21 10:58:47 +00:00
< / tr >
< tr >
< td > < img src = "https://user-images.githubusercontent.com/16416509/119001349-7a32b380-b9be-11eb-86fd-a116920842d1.png" height = "100" / > < / td >
< td > < img src = "https://user-images.githubusercontent.com/16416509/119001595-b0703300-b9be-11eb-9e40-6542113dc1a2.png" height = "100" / > < / td >
< td > < img src = "https://cdn.akamai.steamstatic.com/steam/apps/535630/header.jpg?t=1584831320" height = "100" / > < / td >
< td > < img src = "https://i.ytimg.com/vi/D_f_MntrLVE/maxresdefault.jpg" height = "100" / > < / td >
< / tr >
2021-05-27 02:59:18 +00:00
< tr >
2021-05-27 03:11:22 +00:00
< th > < a href = "https://inferna.net" > Inferna< / a > < / th >
2021-08-25 05:00:52 +00:00
< th > < a href = "https://nightz.io" > NightZ< / a > < / th >
2021-05-27 02:59:18 +00:00
< th > < a href = "" > < / a > < / th >
< th > < a href = "" > < / a > < / th >
< / tr >
< tr >
2021-05-27 03:09:20 +00:00
< td > < img src = "https://user-images.githubusercontent.com/16416509/119760092-f3109e80-bedb-11eb-96cd-8e7f52e483fc.png" height = "100" / > < / td >
2021-08-25 05:00:52 +00:00
< td > < img src = "https://user-images.githubusercontent.com/16416509/130729336-9c4e95d9-69bc-4410-b894-b2677159a472.jpg" height = "100" / > < / td >
2021-05-27 02:59:18 +00:00
< td > < / td >
< td > < / td >
< / tr >
2021-05-21 10:58:47 +00:00
< / table >
2020-11-12 15:59:26 +00:00
2021-03-10 04:09:54 +00:00
And [many more ](https://mirror-networking.com/showcase/ )...
2021-05-21 11:02:03 +00:00
## Low Level Transports
* (built in) [KCP ](https://app.gitbook.com/@mirror-networking/s/docs/transports/kcp-transport ): reliable UDP
* (built in) [Telepathy ](https://app.gitbook.com/@mirror-networking/s/docs/transports/telepathy-transport ): TCP
* (built in) [Websockets ](https://app.gitbook.com/@mirror-networking/s/docs/transports/websockets-transport ): Websockets
* [Ignorance ](https://github.com/SoftwareGuy/Ignorance/ ): ENET UDP
* [LiteNetLib ](https://github.com/MirrorNetworking/LiteNetLibTransport/ ) UDP
* [FizzySteam ](https://github.com/Chykary/FizzySteamworks/ ): SteamNetwork
* [FizzyFacepunch ](https://github.com/Chykary/FizzyFacepunch/ ): SteamNetwork
* [Epic Relay ](https://github.com/FakeByte/EpicOnlineTransport ): Epic Online Services
2021-06-22 11:27:07 +00:00
* [Bubble ](https://github.com/Squaresweets/BubbleTransport ): Apple GameCenter
2021-05-21 11:02:03 +00:00
* [Light Reflective Mirror ](https://github.com/Derek-R-S/Light-Reflective-Mirror ): Self-Hosted Relay
* [Oculus P2P ](https://github.com/hyferg/MirrorOculusP2P ): Oculus Platform Service
2018-10-08 15:11:50 +00:00
## Benchmarks
2021-05-21 10:58:47 +00:00
* [uMMORPG 480 CCU ](https://youtu.be/mDCNff1S9ZU ) (worst case)
* [Jesus' Benchmarks ](https://docs.google.com/document/d/1GMxcWAz3ePt3RioK8k4erpVSpujMkYje4scOuPwM8Ug/edit?usp=sharing )
2018-07-15 21:06:02 +00:00
2020-09-08 15:18:05 +00:00
## Development & Contributing
2021-05-21 10:58:47 +00:00
Mirror is used **in production** by everything from small indie projects to million dollar funded games that will run for a decade or more.
2018-07-15 21:06:02 +00:00
2021-05-21 10:58:47 +00:00
Therefore it is of utmost importance for us to follow the [KISS principle ](https://en.wikipedia.org/wiki/KISS_principle ) in order for our games to survive, so that we can still fix networking bugs 10 years from now if needed.
2018-06-07 13:40:15 +00:00
2020-09-08 15:22:33 +00:00
Keeping the next decade in mind, contributing **fixes** / **tests** / **improvements** is highly appreciated while new features have a low probability of being merged.
2019-03-16 10:03:03 +00:00
2020-09-08 15:22:33 +00:00
_At this point, what we don't add to Mirror is more important than what we do add to it!_
2021-03-10 03:38:49 +00:00
# Bug Bounty
2021-05-21 10:58:47 +00:00
< img src = "https://user-images.githubusercontent.com/16416509/110572995-718b5900-8195-11eb-802c-235c82a03bf7.png" height = "150" >
2021-03-10 03:41:39 +00:00
2021-03-11 04:18:40 +00:00
A lot of projects use Mirror in production. If you found a critical bug / exploit in Mirror core, please reach out to us in private.
2021-03-10 03:38:49 +00:00
Depending on the severity of the exploit, we offer $50 - $500 for now.
2021-03-10 03:45:42 +00:00
Rewards based on Mirror's [donations ](https://github.com/sponsors/vis2k ), capped at amount of donations we received that month.
2021-03-10 03:38:49 +00:00
2021-03-10 03:39:19 +00:00
**Specifically we are looking for:**
2021-03-10 03:38:49 +00:00
* Ways to crash a Mirror server
* Ways to exploit a Mirror server
* Ways to leave a Mirror server in undefined state
We are **not** looking for DOS/DDOS attacks. The exploit should be possible with just a couple of network packets, and it should be reproducible.
2021-03-10 03:39:19 +00:00
**Credits / past findings / fixes:**
2021-03-10 03:49:37 +00:00
* 2020, fholm: fuzzing ConnectMessage to stop further connects [[#2397 ](https://github.com/vis2k/Mirror/pull/2397 )]