Repository files navigation

Tinyauth

Tinyauth

The tiniest OpenID Certified™ authorization and authentication server you have ever seen.

LicenseReleaseIssuesTinyauth CI

Tinyauth is the simplest and tiniest authentication and authorization server you have ever seen. It is designed to both work as an authentication middleware for your apps, offering support for OAuth, LDAP and access-controls, and as a standalone authentication server. It supports all the popular proxies like Traefik, Nginx and Caddy.

Screenshot

Warning

Tinyauth is in active development and configuration may change often. Please make sure to carefully read the release notes before updating.

Note

This is the main development branch. For the latest stable release, see the documentation or the latest stable tag.

As of 2026-06-25, Tinyauth v5.1.0 is OpenID Certified™ for Basic OP. You can find the certification details here, test suite available here.

OpenID Certified

Getting Started

You can get started with Tinyauth by following the guide in the documentation. There is also an available docker-compose file that has Traefik, Whoami and Tinyauth to demonstrate its capabilities (keep in mind that this file lives in the development branch so it may have updates that are not yet released).

Demo

If you are still not sure if Tinyauth suits your needs you can try out the demo. The default username is user and the default password is password.

Documentation

You can find documentation and guides on all of the available configuration of Tinyauth in the website.

If you wish to contribute to the documentation head over to the repository.

Discord

Tinyauth has a Discord server. Feel free to hop in to chat about self-hosting, homelabs and of course Tinyauth. See you there!

Contributing

All contributions to the codebase are welcome! If you have any free time, feel free to pick up an issue or add your own missing features. Make sure to check out the contributing guide for instructions on how to get the development server up and running.

Localization

If you like, you can help translate Tinyauth into more languages by visiting the Crowdin page.

License

Tinyauth is licensed under the GNU Affero General Public License v3.0. TL;DR — You may copy, distribute and modify the software as long as you track changes/dates in source files. Any modifications to or software including (via compiler) AGPL-licensed code must also be made available under the AGPL along with build & install instructions. If you run a modified version over a network, you must also make the source available to the users of that service. For more information about the license check the license file.

Hosting Partners

If you use one of our partners, you can help support us while getting a great hosting deal.

Sponsors

A big thank you to the following people for providing me with more coffee:

User avatar: erwinkramerUser avatar: nicotsxUser avatar: SimpleHomelabUser avatar: jmadden91User avatar: triborUser avatar: eliasbenbUser avatar: afunwormUser avatar: chip-wellUser avatar: Lancelot-EnguerrandUser avatar: allgoewerUser avatar: NEANCUser avatar: axjabUser avatar: stegratechUser avatar: apearsonUser avatar: Micky5991

Acknowledgements

  • Freepik for providing the police hat and badge.
  • Renee French for the original gopher logo.
  • Coderabbit AI for providing free AI code reviews.
  • Syrhu for providing the background image of the app.

Star History

Star History Chart

About

The simplest way to protect your apps with a login screen.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Tinyauth

Tinyauth

The tiniest OpenID Certified™ authorization and authentication server you have ever seen.

LicenseReleaseIssuesTinyauth CI

Tinyauth is the simplest and tiniest authentication and authorization server you have ever seen. It is designed to both work as an authentication middleware for your apps, offering support for OAuth, LDAP and access-controls, and as a standalone authentication server. It supports all the popular proxies like Traefik, Nginx and Caddy.

Screenshot

Warning

Tinyauth is in active development and configuration may change often. Please make sure to carefully read the release notes before updating.

Note

This is the main development branch. For the latest stable release, see the documentation or the latest stable tag.

As of 2026-06-25, Tinyauth v5.1.0 is OpenID Certified™ for Basic OP. You can find the certification details here, test suite available here.

OpenID Certified

Getting Started

You can get started with Tinyauth by following the guide in the documentation. There is also an available docker-compose file that has Traefik, Whoami and Tinyauth to demonstrate its capabilities (keep in mind that this file lives in the development branch so it may have updates that are not yet released).

Demo

If you are still not sure if Tinyauth suits your needs you can try out the demo. The default username is user and the default password is password.

Documentation

You can find documentation and guides on all of the available configuration of Tinyauth in the website.

If you wish to contribute to the documentation head over to the repository.

Discord

Tinyauth has a Discord server. Feel free to hop in to chat about self-hosting, homelabs and of course Tinyauth. See you there!

Contributing

All contributions to the codebase are welcome! If you have any free time, feel free to pick up an issue or add your own missing features. Make sure to check out the contributing guide for instructions on how to get the development server up and running.

Localization

If you like, you can help translate Tinyauth into more languages by visiting the Crowdin page.

License

Tinyauth is licensed under the GNU Affero General Public License v3.0. TL;DR — You may copy, distribute and modify the software as long as you track changes/dates in source files. Any modifications to or software including (via compiler) AGPL-licensed code must also be made available under the AGPL along with build & install instructions. If you run a modified version over a network, you must also make the source available to the users of that service. For more information about the license check the license file.

Hosting Partners

If you use one of our partners, you can help support us while getting a great hosting deal.

Sponsors

A big thank you to the following people for providing me with more coffee:

User avatar: erwinkramerUser avatar: nicotsxUser avatar: SimpleHomelabUser avatar: jmadden91User avatar: triborUser avatar: eliasbenbUser avatar: afunwormUser avatar: chip-wellUser avatar: Lancelot-EnguerrandUser avatar: allgoewerUser avatar: NEANCUser avatar: axjabUser avatar: stegratechUser avatar: apearsonUser avatar: Micky5991

Acknowledgements

  • Freepik for providing the police hat and badge.
  • Renee French for the original gopher logo.
  • Coderabbit AI for providing free AI code reviews.
  • Syrhu for providing the background image of the app.

Star History

Star History Chart

About

The simplest way to protect your apps with a login screen.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Tinyauth

Tinyauth

The tiniest OpenID Certified™ authorization and authentication server you have ever seen.

LicenseReleaseIssuesTinyauth CI

Tinyauth is the simplest and tiniest authentication and authorization server you have ever seen. It is designed to both work as an authentication middleware for your apps, offering support for OAuth, LDAP and access-controls, and as a standalone authentication server. It supports all the popular proxies like Traefik, Nginx and Caddy.

Screenshot

Warning

Tinyauth is in active development and configuration may change often. Please make sure to carefully read the release notes before updating.

Note

This is the main development branch. For the latest stable release, see the documentation or the latest stable tag.

As of 2026-06-25, Tinyauth v5.1.0 is OpenID Certified™ for Basic OP. You can find the certification details here, test suite available here.

OpenID Certified

Getting Started

You can get started with Tinyauth by following the guide in the documentation. There is also an available docker-compose file that has Traefik, Whoami and Tinyauth to demonstrate its capabilities (keep in mind that this file lives in the development branch so it may have updates that are not yet released).

Demo

If you are still not sure if Tinyauth suits your needs you can try out the demo. The default username is user and the default password is password.

Documentation

You can find documentation and guides on all of the available configuration of Tinyauth in the website.

If you wish to contribute to the documentation head over to the repository.

Discord

Tinyauth has a Discord server. Feel free to hop in to chat about self-hosting, homelabs and of course Tinyauth. See you there!

Contributing

All contributions to the codebase are welcome! If you have any free time, feel free to pick up an issue or add your own missing features. Make sure to check out the contributing guide for instructions on how to get the development server up and running.

Localization

If you like, you can help translate Tinyauth into more languages by visiting the Crowdin page.

License

Tinyauth is licensed under the GNU Affero General Public License v3.0. TL;DR — You may copy, distribute and modify the software as long as you track changes/dates in source files. Any modifications to or software including (via compiler) AGPL-licensed code must also be made available under the AGPL along with build & install instructions. If you run a modified version over a network, you must also make the source available to the users of that service. For more information about the license check the license file.

Hosting Partners

If you use one of our partners, you can help support us while getting a great hosting deal.

Sponsors

A big thank you to the following people for providing me with more coffee:

User avatar: erwinkramerUser avatar: nicotsxUser avatar: SimpleHomelabUser avatar: jmadden91User avatar: triborUser avatar: eliasbenbUser avatar: afunwormUser avatar: chip-wellUser avatar: Lancelot-EnguerrandUser avatar: allgoewerUser avatar: NEANCUser avatar: axjabUser avatar: stegratechUser avatar: apearsonUser avatar: Micky5991

Acknowledgements

  • Freepik for providing the police hat and badge.
  • Renee French for the original gopher logo.
  • Coderabbit AI for providing free AI code reviews.
  • Syrhu for providing the background image of the app.

Star History

Star History Chart

About

The simplest way to protect your apps with a login screen.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Tinyauth

Tinyauth

The tiniest OpenID Certified™ authorization and authentication server you have ever seen.

LicenseReleaseIssuesTinyauth CI

Tinyauth is the simplest and tiniest authentication and authorization server you have ever seen. It is designed to both work as an authentication middleware for your apps, offering support for OAuth, LDAP and access-controls, and as a standalone authentication server. It supports all the popular proxies like Traefik, Nginx and Caddy.

Screenshot

Warning

Tinyauth is in active development and configuration may change often. Please make sure to carefully read the release notes before updating.

Note

This is the main development branch. For the latest stable release, see the documentation or the latest stable tag.

As of 2026-06-25, Tinyauth v5.1.0 is OpenID Certified™ for Basic OP. You can find the certification details here, test suite available here.

OpenID Certified

Getting Started

You can get started with Tinyauth by following the guide in the documentation. There is also an available docker-compose file that has Traefik, Whoami and Tinyauth to demonstrate its capabilities (keep in mind that this file lives in the development branch so it may have updates that are not yet released).

Demo

If you are still not sure if Tinyauth suits your needs you can try out the demo. The default username is user and the default password is password.

Documentation

You can find documentation and guides on all of the available configuration of Tinyauth in the website.

If you wish to contribute to the documentation head over to the repository.

Discord

Tinyauth has a Discord server. Feel free to hop in to chat about self-hosting, homelabs and of course Tinyauth. See you there!

Contributing

All contributions to the codebase are welcome! If you have any free time, feel free to pick up an issue or add your own missing features. Make sure to check out the contributing guide for instructions on how to get the development server up and running.

Localization

If you like, you can help translate Tinyauth into more languages by visiting the Crowdin page.

License

Tinyauth is licensed under the GNU Affero General Public License v3.0. TL;DR — You may copy, distribute and modify the software as long as you track changes/dates in source files. Any modifications to or software including (via compiler) AGPL-licensed code must also be made available under the AGPL along with build & install instructions. If you run a modified version over a network, you must also make the source available to the users of that service. For more information about the license check the license file.

Hosting Partners

If you use one of our partners, you can help support us while getting a great hosting deal.

Sponsors

A big thank you to the following people for providing me with more coffee:

User avatar: erwinkramerUser avatar: nicotsxUser avatar: SimpleHomelabUser avatar: jmadden91User avatar: triborUser avatar: eliasbenbUser avatar: afunwormUser avatar: chip-wellUser avatar: Lancelot-EnguerrandUser avatar: allgoewerUser avatar: NEANCUser avatar: axjabUser avatar: stegratechUser avatar: apearsonUser avatar: Micky5991

Acknowledgements

  • Freepik for providing the police hat and badge.
  • Renee French for the original gopher logo.
  • Coderabbit AI for providing free AI code reviews.
  • Syrhu for providing the background image of the app.

Star History

Star History Chart

About

The simplest way to protect your apps with a login screen.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Tinyauth

Tinyauth

The tiniest OpenID Certified™ authorization and authentication server you have ever seen.

LicenseReleaseIssuesTinyauth CI

Tinyauth is the simplest and tiniest authentication and authorization server you have ever seen. It is designed to both work as an authentication middleware for your apps, offering support for OAuth, LDAP and access-controls, and as a standalone authentication server. It supports all the popular proxies like Traefik, Nginx and Caddy.

Screenshot

Warning

Tinyauth is in active development and configuration may change often. Please make sure to carefully read the release notes before updating.

Note

This is the main development branch. For the latest stable release, see the documentation or the latest stable tag.

As of 2026-06-25, Tinyauth v5.1.0 is OpenID Certified™ for Basic OP. You can find the certification details here, test suite available here.

OpenID Certified

Getting Started

You can get started with Tinyauth by following the guide in the documentation. There is also an available docker-compose file that has Traefik, Whoami and Tinyauth to demonstrate its capabilities (keep in mind that this file lives in the development branch so it may have updates that are not yet released).

Demo

If you are still not sure if Tinyauth suits your needs you can try out the demo. The default username is user and the default password is password.

Documentation

You can find documentation and guides on all of the available configuration of Tinyauth in the website.

If you wish to contribute to the documentation head over to the repository.

Discord

Tinyauth has a Discord server. Feel free to hop in to chat about self-hosting, homelabs and of course Tinyauth. See you there!

Contributing

All contributions to the codebase are welcome! If you have any free time, feel free to pick up an issue or add your own missing features. Make sure to check out the contributing guide for instructions on how to get the development server up and running.

Localization

If you like, you can help translate Tinyauth into more languages by visiting the Crowdin page.

License

Tinyauth is licensed under the GNU Affero General Public License v3.0. TL;DR — You may copy, distribute and modify the software as long as you track changes/dates in source files. Any modifications to or software including (via compiler) AGPL-licensed code must also be made available under the AGPL along with build & install instructions. If you run a modified version over a network, you must also make the source available to the users of that service. For more information about the license check the license file.

Hosting Partners

If you use one of our partners, you can help support us while getting a great hosting deal.

Sponsors

A big thank you to the following people for providing me with more coffee:

User avatar: erwinkramerUser avatar: nicotsxUser avatar: SimpleHomelabUser avatar: jmadden91User avatar: triborUser avatar: eliasbenbUser avatar: afunwormUser avatar: chip-wellUser avatar: Lancelot-EnguerrandUser avatar: allgoewerUser avatar: NEANCUser avatar: axjabUser avatar: stegratechUser avatar: apearsonUser avatar: Micky5991

Acknowledgements

  • Freepik for providing the police hat and badge.
  • Renee French for the original gopher logo.
  • Coderabbit AI for providing free AI code reviews.
  • Syrhu for providing the background image of the app.

Star History

Star History Chart

About

The simplest way to protect your apps with a login screen.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Tinyauth

Tinyauth

The tiniest OpenID Certified™ authorization and authentication server you have ever seen.

LicenseReleaseIssuesTinyauth CI

Tinyauth is the simplest and tiniest authentication and authorization server you have ever seen. It is designed to both work as an authentication middleware for your apps, offering support for OAuth, LDAP and access-controls, and as a standalone authentication server. It supports all the popular proxies like Traefik, Nginx and Caddy.

Screenshot

Warning

Tinyauth is in active development and configuration may change often. Please make sure to carefully read the release notes before updating.

Note

This is the main development branch. For the latest stable release, see the documentation or the latest stable tag.

As of 2026-06-25, Tinyauth v5.1.0 is OpenID Certified™ for Basic OP. You can find the certification details here, test suite available here.

OpenID Certified

Getting Started

You can get started with Tinyauth by following the guide in the documentation. There is also an available docker-compose file that has Traefik, Whoami and Tinyauth to demonstrate its capabilities (keep in mind that this file lives in the development branch so it may have updates that are not yet released).

Demo

If you are still not sure if Tinyauth suits your needs you can try out the demo. The default username is user and the default password is password.

Documentation

You can find documentation and guides on all of the available configuration of Tinyauth in the website.

If you wish to contribute to the documentation head over to the repository.

Discord

Tinyauth has a Discord server. Feel free to hop in to chat about self-hosting, homelabs and of course Tinyauth. See you there!

Contributing

All contributions to the codebase are welcome! If you have any free time, feel free to pick up an issue or add your own missing features. Make sure to check out the contributing guide for instructions on how to get the development server up and running.

Localization

If you like, you can help translate Tinyauth into more languages by visiting the Crowdin page.

License

Tinyauth is licensed under the GNU Affero General Public License v3.0. TL;DR — You may copy, distribute and modify the software as long as you track changes/dates in source files. Any modifications to or software including (via compiler) AGPL-licensed code must also be made available under the AGPL along with build & install instructions. If you run a modified version over a network, you must also make the source available to the users of that service. For more information about the license check the license file.

Hosting Partners

If you use one of our partners, you can help support us while getting a great hosting deal.

Sponsors

A big thank you to the following people for providing me with more coffee:

User avatar: erwinkramerUser avatar: nicotsxUser avatar: SimpleHomelabUser avatar: jmadden91User avatar: triborUser avatar: eliasbenbUser avatar: afunwormUser avatar: chip-wellUser avatar: Lancelot-EnguerrandUser avatar: allgoewerUser avatar: NEANCUser avatar: axjabUser avatar: stegratechUser avatar: apearsonUser avatar: Micky5991

Acknowledgements

  • Freepik for providing the police hat and badge.
  • Renee French for the original gopher logo.
  • Coderabbit AI for providing free AI code reviews.
  • Syrhu for providing the background image of the app.

Star History

Star History Chart

About

The simplest way to protect your apps with a login screen.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Tinyauth

Tinyauth

The tiniest OpenID Certified™ authorization and authentication server you have ever seen.

LicenseReleaseIssuesTinyauth CI

Tinyauth is the simplest and tiniest authentication and authorization server you have ever seen. It is designed to both work as an authentication middleware for your apps, offering support for OAuth, LDAP and access-controls, and as a standalone authentication server. It supports all the popular proxies like Traefik, Nginx and Caddy.

Screenshot

Warning

Tinyauth is in active development and configuration may change often. Please make sure to carefully read the release notes before updating.

Note

This is the main development branch. For the latest stable release, see the documentation or the latest stable tag.

As of 2026-06-25, Tinyauth v5.1.0 is OpenID Certified™ for Basic OP. You can find the certification details here, test suite available here.

OpenID Certified

Getting Started

You can get started with Tinyauth by following the guide in the documentation. There is also an available docker-compose file that has Traefik, Whoami and Tinyauth to demonstrate its capabilities (keep in mind that this file lives in the development branch so it may have updates that are not yet released).

Demo

If you are still not sure if Tinyauth suits your needs you can try out the demo. The default username is user and the default password is password.

Documentation

You can find documentation and guides on all of the available configuration of Tinyauth in the website.

If you wish to contribute to the documentation head over to the repository.

Discord

Tinyauth has a Discord server. Feel free to hop in to chat about self-hosting, homelabs and of course Tinyauth. See you there!

Contributing

All contributions to the codebase are welcome! If you have any free time, feel free to pick up an issue or add your own missing features. Make sure to check out the contributing guide for instructions on how to get the development server up and running.

Localization

If you like, you can help translate Tinyauth into more languages by visiting the Crowdin page.

License

Tinyauth is licensed under the GNU Affero General Public License v3.0. TL;DR — You may copy, distribute and modify the software as long as you track changes/dates in source files. Any modifications to or software including (via compiler) AGPL-licensed code must also be made available under the AGPL along with build & install instructions. If you run a modified version over a network, you must also make the source available to the users of that service. For more information about the license check the license file.

Hosting Partners

If you use one of our partners, you can help support us while getting a great hosting deal.

Sponsors

A big thank you to the following people for providing me with more coffee:

User avatar: erwinkramerUser avatar: nicotsxUser avatar: SimpleHomelabUser avatar: jmadden91User avatar: triborUser avatar: eliasbenbUser avatar: afunwormUser avatar: chip-wellUser avatar: Lancelot-EnguerrandUser avatar: allgoewerUser avatar: NEANCUser avatar: axjabUser avatar: stegratechUser avatar: apearsonUser avatar: Micky5991

Acknowledgements

  • Freepik for providing the police hat and badge.
  • Renee French for the original gopher logo.
  • Coderabbit AI for providing free AI code reviews.
  • Syrhu for providing the background image of the app.

Star History

Star History Chart

About

The simplest way to protect your apps with a login screen.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Tinyauth

Tinyauth

The tiniest OpenID Certified™ authorization and authentication server you have ever seen.

LicenseReleaseIssuesTinyauth CI

Tinyauth is the simplest and tiniest authentication and authorization server you have ever seen. It is designed to both work as an authentication middleware for your apps, offering support for OAuth, LDAP and access-controls, and as a standalone authentication server. It supports all the popular proxies like Traefik, Nginx and Caddy.

Screenshot

Warning

Tinyauth is in active development and configuration may change often. Please make sure to carefully read the release notes before updating.

Note

This is the main development branch. For the latest stable release, see the documentation or the latest stable tag.

As of 2026-06-25, Tinyauth v5.1.0 is OpenID Certified™ for Basic OP. You can find the certification details here, test suite available here.

OpenID Certified

Getting Started

You can get started with Tinyauth by following the guide in the documentation. There is also an available docker-compose file that has Traefik, Whoami and Tinyauth to demonstrate its capabilities (keep in mind that this file lives in the development branch so it may have updates that are not yet released).

Demo

If you are still not sure if Tinyauth suits your needs you can try out the demo. The default username is user and the default password is password.

Documentation

You can find documentation and guides on all of the available configuration of Tinyauth in the website.

If you wish to contribute to the documentation head over to the repository.

Discord

Tinyauth has a Discord server. Feel free to hop in to chat about self-hosting, homelabs and of course Tinyauth. See you there!

Contributing

All contributions to the codebase are welcome! If you have any free time, feel free to pick up an issue or add your own missing features. Make sure to check out the contributing guide for instructions on how to get the development server up and running.

Localization

If you like, you can help translate Tinyauth into more languages by visiting the Crowdin page.

License

Tinyauth is licensed under the GNU Affero General Public License v3.0. TL;DR — You may copy, distribute and modify the software as long as you track changes/dates in source files. Any modifications to or software including (via compiler) AGPL-licensed code must also be made available under the AGPL along with build & install instructions. If you run a modified version over a network, you must also make the source available to the users of that service. For more information about the license check the license file.

Hosting Partners

If you use one of our partners, you can help support us while getting a great hosting deal.

Sponsors

A big thank you to the following people for providing me with more coffee:

User avatar: erwinkramerUser avatar: nicotsxUser avatar: SimpleHomelabUser avatar: jmadden91User avatar: triborUser avatar: eliasbenbUser avatar: afunwormUser avatar: chip-wellUser avatar: Lancelot-EnguerrandUser avatar: allgoewerUser avatar: NEANCUser avatar: axjabUser avatar: stegratechUser avatar: apearsonUser avatar: Micky5991

Acknowledgements

  • Freepik for providing the police hat and badge.
  • Renee French for the original gopher logo.
  • Coderabbit AI for providing free AI code reviews.
  • Syrhu for providing the background image of the app.

Star History

Star History Chart

About

The simplest way to protect your apps with a login screen.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages