БЕТА-ПРОГРАММА • ЗАПИСЬ ОТКРЫТА
INTRAWEB 17 FE
v17.0 • Сборка 2026.04
Полноценная визуальная IDE для фронтенд-разработки в Visual Studio Code. Ноль внешних зависимостей. Полный контроль над кодом. Без мороки с пакетами
JavaScript или TypeScript — осуждать не станем
Создавайте веб-приложения на IntraWeb и публикуйте их в интернете, запускайте внутри WordPress, если нужно, или упаковывайте для PWA и магазинов приложений Android и iOS
Прямо в VS Code Публикация где угодно Код — ваш

    IntraWeb 17 One

    Создайте приложение.

    Никакой возни с обвязкой

    Создайте одно приложение. IntraWeb One сам разделит фронтенд и бэкенд, а затем автоматически свяжет их между собой. Без связующего кода, без API-слоя, без рутины с интеграцией.
    Python Java C# VB.NET Delphi

    ИНСТРУМЕНТАРИЙ

    Хватит мучиться с инструментами

    Современная веб-разработка начинается с деревьев зависимостей, конвейеров сборки и целой горы чужого кода. IntraWeb 17 FE убирает весь этот балласт, чтобы проект начинался с вашего приложения.

    • Работает прямо в профессиональной среде — VS Code, с глубокой интеграцией
    • Работайте полностью офлайн — без привязки к облаку
    • Полноценная нативная отладка — без плясок с sourcemap
    • GIT / SVN работают именно так, как вы привыкли
    • Это не хостинг и не SaaS: каждый байт результата — ваш

    ИНСТРУМЕНТАРИЙ

    Хватит мучиться с инструментами

    Современная веб-разработка начинается с деревьев зависимостей, конвейеров сборки и целой горы чужого кода. IntraWeb 17 FE убирает весь этот балласт, чтобы проект начинался с вашего приложения.

    • Работает прямо в профессиональной среде — VS Code, с глубокой интеграцией
    • Работайте полностью офлайн — без привязки к облаку
    • Полноценная нативная отладка — без плясок с sourcemap
    • GIT / SVN работают именно так, как вы привыкли
    • Это не хостинг и не SaaS: каждый байт результата — ваш
    Убедитесь сами

    Чем он отличается от привычных решений

    Guess Demo Template
    Guess Template Demo
    Guess the number I am thinking of
    Guess
    Attempts : 0
    ВСТРОЕННЫЙ ВИЗУАЛЬНЫЙ ДИЗАЙНЕР INTRAWEB 17 FE
    Встроенный визуальный дизайнер IntraWeb 17 FE
    Макет в дизайнере IntraWeb
    Создан для визуальной работы. IWML, компоненты, холст и свойства — части одного процесса разработки фронтенда.
    ВИЗУАЛЬНАЯ РАЗРАБОТКА В REACT
    Визуальный дизайнер React
    404дизайнер не найден
    Встроенного визуального дизайнера нет. Макет в основном правится в исходных файлах, а результат проверяется через браузер или dev-сервер.
    IWML-КОД INTRAWEB 17 FE
    Логика GuessTemplate
    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: та же структура интерфейса, но компактнее и без фреймворка.
    КОД РЕАЛИЗАЦИИ НА REACT
    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: среда выполнения фреймворка и логика компонентов лежат в исходниках.
    Всегда актуально и никогда не ломается. Это реальный результат, который вы получаете вместе с проектом: он годами продолжает работать после каждого обновления IntraWeb 17 FE, и переписывать ничего не нужно. С React, Vue или Angular даже плановое обновление фреймворка может внезапно сломать ваш код.
    РАЗМЕР ПРОЕКТА INTRAWEB 17 FE
    Выходная папка IntraWeb 17 FE
    Размер31,3 КБ
    На диске44,0 КБ
    Файлы15
    Папки0
    Минимум на выходе. Сгенерированный фронтенд почти не отличается от самого приложения: небольшие файлы, никакого node_modules и никакой среды выполнения фреймворка.
    РАЗМЕР ПРОЕКТА REACT
    Папка проекта React
    Размер39,9 МБ
    На диске44,2 МБ
    Файлы2 307 файлов
    Папки223 папки
    Проект на фреймворке. Видимое приложение небольшое, но рабочий проект тянет за собой пакеты фреймворка, инструменты сборки и папки зависимостей.
    Guess Demo Template
    Guess Template Demo
    Guess the number I am thinking of
    Guess
    Attempts : 0
    ВСТРОЕННЫЙ ВИЗУАЛЬНЫЙ ДИЗАЙНЕР INTRAWEB 17 FE
    Встроенный визуальный дизайнер IntraWeb 17 FE
    Макет в дизайнере IntraWeb
    Создан для визуальной работы. IWML, компоненты, холст и свойства — части одного процесса разработки фронтенда.
    ВИЗУАЛЬНАЯ РАЗРАБОТКА В VUE
    Визуальный дизайнер Vue
    404дизайнер не найден
    Встроенного визуального дизайнера нет. Макет в основном правится в исходных файлах, а результат проверяется через браузер или dev-сервер.
    IWML-КОД INTRAWEB 17 FE
    Логика GuessTemplate
    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: та же структура интерфейса, но компактнее и без фреймворка.
    КОД РЕАЛИЗАЦИИ НА VUE
    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: видимое приложение по-прежнему зависит от исходников фреймворка и его инструментов.
    Всегда актуально и никогда не ломается. Это реальный результат, который вы получаете вместе с проектом: он годами продолжает работать после каждого обновления IntraWeb 17 FE, и переписывать ничего не нужно. С React, Vue или Angular даже плановое обновление фреймворка может внезапно сломать ваш код.
    РАЗМЕР ПРОЕКТА INTRAWEB 17 FE
    Выходная папка IntraWeb 17 FE
    Размер31,3 КБ
    На диске44,0 КБ
    Файлы15
    Папки0
    Минимум на выходе. Сгенерированный фронтенд почти не отличается от самого приложения: небольшие файлы, никакого node_modules и никакой среды выполнения фреймворка.
    РАЗМЕР ПРОЕКТА VUE
    Папка проекта Vue
    Размер37,3 МБ
    На диске38,4 МБ
    Файлы737 файлов
    Папки139 папок
    Проект на фреймворке. Видимое приложение небольшое, но рабочий проект тянет за собой пакеты фреймворка, инструменты сборки и папки зависимостей.
    Guess Demo Template
    Guess Template Demo
    Guess the number I am thinking of
    Guess
    Attempts : 0
    ВСТРОЕННЫЙ ВИЗУАЛЬНЫЙ ДИЗАЙНЕР INTRAWEB 17 FE
    Встроенный визуальный дизайнер IntraWeb 17 FE
    Макет в дизайнере IntraWeb
    Создан для визуальной работы. IWML, компоненты, холст и свойства — части одного процесса разработки фронтенда.
    ВИЗУАЛЬНАЯ РАЗРАБОТКА В ANGULAR
    Визуальный дизайнер Angular
    404дизайнер не найден
    Встроенного визуального дизайнера нет. Макет в основном правится в исходных файлах, а результат проверяется через браузер или dev-сервер.
    IWML-КОД INTRAWEB 17 FE
    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: та же структура интерфейса, но компактнее и без фреймворка.
    КОД РЕАЛИЗАЦИИ НА ANGULAR
    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: шаблоны, декораторы и структура TypeScript — неотъемлемая часть работы.
    Всегда актуально и никогда не ломается. Это реальный результат, который вы получаете вместе с проектом: он годами продолжает работать после каждого обновления IntraWeb 17 FE, и переписывать ничего не нужно. С React, Vue или Angular даже плановое обновление фреймворка может внезапно сломать ваш код.
    РАЗМЕР ПРОЕКТА INTRAWEB 17 FE
    Выходная папка IntraWeb 17 FE
    Размер31,3 КБ
    На диске44,0 КБ
    Файлы15
    Папки0
    Минимум на выходе. Сгенерированный фронтенд почти не отличается от самого приложения: небольшие файлы, никакого node_modules и никакой среды выполнения фреймворка.
    РАЗМЕР ПРОЕКТА ANGULAR
    Папка проекта Angular
    Размер230 МБ
    На диске262 МБ
    Файлы22 746 файлов
    Папки2 340 папок
    Проект на фреймворке. Видимое приложение небольшое, но рабочий проект тянет за собой пакеты фреймворка, инструменты сборки и папки зависимостей.
    ДИЗАЙНЕР
    Проектируйте визуально
    Полный контроль — у вас
    Визуальный дизайнер — не игрушка. Это полноценная среда разработки: в ней есть всё, что ожидает увидеть опытный фронтенд-инженер, и кое-что, чего он точно не ожидает.
    ВИЗУАЛЬНО → КОД · НА ЛЕТУ
    Визуальный дизайнер IntraWeb
    Визуальный дизайнер IntraWeb
    01
    Создавайте мышкой
    а не кодом
    Создавайте элементы управления прямо в интерфейсе: расставьте всё так, как должно выглядеть, а IntraWeb сделает остальное.
    Всё окажется именно там, куда вы это поставили
    Дерево элементов и «хлебные крошки»
    02
    Дерево и «хлебные крошки»
    Навигация со скоростью мысли
    Живое дерево держит всю структуру перед глазами, а «хлебные крошки» позволяют сразу перейти на любой уровень вложенности — не нужно раскапывать свёрнутые узлы.
    03
    Мгновенный поиск элементов
    Находите нужное за секунды
    Панель Controls ищет среди всех доступных элементов прямо по мере ввода — не нужно листать длинный список в поисках нужного.
    Панель элементов с поиском
    Панель свойств
    04
    Свойства — в один клик
    Без кода и без догадок
    Настраивайте ширину, цвет, поведение — что угодно — прямо в интерфейсе. Не нужно запоминать названия свойств и гадать с синтаксисом: нажали — и готово.
    05
    События в один клик
    Привязка — автоматически
    Выберите элемент, нажмите нужное событие — обработчик создастся сам, останется только написать логику внутри.
    Вкладка событий
    Интеграция с WordPress

    Блоки
    «Произвольный HTML» для WordPress

    Один из самых наглядных способов встроить IntraWeb в готовый сайт на WordPress: создайте блок в IntraWeb, опубликуйте сгенерированные файлы и разместите приложение в WordPress через встроенный блок «Произвольный HTML».

    Шорткоды не нужны Без собственного API-слоя Код остаётся у разработчика

    От дизайнера IntraWeb до живой страницы WordPress

    Создайте блок визуально, опубликуйте сгенерированные файлы и встройте работающее приложение IntraWeb в WordPress через штатный блок «Произвольный HTML».

    Покажем на примере раздела бронирования
    Шаг 01

    Создайте и опубликуйте блок IntraWeb

    Соберите интерфейс визуально в дизайнере IntraWeb, затем опубликуйте на сервере сгенерированные файлы HTML, CSS, JavaScript и конфигурации. В нашем примере блок — это форма бронирования, которая умеет сохранять отправленные данные.

    Дизайнер IntraWeb Дизайнер IntraWeb
    Опубликованные файлы проекта Опубликованные файлы проекта
    Шаг 02

    Добавьте «Произвольный HTML» и подключите приложение

    В WordPress добавьте встроенный блок «Произвольный HTML» ровно там, где должно появиться приложение IntraWeb. Затем вставьте небольшой фрагмент кода, который подгружает опубликованное приложение.

    Блок «Произвольный HTML» в WordPress Произвольный HTML в WordPress
    Подключите блок IntraWeb Подключите блок
    Шаг 03

    Форма IntraWeb работает прямо в WordPress

    Форма отображается на странице как обычный раздел WordPress. Макетом страницы управляет WordPress, а IntraWeb хранит логику приложения отдельно — чистой и под полным контролем разработчика.

    Форма IntraWeb внутри WordPress
    Живая страница WordPress
    Блок истории Atozed Software
    30+лет

    Более трёх десятилетий практической веб-инженерии — от первых коммерческих инструментов до IntraWeb сегодня

    Atozed Software / С 1994 года

    Atozed Software: Тот самый пионер веба

    Архив Atozed / 1994
    Chad Z., на фото слеваПЕРВАЯ ОТРАСЛЕВАЯ ВЫСТАВКА
    01 / Начало

    Мы были здесь ещё до того,
    как веб стал «модным»

    В 1994 году браузеры были примитивными, а JavaScript ещё не существовало. Пока мир разбирался с модемным доступом, Chad Z. уже выпускал первые в мире коммерческие инструменты для веб-разработки. До ASP, до PHP и до войн фреймворков мы уже связывали бизнес-логику с интернетом.

    До ASPДо PHPДо фреймворков
    1993Основание Atozed
    1994Internet Application Gateway
    1996Web Solution Builder
    2001IntraWeb 1.0 для Delphi
    2018IntraWeb 15, HTTPSYS
    2024IntraWeb 16
    2026IW17 FE — VS Code, TypeScript, ноль зависимостей
    02 / Первый проект

    Internet Application
    Gateway

    Этот зернистый скриншот — кусочек истории. На нём рождение Internet Application Gateway (IAG), предшественника IntraWeb. В те времена большинство динамических систем были «сырым» кодом, который выплёвывал строки HTML, а IAG служил шлюзом между бизнес-логикой и HTTP.

    АРХИВ
    Internet Application Gateway, 1994
    30+ЛЕТ

    Более 30 лет инженерных традиций

    От IAG в середине 90-х и Web Solution Builder в 1996 году до сегодняшнего IntraWeb — наша история это непрерывная линия инженерной дисциплины. Мы не гонимся за трендами, потому что понимаем основы.

    30+лет

    Более трёх десятилетий практической веб-инженерии — от первых коммерческих инструментов до IntraWeb сегодня

    Atozed Software / С 1994 года

    Atozed Software: Тот самый пионер веба

    Архив Atozed / 1994
    Chad Z., на фото слеваПЕРВАЯ ОТРАСЛЕВАЯ ВЫСТАВКА
    01 / Начало

    Мы были здесь ещё до того, как веб стал «модным»

    В 1994 году браузеры были примитивными, а JavaScript ещё не существовало. Пока мир разбирался с модемным доступом, Chad Z. уже выпускал первые в мире коммерческие инструменты для веб-разработки. До ASP, до PHP и до войн фреймворков мы уже связывали бизнес-логику с интернетом.

    До ASPДо PHPДо фреймворков
    1993Основание Atozed
    1994Internet Application Gateway
    1996Web Solution Builder
    2001IntraWeb 1.0 для Delphi
    2018IntraWeb 15, HTTPSYS
    2024IntraWeb 16
    2026IW17 FE — VS Code, TypeScript, ноль зависимостей
    02 / Первый проект

    Internet Application Gateway

    Этот зернистый скриншот — кусочек истории. На нём рождение Internet Application Gateway (IAG), предшественника IntraWeb. В те времена большинство динамических систем были «сырым» кодом, который выплёвывал строки HTML, а IAG служил шлюзом между бизнес-логикой и HTTP.

    АРХИВ
    Internet Application Gateway, 1994
    30+ЛЕТ

    Более 30 лет инженерных традиций

    От IAG в середине 90-х и Web Solution Builder в 1996 году до сегодняшнего IntraWeb — наша история это непрерывная линия инженерной дисциплины.

    БЕТА · ОГРАНИЧЕННОЕ ЧИСЛО МЕСТ

    Станьте одним из первых, кто строит так.

    Присоединяйтесь к бета-тесту IntraWeb 17 FE. Прямой контакт с командой инженеров. Бесплатная лицензия Studio на первый год после релиза. Честные отзывы, без NDA.

    Ручная проверка · обычно одобряем в течение 48 часов · никакого спама

    или просто

    Присоединяйтесь к нашему каналу в Telegram
    Чистый TypeScript на выходе Без тяжёлой среды выполнения. Без лабиринта зависимостей.
    100% кода — ваши Ваш код, ваш сервер, ваши правила развёртывания.
    Серьёзная инженерия — и быстро. Проектируйте быстро, выпускайте уверенно, сохраняйте полный контроль.
    Scroll to Top