BETA PROGRAM NOW OPEN
INTRAWEB 17 FE
v17.0  •  Build 2026.04
A complete visual IDE for web front-end development in Visual Studio Code. Zero external dependencies. Full ownership. No package drama
JavaScript or TypeScript. We won’t judge
Build web applications with IntraWeb. Deploy to the web, run inside WordPress if you want, or package for PWA, Android, and iOS app stores
VS Code Native Deploy Anywhere Code Ownership

    IntraWeb 17 One

    Build the app.

    Skip the plumbing cult

    Create one application. IntraWeb One separates frontend and backend for you, then wires them together automatically. No glue code. No API layer. No integration busywork.
    Python Java C# VB.NET Delphi

    THE TOOLCHAIN

    Stop the Toolchain Fatigue

    Modern web development now starts with dependency trees, build pipelines, and a small mountain of other people’s code. IntraWeb 17 FE cuts the bloat, so your project starts with your app.

    • Inside a professional Dev Environment – VS Code, fully integrated
    • Develop 100% offline, no cloud dependency
    • Professional native debugging, no sourcemap gymnastics
    • GIT / SVN source control works exactly as you’d expect
    • Not hosted. Not SaaS. You own every byte of output

    THE TOOLCHAIN

    Stop the Toolchain Fatigue

    Modern web development now starts with dependency trees, build pipelines, and a small mountain of other people’s code. IntraWeb 17 FE cuts the bloat, so your project starts with your app.

    • Inside a professional Dev Environment – VS Code, fully integrated
    • Develop 100% offline, no cloud dependency
    • Professional native debugging, no sourcemap gymnastics
    • GIT / SVN source control works exactly as you’d expect
    • Not hosted. Not SaaS. You own every byte of output
    See it in your own eyes

    How it differs against the usual suspects

    Guess Demo Template
    Guess Template Demo
    Guess the number I am thinking of
    Guess
    Attempts : 0
    INTRAWEB 17 FE NATIVE VISUAL DESIGNER
    IntraWeb 17 FE native visual designer
    IntraWeb Designer layout
    Built for visual editing. IWML, components, canvas, and properties are part of one frontend-building workflow.
    REACT VISUAL DESIGN WORKFLOW
    React visual designer
    404no designer tool found
    No native visual designer. The layout is mainly edited in source files and inspected through browser/dev-server feedback.
    INTRAWEB 17 FE IWML CODE
    GuessTemplate logic
    namespace GuessTemplate {
      export class Index extends IndexGen {
        public Count = 0;
        // Must init to a value so it has a type and exists.
        public Guess = NaN;
        public Msg = '';
        protected MagicNo = Math.floor((Math.random() * 100)+ 1);
    
        public WhenPageLoaded(): void {
          const xMagicNo = this.Page.WebParam('MagicNo');
          if (xMagicNo)this.MagicNo = parseInt(xMagicNo);
        }
    
        public WhenGuessButtonClicked(e: MouseEvent): void {
          if (e && e.shiftKey){
            IntraWeb.Dialogs.ShowMessage('The magic number is: ' + this.MagicNo);
            return;
          }
    
          this.Msg = '';
          if (isNaN(this.Guess)) {
            // Need to retrieve value from Edit itself when its an invalid number.
            this.Msg = this.GuessEdit.Text.Value + ' is not a valid number.';
          }else if (this.Guess < 1 || this.Guess > 100) {
            this.Msg = this.Guess + ' is not in the range of 1 to 100.';
          }else {
            this.Count++;
    
            if (this.Guess < this.MagicNo) {
              this.Msg = this.Guess + ' is too low.';
            }else if (this.Guess > this.MagicNo) {
              this.Msg = this.Guess + ' is too high.';
            }else if (this.Guess === this.MagicNo) {
              IntraWeb.Dialogs.ShowMessage('Congratulations! You guessed the magic number.');
              this.GuessButton.Enabled.Value = false;
            }
          }
    
          this.GuessEdit.Focus();
          this.Guess = NaN;
        }
      }
    }
    IWML code. The same UI structure stays compact and framework-free.
    REACT IMPLEMENTATION CODE
    GuessTemplate.jsx
    import { useState, useRef, useEffect } from 'react'
    
    const logo = '/Logo.png'
    
    function App() {
      const [guess, setGuess] = useState('')
      const [msg, setMsg] = useState('')
      const [count, setCount] = useState(0)
      const [disabled, setDisabled] = useState(false)
    
      const magicNo = useRef(Math.floor(Math.random() * 100) + 1)
      const inputRef = useRef(null)
    
      useEffect(() => {
        const params = new URLSearchParams(window.location.search)
        const magic = params.get('MagicNo')
        if (magic) magicNo.current = parseInt(magic)
        inputRef.current?.focus()
      }, [])
    
      function handleGuess(e) {
        if (e && e.shiftKey) {
          alert('The magic number is: ' + magicNo.current)
          return
        }
    
        const num = parseInt(guess)
    
        if (isNaN(num)) {
          setMsg(guess + ' is not a valid number.')
        } else if (num < 1 || num > 100) {
          setMsg(num + ' is not in the range of 1 to 100.')
        } else {
          setCount(c => c + 1)
    
          if (num < magicNo.current) {
            setMsg(num + ' is too low.')
          } else if (num > magicNo.current) {
            setMsg(num + ' is too high.')
          } else {
            alert('Congratulations! You guessed the magic number.')
            setMsg('')
            setDisabled(true)
          }
        }
    
        setGuess('')
        inputRef.current?.focus()
      }
    
      function handleKeyDown(e) {
        if (e.key === 'Enter' && !disabled) {
          handleGuess(e)
        }
      }
    
      return (
        <div className="Card">
          <div className="Logo">
            <img src={logo} alt="Logo" />
          </div>
          <h1>Guess the Number</h1>
          <p>I'm thinking of a number between 1 and 100. Can you guess it?</p>
          <div className="Input">
            <input
              ref={inputRef}
              type="number"
              placeholder="Enter your guess..."
              value={guess}
              onChange={e => setGuess(e.target.value)}
              onKeyDown={handleKeyDown}
              disabled={disabled}
            />
          </div>
          <div className="Button">
            <button onClick={handleGuess} disabled={disabled}>
              Guess
            </button>
          </div>
          <div className="Msg">{msg}</div>
          {count > 0 && <div className="Counter">Attempts: {count}</div>}
          <div className="FrameworkBadge">React</div>
        </div>
      )
    }
    
    export default App
    React implementation code. Framework runtime and component logic live in source files.
    Always current, never broken. This is the real output that ships with your project – it keeps working for years, through every IntraWeb 17 FE update, without a rewrite. With React, Vue, or Angular, a routine framework upgrade can break your code without warning.
    INTRAWEB 17 FE PROJECT FOOTPRINT
    IntraWeb 17 FE output folder
    Size31.3 KB
    Disk44.0 KB
    Files15
    Folders0
    Compact output. The generated frontend stays close to the actual app: small files, no node_modules tree, and no framework runtime payload.
    REACT PROJECT FOOTPRINT
    React project folder
    Size39.9 MB
    Disk44.2 MB
    Files2,307 files
    Folders223 folders
    Framework project. The visible app is small, but the working project includes framework packages, build tooling, and dependency folders.
    Guess Demo Template
    Guess Template Demo
    Guess the number I am thinking of
    Guess
    Attempts : 0
    INTRAWEB 17 FE NATIVE VISUAL DESIGNER
    IntraWeb 17 FE native visual designer
    IntraWeb Designer layout
    Built for visual editing. IWML, components, canvas, and properties are part of one frontend-building workflow.
    VUE VISUAL DESIGN WORKFLOW
    Vue visual designer
    404no designer tool found
    No native visual designer. The layout is mainly edited in source files and inspected through browser/dev-server feedback.
    INTRAWEB 17 FE IWML CODE
    GuessTemplate logic
    namespace GuessTemplate {
      export class Index extends IndexGen {
        public Count = 0;
        // Must init to a value so it has a type and exists.
        public Guess = NaN;
        public Msg = '';
        protected MagicNo = Math.floor((Math.random() * 100)+ 1);
    
        public WhenPageLoaded(): void {
          const xMagicNo = this.Page.WebParam('MagicNo');
          if (xMagicNo)this.MagicNo = parseInt(xMagicNo);
        }
    
        public WhenGuessButtonClicked(e: MouseEvent): void {
          if (e && e.shiftKey){
            IntraWeb.Dialogs.ShowMessage('The magic number is: ' + this.MagicNo);
            return;
          }
    
          this.Msg = '';
          if (isNaN(this.Guess)) {
            // Need to retrieve value from Edit itself when its an invalid number.
            this.Msg = this.GuessEdit.Text.Value + ' is not a valid number.';
          }else if (this.Guess < 1 || this.Guess > 100) {
            this.Msg = this.Guess + ' is not in the range of 1 to 100.';
          }else {
            this.Count++;
    
            if (this.Guess < this.MagicNo) {
              this.Msg = this.Guess + ' is too low.';
            }else if (this.Guess > this.MagicNo) {
              this.Msg = this.Guess + ' is too high.';
            }else if (this.Guess === this.MagicNo) {
              IntraWeb.Dialogs.ShowMessage('Congratulations! You guessed the magic number.');
              this.GuessButton.Enabled.Value = false;
            }
          }
    
          this.GuessEdit.Focus();
          this.Guess = NaN;
        }
      }
    }
    IWML code. The same UI structure stays compact and framework-free.
    VUE IMPLEMENTATION CODE
    GuessTemplate.vue
    <template>
      <div class="Card">
        <div class="Logo">
          <img src="/Logo.png" alt="Logo" />
        </div>
        <h1>Guess the Number</h1>
        <p>I'm thinking of a number between 1 and 100. Can you guess it?</p>
        <div class="Input">
          <input
            ref="inputRef"
            v-model="guess"
            type="number"
            placeholder="Enter your guess..."
            :disabled="disabled"
            @keydown.enter="handleGuess"
          />
        </div>
        <div class="Button">
          <button @click="handleGuess" :disabled="disabled">Guess</button>
        </div>
        <div class="Msg">{{ msg }}</div>
        <div v-if="count > 0" class="Counter">Attempts: {{ count }}</div>
        <div class="FrameworkBadge">Vue</div>
      </div>
    </template>
    
    <script setup>
    import { ref, onMounted } from 'vue'
    
    const guess = ref('')
    const msg = ref('')
    const count = ref(0)
    const disabled = ref(false)
    const inputRef = ref(null)
    
    const params = new URLSearchParams(window.location.search)
    const magicNo = params.get('MagicNo')
      ? parseInt(params.get('MagicNo'))
      : Math.floor(Math.random() * 100) + 1
    
    onMounted(() => {
      inputRef.value?.focus()
    })
    
    function handleGuess(e) {
      if (e?.shiftKey) {
        alert('The magic number is: ' + magicNo)
        return
      }
    
      const num = parseInt(guess.value)
    
      if (isNaN(num)) {
        msg.value = guess.value + ' is not a valid number.'
      } else if (num < 1 || num > 100) {
        msg.value = num + ' is not in the range of 1 to 100.'
      } else {
        count.value++
    
        if (num < magicNo) {
          msg.value = num + ' is too low.'
        } else if (num > magicNo) {
          msg.value = num + ' is too high.'
        } else {
          alert('Congratulations! You guessed the magic number.')
          msg.value = ''
          disabled.value = true
        }
      }
    
      guess.value = ''
      inputRef.value?.focus()
    }
    </script>
    Vue implementation code. The visible app still depends on framework source and tooling.
    Always current, never broken. This is the real output that ships with your project – it keeps working for years, through every IntraWeb 17 FE update, without a rewrite. With React, Vue, or Angular, a routine framework upgrade can break your code without warning.
    INTRAWEB 17 FE PROJECT FOOTPRINT
    IntraWeb 17 FE output folder
    Size31.3 KB
    Disk44.0 KB
    Files15
    Folders0
    Compact output. The generated frontend stays close to the actual app: small files, no node_modules tree, and no framework runtime payload.
    VUE PROJECT FOOTPRINT
    Vue project folder
    Size37.3 MB
    Disk38.4 MB
    Files737 files
    Folders139 folders
    Framework project. The visible app is small, but the working project includes framework packages, build tooling, and dependency folders.
    Guess Demo Template
    Guess Template Demo
    Guess the number I am thinking of
    Guess
    Attempts : 0
    INTRAWEB 17 FE NATIVE VISUAL DESIGNER
    IntraWeb 17 FE native visual designer
    IntraWeb Designer layout
    Built for visual editing. IWML, components, canvas, and properties are part of one frontend-building workflow.
    ANGULAR VISUAL DESIGN WORKFLOW
    Angular visual designer
    404no designer tool found
    No native visual designer. The layout is mainly edited in source files and inspected through browser/dev-server feedback.
    INTRAWEB 17 FE IWML CODE
    GuessTemplate.iwml
    namespace GuessTemplate {
      export class Index extends IndexGen {
        public Count = 0;
        // Must init to a value so it has a type and exists.
        public Guess = NaN;
        public Msg = '';
        protected MagicNo = Math.floor((Math.random() * 100)+ 1);
    
        public WhenPageLoaded(): void {
          const xMagicNo = this.Page.WebParam('MagicNo');
          if (xMagicNo)this.MagicNo = parseInt(xMagicNo);
        }
    
        public WhenGuessButtonClicked(e: MouseEvent): void {
          if (e && e.shiftKey){
            IntraWeb.Dialogs.ShowMessage('The magic number is: ' + this.MagicNo);
            return;
          }
    
          this.Msg = '';
          if (isNaN(this.Guess)) {
            // Need to retrieve value from Edit itself when its an invalid number.
            this.Msg = this.GuessEdit.Text.Value + ' is not a valid number.';
          }else if (this.Guess < 1 || this.Guess > 100) {
            this.Msg = this.Guess + ' is not in the range of 1 to 100.';
          }else {
            this.Count++;
    
            if (this.Guess < this.MagicNo) {
              this.Msg = this.Guess + ' is too low.';
            }else if (this.Guess > this.MagicNo) {
              this.Msg = this.Guess + ' is too high.';
            }else if (this.Guess === this.MagicNo) {
              IntraWeb.Dialogs.ShowMessage('Congratulations! You guessed the magic number.');
              this.GuessButton.Enabled.Value = false;
            }
          }
    
          this.GuessEdit.Focus();
          this.Guess = NaN;
        }
      }
    }
    IWML code. The same UI structure stays compact and framework-free.
    ANGULAR IMPLEMENTATION CODE
    app.html + app.ts
    // app.html
    <div class="Card">
      <div class="Logo">
        <img src="Logo.png" alt="Logo" />
      </div>
      <h1>Guess the Number</h1>
      <p>I'm thinking of a number between 1 and 100. Can you guess it?</p>
      <div class="Input">
        <input
          #inputRef
          [ngModel]="guess()"
          (ngModelChange)="guess.set($event)"
          type="number"
          placeholder="Enter your guess..."
          [disabled]="disabled()"
          (keydown.enter)="handleGuess($event)"
        />
      </div>
      <div class="Button">
        <button (click)="handleGuess($event)" [disabled]="disabled()">Guess</button>
      </div>
      <div class="Msg">{{ msg() }}</div>
      @if (count() > 0) {
        <div class="Counter">Attempts: {{ count() }}</div>
      }
      <div class="FrameworkBadge">Angular</div>
    </div>
    
    // app.ts
    import { Component, signal, ViewChild, ElementRef, AfterViewInit } from '@angular/core';
    import { FormsModule } from '@angular/forms';
    
    @Component({
      selector: 'app-root',
      imports: [FormsModule],
      templateUrl: './app.html',
      styleUrl: './app.scss'
    })
    export class App implements AfterViewInit {
      @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;
    
      readonly guess = signal('');
      readonly msg = signal('');
      readonly count = signal(0);
      readonly disabled = signal(false);
    
      private readonly magicNo: number;
    
      constructor() {
        const params = new URLSearchParams(window.location.search);
        const fromQuery = params.get('MagicNo');
        this.magicNo = fromQuery
          ? parseInt(fromQuery, 10)
          : Math.floor(Math.random() * 100) + 1;
      }
    
      ngAfterViewInit(): void {
        this.inputRef.nativeElement.focus();
      }
    
      handleGuess(event?: Event): void {
        if ((event as KeyboardEvent | MouseEvent | undefined)?.shiftKey) {
          alert('The magic number is: ' + this.magicNo);
          return;
        }
    
        const raw = this.guess();
        const num = parseInt(raw, 10);
    
        if (isNaN(num)) {
          this.msg.set(raw + ' is not a valid number.');
        } else if (num < 1 || num > 100) {
          this.msg.set(num + ' is not in the range of 1 to 100.');
        } else {
          this.count.update(c => c + 1);
    
          if (num < this.magicNo) {
            this.msg.set(num + ' is too low.');
          } else if (num > this.magicNo) {
            this.msg.set(num + ' is too high.');
          } else {
            alert('Congratulations! You guessed the magic number.');
            this.msg.set('');
            this.disabled.set(true);
          }
        }
    
        this.guess.set('');
        this.inputRef.nativeElement.focus();
      }
    }
    Angular implementation code. Templates, decorators, and TypeScript structure are part of the workflow.
    Always current, never broken. This is the real output that ships with your project – it keeps working for years, through every IntraWeb 17 FE update, without a rewrite. With React, Vue, or Angular, a routine framework upgrade can break your code without warning.
    INTRAWEB 17 FE PROJECT FOOTPRINT
    IntraWeb 17 FE output folder
    Size31.3 KB
    Disk44.0 KB
    Files15
    Folders0
    Compact output. The generated frontend stays close to the actual app: small files, no node_modules tree, and no framework runtime payload.
    ANGULAR PROJECT FOOTPRINT
    Angular project folder
    Size230 MB
    Disk262 MB
    Files22,746 files
    Folders2,340 folders
    Framework project. The visible app is small, but the working project includes framework packages, build tooling, and dependency folders.
    THE DESIGNER
    Design visually
    Keep full control
    The visual designer is not a toy. It is a real, full-featured development surface — with everything a senior frontend engineer would expect, and a few things they probably wouldn’t.
    VISUAL → CODE · LIVE
    IntraWeb visual designer
    IntraWeb visual designer
    01
    Build by doing
    Not by writing
    Create controls directly in the interface — arrange exactly what you want to see, and IntraWeb takes care of everything behind it.
    Everything will be exactly where you put it
    Tree navigation and breadcrumbs
    02
    Tree & breadcrumbs
    Navigate at the speed of thought
    A live tree keeps the full structure in view, and breadcrumbs let you jump straight to any level of nesting — no digging through collapsed nodes.
    03
    Instant control search
    Find anything in seconds
    The Controls panel searches everything available as you type — never hunt through a long list for the one control you need.
    Searchable controls panel
    Properties panel
    04
    Properties, one click away
    No code, no guesswork
    Configure width, color, behavior — anything — right in the interface. No memorizing property names, no guessing at syntax. Click it, and it’s set.
    05
    One-click events
    Wired automatically
    Pick a control, click the event you want, and the handler is created for you automatically — all that’s left is writing the logic inside.
    Events tab
    WordPress integration

    Custom HTML
    Blocks for WordPress

    One of the most visual ways to integrate IntraWeb into an existing WordPress site: design the block in IntraWeb, publish the generated files, and place the app inside WordPress with the built-in Custom HTML block.

    No shortcode required No custom API layer Developer-owned code

    From IntraWeb Designer to a live WordPress page

    Create the block visually, publish the generated files, and mount the working IntraWeb app inside WordPress with a native Custom HTML block.

    Let’s show you on the example of a booking section
    Step 01

    Design & publish the IntraWeb block

    Build the UI visually in IntraWeb Designer, then publish the generated HTML, CSS, JavaScript, and configuration files to the server. In this example, the block is a booking form that can save submitted data.

    IntraWeb Designer IntraWeb Designer
    Published project files Published project files
    Step 02

    Add Custom HTML & connect the app

    In WordPress, add the built-in Custom HTML block exactly where the IntraWeb application should appear. Then paste a tiny snippet that loads the published app.

    WordPress Custom HTML block WordPress Custom HTML
    Connect the IntraWeb block Connect the block
    Step 03

    The IntraWeb form is live inside WordPress

    The form appears inline as a normal WordPress page section. WordPress owns the page layout, while IntraWeb keeps the application logic clean, separate, and developer-controlled.

    IntraWeb form live inside WordPress
    Live WordPress page
    Atozed Software History Block
    30+years

    More than three decades of practical web engineering – from the first commercial tools to IntraWeb today

    Atozed Software / Since 1994

    Atozed Software: The original web pioneer

    Atozed Archive / 1994
    Chad Z., pictured leftFIRST INDUSTRY FAIR
    01 / The beginning

    We were here before
    the Web was “cool”

    In 1994, browsers were primitive and JavaScript didn’t exist. While the world was figuring out dial-up, Chad Z. was already shipping the world’s first commercial web development tools. Before ASP, before PHP, and before the framework wars, we were bridging business logic and the internet.

    Before ASPBefore PHPBefore frameworks
    1993Atozed founded
    1994Internet Application Gateway
    1996Web Solution Builder
    2001IntraWeb 1.0 for Delphi
    2018IntraWeb 15, HTTPSYS
    2024IntraWeb 16
    2026IW17 FE – VS Code, TypeScript, zero deps
    02 / The first blueprint

    Internet Application
    Gateway

    This grainy screenshot is a piece of history. It shows the birth of Internet Application Gateway (IAG), the predecessor to IntraWeb. At a time when most dynamic systems were raw code spitting out HTML strings, IAG acted as a gateway layer between business logic and HTTP.

    ARCHIVE
    Internet Application Gateway, 1994
    30+YEARS

    Over 30 years of engineering lineage

    From IAG in the mid-90s to Web Solution Builder in 1996, and IntraWeb today, our history is a continuous arc of engineering discipline. We don’t chase trends because we understand the foundations.

    30+years

    More than three decades of practical web engineering – from the first commercial tools to IntraWeb today

    Atozed Software / Since 1994

    Atozed Software: The original web pioneer

    Atozed Archive / 1994
    Chad Z., pictured leftFIRST INDUSTRY FAIR
    01 / The beginning

    We were here before the Web was “cool”

    In 1994, browsers were primitive and JavaScript didn’t exist. While the world was figuring out dial-up, Chad Z. was already shipping the world’s first commercial web development tools. Before ASP, before PHP, and before the framework wars, we were bridging business logic and the internet.

    Before ASPBefore PHPBefore frameworks
    1993Atozed founded
    1994Internet Application Gateway
    1996Web Solution Builder
    2001IntraWeb 1.0 for Delphi
    2018IntraWeb 15, HTTPSYS
    2024IntraWeb 16
    2026IW17 FE – VS Code, TypeScript, zero deps
    02 / The first blueprint

    Internet Application Gateway

    This grainy screenshot is a piece of history. It shows the birth of Internet Application Gateway (IAG), the predecessor to IntraWeb. At a time when most dynamic systems were raw code spitting out HTML strings, IAG acted as a gateway layer between business logic and HTTP.

    ARCHIVE
    Internet Application Gateway, 1994
    30+YEARS

    Over 30 years of engineering lineage

    From IAG in the mid-90s to Web Solution Builder in 1996, and IntraWeb today, our history is a continuous arc of engineering discipline.

    BETA · LIMITED SPOTS

    Be among the first to build like this.

    Join the IntraWeb 17 FE beta. Direct contact with the engineering team. Free Studio license for the first year post-launch. Honest feedback, no NDAs.

    Manual review · usually approved within 48h · no spam, ever

    or simply

    Join our Telegram channel
    Pure TypeScript output No bulky runtime. No dependency maze.
    100% code ownership Your code, your server, your deployment rules.
    Real & fast engineering. Design fast, ship confidently, keep full control.
    Scroll to Top