ICEcoder is a browser based code editor, which provides a modern approach to building websites

Related tags



Code editor awesomeness your browser

ICEcoder is a browser based code editor, which provides a modern approach to building websites. By allowing you to code directly within the web browser, online or offline, it means you only need one program (your browser) to develop sites, plus can test on actual web servers. After development, you can also maintain the website easily, all of which make for speedy and smart development.

ICEcoder code editor


You can run ICEcoder either online or locally, on Linux, Windows or Mac based platforms. The only requirement is to have PHP 7 available (7.4 recommended). You can have this either as a vanilla installation or via a program such as WAMP or XAMPP (for Windows) or MAMP (for Mac).


Step 1: Get ICEcoder

Either download the zip or clone from Github into your wwwroot (document root) dir for your website (this is typically /var/www/html/) via:

$ git clone [email protected]:icecoder/icecoder /var/www/html/icecoder

Step 2: Set permissions on dirs & files

You'll need to ensure both the ICEcoder dir and the wwwroot dir have permissions to read, write and execute. This can be done by changing permissions (using chmod), but it it safer and so better, to use chown:

chown -R www-data.www-data /var/www/html

This will recursively set the www-data user as both the owner and group users for files on the /var/www/html dir (which ICEcoder dir is of course inside of, at say /var/www/html/ICEcoder).

Step 3: Start coding

Now you can visit to view ICEcoder, sign in and start coding!

Tip: If using ICEcoder locally, you can use:

php -S localhost:8080 get PHP to start a simple web server. You can then visit localhost:8080/ICEcoder

Want to setup in other environments?

It's now possible to setup ICEcoder in a Docker container, via Composer, as an executable and more. Checkout for info on these setups!

It's free & open source for everyone!

Suitable for commercial & non-commercial projects, just let us know if it's useful to you and any cool customizations you make to it. We take no responsibility for anything, all usage is all down to you.

It's fully open source and MIT licensed. So we're happy for you to take it, make it your own and customize to your hearts content and/or contribute to this main repo! :)

Plenty of comments included in the code to assist with understanding, customizing etc.

