MiPhant 3.0.0
O MiPhant é desenvolvido para rodar os scripts PHP através de um navegador de Internet com janelas personalizadas, ele executa o servidor PHP embutido com portas aleatórias. Dessa forma, você pode executar vários aplicativos ao mesmo tempo sem que eles interfiram uns nos outros.

Além disso, o MiPhant já possui uma versão mais recente do PHP disponível junto com o software e compilado de forma estática (não depende de bibliotecas externas), graças ao excelente projeto static-php-cli.
Idiomas
No MiPhant você pode desenvolver aplicativos em vários idiomas, você só precisa criar um arquivo de idioma no formato json na pasta langs e adicionar as traduções. Ao executar o aplicativo em um computador com um idioma diferente, o MiPhant detectará o idioma e obterá a tradução por meio do arquivo de tradução.
Download para Debian/Ubuntu
Download para Windows
O instalador foi criado utilizando o excelente projeto de código aberto NSIS.
Aviso: Alguns antívirus podem apresentar falsos positivos para o instalador, nossos softwares são 100% livre de vírus e qualquer outra ameaça virtual.
Caso prefira pode usar a versão ZIP do MiPhant.
Resultado de Análise com VírusTotal:
- Pacote DEB
- ZIP
- Instalador - Leia sobre em Falsos Positivos NSIS
Instalação para Debian/Ubuntu: Baixe o arquivo deb, dê dois cliques no pacote deb e clique em Instalar
Instalação para Windows versão Instalador: Baixe o arquivo exe, clique duas vezes, siga o passo a passo e aguarde a instalação
Instalação para Windows versão ZIP: Baixe o arquivo zip e extraia na pasta C:\, após a extração deve ficar assim: c:\miphant\
Para Linux Debian/Ubuntu e Instalador para Windows o MiPhant removerá versões anteriores automaticamente na instalação, já para a versão ZIP para Windows é necessário excluir a pasta miphant no c:\ se existir e extrair os novos arquivos.
Em caso de dúvidas, adquira um plano abaixo e obtenha suporte.
Idiomas: Inglês (Padrão) e Português
SHA256
Debian/Ubuntu: 45dfa4ab61997907da79b909bd95004a89733d6e11cb3637ffa0efd7a95d1af4
Windows: 69013e603d972b5003208105b266cde43d7c8f92a0723b8683e110e0d070c6ac
Funções do MiPhant Gratuito
- Função para obter versão do MiPhant e recursos internos
- Suporte para trabalhar com rotas em PHP
- Suporte para o banco de dados SQLite3
- Suporte para criação de Menu e Submenu
- Função para caixas de diálogo para mensagem e confirmação
- Função para nova janela dentro do aplicativo
- Função para Tradução em JS
- DevTools
- Função para fechar todo o aplicativo de uma vez
- Environments: ARGV, Nome de usuário, HomeDir, Plataforma e Idioma
Funções do MiPhant Premium
Os desenvolvedores de scripts PHP para desktop podem desbloquear mais recursos para seus sistemas utilizando o MiPhant Premium.
- Todos os recursos da versão gratuita
- Função para caixas de diálogo para abrir e salvar arquivo e selecionar diretório
- Função para abrir URL em um navegador externo
- Função para exibir notificação (compatível apenas com Linux)
- Função para adicionar Ícone na bandeja do sistema
- Função para Exportar para PDF
- Suporte Técnico
Formas de Pagamento: Cartão de Crédito, Boleto Bancário ou PIX
MiPhant Suporte
Para usuários e desenvolvedores que precisam apenas de suporte técnico, sem recursos extras.
Formas de Pagamento: Cartão de Crédito, Boleto Bancário ou PIX
Informações do Software
- Versão: 3.0.0
- Licença: Freemium
- EULA
Requisitos do Sistema:
- Sistema Operacional de 64 bits:
- Linux Debian 12 ou superior
- Linux Ubuntu 24.04 ou superior
- Windows 10 ou superior
- Visual C++ Redistributable 14.42 (Windows)
Perguntas Frequentes
Para que serve o MiPhant?
O MiPhant é um software desenvolvido para navegar em sistemas PHP no desktop, dessa forma você pode desenvolver desde projetos pessoais até empresariais em PHP, permitindo que os usuários possam usar seu software no Windows e Linux com facilidade.
Quais extensões disponíveis atualmente na versão do PHP que está no MiPhant?
| soap | Comunicação com serviços web via SOAP | PHP License |
| bcmath | Cálculos matemáticos de precisão arbitrária | PHP License |
| calendar | Manipulação de datas e calendários | PHP License |
| opcache | Acelera execução do PHP com cache de bytecode | PHP License |
| filter | Filtragem e validação de dados (e.g. e-mails, inteiros, URLs) | PHP License |
| mbstring | Suporte a strings multibyte (UTF-8, etc.) | PHP License |
| intl | Internacionalização (datas, números, mensagens) | PHP License + ICU License |
| gd | Manipulação e criação de imagens | PHP License + libgd License |
| sockets | Comunicação de baixo nível via sockets | PHP License |
| bz2 | Compactação/descompactação BZIP2 | PHP License + libbz2 License |
| zlib | Compressão/descompressão de dados (gzip) | PHP License + zlib License |
| curl | Transferência de dados (HTTP, FTP, etc.) | PHP License + libcurl License |
| openssl | Criptografia e SSL/TLS | PHP License + OpenSSL License |
| pdo | Abstração de acesso a bancos de dados | PHP License |
| pdo_sqlite | PDO para SQLite | PHP License + SQLite License |
| sqlite3 | Interface direta com SQLite | PHP License + SQLite License |
| zip | Criação e leitura de arquivos ZIP | PHP License + libzip License |
| session | Gerenciamento de sessões | PHP License |
| phar | Criação de pacotes PHAR | PHP License |
Posso desenvolver software proprietário e livres?
Você pode desenvolver softwares proprietários de código fechado ou de código fonte disponível (source-available).
No caso do Software Livre você pode desenvolver desde que não utilize recursos do MiPhant no seu script e utilize o MiPhant apenas para navegar no seu sistema.
Posso ofuscar o código do meu software?
Sim. Softwares proprietários podem ter seu código ofuscado, para isso você pode trabalhar com ofuscadores, recomendo o yakpro para ofuscação do PHP e JavaScript Obfuscator para ofuscação de códigos JavaScript. Você também pode utilizar softwares pagos para isso ou usar técnicas mais simples como usar o base64, mas lembre-se, quanto mais simples a técnica de ofuscação for, mais fácil será desofuscá-lo.
Posso vender chaves de licenças para meu software?
Se o seu software for proprietário você pode vender sua licença como desejar, sob licenças, limitação de uso de computadores e usuários, licença vitalícia, entre outras formas. Você só precisa desenvolver essa solução em seu código PHP.
Posso desativar o PHP e vincular o endereço do meu site?
Não. No momento desativei esse recurso para evitar uso externos, você pode vincular usando o PHP, mas não recomendo isso, por questão de segurança.
Posso usar bibliotecas sob a licença GPL no meu software?
Caso não utilize códigos do MiPhant no seu projeto e use o MiPhant apenas para navegação não terá problemas de incompatibilidade de licença, pois nesse caso seria como se estivesse abrindo em um navegador apenas para navegar no seu sistema.
Quero um recurso mais avançado para gerar PDF em PHP, qual utilizar?
Recomendo utilizar o próprio código de geração de PDF que acompanha o MiPhant, mas caso precise usar uma biblioteca em PHP, recomendo a biblioteca DomPDF que até o dia 11/10/2025 está sob a licença LGPL, uma licença menor e compatível com softwares proprietários. Recomendo também ler mais sobre a licença LGPL para obter informações de como você pode trabalhar com códigos sob essa licença.
Como distribuir meu software?
Para distribuir seu software você pode:
- Compactar seu projeto em zip ou tar.gz
- Crie um atalho ou um aplicativo para acionar o MiPhant
- Criar um instalador com NSIS
- Permite a criação de instaladores no Windows e Linux via Wine
- Criar um pacote DEB
Coloque sempre uma licença no seu software, caso não saiba criar uma licença para seu software recomendo sempre consultar um advogado.
Posso usar em um ambiente local?
Sim. O software é desenvolvido para funcionar com o servidor embutido do PHP em um ambiente local utilizando o IP 127.0.0.1, as portas são geradas automaticamente e de forma aleatória. Por esse motivo, nenhum computador externo terá acesso ao servidor, exceto se você configurar para que o IP local seja ouvido pela rede, o que não recomendo, pois o IP local deve ser utilizado apenas para uso do usuário local, sem acesso a rede.
Posso usar em um computador público?
Evite utilizar o MiPhant em computadores públicos, pois ele utiliza o servidor embutido do PHP, exceto se realizar algum tratamento e aplicar técnicas de segurança, ao utilizá-lo, restrinja-se a servidores locais e configure o firewall para limitar o acesso apenas a endereços confiáveis.
Outras Informações
O MiPhant é fornecido "COMO ESTÁ", sem garantia de qualquer tipo, expressa ou implícita. O Desenvolvedor não oferece garantias quanto à precisão, confiabilidade, desempenho, precisão ou adequação do Software para um determinado fim.
Primeiros Passos
Os aplicativos integrados com o MiPhant precisam ser criados na pasta app e também precisam ter o arquivo config.json e o arquivo en.json.
Estrutura
- app/config/config.json
- app/langs/en.json
Configuração
No arquivo de configuração é necessário ter:
{
"app": {
"id": "miphantexemplo",
"name": "MiPhant Exemplo",
"version": "3.0.0",
"width": 800,
"height": 600,
"resizable": true,
"frame": true,
"icon": "miphantexemplo.png",
"disableAccelerationHardware": true,
"author": {
"name": "",
"email": "",
"url": ""
},
"homepage": "",
"license": "SEE LICENSE IN LICENSE.md",
"copyright": "Copyright (C) 2025 Seu Nome. Todos os direitos reservados."
},
"server": {
"router": false
},
"dev": {
"menu": true,
"tools": false
}
}
Ícone da Janela
O ícone do aplicativo deve ser adicionado dentro da pasta app/icon/ com o nome que você definiu no arquivo config.json.
Caso não seja encontrado um ícone nessa pasta, será utilizado o ícone padrão do MiPhant.
Executar com o MiPhant
Para executar seu projeto no MiPhant é necessário criar um atalho ou programar a execução para acionar o MiPhant.
# Linux
/opt/miphant/miphant $(pwd)/seuprojeto/
# Windows
C:\miphant\miphant.exe C:\seuprojeto\
A pasta "app" deve ficar na mesma pasta de seu atalho, ao passar a localização do seu projeto, o MiPhant detectará automaticamente a pasta app.
Tradução
Para que o software funcione corretamente é necessário criar o arquivo en.json, o idioma inglês é definido como padrão no MiPhant. Mesmo que seu software não tenha tradução, é necessário que o arquivo en.json seja criado, você pode deixá-lo sem itens, mas lembre-se de abrir e fechar as chaves {} para que o arquivo json fique no formato correto.
{}
Para criar as traduções você precisa definir seu aplicativo no idioma inglês e depois criar os outros idiomas, por exemplo, en.json, pt.json, es.json.
Exemplo en.json
{
"File":"File",
"Edit":"Edit",
"Help":"Help"
}
Exemplo pt.json
{
"File":"Arquivo",
"Edit":"Editar",
"Help":"Ajuda"
}
Estrutura da Pasta
- app/langs/en.json
- app/langs/pt.json
Exemplo
<?php
$sDirLang = dirname(__FILE__,2) . '/langs/';
if (file_exists($sDirLang . $_ENV['MIPHANT_LANG'] . '.json')) {
$sText = json_decode(file_get_contents($sDirLang . $_ENV['MIPHANT_LANG'] . '.json'), true);
function translate($text, ...$values): string
{
global $sText;
$value = empty($sText[$text]) ? $text : $sText[$text];
$a = sprintf($value, ...$values);
return $a;
}
echo '<h3>PHP</h3>';
echo translate('Continue') . '<br>';
echo translate('Unable to find file %s', 'example.txt');
}
?>
<h3>JavaScript</h3>
<div id="example"></div>
<script>
document.getElementById('example').innerHTML = miphant.translate('Cancel') + '<br>';
document.getElementById('example').innerHTML += miphant.translate('Unable to find file %s', 'example.js');
</script>
Menu
O software também pode ter menus e submenus, exemplo:
{
"Menu1": {
"SubMenu1": {
"page": "index.php"
},
"separator1": {},
"SubMenu2": {
"page": "page2.php",
"key": "CTRL+O"
},
"separator2": {},
"SubMenu3": {
"page": "page3.php",
"key": "CTRL+K",
"newwindow": true
},
"SubMenu4": {
"page": "page4.php",
"key": "CTRL+K",
"newwindow": true,
"width": 400,
"height": 400,
"resizable": false,
},
"separator3": {},
"SubMenu5": {
"script": "minhafuncao()"
},
},
"Menu2":
{
"Submenu de URL": {
"url": "https://www.seudominioaqui.com.br",
"key": "F1"
}
}
}
Você pode criar o arquivo menu.json na pasta /app/menus/ para criar menus para sua janela principal, assim que o aplicativo for iniciado, um menu será carregado na janela.
Caso você queira ter menus para as outras janelas, é só criar a mesma estrutura de pastas na pasta /app/menus/ e criar os menus extras com o mesmo nome de sua pagina.
Estrutura da Pasta
- Janela Principal
- app/index.php
- app/menus/menu.json
- Janela de Exemplo sem Pasta
- app/exemplo.php
- app/menus/exemplo.json
- Janela de Exemplo com pasta
- app/clientes/list.php
- app/menus/clientes/list.json
Environment
Através das variáveis de ambiente você pode fazer com que o script PHP obtenha algumas informações que são criadas no MiPhant.
- MIPHANT_LANG: Obtém o idioma principal do sistema (pt, en, es)
- MIPHANT_ARGV: Obtém os argumentos
- MIPHANT_USERNAME: Obtém o nome de usuário
- MIPHANT_HOMEDIR: Obtém a pasta home do usuário (/home/nomedousuario/ ou C:\Users\nomedousuario)
- MIPHANT_PLATFORM: Obtém a plataforma do sistema (linux ou win32)
Exemplo de Variáveis de Ambiente
<strong>Username</strong><br>
<?php echo $_ENV['MIPHANT_USERNAME']; ?><br><br>
<strong>User Path</strong><br>
<?php echo $_ENV['MIPHANT_HOMEDIR']; ?><br><br>
<strong>Platform</strong><br>
<?php echo $_ENV['MIPHANT_PLATFORM']; ?><br><br>
<strong>Language</strong><br>
<?php echo $_ENV['MIPHANT_LANG']; ?>
Exemplo de Argumentos
<p>To get the arguments run the terminal or cmd, go to your folder and type:</p>
<ul>
<li>Linux: /opt/miphant/miphant $(pwd)/seuprojeto/ test1 test2 test3</li>
<li>Windows: C:\miphant\miphant.exe C:\seuprojeto\ test1 test2 test3</li>
</ul>
<?php
if (empty($_ENV['MIPHANT_ARGV'])) {
echo 'No argument has been found!';
} else {
echo $_ENV['MIPHANT_ARGV'];
}
?>
Cabeçalho de Política de Segurança
<?php
header("Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'");
Cookies
<?php
if (empty($_COOKIE['info'])) {
$count = 1;
setcookie('info[msg]', $count, 0, '/', $_SERVER['SERVER_NAME'], false, true);
} else {
$count = $_COOKIE['info']['msg'] + 1;
setcookie('info[msg]', $count, 0, '/', $_SERVER['SERVER_NAME'], false, true);
}
echo 'Cookie: ' . $count;
echo '<p><a href="javascript:window.location.reload();">Update Page</a></p>';
Formulário GET
<?php
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
if (!empty($_GET['txtName'])) {
$txtName = filter_input(INPUT_GET, 'txtName');
echo 'My name is ' . $txtName . '<hr>';
}
}
?>
<form name="frmPost" method="get" action="formget.php">
<div>
<label for="txtName">Type your name</label>
<input id="txtName" name="txtName" type="text" placeholder="Type your name" required>
</div>
<button type="submit">Send</button>
</form>
Formulário POST
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!empty($_POST['txtName'])) {
$txtName = filter_input(INPUT_POST, 'txtName');
echo 'My name is ' . $txtName . '<hr>';
}
}
?>
<form name="frmPost" method="post" action="formpost.php">
<div>
<label for="txtName">Type your name</label>
<input id="txtName" name="txtName" type="text" placeholder="Type your name" required>
</div>
<button type="submit">Send</button>
</form>
Versões do MiPhant e recursos internos (JavaScript)
const txtVersion = document.getElementById('version');
txtVersion.innerHTML = `Version of MiPhant: ${miphant.version('miphant')}<br>`;
txtVersion.innerHTML += `Version of ElectronJS: ${miphant.version('electron')}<br>`;
txtVersion.innerHTML += `Version of NodeJS: ${miphant.version('node')}<br>`;
txtVersion.innerHTML += `Version of Chromium: ${miphant.version('chromium')}<br>`;
Ícone na Bandeja do Sistema
tray();
async function tray() {
miphant.tray(lk, 'MiPhant', 'MiPhant', '', JSON.stringify({
"Page Message": {
page: "/message.php",
newwindow: true
},
"Message": {
script: "miphant.alert('MiPhant', 'This is an example message!', 'info', 'Continue');"
},
"Close": {
script: 'miphant.close();'
}
}));
}
Mensagem de Alerta
Não utilize o window.alert ou confirm pois pode perder o foco da janela, por esse motivo desenvolvi o Alert e Confirm do MiPhant, além disso eles possuem mais recursos que o alert e confirm padrão.
<button type="button" onclick="message()">Display message</button>
<button type="button" onclick="confirm()">Confirm message</button>
<div id="info"></div>
<script>
async function message() {
miphant.alert('Information message', 'This is an example of a message!', 'info', 'Continue');
}
async function confirm() {
miphant.confirm('Confirmation message', 'This is an example of a message!', 'error', 'Continue', 'Cancel', 'Button1', 'Button2').then((result) => {
if (result == 1) {
document.getElementById('info').innerHTML = 'Not confirmed';
} else if (result == 2) {
document.getElementById('info').innerHTML = 'Button 1';
} else if (result == 3) {
document.getElementById('info').innerHTML = 'Button 2';
} else {
document.getElementById('info').innerHTML = 'Confirmed';
}
});
}
</script>
Notificação do Sistema
Esse recurso por enquanto é compatível apenas com Linux.
<button type="button" onclick="notification()">Notification</button>
<script>
async function notification() {
miphant.notification(lk, 'Information message', 'This is an example of a message!');
}
</script>
Abrir Arquivo
<?php
if (!empty($_GET['filename'])) {
$filename = filter_input(INPUT_GET, 'filename');
echo '<textarea>' . file_get_contents($filename) . '</textarea>';
exit;
}
?>
<script>
async function open() {
let sOpen = await miphant.openFile(lk);
window.location.assign(`?filename=${sOpen.toString()}`);
}
open();
</script>
Salvar Arquivo
<?php
if (!empty($_GET['filename'])) {
$filename = filter_input(INPUT_GET, 'filename');
file_put_contents($filename, rand(10000, 99999));
echo 'File ' . basename($filename) . ' saved successfully!';
exit;
}
?>
<script>
async function save() {
let sSave = await miphant.saveFile(lk);
window.location.assign(`?filename=${sSave.toString()}`);
}
save();
</script>
Selecionar Diretório
<?php
if (!empty($_GET['directory'])) {
$selectDirectory = filter_input(INPUT_GET, 'directory');
echo $selectDirectory;
exit;
}
?>
<script>
async function open() {
let sSelect = await miphant.selectDirectory(lk);
window.location.assign(`?directory=${sSelect.toString()}`);
}
open();
</script>
Gerar PDF
<?php
if (!file_exists(dirname(__FILE__) . '/pdf/')) {
mkdir(dirname(__FILE__) . '/pdf/', 0777, true);
}
?>
<button id="pdf" type="button" class="no-print">Export PDF</button>
<div class="display-none print">
<h3>Example PDF</h3>
<table>
<tr>
<td><strong>Date/Time:</strong></td>
<td><?php echo date('Y-m-d H:i:s'); ?></td>
</tr>
</table>
</div>
<p class="no-print">Print div</p>
<script>
const pdf = document.getElementById('pdf');
pdf.addEventListener('click', async () => {
<?php if ($_ENV['MIPHANT_PLATFORM'] == 'linux') { ?>
await miphant.exportPDF(lk, '<?php echo dirname(__FILE__) . '/pdf/example.pdf'; ?>');
<?php } else { ?>
await miphant.exportPDF(lk, '<?php echo str_replace('\\', '\\\\', dirname(__FILE__)) . '\\\\pdf\\\\example.pdf'; ?>');
<?php } ?>
miphant.newWindow('/pdf/example.pdf');
});
</script>
Informações do PHP
<?php
phpinfo();
Sessão
<?php
session_name('miphant');
session_start();
if (empty($_SESSION['info'])) {
$count = 1;
$_SESSION['info'] = $count;
echo 'Session: ' . $count;
} else {
$count = $_SESSION['info'] + 1;
$_SESSION['info'] = $count;
echo 'Session: ' . $count;
}
echo '<p><a href="javascript:window.location.reload();">Update Page</a></p>';
Trabalhando com SQLite3
<?php
if (empty($_COOKIE['info'])) {
$count = 1;
setcookie('info[msg]', $count, 0, '/', $_SERVER['SERVER_NAME'], false, true);
} else {
$count = $_COOKIE['info']['msg'] + 1;
setcookie('info[msg]', $count, 0, '/', $_SERVER['SERVER_NAME'], false, true);
}
$pathDados = dirname(__FILE__) . '/dados/';
if (!file_exists($pathDados)) {
mkdir($pathDados);
}
// Creates the database and the table
$db1 = new SQLite3($pathDados . '/example.sqlite');
$db1->exec("CREATE TABLE IF NOT EXISTS mi_example (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL
)");
$db1->close();
// Insert records
$db2 = new SQLite3($pathDados . '/example.sqlite', SQLITE3_OPEN_READWRITE);
if (empty($_COOKIE['info'])) {
$db2->query("INSERT INTO mi_example (name) VALUES ('" . $count . "')");
} else {
if ($stmt = $db2->prepare("INSERT INTO mi_example (name) VALUES (:name)")) {
$stmt->bindParam(':name', $count);
$stmt->execute();
$stmt->close();
}
}
$db2->close();
echo '<p><a href="javascript:window.location.reload();">Update Page</a></p>';
// Check records
$db3 = new SQLite3($pathDados . '/example.sqlite', SQLITE3_OPEN_READONLY);
$query = $db3->query('SELECT * FROM mi_example ORDER BY id DESC');
while ($row = $query->fetchArray(SQLITE3_ASSOC)) {
echo $row['name'] . '<br>';
}
$db3->close();
Fuso Horário
<?php
date_default_timezone_set("America/Sao_Paulo");
echo date('d/m/Y') . ' ' . date('H:i:s');
Tradução
<?php
$sDirLang = dirname(__FILE__,2) . '/langs/';
if (file_exists($sDirLang . $_ENV['MIPHANT_LANG'] . '.json')) {
$sText = json_decode(file_get_contents($sDirLang . $_ENV['MIPHANT_LANG'] . '.json'), true);
function translate($text, ...$values): string
{
global $sText;
$value = empty($sText[$text]) ? $text : $sText[$text];
$a = sprintf($value, ...$values);
return $a;
}
echo '<h3>PHP</h3>';
echo translate('Continue') . '<br>';
echo translate('Unable to find file %s', 'example.txt');
}
?>
<h3>JavaScript</h3>
<div id="example"></div>
<script>
document.getElementById('example').innerHTML = miphant.translate('Cancel') + '<br>';
document.getElementById('example').innerHTML += miphant.translate('Unable to find file %s', 'example.js');
</script>