Skip to content

Repository files navigation

Goact

A simple framework for using React as a templating engine in Golang.

How it works

We are compiling React in SSR mode, this generates Javascript code. When the user call the render function we add the props to the compiled js the run the js. This step generates the required html then we can return that as our response.

Simple setup

Add the package to your project

go get github.com/sevenreup/goact

Create the GoactEngine instance and use it

package main
import (
"bytes""fmt""github.com/sevenreup/goact""log"
)
funcmain() {
opts:= goact.GoactEngineOpts{
OutputDir: "./dist",
WorkingDir: "./views",
IsDebug: true,
StructPath: "./dto",
TsTypeOutputPath: "./views/types",
}
engine:=goact.CreateGoactEngine(&opts)
varbuf bytes.Buffererr:=engine.Render(&buf, "./entry.tsx", map[string]string{
"title": "Hello World",
})
iferr!=nil {
log.Panic(err)
}
s:=buf.String()
fmt.Println(s)
}

Setup React

Make sure you install the required packages for React in the folder of your project, you can use the provided cli tool for a quick setup or manually.

Manual setup

Make sure you have node installed on your device.

Init the package.json

npm init -y

Install React using your favorite package manager

npm install -D react react-dom

Using the cli

Install the cli

go install github.com/sevenreup/goact/goact-cli@latest

Then you can init the project

goact-cli init

You can pass extra params like

--packageManger: To specify the package manager to use (npm is default)

--tailwind: To setup tailwind in your project

--viewDir: If you are setting up tailwind pass this to point to the location where the main css file should be created

For example

goact-cli init --packageManger="pnpm" --tailwind --viewDir="./"

Working with React

Below are some of the special rules (🥲 Limitations) of Pages and Layouts, these only matter for pages and Layouts, other components in your project can be used normally.

Pages

The engine expects all your pages to have a default export of Page;

For Example

constPage=()=>{}exportdefaultPage;

Layouts

The engine also supports layouts. It will check for layouts at the base of the WorkingDir. The engine expects all layouts to have a default export of Layout;

For example

constLayout=({ children })=>{}exportdefaultLayout;

Generating types for Props to use in React

You need to make sure you have a special folder or file that you put the structs that you are going to use when passing data to the render function. The struct is used to generate a typescript file that you can import in your tsx code. Pass the StructPath option that points to your struct or struct folder. Pass the TsTypeOutputPath which is where the ts file will be created in.

The type generation should only be done in dev mode so make sure you have a way to tell the Engine the current environment because the generation happens at start.

For example using Environment variables

opts:= goact.GoactEngineOpts {
// rest of the codeIsDebug: os.Getenv("Environment") =="Dev",
// rest of the code
}

What is remaining to make this framework production ready?

  • Prebuild all the view files so that they can be used in production
  • Add caching of compiled React code ( Speeds up dev )
  • Should be able to ship some reactivity to the browser
  • Support layouts at different levels of the view folder

Some feature that would be awesome to have

  • Hot reload ( Reload the browser when UI changes)

About

Test to use React as templating engine for go

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - sevenreup/goact: Test to use React as templating engine for go · GitHub
Skip to content

Repository files navigation

Goact

A simple framework for using React as a templating engine in Golang.

How it works

We are compiling React in SSR mode, this generates Javascript code. When the user call the render function we add the props to the compiled js the run the js. This step generates the required html then we can return that as our response.

Simple setup

Add the package to your project

go get github.com/sevenreup/goact

Create the GoactEngine instance and use it

package main
import (
"bytes""fmt""github.com/sevenreup/goact""log"
)
funcmain() {
opts:= goact.GoactEngineOpts{
OutputDir: "./dist",
WorkingDir: "./views",
IsDebug: true,
StructPath: "./dto",
TsTypeOutputPath: "./views/types",
}
engine:=goact.CreateGoactEngine(&opts)
varbuf bytes.Buffererr:=engine.Render(&buf, "./entry.tsx", map[string]string{
"title": "Hello World",
})
iferr!=nil {
log.Panic(err)
}
s:=buf.String()
fmt.Println(s)
}

Setup React

Make sure you install the required packages for React in the folder of your project, you can use the provided cli tool for a quick setup or manually.

Manual setup

Make sure you have node installed on your device.

Init the package.json

npm init -y

Install React using your favorite package manager

npm install -D react react-dom

Using the cli

Install the cli

go install github.com/sevenreup/goact/goact-cli@latest

Then you can init the project

goact-cli init

You can pass extra params like

--packageManger: To specify the package manager to use (npm is default)

--tailwind: To setup tailwind in your project

--viewDir: If you are setting up tailwind pass this to point to the location where the main css file should be created

For example

goact-cli init --packageManger="pnpm" --tailwind --viewDir="./"

Working with React

Below are some of the special rules (🥲 Limitations) of Pages and Layouts, these only matter for pages and Layouts, other components in your project can be used normally.

Pages

The engine expects all your pages to have a default export of Page;

For Example

constPage=()=>{}exportdefaultPage;

Layouts

The engine also supports layouts. It will check for layouts at the base of the WorkingDir. The engine expects all layouts to have a default export of Layout;

For example

constLayout=({ children })=>{}exportdefaultLayout;

Generating types for Props to use in React

You need to make sure you have a special folder or file that you put the structs that you are going to use when passing data to the render function. The struct is used to generate a typescript file that you can import in your tsx code. Pass the StructPath option that points to your struct or struct folder. Pass the TsTypeOutputPath which is where the ts file will be created in.

The type generation should only be done in dev mode so make sure you have a way to tell the Engine the current environment because the generation happens at start.

For example using Environment variables

opts:= goact.GoactEngineOpts {
// rest of the codeIsDebug: os.Getenv("Environment") =="Dev",
// rest of the code
}

What is remaining to make this framework production ready?

  • Prebuild all the view files so that they can be used in production
  • Add caching of compiled React code ( Speeds up dev )
  • Should be able to ship some reactivity to the browser
  • Support layouts at different levels of the view folder

Some feature that would be awesome to have

  • Hot reload ( Reload the browser when UI changes)

About

Test to use React as templating engine for go

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

Goact

A simple framework for using React as a templating engine in Golang.

How it works

We are compiling React in SSR mode, this generates Javascript code. When the user call the render function we add the props to the compiled js the run the js. This step generates the required html then we can return that as our response.

Simple setup

Add the package to your project

go get github.com/sevenreup/goact

Create the GoactEngine instance and use it

package main
import (
"bytes""fmt""github.com/sevenreup/goact""log"
)
funcmain() {
opts:= goact.GoactEngineOpts{
OutputDir: "./dist",
WorkingDir: "./views",
IsDebug: true,
StructPath: "./dto",
TsTypeOutputPath: "./views/types",
}
engine:=goact.CreateGoactEngine(&opts)
varbuf bytes.Buffererr:=engine.Render(&buf, "./entry.tsx", map[string]string{
"title": "Hello World",
})
iferr!=nil {
log.Panic(err)
}
s:=buf.String()
fmt.Println(s)
}

Setup React

Make sure you install the required packages for React in the folder of your project, you can use the provided cli tool for a quick setup or manually.

Manual setup

Make sure you have node installed on your device.

Init the package.json

npm init -y

Install React using your favorite package manager

npm install -D react react-dom

Using the cli

Install the cli

go install github.com/sevenreup/goact/goact-cli@latest

Then you can init the project

goact-cli init

You can pass extra params like

--packageManger: To specify the package manager to use (npm is default)

--tailwind: To setup tailwind in your project

--viewDir: If you are setting up tailwind pass this to point to the location where the main css file should be created

For example

goact-cli init --packageManger="pnpm" --tailwind --viewDir="./"

Working with React

Below are some of the special rules (🥲 Limitations) of Pages and Layouts, these only matter for pages and Layouts, other components in your project can be used normally.

Pages

The engine expects all your pages to have a default export of Page;

For Example

constPage=()=>{}exportdefaultPage;

Layouts

The engine also supports layouts. It will check for layouts at the base of the WorkingDir. The engine expects all layouts to have a default export of Layout;

For example

constLayout=({ children })=>{}exportdefaultLayout;

Generating types for Props to use in React

You need to make sure you have a special folder or file that you put the structs that you are going to use when passing data to the render function. The struct is used to generate a typescript file that you can import in your tsx code. Pass the StructPath option that points to your struct or struct folder. Pass the TsTypeOutputPath which is where the ts file will be created in.

The type generation should only be done in dev mode so make sure you have a way to tell the Engine the current environment because the generation happens at start.

For example using Environment variables

opts:= goact.GoactEngineOpts {
// rest of the codeIsDebug: os.Getenv("Environment") =="Dev",
// rest of the code
}

What is remaining to make this framework production ready?

  • Prebuild all the view files so that they can be used in production
  • Add caching of compiled React code ( Speeds up dev )
  • Should be able to ship some reactivity to the browser
  • Support layouts at different levels of the view folder

Some feature that would be awesome to have

  • Hot reload ( Reload the browser when UI changes)

About

Test to use React as templating engine for go

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

Goact

A simple framework for using React as a templating engine in Golang.

How it works

We are compiling React in SSR mode, this generates Javascript code. When the user call the render function we add the props to the compiled js the run the js. This step generates the required html then we can return that as our response.

Simple setup

Add the package to your project

go get github.com/sevenreup/goact

Create the GoactEngine instance and use it

package main
import (
"bytes""fmt""github.com/sevenreup/goact""log"
)
funcmain() {
opts:= goact.GoactEngineOpts{
OutputDir: "./dist",
WorkingDir: "./views",
IsDebug: true,
StructPath: "./dto",
TsTypeOutputPath: "./views/types",
}
engine:=goact.CreateGoactEngine(&opts)
varbuf bytes.Buffererr:=engine.Render(&buf, "./entry.tsx", map[string]string{
"title": "Hello World",
})
iferr!=nil {
log.Panic(err)
}
s:=buf.String()
fmt.Println(s)
}

Setup React

Make sure you install the required packages for React in the folder of your project, you can use the provided cli tool for a quick setup or manually.

Manual setup

Make sure you have node installed on your device.

Init the package.json

npm init -y

Install React using your favorite package manager

npm install -D react react-dom

Using the cli

Install the cli

go install github.com/sevenreup/goact/goact-cli@latest

Then you can init the project

goact-cli init

You can pass extra params like

--packageManger: To specify the package manager to use (npm is default)

--tailwind: To setup tailwind in your project

--viewDir: If you are setting up tailwind pass this to point to the location where the main css file should be created

For example

goact-cli init --packageManger="pnpm" --tailwind --viewDir="./"

Working with React

Below are some of the special rules (🥲 Limitations) of Pages and Layouts, these only matter for pages and Layouts, other components in your project can be used normally.

Pages

The engine expects all your pages to have a default export of Page;

For Example

constPage=()=>{}exportdefaultPage;

Layouts

The engine also supports layouts. It will check for layouts at the base of the WorkingDir. The engine expects all layouts to have a default export of Layout;

For example

constLayout=({ children })=>{}exportdefaultLayout;

Generating types for Props to use in React

You need to make sure you have a special folder or file that you put the structs that you are going to use when passing data to the render function. The struct is used to generate a typescript file that you can import in your tsx code. Pass the StructPath option that points to your struct or struct folder. Pass the TsTypeOutputPath which is where the ts file will be created in.

The type generation should only be done in dev mode so make sure you have a way to tell the Engine the current environment because the generation happens at start.

For example using Environment variables

opts:= goact.GoactEngineOpts {
// rest of the codeIsDebug: os.Getenv("Environment") =="Dev",
// rest of the code
}

What is remaining to make this framework production ready?

  • Prebuild all the view files so that they can be used in production
  • Add caching of compiled React code ( Speeds up dev )
  • Should be able to ship some reactivity to the browser
  • Support layouts at different levels of the view folder

Some feature that would be awesome to have

  • Hot reload ( Reload the browser when UI changes)

About

Test to use React as templating engine for go

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

Goact

A simple framework for using React as a templating engine in Golang.

How it works

We are compiling React in SSR mode, this generates Javascript code. When the user call the render function we add the props to the compiled js the run the js. This step generates the required html then we can return that as our response.

Simple setup

Add the package to your project

go get github.com/sevenreup/goact

Create the GoactEngine instance and use it

package main
import (
"bytes""fmt""github.com/sevenreup/goact""log"
)
funcmain() {
opts:= goact.GoactEngineOpts{
OutputDir: "./dist",
WorkingDir: "./views",
IsDebug: true,
StructPath: "./dto",
TsTypeOutputPath: "./views/types",
}
engine:=goact.CreateGoactEngine(&opts)
varbuf bytes.Buffererr:=engine.Render(&buf, "./entry.tsx", map[string]string{
"title": "Hello World",
})
iferr!=nil {
log.Panic(err)
}
s:=buf.String()
fmt.Println(s)
}

Setup React

Make sure you install the required packages for React in the folder of your project, you can use the provided cli tool for a quick setup or manually.

Manual setup

Make sure you have node installed on your device.

Init the package.json

npm init -y

Install React using your favorite package manager

npm install -D react react-dom

Using the cli

Install the cli

go install github.com/sevenreup/goact/goact-cli@latest

Then you can init the project

goact-cli init

You can pass extra params like

--packageManger: To specify the package manager to use (npm is default)

--tailwind: To setup tailwind in your project

--viewDir: If you are setting up tailwind pass this to point to the location where the main css file should be created

For example

goact-cli init --packageManger="pnpm" --tailwind --viewDir="./"

Working with React

Below are some of the special rules (🥲 Limitations) of Pages and Layouts, these only matter for pages and Layouts, other components in your project can be used normally.

Pages

The engine expects all your pages to have a default export of Page;

For Example

constPage=()=>{}exportdefaultPage;

Layouts

The engine also supports layouts. It will check for layouts at the base of the WorkingDir. The engine expects all layouts to have a default export of Layout;

For example

constLayout=({ children })=>{}exportdefaultLayout;

Generating types for Props to use in React

You need to make sure you have a special folder or file that you put the structs that you are going to use when passing data to the render function. The struct is used to generate a typescript file that you can import in your tsx code. Pass the StructPath option that points to your struct or struct folder. Pass the TsTypeOutputPath which is where the ts file will be created in.

The type generation should only be done in dev mode so make sure you have a way to tell the Engine the current environment because the generation happens at start.

For example using Environment variables

opts:= goact.GoactEngineOpts {
// rest of the codeIsDebug: os.Getenv("Environment") =="Dev",
// rest of the code
}

What is remaining to make this framework production ready?

  • Prebuild all the view files so that they can be used in production
  • Add caching of compiled React code ( Speeds up dev )
  • Should be able to ship some reactivity to the browser
  • Support layouts at different levels of the view folder

Some feature that would be awesome to have

  • Hot reload ( Reload the browser when UI changes)

About

Test to use React as templating engine for go

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

Goact

A simple framework for using React as a templating engine in Golang.

How it works

We are compiling React in SSR mode, this generates Javascript code. When the user call the render function we add the props to the compiled js the run the js. This step generates the required html then we can return that as our response.

Simple setup

Add the package to your project

go get github.com/sevenreup/goact

Create the GoactEngine instance and use it

package main
import (
"bytes""fmt""github.com/sevenreup/goact""log"
)
funcmain() {
opts:= goact.GoactEngineOpts{
OutputDir: "./dist",
WorkingDir: "./views",
IsDebug: true,
StructPath: "./dto",
TsTypeOutputPath: "./views/types",
}
engine:=goact.CreateGoactEngine(&opts)
varbuf bytes.Buffererr:=engine.Render(&buf, "./entry.tsx", map[string]string{
"title": "Hello World",
})
iferr!=nil {
log.Panic(err)
}
s:=buf.String()
fmt.Println(s)
}

Setup React

Make sure you install the required packages for React in the folder of your project, you can use the provided cli tool for a quick setup or manually.

Manual setup

Make sure you have node installed on your device.

Init the package.json

npm init -y

Install React using your favorite package manager

npm install -D react react-dom

Using the cli

Install the cli

go install github.com/sevenreup/goact/goact-cli@latest

Then you can init the project

goact-cli init

You can pass extra params like

--packageManger: To specify the package manager to use (npm is default)

--tailwind: To setup tailwind in your project

--viewDir: If you are setting up tailwind pass this to point to the location where the main css file should be created

For example

goact-cli init --packageManger="pnpm" --tailwind --viewDir="./"

Working with React

Below are some of the special rules (🥲 Limitations) of Pages and Layouts, these only matter for pages and Layouts, other components in your project can be used normally.

Pages

The engine expects all your pages to have a default export of Page;

For Example

constPage=()=>{}exportdefaultPage;

Layouts

The engine also supports layouts. It will check for layouts at the base of the WorkingDir. The engine expects all layouts to have a default export of Layout;

For example

constLayout=({ children })=>{}exportdefaultLayout;

Generating types for Props to use in React

You need to make sure you have a special folder or file that you put the structs that you are going to use when passing data to the render function. The struct is used to generate a typescript file that you can import in your tsx code. Pass the StructPath option that points to your struct or struct folder. Pass the TsTypeOutputPath which is where the ts file will be created in.

The type generation should only be done in dev mode so make sure you have a way to tell the Engine the current environment because the generation happens at start.

For example using Environment variables

opts:= goact.GoactEngineOpts {
// rest of the codeIsDebug: os.Getenv("Environment") =="Dev",
// rest of the code
}

What is remaining to make this framework production ready?

  • Prebuild all the view files so that they can be used in production
  • Add caching of compiled React code ( Speeds up dev )
  • Should be able to ship some reactivity to the browser
  • Support layouts at different levels of the view folder

Some feature that would be awesome to have

  • Hot reload ( Reload the browser when UI changes)

About

Test to use React as templating engine for go

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

Goact

A simple framework for using React as a templating engine in Golang.

How it works

We are compiling React in SSR mode, this generates Javascript code. When the user call the render function we add the props to the compiled js the run the js. This step generates the required html then we can return that as our response.

Simple setup

Add the package to your project

go get github.com/sevenreup/goact

Create the GoactEngine instance and use it

package main
import (
"bytes""fmt""github.com/sevenreup/goact""log"
)
funcmain() {
opts:= goact.GoactEngineOpts{
OutputDir: "./dist",
WorkingDir: "./views",
IsDebug: true,
StructPath: "./dto",
TsTypeOutputPath: "./views/types",
}
engine:=goact.CreateGoactEngine(&opts)
varbuf bytes.Buffererr:=engine.Render(&buf, "./entry.tsx", map[string]string{
"title": "Hello World",
})
iferr!=nil {
log.Panic(err)
}
s:=buf.String()
fmt.Println(s)
}

Setup React

Make sure you install the required packages for React in the folder of your project, you can use the provided cli tool for a quick setup or manually.

Manual setup

Make sure you have node installed on your device.

Init the package.json

npm init -y

Install React using your favorite package manager

npm install -D react react-dom

Using the cli

Install the cli

go install github.com/sevenreup/goact/goact-cli@latest

Then you can init the project

goact-cli init

You can pass extra params like

--packageManger: To specify the package manager to use (npm is default)

--tailwind: To setup tailwind in your project

--viewDir: If you are setting up tailwind pass this to point to the location where the main css file should be created

For example

goact-cli init --packageManger="pnpm" --tailwind --viewDir="./"

Working with React

Below are some of the special rules (🥲 Limitations) of Pages and Layouts, these only matter for pages and Layouts, other components in your project can be used normally.

Pages

The engine expects all your pages to have a default export of Page;

For Example

constPage=()=>{}exportdefaultPage;

Layouts

The engine also supports layouts. It will check for layouts at the base of the WorkingDir. The engine expects all layouts to have a default export of Layout;

For example

constLayout=({ children })=>{}exportdefaultLayout;

Generating types for Props to use in React

You need to make sure you have a special folder or file that you put the structs that you are going to use when passing data to the render function. The struct is used to generate a typescript file that you can import in your tsx code. Pass the StructPath option that points to your struct or struct folder. Pass the TsTypeOutputPath which is where the ts file will be created in.

The type generation should only be done in dev mode so make sure you have a way to tell the Engine the current environment because the generation happens at start.

For example using Environment variables

opts:= goact.GoactEngineOpts {
// rest of the codeIsDebug: os.Getenv("Environment") =="Dev",
// rest of the code
}

What is remaining to make this framework production ready?

  • Prebuild all the view files so that they can be used in production
  • Add caching of compiled React code ( Speeds up dev )
  • Should be able to ship some reactivity to the browser
  • Support layouts at different levels of the view folder

Some feature that would be awesome to have

  • Hot reload ( Reload the browser when UI changes)

About

Test to use React as templating engine for go

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

Goact

A simple framework for using React as a templating engine in Golang.

How it works

We are compiling React in SSR mode, this generates Javascript code. When the user call the render function we add the props to the compiled js the run the js. This step generates the required html then we can return that as our response.

Simple setup

Add the package to your project

go get github.com/sevenreup/goact

Create the GoactEngine instance and use it

package main
import (
"bytes""fmt""github.com/sevenreup/goact""log"
)
funcmain() {
opts:= goact.GoactEngineOpts{
OutputDir: "./dist",
WorkingDir: "./views",
IsDebug: true,
StructPath: "./dto",
TsTypeOutputPath: "./views/types",
}
engine:=goact.CreateGoactEngine(&opts)
varbuf bytes.Buffererr:=engine.Render(&buf, "./entry.tsx", map[string]string{
"title": "Hello World",
})
iferr!=nil {
log.Panic(err)
}
s:=buf.String()
fmt.Println(s)
}

Setup React

Make sure you install the required packages for React in the folder of your project, you can use the provided cli tool for a quick setup or manually.

Manual setup

Make sure you have node installed on your device.

Init the package.json

npm init -y

Install React using your favorite package manager

npm install -D react react-dom

Using the cli

Install the cli

go install github.com/sevenreup/goact/goact-cli@latest

Then you can init the project

goact-cli init

You can pass extra params like

--packageManger: To specify the package manager to use (npm is default)

--tailwind: To setup tailwind in your project

--viewDir: If you are setting up tailwind pass this to point to the location where the main css file should be created

For example

goact-cli init --packageManger="pnpm" --tailwind --viewDir="./"

Working with React

Below are some of the special rules (🥲 Limitations) of Pages and Layouts, these only matter for pages and Layouts, other components in your project can be used normally.

Pages

The engine expects all your pages to have a default export of Page;

For Example

constPage=()=>{}exportdefaultPage;

Layouts

The engine also supports layouts. It will check for layouts at the base of the WorkingDir. The engine expects all layouts to have a default export of Layout;

For example

constLayout=({ children })=>{}exportdefaultLayout;

Generating types for Props to use in React

You need to make sure you have a special folder or file that you put the structs that you are going to use when passing data to the render function. The struct is used to generate a typescript file that you can import in your tsx code. Pass the StructPath option that points to your struct or struct folder. Pass the TsTypeOutputPath which is where the ts file will be created in.

The type generation should only be done in dev mode so make sure you have a way to tell the Engine the current environment because the generation happens at start.

For example using Environment variables

opts:= goact.GoactEngineOpts {
// rest of the codeIsDebug: os.Getenv("Environment") =="Dev",
// rest of the code
}

What is remaining to make this framework production ready?

  • Prebuild all the view files so that they can be used in production
  • Add caching of compiled React code ( Speeds up dev )
  • Should be able to ship some reactivity to the browser
  • Support layouts at different levels of the view folder

Some feature that would be awesome to have

  • Hot reload ( Reload the browser when UI changes)

About

Test to use React as templating engine for go

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages