Objo Studio now has a new project type: Web.
Web Projects let you build responsive applications for the web in the same IDE and language you already use for Desktop and Command Line apps. You design pages visually, write ordinary Objo code, run the project in your browser and debug its server-side events with breakpoints, stepping, variables and watches.
That’s the short version and if that’s enough to get you excited by all means download Objo Studio now and play around for free.
The more interesting version is that Web Projects were designed as part of Objo Studio rather than grafted onto later. Objo was always going to support web apps from its very inception.
For the time being, Web Projects are being released as a public beta. Objo Studio itself remains a shipping product; the beta label applies specifically to web apps whilst the community tests the tool and we iron out any wrinkles.
Web projects are not desktop windows shoe-horned into a browser
A Web project is a server-hosted Objo application. Your interface runs in the browser, while your application code normally runs on the server. Objo does not translate your source into JavaScript. It does not copy your server code into the page. The browser runs a small, fixed client supplied by Objo Studio and communicates with the application through a strictly typed protocol.
Each browser tab receives its own isolated logical session, including its own:
Appinstance- Pages and controls
- Properties and local state
- Tasks
- Output
- Authentication identity and roles
Opening a second tab therefore creates a genuinely separate application session. If a temporary network interruption occurs, the original tab will reconnect to its existing session without running the application’s startup code again.
This is deliberately similar to the mental model used by Desktop apps: you create controls, handle their events and update their properties. The substantial difference is that the framework understands there is a network and a browser between the code and the interface.
That distinction sounds obvious. Web development has nevertheless spent a surprising amount of time pretending it is not important.
Responsive web apps
Web pages are designed at three explicit visual breakpoints:
| Breakpoint | Grid |
|---|---|
| Compact | 4 columns |
| Medium | 8 columns |
| Wide | 12 columns |
Every control has a placement at each visual breakpoint and the IDE helps visualise this and copy the arrangement to different visual breakpoints.
A web page’s layout uses a responsive grid rather than absolute pixel coordinates. Studio prevents controls from overlapping and validates every layout before the project can run or be published. This is one of the areas where I think Objo is substantially better designed than competitors like Xojo.
Xojo’s current Web layout API still exposes control geometry primarily through pixel-based Left, Top, Width and Height properties combined with edge-locking flags. Its Flex layout applies only to WebContainer controls added at runtime. That is an understandable evolution from a desktop layout editor, but it is not any sane person would design a responsive web app today.
Objo starts with the browser’s layout problem instead. Compact, Medium and Wide are not previews of one fixed arrangement being stretched hopefully across different screens. They are first-class layouts, edited visually and validated together.
The result is far more predictable. You can make a form become a single column on a phone, use more horizontal space on a tablet and present a proper dashboard on a large display without writing resize handlers or calculating coordinates.
Your browser should not need a degree in archaeology to discover where a button was intended to go.
Controls that behave like they should in the browser
The initial Web catalogue contains 22 controls:
- Button
- Canvas
- Chart
- CheckBox
- ColourPicker
- ComboBox
- DateTimePicker
- GroupBox
- ImageViewer
- Label
- ListBox
- NumericTextField
- PopupMenu
- ProgressBar
- RadioButtonGroup
- SearchField
- Separator
- Slider
- TabPanel
- TextArea
- TextField
- TimePicker
The browser client uses native elements and established accessibility patterns wherever possible.
For instance, labels can be associated with inputs. GroupBox uses fieldset and legend semantics. TabPanel supports proper keyboard navigation. ProgressBar respects reduced-motion preferences. Charts include an accessible View data table rather than assuming that everybody can obtain information from coloured lines and slices. These controls have been thoroughly thought out.
Web Projects support System, Light and Dark themes with a project accent colour. The visual designer can preview both light and dark appearances without changing the saved project setting.
Serious data controls
I didn’t want the Web controls to become toys that worked for a five-row demonstration and collapsed as soon as somebody connected a real database.
ListBox can own stored rows or operate as a virtual, database-backed view. In virtual mode the browser requests bounded ranges while the full dataset remains in SQLite, PostgreSQL or another server-side store. Sorting, editing and selection use stable row identities rather than requiring every record to be copied into the page.
ComboBox similarly keeps its complete item catalogue on the server. The browser receives a bounded window of relevant suggestions as the user types, allowing a catalogue to grow well beyond the old “send every choice to the browser and hope” approach.
Chart keeps its data on the server while resize, HiDPI painting, hover, tooltips and keyboard navigation happen locally after a validated snapshot arrives. Bar, horizontal bar, line, scatter, pie and doughnut charts are included.
A Canvas control without a round-trip
Canvas is the deliberate exception to the usual server-side execution model.
You still drag a Canvas onto a WebPage and write familiar handlers such as:
Sub BadgeCanvas_Paint(g As Graphics)
g.Clear(Colour.White)
g.DrawingColour = Colour.Blue
g.FillCircle(Me.Width / 2, Me.Height / 2, 32)
End Sub
Studio privately compiles the Canvas handlers and the safe helper code they use into a bounded client image. That image runs inside a first-party WebAssembly Worker in the browser.
Painting, presses, double-presses, focus changes and scale-factor updates can therefore execute beside the Canvas. Drawing frames and raw input do not make a round trip through the application server.
This is another architectural difference from Xojo. Xojo’s WebCanvas documentation exposes a DiffEngineDisabled property which determines whether all graphics commands or only their differences are sent to the browser. Objo instead moves the relevant Objo event code into an isolated browser worker.
It remains Objo code. There is no separate JavaScript canvas project and no hidden collection of callbacks to maintain.
One Solution, Several Applications
Web Projects make much more sense when considered alongside the rest of Objo Studio.
An Objo solution can contain several projects:
Acme Tools
├── Shared
│ ├── Customer
│ ├── CustomerValidator
│ ├── Invoice
│ └── ReportFormatter
├── Acme Desktop
├── Acme Web
└── Acme Importer
Acme Desktop can provide a rich native interface for staff. Acme Web can expose a responsive portal to customers. Acme Importer can be a Command Line app used by scheduled jobs or an administrator.
The Customer, Invoice and validation code lives once under Shared. Studio compiles it into each application alongside that project’s own source.
Shared Code can contain classes, interfaces, enumerations, modules, business rules, parsers, data models and utility functions. Shared images and resource files are supported too, with individual projects able to replace a shared asset when they need a target-specific version.
Naturally, shared code must use APIs available to every target that consumes it. A shared invoice calculator can be used everywhere. A method that opens a Desktop window cannot magically become meaningful inside a Web application.
The important point is that sharing is part of the solution model. It does not depend on duplicate source files, symbolic links or remembering which project contains the authoritative copy.
Run, Debug and Publish
Choose Run and Studio starts a private development host on your computer, selects an available loopback port and opens the configured browser.
Choose Debug and you can put breakpoints in server-side Web events, step through code, inspect variables and use watches just as you would in a Desktop or Command Line project. Application output appears in Studio’s Output panel without filling it with routine Web server and WebAssembly machinery.
During a normal Run, the host can serve several logical sessions. Debug deliberately admits one session so the debugger has an unambiguous application state.
For deployment, Studio’s normal workflow goes directly to Publish. It creates one self-contained native executable for the selected platform. The destination computer does not need Objo Studio or a separate .NET installation.
The published application is a real server process. You can choose its default port and network access, override those settings from the command line and place it behind the reverse proxy, TLS, monitoring and restart policy appropriate to your deployment.
Objo Studio does not claim that making an executable removes the need to operate a server. That would be convenient, but it would also be nonsense.
Why Beta?
The foundation is substantial but this is a huge addition to Objo Studio and I acknowledge it probably still needs a little refinement before we can say it is completely ready.
The beta does not currently include arbitrary HTML, CSS or JavaScript or custom Web controls. Remote debugging and Web project unit-test targets are not yet available. Debugging is limited to one browser session, and Canvas is an immediate-mode 2D surface rather than a complete game framework.
Another way to build with Objo
Web Projects do not replace Desktop or Command Line development.
Sometimes the right application is a native desktop tool with menus, multiple windows and direct access to the computer. Sometimes it is a small Command Line utility that can be scripted and scheduled. Sometimes it needs to be available from any machine with a browser.
Quite often, a useful product contains all three.
Objo Studio can now keep those applications in one solution, build them with one language and let them share the code that actually defines the product.
That is the larger point of Web Projects. They are not a separate Web edition of Objo and they are not an attempt to disguise a JavaScript framework as a visual BASIC.
They are another first-class application target inside the same development environment.
A responsive designer that understands breakpoints. Controls that respect the browser. Server sessions with clear isolation. Local Canvas execution where latency matters. Shared Code that is genuinely shared. One executable when it is time to deploy.
Web development still contains plenty of unavoidable complexity. I would simply prefer that putting a button on a page was not part of it.
Pricing / licensing
Creating web projects in Objo Studio does not require a special license. Just like for desktop, you can build and test your web projects in your local browser for free. When you’re ready to deploy the web app to an actual web server you will need an Objo Studio license. This is the same license that is required to deploy desktop and command line apps - one license covers all platforms. You get 12 months of updates including and your license will continue to work with all Objo Studio versions released during your license period.
From 1st October 2026, the price of a license will be £129 (plus applicable taxes). This is a modest increase from the current £99 to reflect the additional value Studio is now provided. If you were on the fence about buying a license - now is the time to do so and save yourself a little money.
Anyone with an existing license that is valid will be able to publish web apps immediately.
Visit the Pricing page or Buy Now.
Download Objo Studio and try Web Projects during the public beta. The Web Projects documentation includes a from-blank walkthrough, deployment guidance and the complete Web API.