Comments, improvements & feedback welcomed!

  • Multi-language version is being produced.

    Multi-language version is being produced.

    Plans to make the English language pack and Chinese language pack. It takes about a week. @mattpass Hoping to merge into the master project, so please do not release a new version.

    opened by lzh370 28
  • Edits appear in a different place when saved

    Edits appear in a different place when saved

    Very weird issue with 5.5 - when I delete a line, it shows as edited in Icecoder, but when saved and I view source, the line (or 2nd line) above is deleted. Same issue when adding code - it is actually saved in a slightly different location, maybe 1 or 2 lines above.

    Basically editing any text will then insert/delete the edit in a line above where meant effectively breaking my code. Any ideas?

    opened by dancramp 26
  • Version control

    Version control

    A couple of people have asked about version control of files and while we have the ZipIt! plugin, it backs up an entire dir on an interval and GitHub integration, it involves a few clicks of switching into that mode, committing, pushing etc. There's no simple, local version control.

    Adding a couple of lines to /processes/on-file-save.php will save the file with a timestamp in the /backups dir:

    $pathParts = pathinfo($fileName);
    copy($docRoot.$fileLoc."/".$fileName, "../backups/".$pathParts['filename']."-".time().".".$pathParts['extension']);

    However, this simple 2 line solution doesn't include a dir structure or any simple way to get back to an older version of a file, plus you need to know it's saved there.

    Would suggest expanding on this 2 line solution to include dir structure also within the backups dir. Then right clicking on a file, you could access a new option - 'Version Control' which would show a list of all saved backups (ordering by filename would put this into timestamp order and allow us to display as version 1, version 2 and so on).

    The user would need choices on what to do next from the Version Control screen:

    Version 1      Open in new tab      Open in diff mode      Restore as new version
    Version 2      Open in new tab      Open in diff mode      Restore as new version
    Version 3      Open in new tab      Open in diff mode      Restore as new version
    Version 4      Open in new tab      Open in diff mode      Restore as new version

    Open in new tab will open it in a new tab. Open in diff mode will open current version in left pane and that older version in the right pane. Restore as new version would move the current version to the /backups dir as Version 5 and copy the older version chosen over to the live dir as well as copying it as version 6 in the /backups dir so live and the latest backup are in sync.

    opened by mattpass 26
  • Internal Server Error

    Internal Server Error

    After installation, pointing at redirects to lib/settings.php throwing an Internal Server Error. The full error is: "The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request."

    Could not find any server error logs. thanks,


    ps. tried it on a different server and installs flawlessly

    opened by AK-101111 26
  • Multiple projects

    Multiple projects "root" settings with one ICEcoder installation

    Maybe related to issues #216 y #162

    It would be nice having a sigle ICEcoder installation, but with different settings file, so each one can have a different "root".

    Maybe that could be achieved asking user and password, and using for each user a different settings file.

    What I'm thinking is an environment where we have like twenty students, each one with his/her own project home, but all of them access the same ICEcoder folder. Right now this can be achieved making a different copy of ICEcoder to each user folder.

    Also I'm think of a form for "initialisation of project", so first time user logs in, a folder is created using username, it is populated with the base project from the contents of a zip.

    In my opinion, not having to use a real BD is nicer: user information for 20 students is not that much data to have in an php array of meta-settings.

    It would be very useful for classes, coding dojos, etc. I think I'll ducktape something like this with ugly PHP, but here I put the idea so it can influence the main development of ICEcoder.

    opened by vicenteherrera 25
  • Became unresponsive to Save and Open file.

    Became unresponsive to Save and Open file.

    Love the coder. Everything worked fine for a week, now after editing any file it doesn't save. Clicking save or CTRL+S just shows on bottom of navigator "saving" and hangs there. Trying to open any file after this and it just says "opening" but doesn't open. Tried clearing cookies, tried different browsers, different computers. Issue still persists. Deleted ICEcoder and re-installed but still issue persists. If it helps the error-log.txt is full of these errors

    [07-Feb-2014 18:01:55 America/Chicago] PHP Warning: strpos() [function.strpos]: Empty needle in /home/webny/public_html/ICEcoder-master/lib/get-branch.php on line 24

    opened by MrData1 24
  • Cannot access ICEcoder via domain name / IP address (localhost address only)

    Cannot access ICEcoder via domain name / IP address (localhost address only)

    After upgrading to 5.4 (although this happened during 5.2 -> 5.3 as well), accessing ICEcoder from outside of my local network results in the following:

    Not Found
    The requested URL /ICEcoder/settings.php was not found on this server.

    Strangely enough, the same error occurs if i visit <external ip address>/ICEcoder or <mydomain>/ICEcoder from the hosting computer. But visiting localhost/ICEcoder on that computer works perfectly fine, bringing up the application. My server is accessible from the internet, and static webpages are served just fine.

    This seemed like an Apache config issue to me, but I poked around in settings to find where the failure was occurring. See the following code from settings.php:

    // On mismatch of settings file to system, rename to .old and reload
    If ($ICEcoderUserSettings["versionNo"] != $ICEcoderSettings["versionNo"]) {
            //die("__FILE__ : ".__FILE__."<br>dirname: ".dirname(__FILE__)."<br>settingsFile: ".$settingsFile);
            //die("this is reached");
            header("Location: settings.php");
            //die("this is not reached");
            echo "<script>window.location='settings.php';</script>";
            die('Found old settings file, reloading...');

    The top (commented) die prints:

    __FILE__ : /home/<username>/webroot/ICEcoder/lib/settings.php
    dirname: /home/<username>/webroot/ICEcoder/lib
    settingsFile: config-mydomain_com.php

    The second die is reached, but the third is not. So the header() function is somehow failing.

    After a bit more digging, the contents of $ICEcoderUserSettings, prior to the above code is:

    Array ( [previousFiles] => [configCreateDate] => 1459222891 )

    Thus it's missing any 'versionNo' field. So I commented out the entire settings mismatch block above, allowing the settings.php file to continue, and the next failure occurred at:

    // Determin our allowed IP addresses
    $allowedIP = false;
    for($i=0;$i<count($_SESSION['allowedIPs']);$i++) {
            if ($_SESSION['allowedIPs'][$i]==$_SERVER["REMOTE_ADDR"]||$_SESSION['allowedIPs'][$i]=="*") {
                    $allowedIP = true;

    ..With the error die('Sorry, access not permitted');. I believe this is because the $ICEcoder array does not contain any 'allowedIPs' --- even though the config___users-template.php file specifies an array with "*" as that field's value.

    Note: while poking around (having removed all the debugging die()s, it seems that while config-localhost.php is fully-formed file, any of the other files, such as config- are all empty and read-only. Could that be relevant?

    opened by bfishman 24
  • Just upgraded to 4.2 - Unable to create a folder or file

    Just upgraded to 4.2 - Unable to create a folder or file

    Hi Matt,

    I just upgraded to 4.2 (manually did coz the auto-upgrade is not working) but now it wont let me create a folder or file. (see screenshot) capture

    opened by anagnam 21
  • FTP showing sorry, this file has changed outside ICEcoder

    FTP showing sorry, this file has changed outside ICEcoder

    When connecting to a localhost FTP server on a Raspberry Pi I get the error message saying the file changed outside of ICEcoder.

    New files are created and edited just fine.

    When I run a flask local web server (port 5000) the files then become non-editable for some reason.

    opened by hopgoodpaul 20
  • Backslashes everywhere backslashes :(

    Backslashes everywhere backslashes :(

    ICEcoder adds backslash before all quotation marks or apostrophes in code with every file save.

    opened by 51RJY 19
  • Cannot save files

    Cannot save files

    Describe the bug cannot save edited file. Just get a pop-up box message tell me "cannot save file". Either with shortcut or through the menu.

    error.log :

    [04-Oct-2021 16:59:15 Asia/Chongqing] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /var/www/php/icecoder/lib/settings-screen.php on line 210
    [04-Oct-2021 16:59:15 Asia/Chongqing] PHP Notice:  Trying to access array offset on value of type bool in /var/www/php/icecoder/lib/settings-screen.php on line 217

    dev console : Uncaught TypeError: is undefined icecoder.js:3131 : : parseInt(, 10) / thisCM.lineCount()) it would seem that the browser doesn't like the ":" at the start of the line.

    Uncaught (in promise) SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data

    This site appears to use a scroll-linked positioning effect. This may not work well with asynchronous panning; see for further details and to join the discussion on related tools and features!

    problem on editor.php

    Screenshots image

    Browser & Server (please complete the following information):

    • Browser : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
    • Server : Linux (Ubuntu server 20.04 LTS) on Nginx/1.20.1
    • PHP : 7.4
    • Icecoder : 8.1
    • Codemirror : 5.20.3
    opened by Klemich 0
  • adding css style to improve user experience to left menu options

    adding css style to improve user experience to left menu options

    Describe the PR adding css style to improve user experience to left menu options

    A clear and concise description of what the PR covers. Be sure it's something lots of people would appreciate! adding css style to improve user experience to left menu options

    Benefits People can more elegantly visualize the left menu of options, taking the form buttons instead of simple links

    If it's a bug fix or tweak, note what it's resolving. If it's a feature, detail what's great about it. Note that not all PR are merged!

    Check the files!

    Before you hit the button, check the files changed in this PR, to ensure only the exact changes needed are included.


    If applicable, add screenshots to help explain what's covered here.


    Any other notes?

    opened by atorresbr 0
  • Can not press 'Command + S' on Mac OSX to save file

    Can not press 'Command + S' on Mac OSX to save file

    Describe the bug I am using MacOSX, when I want to save my file, I must press Ctrl + S. Default shorthand 'Command + S' on Mac OS X is saving something. To Reproduce Steps to reproduce the behavior:

    1. Press 2 keys 'Command' + 'S'
    2. Nothing happen Expected behavior Any changes on file is saved.

    Browser & Server (please complete the following information):

    • Browser: Chrome, Safari
    • Server: Nginx

    Additional context Default shorthand 'Command + S' on Mac OS X is saving something.

    opened by saosangmo 0
  • Check over JS and PHP used in all find & replace

    Check over JS and PHP used in all find & replace

    The JS and PHP used in find and replaced has changed a lot and most is now working. However, it is worthwhile reviewing everything here to ensure all seems fine and improve code where possible.

    Tweak Version 8.6 
    opened by mattpass 0
  • More efficient finding in selected files/filenames

    More efficient finding in selected files/filenames

    When finding/replacing in fiiles or filenames, is it actually searching on all, as it look a little longer than expected.

    It's needed to some degree if we say select a dir. However, this could be passed through as the base, else pass the filename as the path

    Tweak Version 8.3 Version 8.9 
    opened by mattpass 0
  • Find in filenames only considers DOM elems not actual files on drive

    Find in filenames only considers DOM elems not actual files on drive

    This is a hangover from older versions of ICEcoder where the entire dir tree was present in file manager on load. We now load dir contents when opening a dir on demand, but the logic for find in file names remains legacy.

    So it's not finding all filenames now. Needs recoding to work from contents of drive and not scanning DOM elems.

    Feature Version 8.2 
    opened by mattpass 1
  • If file changed via find & replace and is open, open it and put current in diff pane

    If file changed via find & replace and is open, open it and put current in diff pane

    It would be so much better if we could tweak... When performing a replace/replace all in selected/all files, if the document is open, show a message that the document has changed, would you like to load the saved version and put your in editor version the diff pane.

    This is the most suitable solution, whether your in editor version is saved or not - as your saved/unsaved version is put aside and the version from drive loaded and diff mode started so you can see what changed, make edits and handle as you then wish.

    The current solution we have to handle clashing saved versions via the datetime check provides much of what we need here.

    Tweak Version 8.6 
    opened by mattpass 0
  • Fix usage of files/dirs with script based names

    Fix usage of files/dirs with script based names

    Describe the bug Create a file with name that's potentially XSS, eg <script>alert(1)<Xscript> - can open and save it fine, but in some places it's used (eg last 10 files, tab name, multiple results etc) it has problems displaying.

    To Reproduce Steps to reproduce the behavior:

    1. Create a file called <script>alert(1)<Xscript> with any content and save
    2. Reload ICEcoder to see error
    3. It will also error in other places.

    Expected behavior Handle it just as per any other file.

    Additional context It may not be executable JS, but the first part is still parsed, so needs resolving.

    Bug Version 8.5 
    opened by mattpass 0
  • Jumps to next result when you don't expect it in context change

    Jumps to next result when you don't expect it in context change

    Find "xyz" in "this document" to select 1st result, then change to "open documents" and click the link in modal for same file, it jumps to next result in the document, should stay on same.

    Tweak Version 8.7 
    opened by mattpass 0
  • Jumps to next result when going to a prev find value

    Jumps to next result when going to a prev find value

    If your document contains "xyz", find "xyz", it selects 1st result, then add "a" to try to find "xyza", there are no results, then remove "a" it then selects the next xyz match not current.

    It should stick with the previous selection not cycle to new.

    Tweak Version 8.2 
    opened by mattpass 0
  • 8.1(Jul 27, 2021)

    Lots of new features, tweaks and bug fixes, main highlights being:

    • Regex search added to find & replace
    • Regex validation on find input box
    • Double clicking file name collapses/expands file manager
    • Clickable warning label if not a valid root dir set
    • FTP removed (there's better ways to transfer files)
    • Login and demo mode isolated now, first user is admin
    • Better password rules enforcement
    • Active line number highlighted
    • Can now set scroll speed when going to line
    • Can now set whether typing in find input auto-scrolls to next result
    • Bug reporting now setup for ICEcoders own error.log by default
    • lots more tweaks and bug fixes, full list on website
    Source code(tar.gz)
    Source code(zip)
  • 8.0(Nov 22, 2020)

    Far too much to list, so short list of major items:

    • Updated design and more modern icons
    • Caps lock indicator
    • composer.json added now available via that
    • 38 new themes added
    • Auto indent lines on paste
    • Auto indent lines on move
    • Simplified and improved debugging system
    • Don't switch tab when closing another
    • Improved tutorial

    ...and much more. See website for full info.

    Source code(tar.gz)
    Source code(zip)
  • 8.0beta(Jul 22, 2020)

    Huge release, far too much to list here, so just the highlights:

    • Git diff highlighting in gutter
    • Use ICEcoder anywhere - wwwroot, iFrame or any sub/dir/path
    • Prettier code on save
    • Supercharged find and replace
    • Design improvements
    • Tabs more linked to files so they update intelligently
    • Welcome tour on arrival
    • Helpful requirements check on load in browser
    • Go to Line interaction is slick
    • Closes empty tabs more intelligently
    • Tool link alerting according to state
    • Old test system, doc explorer (minimap and function/class list removed), GitHub integration removed (git coming soon), FTP removed (it's old tech now) and UI removals
    • New nav menu stystem
    • Improved server info & username (if multi-user)
    • Overhauled tab & file highlighting

    ...and lots and lots of other UI, UX tweaks, minor features and bug fixes.

    Source code(tar.gz)
    Source code(zip)
  • 7.0(Sep 27, 2019)

    Huge update after almost 2 years since last release. Quick summary:

    CTRL+click to jump to a class or functions declaration CTRL+Backspace to jump back to previous selected tab Intelligently indexes classes & functions routinely every 3 secs Go to line number as you type in goto line input box, Enter to focus Code Zooming - hold F1 key to "zoom out" all non class or function lines, release to return to normal Improved terminal design & layout All process can now have your custom JS code ran as well as PHP, all have examples Output pane to display whatever you wish Database management now part of ICEcoder Single place to jump to tools (under File Manager options for Terminal, Output and Database), slides in/out of view Shows tooltip on hover mouse cursor over arguments on class/function calls Tests you have all requirements when using booting up and using ICEcoder Nicely designed error screen to detail any requirement problems or errors during usage (eg permissions not set on config file) Setup screen now has strong password rules (10 chars, uppercase, lowercase, number and special) Improved password security by using Bcrypt encryption Config data now stored in data dir (backups, error.log, system and user settings) Faster bootup time by 200ms New theme - 2019 Torres Digital Bug fixes, tweaks and minor improvements

    Source code(tar.gz)
    Source code(zip)
🍪 Write gorgeous documentation for your products using Markdown inside your Laravel app.

LaRecipe Write gorgeous documentations for your products using Markdown inside your Laravel app. LaRecipe ?? LaRecipe is simply a code-driven package

Saleem Hadad 1.9k Oct 17, 2021
Laravel IDE Helper

Laravel IDE Helper Generator Complete PHPDocs, directly from the source This package generates helper files that enable your IDE to provide accurate a

Barry vd. Heuvel 11.8k Oct 21, 2021
A cli tool for creating Laravel packages

Laravel Packager This package provides you with a simple tool to set up a new package and it will let you focus on the development of the package inst

JeroenG 1.1k Oct 18, 2021
⚙️ A Laravel package to decompose your installed packages, their dependencies, your app & server environment

Introduction Laravel Decomposer decomposes and lists all the installed packages and their dependencies along with the Laravel & the Server environment

LUBUS 501 Oct 12, 2021
This package extends the core file generators that are included with Laravel 5

Extended Migration Generators for Laravel 6, 7 and 8 Easily define the migration schema right in your make:migration command. The new commands this pa

Laracasts 2.4k Oct 18, 2021
Generate migrations from existing database structures

Laravel Migration Generator Generate migrations from existing database structures, an alternative to the schema dump provided by Laravel. A primary us

Bennett Treptow 240 Oct 22, 2021
A handful of tools for PHP developers.

Belt A handful of tools for PHP developers. Version 2.0.0 is out now. Clear documentation, improved tests and code quality. Installation In case you w

Ilya 738 Sep 4, 2021
⛔️ Laravel Tinx is archived and no longer maintained.

⛔️ Laravel Tinx (Deprecated) Laravel Tinx was archived on 12th December 2019 and is no longer maintained. Looking for a reloadable version of Laravel

James Furey 432 Oct 15, 2021
[Package] Lumen Testing Helper for Packages Development

anik/testbench-lumen is a package, highly inspired by the orchestral/testbench. orchestral/testbench that is a tool for testing Laravel packages.

Syed Sirajul Islam Anik 5 May 9, 2021
A PHP-based sandboxing library with a full suite of configuration and validation options.

A full-scale PHP 5.4+ sandbox class that utilizes PHP-Parser to prevent sandboxed code from running unsafe code. It also utilizes FunctionParser to di

Corveda 165 Oct 15, 2021
A PHP webpage that uses string replacements to generate a binary on the fly that you can enter at setup in NEOS.

openpilot-installer-generator A PHP webpage that uses string replacements to generate a binary on the fly that you can enter at setup in NEOS. What is

null 14 Sep 25, 2021
A code generator for EasySwoole

wise-generator-easyswoole 基于EasySwoole的code-generation改写,主要应用与内部系统。基本上所有类都有所调整,同时也完善了一些功能。 版本说明 版本说明 code-generation 使用命令行,一键生成业务通用代码,支持代码如下: 一键生成项目初始

Ryan 3 Jun 8, 2021
Laravel API Documentation Generator

Laravel API Documentation Generator Automatically generate your API documentation from your existing Laravel/Lumen/Dingo routes. php artisan apidoc:ge

Marcel Pociot 3.1k Oct 15, 2021
Module Generator Composer Package For Laravel

Module Generator Installation You can install the package via composer: composer require teacoders/module-generator Run the command below to publish t

Tea Coders 20 Sep 6, 2021
A MySQL Workbench plugin which exports a Model to Laravel 5 Migrations

MySQL Workbench Export Laravel 5 Migrations Plugin A MySQL Workbench plugin that allows for exporting a model to Laravel 5 migrations that follow PSR-

Brandon Eckenrode 889 Oct 16, 2021
Open Swoole IDE Helper

Open Swoole IDE Helper This repo works with Open Swoole since release version v4.7.1. This package contains IDE help files for OpenSwoole. You may use

Open Swoole 1 Oct 17, 2021
:rocket: A Smart CRUD Generator For Laravel

Features Generate your models, views, controllers, routes and migrations just in a few clicks. Models visualization through a graph presentation (New

Houssain Amrani 860 Oct 21, 2021
A PHP README File Generator, to generate easily your GitHub README files 🎉

Readme Generator ?? Requiremennts ?? Make sure you have PHP 8.0 or higher installed. Steup ⚙️ Install Composer v2 or higher (

♚ PH⑦ de Soria™♛ 2 Oct 24, 2021
Trial account generator for NoPing

NoPing account generator (beta version) Trial account generator for NoPing TODO It is working add some errors checks Add a good readme Host the server

Benjamin 6 Sep 14, 2021