<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Version Control &#8211; Xojo Programming Blog</title>
	<atom:link href="https://blog.xojo.com/tag/version-control/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.xojo.com</link>
	<description>Blog about the Xojo programming language and IDE</description>
	<lastBuildDate>Wed, 07 Jan 2026 16:01:52 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Using Xojo and GitHub</title>
		<link>https://blog.xojo.com/2024/04/02/using-xojo-and-github/</link>
		
		<dc:creator><![CDATA[Paul Lefebvre]]></dc:creator>
		<pubDate>Tue, 02 Apr 2024 17:26:24 +0000</pubDate>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Source Control]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Beginner Tips]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Version Control]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=12833</guid>

					<description><![CDATA[Now that Xojo Lite includes support for saving projects in version control format, it seems like a good time to revisit how you can use Xojo with GitHub, the popular online Git hosting service.]]></description>
										<content:encoded><![CDATA[
<p>Now that Xojo Lite includes support for saving projects in version control format, it seems like a good time to revisit how you can use Xojo with <a href="https://github.com">GitHub</a>, the popular online Git hosting service.</p>



<h2 class="wp-block-heading">What are Git and GitHub?</h2>



<p><a href="https://en.wikipedia.org/wiki/Git">Git</a> is an open-source version control system, also known as a source control system. Created by Linus Torvalds in 2005, it is now the most popular version control system, supplanting <a href="https://en.wikipedia.org/wiki/Apache_Subversion">Subversion</a> a while ago.</p>



<p>GitHub is an online Git hosting service, now owned by Microsoft. GitHub provides additional features beyond just Git hosting, but for this post we will focus on its Git hosting. GitHub is free to use for both public and private repositories.</p>



<p>A repository is essentially a place to store a project. Public repositories are great ways to share open-source projects. Others can view and download the source code. Private repositories are only visible to you and are great for your own internal projects.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Git is a distributed version control system, which just means that the source code can be versioned locally and on the server, only synchronizing when necessary. For simplicity it is common to keep both in sync, however. Older version control systems such as Subversion were server-based and versions were only ever kept on the server. A distributed version control system is slightly more complex, but it does have the advantage of making it easier to work offline.</p>
</blockquote>



<p>A version control system tracks changes made to text files, something that is incredibly useful when it comes to source code. Tracking changes is a very common task that is needed while programming. You may have seen people save their projects as MyProject1, MyProject2, MyProjectNewVersion, etc. That is a rudimentary way of trying to ensure you don&#8217;t lose changes as you update your code. With version control and the Xojo version control project file format you get a much more flexible technique.</p>



<p>When you save your project using the Xojo version control project file format (called Xojo Project) in the file selector, each project item is saved as its own file on the drive. And each of these files is plain text &#8212; you could view them using a text editor if you wanted.</p>



<p>You might be thinking: &#8220;I&#8217;m just a single developer, I don&#8217;t need this extra complexity.&#8221; But version control systems are not just for multi-person teams. Sure, version control is a great way to make sure that different team members don&#8217;t make different changes to the same code.  But version tracking is useful to everyone. Even as a single developer, being able to review previous changes, and revert changes if they don&#8217;t work out can be a lifesaver. It removes any &#8220;fear of breaking things&#8221; from your workflow. Plus, having your source code on a remote server (GitHub) can also function as one of your source code backups.</p>



<h2 class="wp-block-heading">A Quick Example</h2>



<p>To give you an example of how this works, consider a single text file that exists in Git: ReadMe.txt</p>



<p>Initially it contains just this text:</p>



<pre class="wp-block-code"><code>Hello!</code></pre>



<p>You pull down the file to your computer (I&#8217;ll define Git terms like these below) to work on it. Opening the file in a text editor, you change its text to this and save:</p>



<pre class="wp-block-code"><code>Hello, Xojo!</code></pre>



<p>Now the file on your computer contains that text. This is called the working copy. The file in the repository still has the text &#8220;Hello!&#8221;. Now you can do a couple useful things.</p>



<p>You can ask to see the differences between the file in the repository and the one in the working copy. When doing so, most tools will highlight the line that changed, showing the repository contents on the left and the working copy contents on the right. This is a wonderful way to review changes made to code.</p>



<p>The other thing you can do is commit the change to the repository. This adds this file to the repository and makes it the latest version. In Git you&#8217;ll then be able to see that this file has two versions and you&#8217;ll be able to see what the file looked like for each version.</p>



<p>These two things mean that you will never again lose any work. Anytime you make a change to your code that you want to save as a version in the repository, you commit it. You don&#8217;t want to commit after every change as that is too granular and will be hard to manage, but it means you can safely make a bunch of big changes to something and still be able to go back and review what the code looked like previously.</p>



<p>The other useful thing you can do is revert changes. If, after saving the file with &#8220;Hello, Xojo!&#8221; you realize that was a mistake, you can go back to the previous version by choosing to revert the file. This discards the local working copy and pulls down the most recent revision from the repository.</p>



<p>I realize that this might all seem rather different and confusing, but once you do this on a couple small projects you&#8217;ll get the hang of it and you will never want to go back to using MyProject1, MyProject2 again!</p>



<h2 class="wp-block-heading">Terminology</h2>



<p><strong>Repository</strong>: This is essentially a place to store a group of files, which for our purposes will be a Xojo project saved in the version control file format (Xojo Project).</p>



<p><strong>Clone</strong>: Copies the repository to your computer so you can work on it</p>



<p><strong>Fetch</strong>: Updates the local repository with any changes that are stored on the server</p>



<p><strong>Pull</strong>: Similar to fetch, except that it also copies the changes into the working copy</p>



<p><strong>Commit</strong>: Add the changed file to the repository as a new version</p>



<p><strong>Push</strong>: Pushes the committed file to the server (GitHub). Often this is done as a single step: Commit and Push.</p>



<p><strong>Working Copy</strong>: Your local copy of the repository and the file</p>



<h2 class="wp-block-heading">General GitHub Usage</h2>



<p>With Xojo, the general workflow you will use is:</p>



<ol class="wp-block-list">
<li>Create repository on GitHub for the project.</li>



<li>Pull it down to a folder on your computer.</li>



<li>Create a Xojo project.</li>



<li>Save it in Xojo Project (text) format into the above folder.</li>



<li>Commit and Push it to GitHub.</li>



<li>Make additional changes to the Xojo project.</li>



<li>Commit and Push to GitHub as necessary.</li>
</ol>



<h2 class="wp-block-heading">Create a GitHub Account</h2>



<p>If you don’t already have a GitHub account, you’ll need to create one. Head on over to the <a href="https://github.com/signup">sign up page</a> to start the process:</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="346" src="https://blog.xojo.com/wp-content/uploads/2024/03/image-2-1024x346.png" alt="" class="wp-image-12838" srcset="https://blog.xojo.com/wp-content/uploads/2024/03/image-2-1024x346.png 1024w, https://blog.xojo.com/wp-content/uploads/2024/03/image-2-300x101.png 300w, https://blog.xojo.com/wp-content/uploads/2024/03/image-2-768x259.png 768w, https://blog.xojo.com/wp-content/uploads/2024/03/image-2.png 1292w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Create a Repository</h2>



<p>Now that you have a GitHub account, you’ll want to go to your GitHub home page and click the “New Repository” button.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="156" height="80" src="https://blog.xojo.com/wp-content/uploads/2024/03/CleanShot-2024-03-28-at-12.59.10@2x.png" alt="" class="wp-image-12839"/></figure>



<p>As mentioned above, a repository is essentially where your project is stored. You’ll typically want a separate repository for each project. This is what the new repository form looks like:</p>



<figure class="wp-block-image size-large"><img decoding="async" width="860" height="1024" src="https://blog.xojo.com/wp-content/uploads/2024/03/image-4-860x1024.png" alt="" class="wp-image-12841" srcset="https://blog.xojo.com/wp-content/uploads/2024/03/image-4-860x1024.png 860w, https://blog.xojo.com/wp-content/uploads/2024/03/image-4-252x300.png 252w, https://blog.xojo.com/wp-content/uploads/2024/03/image-4-768x914.png 768w, https://blog.xojo.com/wp-content/uploads/2024/03/image-4-1291x1536.png 1291w, https://blog.xojo.com/wp-content/uploads/2024/03/image-4.png 1504w" sizes="(max-width: 860px) 100vw, 860px" /></figure>



<p>For open-source projects you&#8217;ll want to make sure &#8220;Public&#8221; is selected as it&#8217;s not really open-source if it is not public. For a public repository, be sure to come up with a catchy “repository name” and always include a description. Choose &#8220;Private&#8221; for internal projects.</p>



<p>I always check “Add a README file”, which adds an empty README file to the repository. You can update it later, but it is where you’ll briefly describe the project and how to use it (using <a href="https://en.wikipedia.org/wiki/Markdown">Markdown</a>). The README is shown by default when you go to the repository in a web browser.</p>



<p>You should also select “Xojo” for the gitignore template (click the dropdown and type &#8220;xojo&#8221;). This identifies the project as using the Xojo programming language, which helps with searches and also marks the “uistate” file (which contains user-specific UI settings, such as window sizes and positions) so that it is not included in the project.</p>



<p>Last is the license. For most public open-source projects, I recommend the <a href="https://en.wikipedia.org/wiki/MIT_License">MIT License</a>, which essentially allows anyone to use your code however they want. For private projects, you can leave it at &#8220;None&#8221;.</p>



<p>Click the Create Repository button to create the repository.</p>



<h2 class="wp-block-heading">Clone the Repository to your Computer</h2>



<p>With the repository created, you can view it on the GitHub website for you account:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="480" src="https://blog.xojo.com/wp-content/uploads/2024/03/image-5-1024x480.png" alt="" class="wp-image-12842" srcset="https://blog.xojo.com/wp-content/uploads/2024/03/image-5-1024x480.png 1024w, https://blog.xojo.com/wp-content/uploads/2024/03/image-5-300x141.png 300w, https://blog.xojo.com/wp-content/uploads/2024/03/image-5-768x360.png 768w, https://blog.xojo.com/wp-content/uploads/2024/03/image-5-1536x720.png 1536w, https://blog.xojo.com/wp-content/uploads/2024/03/image-5-2048x960.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>From here you&#8217;ll be able to see the files in the repository, along with other information.</p>



<p>You are now ready to &#8220;clone&#8221; the repository to your computer. This copies the repository files to a folder on your computer so you can modify its files. Of course, the only files in the repository will be LICENSE and the empty README.md, but it is still necessary to do the clone so that you can create the folder where you will then add your Xojo code.</p>



<p>In order to clone, you’ll want to use a Git client application. There are many to choose from, but two free ones are the official&nbsp;<a href="https://desktop.github.com">GitHub Desktop</a>&nbsp;and&nbsp;<a href="https://www.sourcetreeapp.com">Atlassian&nbsp;SourceTree</a>. GitHub Desktop is simpler so that is the one I’ll show here.</p>



<p>Download GitHub Desktop:&nbsp;<a href="https://desktop.github.com">https://desktop.github.com</a></p>



<p>Start GitHub Desktop and click “Sign into GitHub.com”.</p>



<p>On the Configure Git page, enter the name and email you want to use to identify your commits.</p>



<p>Click Finish on the next page to show the main screen where you have the option of creating new repositories or cloning a repository. Since we already created a repository online in the previous section, you want to select “Clone a Repository” (you can also choose this from the File menu). In the list, choose the repository you created above, choose your local folder location (Choose…) and click Clone.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="988" height="976" src="https://blog.xojo.com/wp-content/uploads/2024/03/image-8.png" alt="" class="wp-image-12845" style="width:437px;height:auto" srcset="https://blog.xojo.com/wp-content/uploads/2024/03/image-8.png 988w, https://blog.xojo.com/wp-content/uploads/2024/03/image-8-300x296.png 300w, https://blog.xojo.com/wp-content/uploads/2024/03/image-8-768x759.png 768w" sizes="auto, (max-width: 988px) 100vw, 988px" /></figure>



<p>You now have a folder on your disk where you can add your Xojo project. This is what the repository looks like in GitHub Desktop:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="716" src="https://blog.xojo.com/wp-content/uploads/2024/03/image-9-1024x716.png" alt="" class="wp-image-12846" srcset="https://blog.xojo.com/wp-content/uploads/2024/03/image-9-1024x716.png 1024w, https://blog.xojo.com/wp-content/uploads/2024/03/image-9-300x210.png 300w, https://blog.xojo.com/wp-content/uploads/2024/03/image-9-768x537.png 768w, https://blog.xojo.com/wp-content/uploads/2024/03/image-9-1536x1074.png 1536w, https://blog.xojo.com/wp-content/uploads/2024/03/image-9-2048x1432.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><em>Note: If you are using another Git client, you will choose its “clone a repository from URL” feature and then provide the URL shown in the “Clone or Download” button on the repository page.</em></p>



<h2 class="wp-block-heading">Add Your Xojo Project Code</h2>



<p>Start Xojo and open the project you want for the repository you cloned (or you can just create a new project). Click “Save As”, make sure the Format is “Xojo Project” and choose the folder you created when you cloned the repository.</p>



<p>Go back to GitHub Desktop and you’ll now see all the Xojo files appearing in the list as “changed files”. (For this test I used a Xojo SQLiteExample.)</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="716" src="https://blog.xojo.com/wp-content/uploads/2024/03/image-11-1024x716.png" alt="" class="wp-image-12848" srcset="https://blog.xojo.com/wp-content/uploads/2024/03/image-11-1024x716.png 1024w, https://blog.xojo.com/wp-content/uploads/2024/03/image-11-300x210.png 300w, https://blog.xojo.com/wp-content/uploads/2024/03/image-11-768x537.png 768w, https://blog.xojo.com/wp-content/uploads/2024/03/image-11-1536x1074.png 1536w, https://blog.xojo.com/wp-content/uploads/2024/03/image-11-2048x1432.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>You now need to “Commit” these changes. By default they are all selected/checked in GitHub Desktop so you can enter a brief summary and description (for the first commit, often “Initial commit.” is used, but I used &#8220;Initial Xojo commit.&#8221;) and then click the “Commit to main” button.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Each time you commit you want to be sure to type a clear summary and description of the changes. This will be helpful later when you are reviewing prior commits.</p>
</blockquote>



<p>This marked the files as committed in your local repository, which is needed before you can push the changes up to the online repository. Generally speaking you want to commit things after you have made changes that you want to track. You don’t need to immediately push the changes up to the server (online repository) each time, however, people often do as it is simpler. Some Git clients even offer a single button or command to commit and push in one step.</p>



<p>For this initial commit you definitely want to push the commit to the server, so click the button in the toolbar that says “Push origin”. This pushes the commit to the origin, which is the GitHub repository in this case.</p>



<p>If you now go back to the GitHub repository online and refresh the page you’ll now see the files have been committed:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="663" src="https://blog.xojo.com/wp-content/uploads/2024/03/image-12-1024x663.png" alt="" class="wp-image-12849" srcset="https://blog.xojo.com/wp-content/uploads/2024/03/image-12-1024x663.png 1024w, https://blog.xojo.com/wp-content/uploads/2024/03/image-12-300x194.png 300w, https://blog.xojo.com/wp-content/uploads/2024/03/image-12-768x497.png 768w, https://blog.xojo.com/wp-content/uploads/2024/03/image-12-1536x994.png 1536w, https://blog.xojo.com/wp-content/uploads/2024/03/image-12-2048x1325.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Sharing Your Public Project</h2>



<p>If you created a public repository then it is now available on GitHub for anyone to use. People can find it by searching or you can share the URL (perhaps in the <a href="https://forum.xojo.com">Xojo Forum</a>).</p>



<p>Since I <a href="https://github.com/xojo/MyTestProject">published a public project</a>, anyone can use it. This means that they can clone it and push changes to your project as &#8220;pull requests&#8221;. A pull request is a change that a user has made that they would also like you to apply to your project. Since this is your project, others cannot directly change it without you adding them as contributors. However, you can review these pull requests and choose to pull and merge the change into your project if you want. Or you can reject the pull request &#8212; it&#8217;s all up to you since it&#8217;s your project.</p>



<h2 class="wp-block-heading">Changing and Updating Your Project</h2>



<p>You’ll likely be continuing to change your project to fix bugs and add features. Each change you make shows up in GitHub Desktop where you can commit it and then push it to the server.</p>



<p>As an example, go back to Xojo and make a change to the project. I added some comments to the AddTeamRow method. After saving, the changes are now visible in GitHub Desktop:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="716" src="https://blog.xojo.com/wp-content/uploads/2024/03/image-14-1024x716.png" alt="" class="wp-image-12851" srcset="https://blog.xojo.com/wp-content/uploads/2024/03/image-14-1024x716.png 1024w, https://blog.xojo.com/wp-content/uploads/2024/03/image-14-300x210.png 300w, https://blog.xojo.com/wp-content/uploads/2024/03/image-14-768x537.png 768w, https://blog.xojo.com/wp-content/uploads/2024/03/image-14-1536x1074.png 1536w, https://blog.xojo.com/wp-content/uploads/2024/03/image-14-2048x1432.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>You can see the one file that was changed, SQLiteWindow, and the changes (or diff) is shown in the viewer. Here you can see the changes by the blue highlighted lines in the gutter. The first change indicates that line 386 was removed and replaced, with the change noting that &#8220;Please&#8221; was added.</p>



<p>The next two changes indicate that new lines were added to the code.</p>



<p>It&#8217;s always good to review code like this before you commit it to make sure the changes are what you expect.</p>



<p>You can now Commit this change (always add Summary and Description text so you know the reason for the change!) and then Push it to the server (Push origin).</p>



<h2 class="wp-block-heading">Discarding Changes</h2>



<p>Say you&#8217;ve made changes to your Xojo project, but realize you&#8217;ve really messed things up and want to go back to the way the code was. For example, say I&#8217;ve accidentally deleted a bunch of code in the ShowData method and saved the project. In GitHub Desktop, it would look like this:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="716" src="https://blog.xojo.com/wp-content/uploads/2024/03/image-15-1024x716.png" alt="" class="wp-image-12852" srcset="https://blog.xojo.com/wp-content/uploads/2024/03/image-15-1024x716.png 1024w, https://blog.xojo.com/wp-content/uploads/2024/03/image-15-300x210.png 300w, https://blog.xojo.com/wp-content/uploads/2024/03/image-15-768x537.png 768w, https://blog.xojo.com/wp-content/uploads/2024/03/image-15-1536x1074.png 1536w, https://blog.xojo.com/wp-content/uploads/2024/03/image-15-2048x1432.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>You can see the big red area indicating the code that was removed.</p>



<p>To discard this change, I can right-click on SQLiteWindow in GitHub Desktop and select Discard Changes. This pops up a confirmation dialog and clicking Discard Changes will restore the file to its previous version, which is the version of the file that was last committed to the repository.</p>



<p>After doing this, you will need to close the project in Xojo and then re-open it so that it can refresh its internal project structures to reflect the discarded changes. After doing that, you can go back to the ShowData method to see that the code is restored.</p>



<p>This capability is a big reason why version control is also incredibly useful for solo developers.</p>



<h2 class="wp-block-heading">Using or Cloning Other Repositories</h2>



<p>Don’t forget that you can also use other people’s public repositories. To do so you’ll want to click the “Clone or Download” button on the repository page.</p>



<p>For simple usage, where you just want to grab the current version of the repository because you don&#8217;t intend to change anything, you can then click the Download ZIP button. Once downloaded, unzip the file and then open the project in Xojo where you can use it or copy/paste it into your own projects (review the license agreement before you use projects, of course).</p>



<p>You’ll want to clone a project when you want to manage it using GitHub Desktop (or your GitHub client of choice). This allows you to fetch/pull updates from the online repository and also allows you to make your own changes and push them up to the server where the repository owner will get them as pull requests, as described above.</p>



<h2 class="wp-block-heading">Change Your Default Project Format</h2>



<p>You might find it worthwhile to change your default project format to be the version control format. This way it will always be selected by default when you save. You can change this in Xojo&#8217;s General Settings:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="656" src="https://blog.xojo.com/wp-content/uploads/2024/03/image-16-1024x656.png" alt="" class="wp-image-12853" srcset="https://blog.xojo.com/wp-content/uploads/2024/03/image-16-1024x656.png 1024w, https://blog.xojo.com/wp-content/uploads/2024/03/image-16-300x192.png 300w, https://blog.xojo.com/wp-content/uploads/2024/03/image-16-768x492.png 768w, https://blog.xojo.com/wp-content/uploads/2024/03/image-16-1536x984.png 1536w, https://blog.xojo.com/wp-content/uploads/2024/03/image-16.png 1624w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Pro Tip: When saving a project for the first time in version control format, it is always a good idea to save into a newly created folder. This ensures that all your files will be neatly contained in one place and won&#8217;t accidentally override something else that may have been in the folder.</p>
</blockquote>



<h2 class="wp-block-heading">Git Going</h2>



<p>If you&#8217;ve created Xojo projects in public repositories on GitHub, be sure to share them in the <a href="https://forum.xojo.com/">forum</a>!</p>



<p>This post just scratches the surface of what GitHub does and also only touches lightly on Git and the concept of source control in general. If you’d like to use Git for source control, but would prefer an alternative to GitHub you might also want to check out&nbsp;<a href="https://bitbucket.org">Atlassian BitBucket</a>&nbsp;which also offers free Git hosting for both private and public repositories.</p>



<p><em>Paul learned to program in BASIC at age 13 and has programmed in more languages than he remembers, with Xojo being an obvious favorite. When not working on Xojo, you can find him talking about retrocomputing at <a href="https://goto10.substack.com" target="_blank" rel="noreferrer noopener">Goto 10</a> and </em>on Mastodon @lefebvre@hachyderm.io.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Free Xojo Linux and Raspberry Pi for Everyone</title>
		<link>https://blog.xojo.com/2024/03/26/free-linux-builds/</link>
		
		<dc:creator><![CDATA[Xojo]]></dc:creator>
		<pubDate>Tue, 26 Mar 2024 15:26:18 +0000</pubDate>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Source Control]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[2024r1]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[Beginner Tips]]></category>
		<category><![CDATA[Binary]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[GitLab]]></category>
		<category><![CDATA[Rapid Application Development]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Version Control]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=12631</guid>

					<description><![CDATA[Now with Xojo 2024r1 you can use Xojo's free IDE to build Linux desktop and console apps from Linux, macOS, or Windows, no license required.]]></description>
										<content:encoded><![CDATA[
<p>Beginning with Xojo 2024r1 you can use Xojo&#8217;s free IDE to build Linux desktop and console apps from Linux, macOS, or Windows, no license required.</p>



<h2 class="wp-block-heading" id="free-linux">Xojo Linux is Free</h2>



<p>We have made building for Linux free and included in the Xojo IDE! This means that on Linux you get a version control ready IDE, along with the ability to build desktop and console Linux apps (including Raspberry Pi), all for free. Launch Xojo 2024r1 (or any later release of <a href="https://xojo.com/download/" target="_blank" rel="noreferrer noopener">Xojo</a>) and open any desktop or console project, go to Build Settings, select Linux and in the Inspector choose the appropriate Architecture that matches the Linux OS you want your app to work on, either ARM or x86. Click Build to compile your project to a standalone app that you can then run on Linux &#8211; no license required.</p>



<h2 class="wp-block-heading">Wrapping Up</h2>



<p>All these changes were made based on feedback from the Xojo community and to better match the changing ways that people develop and share software projects. With this change Xojo continues its dedication to supporting Linux.</p>



<p><a href="https://xojo.com/download/">Download Xojo</a> to get started.</p>



<p>Edited 07/2025 to reflect changes to licensing. </p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Using Subversion Externals with Xojo Text Projects</title>
		<link>https://blog.xojo.com/2018/04/06/using-subversion-externalswith-xojo-text-projects/</link>
		
		<dc:creator><![CDATA[Greg O'Lone]]></dc:creator>
		<pubDate>Fri, 06 Apr 2018 10:00:59 +0000</pubDate>
				<category><![CDATA[Source Control]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[VCP]]></category>
		<category><![CDATA[Version Control]]></category>
		<guid isPermaLink="false">http://blog.xojo.com/?p=2160</guid>

					<description><![CDATA[How to share code among several projects with more than one developer? There can be issues with exporting classes and modules to a shared folder and have everyone include those in their projects use them, especially when using shared services like DropBox. The folks at who are maintaining Subversion at the Apache Software Foundation made it super easy to create shared code repositories using a feature called Externals.]]></description>
										<content:encoded><![CDATA[<p>A topic that comes up every once in a while on the forums is how to share code among several projects with more than one developer. Quite often what users try to do is to export classes and modules to a shared folder and have everyone include those in their projects. There can be issues with this technique, especially when using shared services like DropBox.</p>
<p>Because of the latency involved, external items shared in a shared folder on a server or a file sharing service are never truly in-sync with one another. While this technique works with a single developer across two or three projects, it gets more and more complicated as you add more projects and even more-so if you try to add more developers.</p>
<p>One of the largest issues with this type of system is that everything <em>must</em> be kept in sync all the time. Making one little change to a shared file or method which works fine in the current project could completely break a project that you haven&#8217;t worked on in a year. When you do get around to working on it again, there&#8217;s three possibilities:</p>
<ol>
<li>The project compiles and everything works just like it did before.</li>
<li>The project doesn&#8217;t compile.</li>
<li>The project compiles and doesn&#8217;t work like it did before.</li>
</ol>
<p>With careful planning, you&#8217;ll probably hit #1 75% of the time, but the other two are wrought with problems. If the project compiles but doesn&#8217;t work correctly, <em>you may not find out until you&#8217;ve given it to your users,</em> with the worst case being unrecoverable data corruption. If it doesn&#8217;t compile, then what? The shared code is now required to be different in two different projects and you may have no history as to what was changed.</p>
<p>Thankfully the folks at who are maintaining <a href="https://subversion.apache.org">Subversion at the Apache Software Foundation</a> made it super easy to create shared code repositories using a feature called Externals. (For those of you that are using Git, I suggest looking into Submodules. Of the two techniques I&#8217;ve encountered, Submodules seem to require the least individual overhead.)</p>
<p><span id="more-2160"></span></p>
<h3>SVN Externals</h3>
<p>SVN Externals are exposed as a property (svn:externals) on the containing folder and is set up using the <strong>svn propset</strong> or <strong>svn propedit</strong> commands, but most SVN visual clients have an interface for creating an SVN External to make the process easier. Once it&#8217;s set on a versioned directory, everyone who checks out or updates the working copy also gets the external definition.</p>
<p>It&#8217;s worth keeping in mind that because an SVN External definition points to a specific place within another repository, that this other location is also versioned. That is, you can (and probably should) point an external definition at a <em>particular revision</em> within that repository unless there&#8217;s a very good reason to always be pointing at the latest/greatest version. This helps alleviate the problems with shared library changes. Once you have it working for a particular version, you can lock-in to a particular date/time until you&#8217;re ready to check with a newer version.</p>
<h3>Externals in Xojo</h3>
<p>Setting up externals for use with a Xojo Text Project is fairly simple to do. As an example, let&#8217;s say you have two projects &#8230; ProjectX and ProjectY. ProjectX contains some items that you&#8217;d like to share with ProjectY.</p>
<ol>
<li>Within Xojo, Open ProjectX and make a folder named &#8220;Shared_Items&#8221; and move any items you wish to share into this folder.</li>
<li>Save ProjectX and close it.</li>
<li>Quit the IDE.</li>
<li>Depending on whether you&#8217;re using a visual SVN client or the SVN command line the steps are similar:
<ol>
<li>Go to the directory above where the &#8220;Shared_Items&#8221; folder is located in ProjectY</li>
<li>Remove the empty &#8220;Shared_Items&#8221; folder.</li>
<li>Add an SVN external with the name &#8220;Shared_Items&#8221; which points to the Shared_Items in the other repository (or branch or wherever it is).
<ol>
<li>If you&#8217;re doing this using the command line, the command is:<br />
<code>svn propset svn:externals "Shared_Items https://path/to/other/Shared_Items" .</code><br />
If you want to lock the project to a particular revision, you&#8217;ll need to tell SVN which revision to use:<br />
<code>svn propset svn:externals "Shared_Items -r12345 https://path/to/other/Shared_Items" .</code><br />
Each of these commands are basically saying: Create a new external named &#8220;Shared_Items&#8221; using the https://path/to/other/Shared_Items source in the local directory (.), with the second one specifying that you want to use revision 12345.</li>
<li>If you&#8217;re using a GUI client you usually select the parent folder and then add an external definition from there. There are usually fields for specifying the Local Path (Shared_Items), URL (https://path/to/other/Shared_Items) and Revision (either HEAD or a specific revision number)</li>
</ol>
</li>
<li>Now you need to update the contents of the folder.<br />
<code>svn update Shared_Items</code></li>
</ol>
</li>
<li>Open ProjectY.</li>
<li>Drag the &#8220;Shared_Items&#8221; folder from the project folder directly into your project. DO NOT SAVE YET. Any modules which contained other items will be represented by a Module in the project and an identically named Folder which contains the items that should be put inside the module.</li>
<li>Referring back to Project X, drag each of the items in Shared_Items to its corresponding location in ProjectY. It&#8217;s very important that the on-disk representation in both projects be identical, so make sure you&#8217;re using the same version of Xojo in both projects. For example, if after dragging in the Shared_Items folder, you might have:
<pre>Shared_Items
  Module1 (Module)
  Module1 (Folder)
    Class1
    Module2 (Module)
    Module2 (Folder)
      Class2</pre>
</li>
<li>If you have multiple levels of nested modules, I suggest working from the bottom up, that is from the lowest directories up to the highest ones to avoid confusion. Once you&#8217;ve emptied a folder, delete it. Using the example above:
<ol>
<li>Drag Class2 from the Module2 <em>folder</em> directly into the Module2 <em>module.</em></li>
<li>Delete the Module2 <em>folder</em>.</li>
<li>Drag Class1 from the Module1 <em>folder</em> directly into the Module1 <em>module</em>.</li>
<li>Drag Module2 <em>module</em> into the Module1 <em>module</em>.</li>
<li>Delete the Module1 <em>folder</em>.</li>
</ol>
</li>
<li>Once the structure looks the same between the two projects, Save ProjectY. You&#8217;ll notice that <em>on disk</em> the folders are still there. That&#8217;s exactly what you should see. Check your SVN client, there should be no changes to be checked in. If there are, make sure they&#8217;re not file additions and/or deletions.</li>
</ol>
<p>From now on (if you&#8217;re using a non-revision specific external), whenever you make a change to one of the items in this Shared_Items folder and check them in, they&#8217;ll be available to any other projects that use them, whether it&#8217;s the original items or any project where this folder is defined as an external.</p>
<p>While this looks really complicated to set up, once it&#8217;s done using the external will work and feel just like any other folder in your project.</p>
<p>A few things to remember:</p>
<ol>
<li>Make sure you&#8217;ve named the shared items container so that it&#8217;s obvious that the items are shared between projects, so things don&#8217;t get inadvertently dragged into the folder if they&#8217;re not needed anywhere else and not dragged out of the folder if they are.</li>
<li>Make sure everyone on your team understands that this code is shared among projects.</li>
<li>Write Unit Tests for your shared items so when making changes you can verify that you&#8217;re not breaking other projects or inadvertently changing their behavior.</li>
</ol>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
