This repository was archived by the owner on Jul 28, 2025. It is now read-only.

Repository files navigation

🚦 RoadSign

A blazing fast http server with a lot of shining features.

Features

  1. Reverse proxy
  2. WebSocket Support
  3. Static File Hosting
  4. Low Configuration
  5. Analytics and Metrics
  6. Integrate with CI/CD
  7. One-liner CLI
  8. Open-source and free
  9. Blazing fast ⚑

But, as we said, this isn't a reverse proxy. It's a http server. So we didn't recommend you directly use it as a gateway to users, because it doesn't support all the features of http. For example like doesn't support multiple site HTTPS, HTTP/2.0, HTTP/3 and Server-Side Events.

You can use RoadSign behind a reverse proxy like caddy, and let it handle the HTTP/2.0, HTTP/3 and all the other cutting-edge stuff.

How fast is it?

We use roadsign and nginx to host the same static file and test them with go-wrk. Here's the result:

SoftwareTotal RequestsRequests per SecondsTransfer per SecondsAvg TimeFastest TimeSlowest TimeErrors Count
Nginx5157494299.582.05MB13.954846ms0s (Cached)410.6972ms0
RoadSign890523076626.7030.98MB783.016Β΅s28.542Β΅s46.773083ms0
RoadSign w/ Prefork478430840170.4116.24MB1.493636ms34.291Β΅s8.727666ms0

As result, roadsign undoubtedly is the fastest one.

It can be found that the prefork feature makes RoadSign more stable in concurrency. We can see this from the Slowest Time. At the same time, the Fastest Time is affected because reusing ports requires some extra steps to handle load balancing. Enable this feature at your own discretion depending on your use case.

More details can be found at benchmark's README.md

Installation

We strongly recommend you install RoadSign via docker compose.

version: "3"services:
roadsign:
image: xsheep2010/roadsign:nightlyrestart: alwaysvolumes:
- "./certs:/certs"# Optional, use for storage certificates
- "./config:/config"
- "./wwwroot:/wwwroot"# Optional, use for storage web apps
- "./settings.yml:/settings.yml"ports:
- "80:80"
- "443:443"
- "81:81"

After that, you can manage your roadsign instance with RoadSign CLI aka. RDC. To install it, run this command. (Make sure you have golang toolchain on your computer)

go install git.solsynth.dev/goatworks/roadsign/pkg/cmd/rdc@latest

Usage

To use roadsign, you need to add a configuration for it. Create a file locally. Name whatever you like. And follow our documentation to write it.

After configure, you need sync your config to remote server. Before that, add a connection between roadsign server and rds cli with this command.

rdc connect <id><url><password># ID will allow you find this server in after commands.# URL is to your roadsign server sideload api.# Password is your roadsign server credential.# ======================================================================# !WARNING! All these things will storage in your $HOME/.roadsignrc.yaml# ======================================================================

Then, sync your local config to remote.

rdc sync <server id><region id><config file># Server ID is your server added by last command.# Site ID is your new site id or old site id if you need update it.# Config File is your local config file path.

After a few seconds, your website is ready!

About

🚦 RoadSign | A reverse proxy server that is not limited to reverse proxies

Topics

Resources

Stars

3 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
This repository was archived by the owner on Jul 28, 2025. It is now read-only.

Repository files navigation

🚦 RoadSign

A blazing fast http server with a lot of shining features.

Features

  1. Reverse proxy
  2. WebSocket Support
  3. Static File Hosting
  4. Low Configuration
  5. Analytics and Metrics
  6. Integrate with CI/CD
  7. One-liner CLI
  8. Open-source and free
  9. Blazing fast ⚑

But, as we said, this isn't a reverse proxy. It's a http server. So we didn't recommend you directly use it as a gateway to users, because it doesn't support all the features of http. For example like doesn't support multiple site HTTPS, HTTP/2.0, HTTP/3 and Server-Side Events.

You can use RoadSign behind a reverse proxy like caddy, and let it handle the HTTP/2.0, HTTP/3 and all the other cutting-edge stuff.

How fast is it?

We use roadsign and nginx to host the same static file and test them with go-wrk. Here's the result:

SoftwareTotal RequestsRequests per SecondsTransfer per SecondsAvg TimeFastest TimeSlowest TimeErrors Count
Nginx5157494299.582.05MB13.954846ms0s (Cached)410.6972ms0
RoadSign890523076626.7030.98MB783.016Β΅s28.542Β΅s46.773083ms0
RoadSign w/ Prefork478430840170.4116.24MB1.493636ms34.291Β΅s8.727666ms0

As result, roadsign undoubtedly is the fastest one.

It can be found that the prefork feature makes RoadSign more stable in concurrency. We can see this from the Slowest Time. At the same time, the Fastest Time is affected because reusing ports requires some extra steps to handle load balancing. Enable this feature at your own discretion depending on your use case.

More details can be found at benchmark's README.md

Installation

We strongly recommend you install RoadSign via docker compose.

version: "3"services:
roadsign:
image: xsheep2010/roadsign:nightlyrestart: alwaysvolumes:
- "./certs:/certs"# Optional, use for storage certificates
- "./config:/config"
- "./wwwroot:/wwwroot"# Optional, use for storage web apps
- "./settings.yml:/settings.yml"ports:
- "80:80"
- "443:443"
- "81:81"

After that, you can manage your roadsign instance with RoadSign CLI aka. RDC. To install it, run this command. (Make sure you have golang toolchain on your computer)

go install git.solsynth.dev/goatworks/roadsign/pkg/cmd/rdc@latest

Usage

To use roadsign, you need to add a configuration for it. Create a file locally. Name whatever you like. And follow our documentation to write it.

After configure, you need sync your config to remote server. Before that, add a connection between roadsign server and rds cli with this command.

rdc connect <id><url><password># ID will allow you find this server in after commands.# URL is to your roadsign server sideload api.# Password is your roadsign server credential.# ======================================================================# !WARNING! All these things will storage in your $HOME/.roadsignrc.yaml# ======================================================================

Then, sync your local config to remote.

rdc sync <server id><region id><config file># Server ID is your server added by last command.# Site ID is your new site id or old site id if you need update it.# Config File is your local config file path.

After a few seconds, your website is ready!

About

🚦 RoadSign | A reverse proxy server that is not limited to reverse proxies

Topics

Resources

Stars

3 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
This repository was archived by the owner on Jul 28, 2025. It is now read-only.

Repository files navigation

🚦 RoadSign

A blazing fast http server with a lot of shining features.

Features

  1. Reverse proxy
  2. WebSocket Support
  3. Static File Hosting
  4. Low Configuration
  5. Analytics and Metrics
  6. Integrate with CI/CD
  7. One-liner CLI
  8. Open-source and free
  9. Blazing fast ⚑

But, as we said, this isn't a reverse proxy. It's a http server. So we didn't recommend you directly use it as a gateway to users, because it doesn't support all the features of http. For example like doesn't support multiple site HTTPS, HTTP/2.0, HTTP/3 and Server-Side Events.

You can use RoadSign behind a reverse proxy like caddy, and let it handle the HTTP/2.0, HTTP/3 and all the other cutting-edge stuff.

How fast is it?

We use roadsign and nginx to host the same static file and test them with go-wrk. Here's the result:

SoftwareTotal RequestsRequests per SecondsTransfer per SecondsAvg TimeFastest TimeSlowest TimeErrors Count
Nginx5157494299.582.05MB13.954846ms0s (Cached)410.6972ms0
RoadSign890523076626.7030.98MB783.016Β΅s28.542Β΅s46.773083ms0
RoadSign w/ Prefork478430840170.4116.24MB1.493636ms34.291Β΅s8.727666ms0

As result, roadsign undoubtedly is the fastest one.

It can be found that the prefork feature makes RoadSign more stable in concurrency. We can see this from the Slowest Time. At the same time, the Fastest Time is affected because reusing ports requires some extra steps to handle load balancing. Enable this feature at your own discretion depending on your use case.

More details can be found at benchmark's README.md

Installation

We strongly recommend you install RoadSign via docker compose.

version: "3"services:
roadsign:
image: xsheep2010/roadsign:nightlyrestart: alwaysvolumes:
- "./certs:/certs"# Optional, use for storage certificates
- "./config:/config"
- "./wwwroot:/wwwroot"# Optional, use for storage web apps
- "./settings.yml:/settings.yml"ports:
- "80:80"
- "443:443"
- "81:81"

After that, you can manage your roadsign instance with RoadSign CLI aka. RDC. To install it, run this command. (Make sure you have golang toolchain on your computer)

go install git.solsynth.dev/goatworks/roadsign/pkg/cmd/rdc@latest

Usage

To use roadsign, you need to add a configuration for it. Create a file locally. Name whatever you like. And follow our documentation to write it.

After configure, you need sync your config to remote server. Before that, add a connection between roadsign server and rds cli with this command.

rdc connect <id><url><password># ID will allow you find this server in after commands.# URL is to your roadsign server sideload api.# Password is your roadsign server credential.# ======================================================================# !WARNING! All these things will storage in your $HOME/.roadsignrc.yaml# ======================================================================

Then, sync your local config to remote.

rdc sync <server id><region id><config file># Server ID is your server added by last command.# Site ID is your new site id or old site id if you need update it.# Config File is your local config file path.

After a few seconds, your website is ready!

About

🚦 RoadSign | A reverse proxy server that is not limited to reverse proxies

Topics

Resources

Stars

3 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
This repository was archived by the owner on Jul 28, 2025. It is now read-only.

Repository files navigation

🚦 RoadSign

A blazing fast http server with a lot of shining features.

Features

  1. Reverse proxy
  2. WebSocket Support
  3. Static File Hosting
  4. Low Configuration
  5. Analytics and Metrics
  6. Integrate with CI/CD
  7. One-liner CLI
  8. Open-source and free
  9. Blazing fast ⚑

But, as we said, this isn't a reverse proxy. It's a http server. So we didn't recommend you directly use it as a gateway to users, because it doesn't support all the features of http. For example like doesn't support multiple site HTTPS, HTTP/2.0, HTTP/3 and Server-Side Events.

You can use RoadSign behind a reverse proxy like caddy, and let it handle the HTTP/2.0, HTTP/3 and all the other cutting-edge stuff.

How fast is it?

We use roadsign and nginx to host the same static file and test them with go-wrk. Here's the result:

SoftwareTotal RequestsRequests per SecondsTransfer per SecondsAvg TimeFastest TimeSlowest TimeErrors Count
Nginx5157494299.582.05MB13.954846ms0s (Cached)410.6972ms0
RoadSign890523076626.7030.98MB783.016Β΅s28.542Β΅s46.773083ms0
RoadSign w/ Prefork478430840170.4116.24MB1.493636ms34.291Β΅s8.727666ms0

As result, roadsign undoubtedly is the fastest one.

It can be found that the prefork feature makes RoadSign more stable in concurrency. We can see this from the Slowest Time. At the same time, the Fastest Time is affected because reusing ports requires some extra steps to handle load balancing. Enable this feature at your own discretion depending on your use case.

More details can be found at benchmark's README.md

Installation

We strongly recommend you install RoadSign via docker compose.

version: "3"services:
roadsign:
image: xsheep2010/roadsign:nightlyrestart: alwaysvolumes:
- "./certs:/certs"# Optional, use for storage certificates
- "./config:/config"
- "./wwwroot:/wwwroot"# Optional, use for storage web apps
- "./settings.yml:/settings.yml"ports:
- "80:80"
- "443:443"
- "81:81"

After that, you can manage your roadsign instance with RoadSign CLI aka. RDC. To install it, run this command. (Make sure you have golang toolchain on your computer)

go install git.solsynth.dev/goatworks/roadsign/pkg/cmd/rdc@latest

Usage

To use roadsign, you need to add a configuration for it. Create a file locally. Name whatever you like. And follow our documentation to write it.

After configure, you need sync your config to remote server. Before that, add a connection between roadsign server and rds cli with this command.

rdc connect <id><url><password># ID will allow you find this server in after commands.# URL is to your roadsign server sideload api.# Password is your roadsign server credential.# ======================================================================# !WARNING! All these things will storage in your $HOME/.roadsignrc.yaml# ======================================================================

Then, sync your local config to remote.

rdc sync <server id><region id><config file># Server ID is your server added by last command.# Site ID is your new site id or old site id if you need update it.# Config File is your local config file path.

After a few seconds, your website is ready!

About

🚦 RoadSign | A reverse proxy server that is not limited to reverse proxies

Topics

Resources

Stars

3 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
This repository was archived by the owner on Jul 28, 2025. It is now read-only.

Repository files navigation

🚦 RoadSign

A blazing fast http server with a lot of shining features.

Features

  1. Reverse proxy
  2. WebSocket Support
  3. Static File Hosting
  4. Low Configuration
  5. Analytics and Metrics
  6. Integrate with CI/CD
  7. One-liner CLI
  8. Open-source and free
  9. Blazing fast ⚑

But, as we said, this isn't a reverse proxy. It's a http server. So we didn't recommend you directly use it as a gateway to users, because it doesn't support all the features of http. For example like doesn't support multiple site HTTPS, HTTP/2.0, HTTP/3 and Server-Side Events.

You can use RoadSign behind a reverse proxy like caddy, and let it handle the HTTP/2.0, HTTP/3 and all the other cutting-edge stuff.

How fast is it?

We use roadsign and nginx to host the same static file and test them with go-wrk. Here's the result:

SoftwareTotal RequestsRequests per SecondsTransfer per SecondsAvg TimeFastest TimeSlowest TimeErrors Count
Nginx5157494299.582.05MB13.954846ms0s (Cached)410.6972ms0
RoadSign890523076626.7030.98MB783.016Β΅s28.542Β΅s46.773083ms0
RoadSign w/ Prefork478430840170.4116.24MB1.493636ms34.291Β΅s8.727666ms0

As result, roadsign undoubtedly is the fastest one.

It can be found that the prefork feature makes RoadSign more stable in concurrency. We can see this from the Slowest Time. At the same time, the Fastest Time is affected because reusing ports requires some extra steps to handle load balancing. Enable this feature at your own discretion depending on your use case.

More details can be found at benchmark's README.md

Installation

We strongly recommend you install RoadSign via docker compose.

version: "3"services:
roadsign:
image: xsheep2010/roadsign:nightlyrestart: alwaysvolumes:
- "./certs:/certs"# Optional, use for storage certificates
- "./config:/config"
- "./wwwroot:/wwwroot"# Optional, use for storage web apps
- "./settings.yml:/settings.yml"ports:
- "80:80"
- "443:443"
- "81:81"

After that, you can manage your roadsign instance with RoadSign CLI aka. RDC. To install it, run this command. (Make sure you have golang toolchain on your computer)

go install git.solsynth.dev/goatworks/roadsign/pkg/cmd/rdc@latest

Usage

To use roadsign, you need to add a configuration for it. Create a file locally. Name whatever you like. And follow our documentation to write it.

After configure, you need sync your config to remote server. Before that, add a connection between roadsign server and rds cli with this command.

rdc connect <id><url><password># ID will allow you find this server in after commands.# URL is to your roadsign server sideload api.# Password is your roadsign server credential.# ======================================================================# !WARNING! All these things will storage in your $HOME/.roadsignrc.yaml# ======================================================================

Then, sync your local config to remote.

rdc sync <server id><region id><config file># Server ID is your server added by last command.# Site ID is your new site id or old site id if you need update it.# Config File is your local config file path.

After a few seconds, your website is ready!

About

🚦 RoadSign | A reverse proxy server that is not limited to reverse proxies

Topics

Resources

Stars

3 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
This repository was archived by the owner on Jul 28, 2025. It is now read-only.

Repository files navigation

🚦 RoadSign

A blazing fast http server with a lot of shining features.

Features

  1. Reverse proxy
  2. WebSocket Support
  3. Static File Hosting
  4. Low Configuration
  5. Analytics and Metrics
  6. Integrate with CI/CD
  7. One-liner CLI
  8. Open-source and free
  9. Blazing fast ⚑

But, as we said, this isn't a reverse proxy. It's a http server. So we didn't recommend you directly use it as a gateway to users, because it doesn't support all the features of http. For example like doesn't support multiple site HTTPS, HTTP/2.0, HTTP/3 and Server-Side Events.

You can use RoadSign behind a reverse proxy like caddy, and let it handle the HTTP/2.0, HTTP/3 and all the other cutting-edge stuff.

How fast is it?

We use roadsign and nginx to host the same static file and test them with go-wrk. Here's the result:

SoftwareTotal RequestsRequests per SecondsTransfer per SecondsAvg TimeFastest TimeSlowest TimeErrors Count
Nginx5157494299.582.05MB13.954846ms0s (Cached)410.6972ms0
RoadSign890523076626.7030.98MB783.016Β΅s28.542Β΅s46.773083ms0
RoadSign w/ Prefork478430840170.4116.24MB1.493636ms34.291Β΅s8.727666ms0

As result, roadsign undoubtedly is the fastest one.

It can be found that the prefork feature makes RoadSign more stable in concurrency. We can see this from the Slowest Time. At the same time, the Fastest Time is affected because reusing ports requires some extra steps to handle load balancing. Enable this feature at your own discretion depending on your use case.

More details can be found at benchmark's README.md

Installation

We strongly recommend you install RoadSign via docker compose.

version: "3"services:
roadsign:
image: xsheep2010/roadsign:nightlyrestart: alwaysvolumes:
- "./certs:/certs"# Optional, use for storage certificates
- "./config:/config"
- "./wwwroot:/wwwroot"# Optional, use for storage web apps
- "./settings.yml:/settings.yml"ports:
- "80:80"
- "443:443"
- "81:81"

After that, you can manage your roadsign instance with RoadSign CLI aka. RDC. To install it, run this command. (Make sure you have golang toolchain on your computer)

go install git.solsynth.dev/goatworks/roadsign/pkg/cmd/rdc@latest

Usage

To use roadsign, you need to add a configuration for it. Create a file locally. Name whatever you like. And follow our documentation to write it.

After configure, you need sync your config to remote server. Before that, add a connection between roadsign server and rds cli with this command.

rdc connect <id><url><password># ID will allow you find this server in after commands.# URL is to your roadsign server sideload api.# Password is your roadsign server credential.# ======================================================================# !WARNING! All these things will storage in your $HOME/.roadsignrc.yaml# ======================================================================

Then, sync your local config to remote.

rdc sync <server id><region id><config file># Server ID is your server added by last command.# Site ID is your new site id or old site id if you need update it.# Config File is your local config file path.

After a few seconds, your website is ready!

About

🚦 RoadSign | A reverse proxy server that is not limited to reverse proxies

Topics

Resources

Stars

3 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
This repository was archived by the owner on Jul 28, 2025. It is now read-only.

Repository files navigation

🚦 RoadSign

A blazing fast http server with a lot of shining features.

Features

  1. Reverse proxy
  2. WebSocket Support
  3. Static File Hosting
  4. Low Configuration
  5. Analytics and Metrics
  6. Integrate with CI/CD
  7. One-liner CLI
  8. Open-source and free
  9. Blazing fast ⚑

But, as we said, this isn't a reverse proxy. It's a http server. So we didn't recommend you directly use it as a gateway to users, because it doesn't support all the features of http. For example like doesn't support multiple site HTTPS, HTTP/2.0, HTTP/3 and Server-Side Events.

You can use RoadSign behind a reverse proxy like caddy, and let it handle the HTTP/2.0, HTTP/3 and all the other cutting-edge stuff.

How fast is it?

We use roadsign and nginx to host the same static file and test them with go-wrk. Here's the result:

SoftwareTotal RequestsRequests per SecondsTransfer per SecondsAvg TimeFastest TimeSlowest TimeErrors Count
Nginx5157494299.582.05MB13.954846ms0s (Cached)410.6972ms0
RoadSign890523076626.7030.98MB783.016Β΅s28.542Β΅s46.773083ms0
RoadSign w/ Prefork478430840170.4116.24MB1.493636ms34.291Β΅s8.727666ms0

As result, roadsign undoubtedly is the fastest one.

It can be found that the prefork feature makes RoadSign more stable in concurrency. We can see this from the Slowest Time. At the same time, the Fastest Time is affected because reusing ports requires some extra steps to handle load balancing. Enable this feature at your own discretion depending on your use case.

More details can be found at benchmark's README.md

Installation

We strongly recommend you install RoadSign via docker compose.

version: "3"services:
roadsign:
image: xsheep2010/roadsign:nightlyrestart: alwaysvolumes:
- "./certs:/certs"# Optional, use for storage certificates
- "./config:/config"
- "./wwwroot:/wwwroot"# Optional, use for storage web apps
- "./settings.yml:/settings.yml"ports:
- "80:80"
- "443:443"
- "81:81"

After that, you can manage your roadsign instance with RoadSign CLI aka. RDC. To install it, run this command. (Make sure you have golang toolchain on your computer)

go install git.solsynth.dev/goatworks/roadsign/pkg/cmd/rdc@latest

Usage

To use roadsign, you need to add a configuration for it. Create a file locally. Name whatever you like. And follow our documentation to write it.

After configure, you need sync your config to remote server. Before that, add a connection between roadsign server and rds cli with this command.

rdc connect <id><url><password># ID will allow you find this server in after commands.# URL is to your roadsign server sideload api.# Password is your roadsign server credential.# ======================================================================# !WARNING! All these things will storage in your $HOME/.roadsignrc.yaml# ======================================================================

Then, sync your local config to remote.

rdc sync <server id><region id><config file># Server ID is your server added by last command.# Site ID is your new site id or old site id if you need update it.# Config File is your local config file path.

After a few seconds, your website is ready!

About

🚦 RoadSign | A reverse proxy server that is not limited to reverse proxies

Topics

Resources

Stars

3 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
This repository was archived by the owner on Jul 28, 2025. It is now read-only.

Repository files navigation

🚦 RoadSign

A blazing fast http server with a lot of shining features.

Features

  1. Reverse proxy
  2. WebSocket Support
  3. Static File Hosting
  4. Low Configuration
  5. Analytics and Metrics
  6. Integrate with CI/CD
  7. One-liner CLI
  8. Open-source and free
  9. Blazing fast ⚑

But, as we said, this isn't a reverse proxy. It's a http server. So we didn't recommend you directly use it as a gateway to users, because it doesn't support all the features of http. For example like doesn't support multiple site HTTPS, HTTP/2.0, HTTP/3 and Server-Side Events.

You can use RoadSign behind a reverse proxy like caddy, and let it handle the HTTP/2.0, HTTP/3 and all the other cutting-edge stuff.

How fast is it?

We use roadsign and nginx to host the same static file and test them with go-wrk. Here's the result:

SoftwareTotal RequestsRequests per SecondsTransfer per SecondsAvg TimeFastest TimeSlowest TimeErrors Count
Nginx5157494299.582.05MB13.954846ms0s (Cached)410.6972ms0
RoadSign890523076626.7030.98MB783.016Β΅s28.542Β΅s46.773083ms0
RoadSign w/ Prefork478430840170.4116.24MB1.493636ms34.291Β΅s8.727666ms0

As result, roadsign undoubtedly is the fastest one.

It can be found that the prefork feature makes RoadSign more stable in concurrency. We can see this from the Slowest Time. At the same time, the Fastest Time is affected because reusing ports requires some extra steps to handle load balancing. Enable this feature at your own discretion depending on your use case.

More details can be found at benchmark's README.md

Installation

We strongly recommend you install RoadSign via docker compose.

version: "3"services:
roadsign:
image: xsheep2010/roadsign:nightlyrestart: alwaysvolumes:
- "./certs:/certs"# Optional, use for storage certificates
- "./config:/config"
- "./wwwroot:/wwwroot"# Optional, use for storage web apps
- "./settings.yml:/settings.yml"ports:
- "80:80"
- "443:443"
- "81:81"

After that, you can manage your roadsign instance with RoadSign CLI aka. RDC. To install it, run this command. (Make sure you have golang toolchain on your computer)

go install git.solsynth.dev/goatworks/roadsign/pkg/cmd/rdc@latest

Usage

To use roadsign, you need to add a configuration for it. Create a file locally. Name whatever you like. And follow our documentation to write it.

After configure, you need sync your config to remote server. Before that, add a connection between roadsign server and rds cli with this command.

rdc connect <id><url><password># ID will allow you find this server in after commands.# URL is to your roadsign server sideload api.# Password is your roadsign server credential.# ======================================================================# !WARNING! All these things will storage in your $HOME/.roadsignrc.yaml# ======================================================================

Then, sync your local config to remote.

rdc sync <server id><region id><config file># Server ID is your server added by last command.# Site ID is your new site id or old site id if you need update it.# Config File is your local config file path.

After a few seconds, your website is ready!

About

🚦 RoadSign | A reverse proxy server that is not limited to reverse proxies

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages