Repository files navigation


Digi is an open-source framework for building lightweight digital twins (or "digis") and running them in a cloud-native architecture. With Digi, users can easily create digital representations of real-world objects or systems, and program them using Python and configure them using a declarative API. The digis are also queryable for fast in-situ data analytics, and can be composed to model complex real-world interactions. Digi provides a flexible and scalable solution for building digital twins, and is a great starting point for anyone looking to explore the potential of digital twins.

One can use Digi to build pervasive data apps consisting of digital twins for automation, data processing, and data analytics (e.g. in IoT, smart spaces, mobile) while orchestrating these apps at an appropriate scale, from a single node machine (Raspberry Pi, laptop) to a machine cluster in the cloud. Digi's runtime contains a collection of built-in "meta" digital twins, and users can easily extend the framework by adding new meta digis, in the same way as building the apps.

Digi is designed and implemented as an extension to Kubernetes, where a digi's configurations and run-time states are stored in the Kubernetes apiserver, which can be accessed and managed using existing cloud-native tooling. Digi organizes data processing pipelines as pipelets associated with each digi and leverages Zed to store and process the data generated or ingested by the pipelets.


Getting started

To get started with Digi, run the following commands: make dep and make install.

For more information on installation and frequently used commands, see the quickstart page.

As a hello-world example, one can use Digi to build a control hierarchy and query the digis in a smart space: Alt Text

Resources

Here are some resources to help you learn more about Digi:

More information:

About

Build and Orchestrate Pervasive Data Apps at Any Scale.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

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


Digi is an open-source framework for building lightweight digital twins (or "digis") and running them in a cloud-native architecture. With Digi, users can easily create digital representations of real-world objects or systems, and program them using Python and configure them using a declarative API. The digis are also queryable for fast in-situ data analytics, and can be composed to model complex real-world interactions. Digi provides a flexible and scalable solution for building digital twins, and is a great starting point for anyone looking to explore the potential of digital twins.

One can use Digi to build pervasive data apps consisting of digital twins for automation, data processing, and data analytics (e.g. in IoT, smart spaces, mobile) while orchestrating these apps at an appropriate scale, from a single node machine (Raspberry Pi, laptop) to a machine cluster in the cloud. Digi's runtime contains a collection of built-in "meta" digital twins, and users can easily extend the framework by adding new meta digis, in the same way as building the apps.

Digi is designed and implemented as an extension to Kubernetes, where a digi's configurations and run-time states are stored in the Kubernetes apiserver, which can be accessed and managed using existing cloud-native tooling. Digi organizes data processing pipelines as pipelets associated with each digi and leverages Zed to store and process the data generated or ingested by the pipelets.


Getting started

To get started with Digi, run the following commands: make dep and make install.

For more information on installation and frequently used commands, see the quickstart page.

As a hello-world example, one can use Digi to build a control hierarchy and query the digis in a smart space: Alt Text

Resources

Here are some resources to help you learn more about Digi:

More information:

About

Build and Orchestrate Pervasive Data Apps at Any Scale.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

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


Digi is an open-source framework for building lightweight digital twins (or "digis") and running them in a cloud-native architecture. With Digi, users can easily create digital representations of real-world objects or systems, and program them using Python and configure them using a declarative API. The digis are also queryable for fast in-situ data analytics, and can be composed to model complex real-world interactions. Digi provides a flexible and scalable solution for building digital twins, and is a great starting point for anyone looking to explore the potential of digital twins.

One can use Digi to build pervasive data apps consisting of digital twins for automation, data processing, and data analytics (e.g. in IoT, smart spaces, mobile) while orchestrating these apps at an appropriate scale, from a single node machine (Raspberry Pi, laptop) to a machine cluster in the cloud. Digi's runtime contains a collection of built-in "meta" digital twins, and users can easily extend the framework by adding new meta digis, in the same way as building the apps.

Digi is designed and implemented as an extension to Kubernetes, where a digi's configurations and run-time states are stored in the Kubernetes apiserver, which can be accessed and managed using existing cloud-native tooling. Digi organizes data processing pipelines as pipelets associated with each digi and leverages Zed to store and process the data generated or ingested by the pipelets.


Getting started

To get started with Digi, run the following commands: make dep and make install.

For more information on installation and frequently used commands, see the quickstart page.

As a hello-world example, one can use Digi to build a control hierarchy and query the digis in a smart space: Alt Text

Resources

Here are some resources to help you learn more about Digi:

More information:

About

Build and Orchestrate Pervasive Data Apps at Any Scale.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

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


Digi is an open-source framework for building lightweight digital twins (or "digis") and running them in a cloud-native architecture. With Digi, users can easily create digital representations of real-world objects or systems, and program them using Python and configure them using a declarative API. The digis are also queryable for fast in-situ data analytics, and can be composed to model complex real-world interactions. Digi provides a flexible and scalable solution for building digital twins, and is a great starting point for anyone looking to explore the potential of digital twins.

One can use Digi to build pervasive data apps consisting of digital twins for automation, data processing, and data analytics (e.g. in IoT, smart spaces, mobile) while orchestrating these apps at an appropriate scale, from a single node machine (Raspberry Pi, laptop) to a machine cluster in the cloud. Digi's runtime contains a collection of built-in "meta" digital twins, and users can easily extend the framework by adding new meta digis, in the same way as building the apps.

Digi is designed and implemented as an extension to Kubernetes, where a digi's configurations and run-time states are stored in the Kubernetes apiserver, which can be accessed and managed using existing cloud-native tooling. Digi organizes data processing pipelines as pipelets associated with each digi and leverages Zed to store and process the data generated or ingested by the pipelets.


Getting started

To get started with Digi, run the following commands: make dep and make install.

For more information on installation and frequently used commands, see the quickstart page.

As a hello-world example, one can use Digi to build a control hierarchy and query the digis in a smart space: Alt Text

Resources

Here are some resources to help you learn more about Digi:

More information:

About

Build and Orchestrate Pervasive Data Apps at Any Scale.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

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


Digi is an open-source framework for building lightweight digital twins (or "digis") and running them in a cloud-native architecture. With Digi, users can easily create digital representations of real-world objects or systems, and program them using Python and configure them using a declarative API. The digis are also queryable for fast in-situ data analytics, and can be composed to model complex real-world interactions. Digi provides a flexible and scalable solution for building digital twins, and is a great starting point for anyone looking to explore the potential of digital twins.

One can use Digi to build pervasive data apps consisting of digital twins for automation, data processing, and data analytics (e.g. in IoT, smart spaces, mobile) while orchestrating these apps at an appropriate scale, from a single node machine (Raspberry Pi, laptop) to a machine cluster in the cloud. Digi's runtime contains a collection of built-in "meta" digital twins, and users can easily extend the framework by adding new meta digis, in the same way as building the apps.

Digi is designed and implemented as an extension to Kubernetes, where a digi's configurations and run-time states are stored in the Kubernetes apiserver, which can be accessed and managed using existing cloud-native tooling. Digi organizes data processing pipelines as pipelets associated with each digi and leverages Zed to store and process the data generated or ingested by the pipelets.


Getting started

To get started with Digi, run the following commands: make dep and make install.

For more information on installation and frequently used commands, see the quickstart page.

As a hello-world example, one can use Digi to build a control hierarchy and query the digis in a smart space: Alt Text

Resources

Here are some resources to help you learn more about Digi:

More information:

About

Build and Orchestrate Pervasive Data Apps at Any Scale.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

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


Digi is an open-source framework for building lightweight digital twins (or "digis") and running them in a cloud-native architecture. With Digi, users can easily create digital representations of real-world objects or systems, and program them using Python and configure them using a declarative API. The digis are also queryable for fast in-situ data analytics, and can be composed to model complex real-world interactions. Digi provides a flexible and scalable solution for building digital twins, and is a great starting point for anyone looking to explore the potential of digital twins.

One can use Digi to build pervasive data apps consisting of digital twins for automation, data processing, and data analytics (e.g. in IoT, smart spaces, mobile) while orchestrating these apps at an appropriate scale, from a single node machine (Raspberry Pi, laptop) to a machine cluster in the cloud. Digi's runtime contains a collection of built-in "meta" digital twins, and users can easily extend the framework by adding new meta digis, in the same way as building the apps.

Digi is designed and implemented as an extension to Kubernetes, where a digi's configurations and run-time states are stored in the Kubernetes apiserver, which can be accessed and managed using existing cloud-native tooling. Digi organizes data processing pipelines as pipelets associated with each digi and leverages Zed to store and process the data generated or ingested by the pipelets.


Getting started

To get started with Digi, run the following commands: make dep and make install.

For more information on installation and frequently used commands, see the quickstart page.

As a hello-world example, one can use Digi to build a control hierarchy and query the digis in a smart space: Alt Text

Resources

Here are some resources to help you learn more about Digi:

More information:

About

Build and Orchestrate Pervasive Data Apps at Any Scale.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

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


Digi is an open-source framework for building lightweight digital twins (or "digis") and running them in a cloud-native architecture. With Digi, users can easily create digital representations of real-world objects or systems, and program them using Python and configure them using a declarative API. The digis are also queryable for fast in-situ data analytics, and can be composed to model complex real-world interactions. Digi provides a flexible and scalable solution for building digital twins, and is a great starting point for anyone looking to explore the potential of digital twins.

One can use Digi to build pervasive data apps consisting of digital twins for automation, data processing, and data analytics (e.g. in IoT, smart spaces, mobile) while orchestrating these apps at an appropriate scale, from a single node machine (Raspberry Pi, laptop) to a machine cluster in the cloud. Digi's runtime contains a collection of built-in "meta" digital twins, and users can easily extend the framework by adding new meta digis, in the same way as building the apps.

Digi is designed and implemented as an extension to Kubernetes, where a digi's configurations and run-time states are stored in the Kubernetes apiserver, which can be accessed and managed using existing cloud-native tooling. Digi organizes data processing pipelines as pipelets associated with each digi and leverages Zed to store and process the data generated or ingested by the pipelets.


Getting started

To get started with Digi, run the following commands: make dep and make install.

For more information on installation and frequently used commands, see the quickstart page.

As a hello-world example, one can use Digi to build a control hierarchy and query the digis in a smart space: Alt Text

Resources

Here are some resources to help you learn more about Digi:

More information:

About

Build and Orchestrate Pervasive Data Apps at Any Scale.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

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


Digi is an open-source framework for building lightweight digital twins (or "digis") and running them in a cloud-native architecture. With Digi, users can easily create digital representations of real-world objects or systems, and program them using Python and configure them using a declarative API. The digis are also queryable for fast in-situ data analytics, and can be composed to model complex real-world interactions. Digi provides a flexible and scalable solution for building digital twins, and is a great starting point for anyone looking to explore the potential of digital twins.

One can use Digi to build pervasive data apps consisting of digital twins for automation, data processing, and data analytics (e.g. in IoT, smart spaces, mobile) while orchestrating these apps at an appropriate scale, from a single node machine (Raspberry Pi, laptop) to a machine cluster in the cloud. Digi's runtime contains a collection of built-in "meta" digital twins, and users can easily extend the framework by adding new meta digis, in the same way as building the apps.

Digi is designed and implemented as an extension to Kubernetes, where a digi's configurations and run-time states are stored in the Kubernetes apiserver, which can be accessed and managed using existing cloud-native tooling. Digi organizes data processing pipelines as pipelets associated with each digi and leverages Zed to store and process the data generated or ingested by the pipelets.


Getting started

To get started with Digi, run the following commands: make dep and make install.

For more information on installation and frequently used commands, see the quickstart page.

As a hello-world example, one can use Digi to build a control hierarchy and query the digis in a smart space: Alt Text

Resources

Here are some resources to help you learn more about Digi:

More information:

About

Build and Orchestrate Pervasive Data Apps at Any Scale.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages